Problem Statement
We have several bags. Each bag contains one or more marbles. Each marble is either some shade of red, or some shade of blue. Globally, all marbles are mutually distinct.
We also have an unlimited supply of new empty bags. All bags, both original and new ones, look exactly the same.
Your collection of bags is described by two equally-long
Let a step be the following operation: "For each bag that contains more than one marble, take all the marbles it contains and divide them into two new bags so that both new bags are non-empty."
Let the process be any sequence of steps that begins with our current collection of bags and ends with a collection of bags that contain one marble each.
The blue marbles can be handled arbitrarily, but for red marbles there is an extra restriction: whenever you are performing a split and you want to put a single red marble into a bag (that will become its final bag), you must put more than one marble into the other bag.
The process is called valid if we always obey the rule for red marbles.
Count all valid processes, and return that count modulo 10^9 + 7.
Definition
- Class:
- RedAndBlueShades
- Method:
- count
- Parameters:
- long[], long[]
- Returns:
- int
- Method signature:
- int count(long[] R, long[] B)
- (be sure your method is public)
Constraints
- R will contain between 1 and 10 elements, inclusive.
- B will contain the same number of elements as R.
- All elements of R and B will be non-negative.
- For each i, R[i] + B[i] will not exceed 10^12.
- No bag will be empty: for each i, R[i] + B[i] will be positive.
Examples
{0}
{4}
Returns: 15
We start with a single bag containing four distinct blue marbles. Let's label the marbles 0 to 3. All possible processes are shown below. (One per row, arrows represent steps. Note that some processes only have two steps while others have three.) {{0,1,2,3}} -> {{0,1}, {2,3}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0,1,2}, {3}} -> {{0,1}, {2}, {3}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0,1,2}, {3}} -> {{0}, {1,2}, {3}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0}, {1,2,3}} -> {{0}, {1,2}, {3}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0}, {1,2,3}} -> {{0}, {1}, {2,3}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0}, {1,2,3}} -> {{0}, {1,3}, {2}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0,1,2}, {3}} -> {{0,2}, {1}, {3}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0,1,3}, {2}} -> {{0,1}, {2}, {3}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0,1,3}, {2}} -> {{0}, {1,3}, {2}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0,1,3}, {2}} -> {{0,3}, {1}, {2}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0,2}, {1,3}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0,2,3}, {1}} -> {{0}, {1}, {2,3}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0,2,3}, {1}} -> {{0,2}, {1}, {3}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0,2,3}, {1}} -> {{0,3}, {1}, {2}} -> {{0}, {1}, {2}, {3}} {{0,1,2,3}} -> {{0,3}, {1,2}} -> {{0}, {1}, {2}, {3}}
{17}
{0}
Returns: 0
Regardless of how you make the individual steps, you will eventually encounter a situation where you want to split a bag with exactly two red marbles. At that moment you are forced to violate the rule for red marbles.
{1, 1, 1, 0, 0, 1, 0, 1, 0, 0}
{0, 0, 0, 1, 1, 0, 1, 0, 1, 1}
Returns: 1
Each bag already contains exactly one marble. The only valid process is the trivial process that consists of zero steps.
{3, 4, 3, 4}
{4, 3, 5, 4}
Returns: 959845692
Make sure to compute and return the answer modulo 10^9 + 7.
{1}
{3}
Returns: 6
One more annotated example: all valid processes for a bag with a single red marble (R) and three blue marbles (B0,B1,B2). {{R,B0,B1,B2}} -> {{B0,B1,B2}, {R}} -> {{B0}, {B1,B2}, {R}} -> {{B0}, {B1}, {B2}, {R}} {{R,B0,B1,B2}} -> {{B0,B1,B2}, {R}} -> {{B0,B2}, {B1}, {R}} -> {{B0}, {B1}, {B2}, {R}} {{R,B0,B1,B2}} -> {{B0,B1,B2}, {R}} -> {{B0,B1}, {B2}, {R}} -> {{B0}, {B1}, {B2}, {R}} {{R,B0,B1,B2}} -> {{B0}, {R,B1,B2}} -> {{B0}, {B1,B2}, {R}} -> {{B0}, {B1}, {B2}, {R}} {{R,B0,B1,B2}} -> {{B1}, {R,B0,B2}} -> {{B0,B2}, {B1}, {R}} -> {{B0}, {B1}, {B2}, {R}} {{R,B0,B1,B2}} -> {{B2}, {R,B0,B1}} -> {{B0,B1}, {B2}, {R}} -> {{B0}, {B1}, {B2}, {R}}
{10999999, 10999999, 10999999, 10999999, 10999999, 10999999, 10999999, 10999999, 10999999, 10999999}
{100999999, 100999999, 100999999, 100999999, 100999999, 100999999, 100999999, 100999999, 100999999, 100999999}
Returns: 568969561
{100999999, 100999999, 100999999, 100999999, 100999999, 100999999, 100999999, 100999999, 100999999, 100999999}
{100999999, 100999999, 100999999, 100999999, 100999999, 100999999, 100999999, 100999999, 100999999, 100999999}
Returns: 380819905
{205504635}
{478808774}
Returns: 737686359
{1, 8}
{6, 7}
Returns: 55038827
{5, 8, 6}
{4, 6, 9}
Returns: 469444470
{6}
{10}
Returns: 789836458
{1}
{0}
Returns: 1
{7, 0}
{8, 5}
Returns: 65612981
{6, 3, 8}
{3, 8, 5}
Returns: 158423742
{3, 8}
{0, 5}
Returns: 0
{5, 5, 9}
{9, 8, 3}
Returns: 131111308
{0}
{2}
Returns: 1
{1, 9}
{5, 6}
Returns: 355759147
{8, 1, 3}
{4, 10, 5}
Returns: 256492380
{7}
{1}
Returns: 0
{9, 10}
{5, 4}
Returns: 535674467
{8}
{4}
Returns: 27216000
{8, 0}
{9, 7}
Returns: 58283089
{9, 4}
{6, 8}
Returns: 143919798
{9}
{1}
Returns: 0
{3, 7, 9}
{6, 4, 8}
Returns: 534852699
{7}
{0}
Returns: 0
{8}
{10}
Returns: 560748597
{1}
{4}
Returns: 45
{9, 7, 5}
{8, 6, 0}
Returns: 0
{4, 9, 10}
{10, 8, 7}
Returns: 401009727
{10, 0, 3}
{5, 9, 3}
Returns: 442278079
{6, 2}
{2, 7}
Returns: 314344800
{2}
{1}
Returns: 0
{9}
{5}
Returns: 382527944
{6, 4, 0}
{1, 7, 10}
Returns: 0
{6}
{1}
Returns: 0
{0, 0}
{4, 2}
Returns: 15
{8}
{7}
Returns: 415673027
{7}
{8}
Returns: 733958224
{9, 0}
{9, 1}
Returns: 499175812
{2}
{8}
Returns: 7567560
{10, 9}
{0, 3}
Returns: 0
{0, 1, 1}
{6, 0, 4}
Returns: 42525
{8}
{4}
Returns: 27216000
{9}
{8}
Returns: 131225962
{8}
{9}
Returns: 281198490
{9, 1}
{9, 9}
Returns: 745891262
{298780335, 7690356, 224221883, 162571111, 525333703, 149950278, 68165869, 121238248, 350551292}
{34603937, 24170072, 109873291, 108628589, 40300608, 245891540, 27844, 2230418, 72363936}
Returns: 447448603
{19196099, 434690389, 560627570, 71072587, 308839297, 756726466, 269721006, 101327947, 94540023}
{432603813, 15969736, 22443729, 374318615, 265207308, 42406601, 128314833, 10608313, 84327621}
Returns: 821364547
{124167797, 19720713, 90051561, 247244343, 292551939, 25537871, 203243637, 729714784, 21950601}
{27529323, 2269731, 7687326, 123053975, 2322863, 355533468, 199132584, 77579236, 143136013}
Returns: 166093331
{518276962, 36757419, 117075129, 559272524, 633503745, 512516892, 388654383, 334682124, 413384333}
{31981389, 187620480, 329309891, 192379319, 63922441, 65282730, 94056605, 143218112, 14550078}
Returns: 451877365
{219977310, 679160796, 13781561, 327488403, 178646847, 386678572, 116822057, 100051728, 668324192, 457550043}
{371111443, 53603960, 42203659, 111344048, 128152000, 96029654, 398516180, 388167473, 124772560, 170643562}
Returns: 594580913
{23473419, 60640904, 420753700, 287670031, 113070839, 112317342, 456901483, 321600643, 416452305}
{15238364, 282585962, 286611251, 196507671, 80009871, 99386669, 21195006, 194244947, 30813005}
Returns: 901891501
{29405005, 155769482, 330373, 14184897, 491132366, 470167904, 276727007, 55033197, 66490532}
{155728288, 5478770, 257371733, 7684212, 219456691, 44208933, 191307038, 130302898, 129466909}
Returns: 358059960
{180740965, 228705322, 135118488, 551082069, 168035058, 24768466, 653790074, 407292477}
{136772993, 152756137, 58341228, 30619214, 57233894, 285466839, 166213138, 157705584}
Returns: 386984247
{495881981, 599484617, 183215351, 404816052, 45952094, 164547096, 194843137, 83679517, 220664316, 15060559}
{68438466, 31497067, 4760799, 174420919, 414300500, 15240566, 401390653, 293103842, 150025710, 24827275}
Returns: 62699024
{160507800, 2396703, 149346959, 78153605, 417806775, 403040, 398281627, 338108473, 392250892}
{14187408, 212418880, 260573077, 359950564, 91847248, 203565, 68933657, 75288497, 4234959}
Returns: 909645108
{430015013, 11547663, 451283482, 295549387, 82850912, 178541466, 255443424, 320153185}
{59466471, 49044672, 198217285, 73390455, 14550234, 4590921, 139943700, 75742567}
Returns: 551055202
{281598138, 351539983, 402079442, 211144144, 213200474, 80090326, 130894463, 348932673}
{71535153, 95692135, 31199208, 384803383, 63258011, 415092280, 5695175, 4344172}
Returns: 324816994
{33889451, 424667598, 47936701, 13238791, 87319693, 240774617, 226325723, 276680942, 329181419, 122125671}
{39342469, 48296244, 25804673, 9343439, 291725597, 202568346, 163753846, 134281347, 218341806, 207407929}
Returns: 807351067
{19253771, 190339681, 373430602, 108546280, 509022207, 4941792, 429046081, 252599354, 595262024, 57292139}
{23899963, 291181309, 75424551, 75280001, 73314381, 1329297, 254099200, 200683408, 38084229, 172197387}
Returns: 806903342
{21082245, 113697937, 226714736, 196738984, 19020632, 180549570, 177607406, 12440555, 105705854}
{23975485, 259840809, 14946610, 366265700, 33424220, 186202580, 297089398, 35244332, 14765972}
Returns: 864185450
{129087309, 158309743, 235734230, 372498812, 96744363, 337321499, 4803151, 150078554, 88639392}
{844389, 143467649, 177011170, 178333971, 364284326, 175701143, 52313621, 33313335, 28411117}
Returns: 981137855
{342876693, 768153274, 460599972, 378121270, 559767407, 456876900, 471503640, 363027981}
{276159536, 28638403, 125857247, 82713940, 148268109, 50455513, 106692149, 52583631}
Returns: 360923618
{526842172, 6536874, 26345242, 460126676, 108567928, 415189113, 133179045, 44917977, 396628056}
{127298603, 8905244, 162080436, 91881074, 429567221, 28142103, 246299980, 29238129, 36381962}
Returns: 903588492
{100649535, 873194536, 438917892, 398055588, 556148090, 371922578, 128335516, 246358736}
{128831560, 54055385, 139644029, 52659352, 212882156, 69046069, 213082361, 371964051}
Returns: 697540186
{28325499, 529972178, 76239804, 175900271, 310391575, 6303157, 649218198, 23737683}
{322644107, 24881844, 136477343, 274648714, 260397073, 35820395, 76209269, 148494825}
Returns: 136377142
{6766887, 185041599, 206399912, 230917733, 199009861, 54330633, 330817444, 20240645, 321677090, 59482964}
{328072713, 45015762, 381746785, 182778852, 98801829, 44565948, 74786880, 8422370, 162698593, 196697826}
Returns: 839149274
{449159156, 267243428, 24371224, 606607706, 740287894, 526985908, 72631320, 31393423, 25771035}
{228316794, 52942944, 125695677, 85420170, 17337953, 226074887, 87017036, 202020531, 455630648}
Returns: 383982622
{112019553, 279281104, 46325395, 670691068, 673872987, 236873166, 898059514, 8785214, 143240245}
{46393096, 57303570, 24465858, 52579095, 138788196, 63564228, 15891648, 31996061, 182407671}
Returns: 149273729
{54955861, 113306169, 425909270, 79648458, 957867, 606036483, 12738098, 114352867}
{59635621, 65448001, 40792602, 66182348, 2709474, 21527307, 430946145, 77635178}
Returns: 132707497
{252871754, 230058198, 214997572, 41161877, 694139976, 445302559, 288621817, 4016761, 2759091, 26085799}
{73639842, 376989927, 70969672, 468672263, 14249290, 92210335, 30413910, 183064339, 57293908, 153908715}
Returns: 844823213
{220906307, 562896777, 657037158, 146439, 595556493, 52890094, 409671188, 102525831, 37212615, 682705091}
{6946512, 159428276, 135579020, 1731065, 170303942, 289311286, 1025422, 197865394, 29590281, 21097687}
Returns: 671917315
{373515540, 4379984, 322894077, 334136497, 40950388, 474324241, 218381898, 773450369, 48281716}
{87161696, 18109026, 1784210, 216426047, 7458988, 255041905, 139600813, 4397746, 154430273}
Returns: 947380132
{451425244, 52733647, 405221552, 94715296, 15994814, 19297544, 619324219, 205501001, 59808423}
{232204392, 174154224, 177658185, 155295557, 150751107, 6714293, 53346647, 333223877, 37732022}
Returns: 440671144
{3547879, 223479761, 454231929, 136988490, 100854230, 494006315, 79222413, 5317904}
{2315037, 117844232, 152498929, 241985000, 32245035, 42311538, 101392853, 37650929}
Returns: 218220302
{218273706, 631112252, 18925913, 18824810, 32920873, 136669034, 313656809, 449164981, 524059221, 623784894}
{20503449, 76892102, 59399971, 477915007, 57077277, 210033745, 171813326, 81406255, 31835480, 16923095}
Returns: 59903527
{839551594, 581930457, 884453279, 777589859, 248279256, 162686522, 662212723, 963663275, 526189448}
{41458568, 199151801, 46579900, 103707099, 335648805, 376527481, 138029056, 671095, 230552768}
Returns: 613267503
{332016440, 809428128, 650222602, 13736714, 868217808, 525742634, 438127919, 402588821, 324151370, 423562100}
{324594096, 72781765, 155068157, 455444885, 44610129, 219834538, 280062851, 271756311, 325218391, 258841478}
Returns: 464772611
{669734590, 288540651, 501831491, 108815604, 115582222, 36450493, 685588141, 712797109, 613878494, 1176794}
{117518880, 341052149, 208589737, 421924439, 436467735, 471557805, 131886541, 116431917, 188542313, 459309662}
Returns: 925396246
{171791451, 922606452, 855656830, 516391627, 347333594, 285257142, 355156688, 705675087, 220653916, 189624752}
{387675742, 30357652, 24840857, 219474373, 324463474, 317271201, 289611929, 124592977, 347158175, 400082445}
Returns: 738772800
{713258932, 494629645, 822514784, 366068895, 566868632, 119742495, 190822315, 244278498, 907283297}
{112305740, 219173600, 85415066, 302382944, 177039544, 414351548, 364419078, 365751535, 32590366}
Returns: 28642511
{849986754, 581779980, 849113146, 267547179, 392440295, 809727134, 526358251, 787348666, 182842244, 432322630}
{67880093, 202004610, 39264230, 358966246, 256517957, 70663425, 198359401, 97180579, 407292228, 246811059}
Returns: 489030585
{350884231, 579282471, 277949393, 148720048, 882190772, 802872130, 717226780, 293876822, 418215816}
{306025842, 197172384, 316034915, 382031259, 53802299, 83148250, 130277169, 317037434, 280974343}
Returns: 848381851
{593674310, 128444743, 399695759, 572360428, 312392336, 653481056, 750581442, 344474778, 41154509}
{170313320, 409782730, 275374507, 207400769, 308902365, 140099684, 120139340, 321423957, 467652682}
Returns: 103213314
{478939336, 809825375, 157041994, 196573588, 368344619, 101654213, 223339634, 821755213, 658397254}
{230409860, 66911347, 379144067, 391443145, 283305038, 417560051, 358098096, 41663553, 138957661}
Returns: 251216131
{733317428, 531718764, 409898425, 24998314, 823531873, 160956422, 450237810, 236574870, 806490794}
{96652676, 217181533, 250247811, 481057475, 82150142, 409305814, 232023305, 351912171, 74540774}
Returns: 142633752
{460023130}
{92510152}
Returns: 318361647
{11982556}
{588454245}
Returns: 0
{338618884}
{331842645}
Returns: 545769298
{97788329}
{127501683}
Returns: 677050307
{113740333}
{488128802}
Returns: 161381815
{731569604}
{93030635}
Returns: 496529871
{63742419}
{235075023}
Returns: 3329884
{406938846}
{331150913}
Returns: 827413423
{163038977}
{63742693}
Returns: 920641301
{270618263}
{490941911}
Returns: 689090882
{137187164}
{550743712}
Returns: 0
{342001492}
{304290805}
Returns: 568166610
{66786240}
{554339969}
Returns: 0
{613720295}
{225195979}
Returns: 431573838
{256920389}
{203371246}
Returns: 465693066
{1094279840}
{31547554}
Returns: 0
{213199019}
{316428352}
Returns: 288717891
{541555155}
{361553583}
Returns: 532800726
{400184362}
{351951338}
Returns: 587056824
{709487332}
{168785931}
Returns: 34852167
{75565005}
{81103305}
Returns: 530870477
{241622101}
{498449467}
Returns: 102549786
{1057243699}
{100871023}
Returns: 0
{303088382}
{358398435}
Returns: 541654603
{40521475}
{459009036}
Returns: 597581281
{173710797}
{410764214}
Returns: 912037312
{172951437}
{313460938}
Returns: 745847881
{389412330}
{195834966}
Returns: 40893905
{38944609}
{331775805}
Returns: 934783074
{13236002}
{508593434}
Returns: 0
{610717618}
{9910859}
Returns: 228154196
{55807449}
{593660090}
Returns: 0
{243875083}
{487591577}
Returns: 395439755
{279452318}
{88814261}
Returns: 533839279
{100498406}
{475924931}
Returns: 867271475
{862699622}
{49291936}
Returns: 837140425
{140625491}
{571418087}
Returns: 0
{3556189}
{599028848}
Returns: 0
{130322929}
{580321032}
Returns: 0
{846112932}
{170221973}
Returns: 0
{480929297, 588010765}
{197533276, 711839980099}
Returns: 0
{303837050218, 244640136471, 148065548}
{281147610389, 68245552, 65642875}
Returns: 0
{588010765, 101020612, 387453591, 197845379, 307193054}
{711839980099, 286870342640, 154611118115, 14977198, 11266341}
Returns: 0
{482794486, 209762398, 149741382337, 275785662}
{74033144, 831474183860, 65309119, 814639631278}
Returns: 0
{202396397, 522820014, 265601509, 192209615, 338394543}
{472555640755, 490436713950, 555774917247, 161870362, 163739767}
Returns: 0
{101471983263, 328610375, 606349786693, 671266600659, 952019407790}
{250408486470, 323135905582, 81271827, 59018382733, 18408479}
Returns: 0
{422532146255, 477778426, 430168720, 467516742, 1012235679}
{176653017, 895671480422, 989282053272, 95092958604, 68995253}
Returns: 0
{587809316009, 54454431958}
{217810551345, 65204324}
Returns: 0
{255495770673, 306646865853, 172275958}
{118818179602, 198803254, 348585760029}
Returns: 0
{313956580020, 235521335, 311456702}
{286449059785, 881420935532, 138735684}
Returns: 0
{244651605196, 411516942, 368751088476}
{116854584790, 787277945263, 96737395}
Returns: 0
{353892625, 264082689, 37675490315, 336877536, 537921812660}
{69809216, 180773586, 198886576, 61080520, 99452919}
Returns: 0
{654826192368, 436688070, 19522819}
{165063427, 125125387, 680420579585}
Returns: 0
{207837092777, 528541724}
{194478804, 139532041}
Returns: 0
{243201241385, 527463247}
{58730166018, 157816463}
Returns: 0
{440422239249, 578516555374, 547493938, 974834234129, 281029825}
{460162587714, 91176943, 424634184954, 14172212, 184766947}
Returns: 0
{401158250, 113920546, 803782179673, 70962437461}
{628057270843, 36066569, 46870273, 805837237745}
Returns: 0
{487992591, 839024676490, 572832777}
{570613674462, 68869645, 512250522449}
Returns: 0
{144895586, 105468699, 200762241221, 514805273, 633561703574}
{943480017105, 14534847, 605070164687, 61963113811, 87149444}
Returns: 0
{700662609632, 2010801, 175644374}
{185412906546, 573773292042, 572483065848}
Returns: 0
{755326463700, 610023967921, 517651730, 17742396, 108569235022}
{180480804329, 64636745030, 50543654, 89059210, 832841339448}
Returns: 0
{304981543189, 287488687784}
{504965511209, 98962973}
Returns: 0
{35188299, 398039651, 221121272, 580240073, 208486131}
{706203689051, 52658892, 133001140, 948155946077, 163371079074}
Returns: 0
{400523950, 141299779309, 18790893097, 72404462260}
{932638683547, 158503693457, 115586936750, 27056692}
Returns: 0
{234031193, 103621867, 189505561132}
{7692734, 893628319964, 89593799}
Returns: 0
{240666055, 886563454456, 262086705}
{56430195835, 148649151, 181656196}
Returns: 0
{260698435, 328120033, 562056353, 277460495292, 25891435}
{293589746146, 11956885, 83557697, 572016883815, 142945222}
Returns: 0
{448365805, 436999491, 374777559839, 483867094, 739912716828}
{6357321877, 82002944308, 186083654, 101633945, 122838530}
Returns: 0
{449142941353, 347434840, 125070530}
{104273916, 11936729, 73492688}
Returns: 0
{644280613093, 401900570, 98546850992}
{310668402359, 411515247267, 69008346}
Returns: 0
{376527363773, 129565820}
{427801879370, 465769113877}
Returns: 0
{981909292}
{33567948}
Returns: 0
{685758599}
{306440858}
Returns: 976505441
{728649149}
{275116474}
Returns: 0
{580504382}
{330476968}
Returns: 460839730
{552753569}
{353597576}
Returns: 994095673
{970478700}
{336354}
Returns: 770618818
{658132317}
{388618065}
Returns: 0
{492184797}
{492527400}
Returns: 889460710
{840312821}
{123505518}
Returns: 355384521
{727558897}
{237415590}
Returns: 336752778
{699284359}
{301155392}
Returns: 0
{669135456}
{322646321}
Returns: 349940270
{967621719}
{128107700}
Returns: 0
{922261055}
{67377077}
Returns: 370690164
{860452692}
{194797505}
Returns: 0
{2999999, 2999999, 2999999, 2999999, 2999999, 2999999, 2999999, 2999999, 2999999, 2999999 }
{2999999, 2999999, 2999999, 2999999, 2999999, 2999999, 2999999, 2999999, 2999999, 2999999 }
Returns: 637248194