Problem Statement
A seven-segment display is a cheap and easy way to show all possible digits and some small subset of letters. It looks as follows:
*---0---* | | 1 2 | | *---3---* | | 4 5 | | *---6---*
Note that in the figure we gave the segments numbers from 0 to 6.
Alice and Bob are playing a game of NIM on such a display. On each segment of the display there is a pile of pebbles of some size. The players take alternating turns. Each turn looks as follows:
- The current player selects some collection of segments. The only restrictions are that the collection must be non-empty and acyclic. E.g., it is not allowed to select segments 0, 1, 3, 4, 5, 6 because four of them form a cycle.
- The current player removes at least one pebble from each of the selected segments. There are no other restrictions on the numbers of pebbles removed from the individual segments (they do not have to be identical but they also do not have to be distinct).
Alice goes first. The player who is unable to perform a valid move loses.
You are given the
Consider all starting positions such that for each i, the initial number of pebbles on segment i is between LO[i] and HI[i], inclusive. Among them, count all those from which Alice can win the game regardless of what Bob does. Return that count modulo 10^9 + 7.
Definition
- Class:
- SevenSegmentDisplayNim
- Method:
- whoWins
- Parameters:
- int[], int[]
- Returns:
- int
- Method signature:
- int whoWins(int[] LO, int[] HI)
- (be sure your method is public)
Constraints
- LO and HI will have exactly 7 elements each.
- For each i, 0 <= LO[i] <= HI[i] <= 10,000.
Examples
{10, 20, 0, 30, 0, 40, 40}
{10, 20, 0, 30, 0, 40, 40}
Returns: 1
As LO=HI, we have just a single test case. In this test case there are some pebbles placed on the segments that form the digit 5: *---10--* | 20 | *---30--* | 40 | *---40--* The best first move for Alice (in fact, the only winning move) is to select exactly these five segments and to remove all pebbles from each of them.
{1, 1, 1, 0, 1, 1, 1}
{1, 1, 1, 0, 1, 1, 1}
Returns: 0
Again, we are looking at just a single starting configuration: six pebbles, each on a different segment. (These segments form the digit 0 on the display.) Alice cannot remove all pebbles in her turn. And regardless of what she removes, Bob will be able to remove the rest when it's his turn.
{123, 789, 1213, 1617, 2021, 2425, 2829}
{456, 1011, 1415, 1819, 2223, 2627, 3031}
Returns: 317007411
Remember to compute the answer modulo 10^9 + 7.
{1, 1, 1, 1, 1, 1, 1}
{1, 2, 3, 3, 3, 4, 5}
Returns: 1078
{0, 0, 0, 0, 0, 0, 0}
{10000, 0, 0, 0, 0, 10000, 0}
Returns: 100020000
If all piles start empty, Alice loses. Otherwise, Alice takes all pebbles and wins.
{0, 0, 0, 0, 0, 0, 0}
{10000, 10000, 10000, 10000, 10000, 10000, 10000}
Returns: 915998171
{0, 0, 0, 0, 0, 0, 0}
{4, 5, 6, 6, 10, 6, 10}
Returns: 1245059
{360, 64, 440, 566, 464, 584, 351}
{9263, 9524, 9395, 9401, 9630, 9041, 9814}
Returns: 501370429
{428, 674, 24, 980, 104, 0, 270}
{9965, 9988, 9811, 9493, 9741, 9559, 9009}
Returns: 933704060
{939, 835, 920, 323, 581, 437, 235}
{9243, 9535, 9526, 9367, 9452, 9980, 9247}
Returns: 775600783
{34, 574, 383, 733, 704, 361, 615}
{9350, 9571, 9588, 9780, 9200, 9244, 9807}
Returns: 938336236
{860, 746, 936, 957, 36, 128, 341}
{9100, 9371, 9592, 9392, 9520, 9553, 9832}
Returns: 935745996
{258, 99, 664, 892, 902, 232, 949}
{9715, 9865, 9342, 9223, 9482, 9762, 9112}
Returns: 499101870
{791, 426, 619, 361, 691, 893, 293}
{9900, 9791, 9829, 9244, 9828, 9568, 9944}
Returns: 325772932
{267, 365, 545, 578, 41, 495, 319}
{9576, 9798, 9404, 9266, 9967, 9747, 9531}
Returns: 73756733
{818, 226, 620, 116, 642, 861, 212}
{9388, 9497, 9259, 9985, 9618, 9947, 9571}
Returns: 868619289
{152, 454, 15, 174, 560, 642, 823}
{9779, 9084, 9076, 9272, 9523, 9832, 9637}
Returns: 59517170
{559, 487, 801, 821, 446, 374, 940}
{9777, 9033, 9622, 9271, 9920, 9659, 9623}
Returns: 349518416
{529, 966, 690, 931, 483, 936, 725}
{9653, 9817, 9974, 9322, 9849, 9022, 9590}
Returns: 797431759
{248, 216, 354, 441, 981, 887, 708}
{9188, 9180, 9481, 9943, 9203, 9130, 9100}
Returns: 755517077
{139, 747, 803, 583, 352, 540, 401}
{9110, 9273, 9454, 9000, 9668, 9125, 9424}
Returns: 926278497
{68, 378, 21, 270, 42, 143, 185}
{9756, 9523, 9855, 9502, 9205, 9801, 9791}
Returns: 876331044
{831, 506, 540, 464, 577, 580, 10}
{9711, 9075, 9179, 9855, 9154, 9943, 9556}
Returns: 615189437
{346, 650, 887, 47, 898, 636, 240}
{9729, 9062, 9387, 9126, 9022, 9090, 9309}
Returns: 428653861
{55, 900, 561, 315, 244, 627, 917}
{9751, 9547, 9154, 9563, 9593, 9780, 9279}
Returns: 448699096
{633, 878, 584, 82, 576, 503, 350}
{9569, 9053, 9976, 9117, 9423, 9427, 9362}
Returns: 924897327
{928, 310, 577, 864, 777, 500, 612}
{9143, 9065, 9994, 9520, 9119, 9924, 9472}
Returns: 274399056
{0, 0, 0, 0, 0, 0, 0}
{9773, 9251, 9360, 9815, 9339, 9170, 9473}
Returns: 439729611
{0, 0, 0, 0, 0, 0, 0}
{9843, 9695, 9293, 9041, 9790, 9269, 9555}
Returns: 525413386
{0, 0, 0, 0, 0, 0, 0}
{9421, 9788, 9699, 9917, 9919, 9209, 9749}
Returns: 659369584
{0, 0, 0, 0, 0, 0, 0}
{9835, 9955, 9095, 9875, 9637, 9761, 9436}
Returns: 729162278
{0, 0, 0, 0, 0, 0, 0}
{9215, 9296, 9214, 9476, 9871, 9677, 9840}
Returns: 847852468
{0, 0, 0, 0, 0, 0, 0}
{9000, 9028, 9432, 9886, 9468, 9532, 9448}
Returns: 345217108
{0, 0, 0, 0, 0, 0, 0}
{9344, 9509, 9436, 9978, 9240, 9515, 9583}
Returns: 974190368
{0, 0, 0, 0, 0, 0, 0}
{9834, 9043, 9185, 9627, 9951, 9185, 9638}
Returns: 575269202
{0, 0, 0, 0, 0, 0, 0}
{9952, 9612, 9407, 9004, 9639, 9142, 9761}
Returns: 687894531
{0, 0, 0, 0, 0, 0, 0}
{9748, 9125, 9523, 9410, 9104, 9088, 9808}
Returns: 63846318
{0, 0, 0, 0, 0, 0, 0}
{9771, 1536, 6480, 8594, 8285, 5365, 7088}
Returns: 862978955
{0, 0, 0, 0, 0, 0, 0}
{1718, 4137, 7954, 1519, 5852, 488, 6465}
Returns: 665163718
{0, 0, 0, 0, 0, 0, 0}
{4701, 2905, 8000, 3954, 6626, 7768, 116}
Returns: 885768788
{0, 0, 0, 0, 0, 0, 0}
{9665, 1735, 3916, 3002, 1311, 2322, 8438}
Returns: 601561100
{0, 0, 0, 0, 0, 0, 0}
{1996, 6794, 4832, 8999, 3598, 5684, 1477}
Returns: 710392684
{0, 0, 0, 0, 0, 0, 0}
{5232, 7029, 8294, 8946, 9382, 5770, 8542}
Returns: 382575958
{0, 0, 0, 0, 0, 0, 0}
{5349, 804, 9825, 7021, 1657, 7195, 9549}
Returns: 570031188
{0, 0, 0, 0, 0, 0, 0}
{6698, 7681, 8487, 7783, 8462, 1959, 3760}
Returns: 116958369
{0, 0, 0, 0, 0, 0, 0}
{1190, 770, 9907, 4894, 725, 104, 4198}
Returns: 605769081
{0, 0, 0, 0, 0, 0, 0}
{7331, 566, 4942, 9874, 4909, 6911, 1816}
Returns: 626768487
{3, 3, 3, 2, 0, 0, 0}
{3, 3, 3, 3, 2, 2, 2}
Returns: 52
{1, 1, 1, 2, 0, 0, 0}
{3, 3, 3, 3, 0, 0, 0}
Returns: 52
{1, 1, 1, 2, 0, 0, 0}
{3, 3, 3, 3, 2, 2, 2}
Returns: 1453
{2, 2, 2, 0, 2, 2, 2}
{3, 3, 3, 0, 3, 3, 3}
Returns: 62
{0, 0, 0, 1, 3, 3, 3}
{1, 1, 1, 1, 3, 3, 3}
Returns: 8
{1, 1, 1, 0, 0, 0, 0}
{2, 2, 2, 0, 2, 2, 2}
Returns: 214
{1, 1, 1, 1, 2, 2, 2}
{2, 2, 2, 3, 3, 3, 3}
Returns: 189
{0, 0, 0, 2, 0, 0, 0}
{3, 3, 3, 2, 0, 0, 0}
Returns: 63
{0, 0, 0, 0, 0, 0, 0}
{2, 2, 2, 1, 0, 0, 0}
Returns: 52
{0, 0, 0, 1, 0, 0, 0}
{3, 3, 3, 3, 2, 2, 2}
Returns: 5175
{6465, 6486, 6526, 6208, 4231, 4201, 4163}
{8800, 8748, 8715, 8621, 8345, 8323, 8326}
Returns: 562835622
{4300, 4279, 4285, 3724, 1724, 1646, 1688}
{7016, 6990, 7005, 6900, 6897, 6897, 6967}
Returns: 473958459
{6515, 6523, 6468, 5725, 8233, 8250, 8261}
{9043, 9043, 9042, 7652, 9082, 9046, 9066}
Returns: 154992790
{1951, 1997, 1977, 2261, 6829, 6853, 6878}
{7090, 7091, 7027, 7333, 7070, 7066, 7136}
Returns: 922532122
{2976, 2961, 2963, 5815, 1511, 1478, 1561}
{7739, 7698, 7733, 6988, 2127, 2103, 2120}
Returns: 970688039
{7103, 7085, 7006, 4998, 5683, 5690, 5685}
{8975, 8986, 8912, 6017, 8023, 8009, 8013}
Returns: 468401974
{8255, 8276, 8280, 3335, 4890, 4928, 4915}
{8535, 8496, 8516, 6052, 8375, 8353, 8406}
Returns: 589626125
{7362, 7403, 7412, 8145, 4945, 4921, 4954}
{7662, 7673, 7671, 8653, 5015, 5090, 5108}
Returns: 180646832
{3103, 3117, 3188, 2160, 1755, 1826, 1783}
{5392, 5354, 5395, 4828, 4300, 4287, 4310}
Returns: 824424021
{1003, 956, 947, 3133, 2219, 2269, 2292}
{2242, 2240, 2250, 3877, 6137, 6169, 6099}
Returns: 477155792
{2, 3, 3, 7, 2, 5, 1}
{3, 9, 4, 8, 5, 8, 2}
Returns: 1792
{2, 3, 8, 5, 3, 0, 2}
{9, 8, 9, 8, 3, 5, 6}
Returns: 11520
{7, 2, 0, 5, 8, 1, 1}
{9, 3, 6, 7, 8, 4, 2}
Returns: 1008
{8, 3, 6, 1, 5, 1, 5}
{9, 4, 9, 4, 8, 6, 8}
Returns: 6144
{3, 4, 5, 0, 3, 5, 1}
{4, 9, 9, 9, 4, 7, 2}
Returns: 7200
{2, 4, 1, 3, 0, 3, 3}
{9, 5, 4, 4, 4, 9, 7}
Returns: 22400
{1, 0, 2, 1, 3, 3, 1}
{7, 6, 9, 6, 4, 6, 3}
Returns: 56445
{3, 1, 4, 5, 1, 5, 1}
{8, 8, 6, 5, 1, 7, 3}
Returns: 1296
{1, 5, 3, 0, 4, 4, 0}
{8, 9, 7, 5, 6, 9, 1}
Returns: 43200
{4, 3, 8, 4, 5, 3, 5}
{7, 8, 8, 7, 6, 8, 9}
Returns: 5760
{3436, 2907, 3103, 481, 8348, 4268, 4828}
{9345, 9364, 3920, 680, 9963, 9923, 9978}
Returns: 695494707
{3253, 9698, 5516, 2847, 5370, 2575, 1237}
{5624, 9907, 9162, 8263, 6106, 3027, 8084}
Returns: 72243631
{576, 7373, 1539, 4431, 4624, 3555, 1236}
{6404, 7605, 4821, 8066, 5468, 7003, 4184}
Returns: 539167280
{5301, 4783, 2639, 2988, 3772, 594, 7760}
{6267, 7531, 3965, 5941, 5062, 3548, 9414}
Returns: 155313466
{403, 151, 4486, 6812, 3867, 866, 1355}
{5825, 4659, 9058, 8676, 7440, 7442, 2132}
Returns: 264312531
{6592, 3066, 752, 7408, 1633, 434, 7345}
{7262, 4061, 6581, 8719, 8583, 9140, 8921}
Returns: 815013309
{7954, 2641, 2597, 4515, 3172, 8078, 4501}
{8854, 9648, 3905, 5218, 9130, 8333, 7533}
Returns: 854924511
{4184, 1909, 3618, 535, 2259, 1388, 5310}
{5521, 8603, 4165, 3702, 4006, 7338, 8972}
Returns: 258977765
{3539, 1541, 2573, 4554, 2285, 1289, 914}
{5300, 4263, 8495, 5912, 2697, 3018, 8341}
Returns: 321815655
{2941, 1682, 687, 3038, 1416, 1616, 3200}
{9893, 9101, 4687, 5252, 7366, 4518, 4889}
Returns: 739178493