Problem Statement
Patrik runs a local game store. Recently, a flood damaged their records and he is now trying to reconstruct them from pieces of information he recovered.
You are given all the information Patrik has: a
Two schedules are different if they have a different number of events. Two schedules are also different if they have the same number of events, but for some i the i-th event (in chronological order) in the first schedule and the i-th event in the second schedule have a different set of participants.
Count all valid schedules and return their count modulo (10^9 + 7).
Definition
- Class:
- Visitors
- Method:
- countSchedules
- Parameters:
- int[]
- Returns:
- int
- Method signature:
- int countSchedules(int[] visitors)
- (be sure your method is public)
Constraints
- visitors will contain between 2 and 50 elements, inclusive.
- Each element of visitors will be between 0 and 50, inclusive.
- visitors[0] will be 0.
- The sum of visitors will be positive.
- The sum of i * visitors[i] will not exceed 3000.
Examples
{0,1}
Returns: 1
There was a single person and they visited the store once. There is only one valid schedule: there was one event and the person took part in that event.
{0,0,0,1}
Returns: 1
Again, there is only one valid schedule: there were three events and the only visitor attended each of them.
{0,3}
Returns: 13
There were three people (A, B, C) who attended one event each. One valid schedule is that A attended event 1, then C attended event 2, and then B attended event 3. Another valid schedule is that B attended event 1, A attended event 2, and C attended event 3. Yet another valid schedule: A and C attended event 1 and then B attended event 2.
{0,1,1}
Returns: 5
Note that the schedule in which A attends event 1 and then B attends events 2 and 3 is different from the schedule in which B attends event 1, then A attends event 2, and then B attends event 3.
{0,1,2,3,4}
Returns: 119998118
Don't forget to use the modular arithmetic.
{0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,11,50 }
Returns: 707233733
{0,47,50,50,50,50,50,50,50,50,50,23}
Returns: 560846601
{0, 0, 15, 0, 29, 27, 16, 0, 23, 12, 25, 0, 0, 15, 12, 0, 0, 15, 9, 0, 12, 22, 0, 26}
Returns: 328121394
{0, 0, 8, 0, 0, 12, 11, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 5, 0, 0, 0, 10, 0, 0, 14, 7, 0, 0, 12, 0, 0, 10, 0, 0}
Returns: 291626328
{0, 0, 0, 0, 15, 0, 16, 0, 0, 2, 0, 11, 0, 6, 0, 3, 2, 14, 16, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 14, 0, 0, 6, 0, 12, 0, 0, 0, 0, 0, 0, 17, 0, 2}
Returns: 105191764
{0, 45, 40, 3, 12, 14, 41, 1, 11, 13, 39, 30, 42, 16}
Returns: 214754921
{0, 14, 18, 38, 13, 36, 47}
Returns: 276685330
{0, 22, 34, 2, 22, 5, 49, 35, 8, 15, 31, 38, 43, 41}
Returns: 912219222
{0, 31, 9, 22, 21, 0, 2, 31, 8, 8, 20, 44, 0, 27, 37, 30, 27}
Returns: 987926593
{0, 41, 7, 35, 24, 39, 28, 24, 7, 38, 27, 20, 9, 8, 3, 33, 36}
Returns: 745510286
{0, 13, 16, 0, 18, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 6, 5, 0, 15, 14, 8, 5, 0}
Returns: 950732081
{0, 19, 25, 24, 21}
Returns: 396423348
{0, 42, 3, 9, 17, 20, 15, 39, 1, 17, 36, 11, 16, 13, 26, 44, 9, 13}
Returns: 184133606
{0, 5, 0, 0, 0, 0, 2, 8, 0, 0, 0, 11, 0, 0, 0, 0, 10, 0, 2, 0, 4, 14, 10, 7, 10, 0, 0, 0, 5, 0, 20, 21, 0, 0, 0, 6}
Returns: 394377708
{0, 0, 10, 16, 3, 19, 16, 0, 0, 11, 13, 0, 4, 8, 0, 5, 0, 0, 5, 4, 13, 12, 9, 4, 17, 0, 0, 0, 3, 0, 0, 10, 9, 0, 0, 6}
Returns: 647744711
{0, 0, 0, 17, 0, 0, 16, 0, 1, 0, 19, 10, 14, 12, 16, 0, 21, 0, 0, 18, 0, 2, 0, 15, 0, 0, 0, 0, 17, 0, 0, 0, 14, 0, 0}
Returns: 780553403
{0, 14, 17, 0, 23, 10, 0, 0, 26, 0, 17, 11, 0, 0, 0, 0, 0, 0, 15, 0, 0, 9, 0, 10, 14, 0, 0, 4, 0, 0, 14, 0, 10, 13}
Returns: 952692091
{0, 5, 9, 16, 12, 3, 0, 9, 0, 0, 0, 22, 0, 23, 18, 0, 0, 0, 13, 0, 0, 7, 2, 2, 0, 0, 0, 0, 11, 21, 0, 0, 0, 0, 18, 0}
Returns: 462244934
{0, 20, 0, 0, 0, 0, 0, 0, 0, 8, 13, 0, 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 22, 0, 16, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 12, 0, 0, 6, 0, 0, 0, 9}
Returns: 574803088
{0, 4, 20, 12, 0, 4, 7, 19, 0, 34, 16, 0, 20, 8, 0, 0, 0, 0, 12, 0, 0, 14, 0, 0, 4, 9, 0, 0, 0, 11, 0, 1, 0, 0, 7, 14, 0, 0, 0, 0, 0, 0}
Returns: 201510271
{0, 21, 11, 18, 10, 1, 35, 45}
Returns: 857613342
{0, 0, 1, 17, 0, 2, 25, 0, 0, 0, 25, 14, 16, 22, 22, 0, 0, 9, 16, 0, 0, 0, 0, 31, 0, 0, 17, 0}
Returns: 832203773
{0, 0, 18, 0, 29, 0, 0, 0, 7, 0, 0, 0, 0, 0, 12, 6, 0, 15, 3, 0, 0, 0, 1, 16, 0, 19, 14, 0, 0, 19, 0, 14}
Returns: 973707483
{0, 11, 0, 0, 0, 19, 1, 11, 1, 0, 0, 0, 0, 0, 5, 12, 21, 0, 23, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 17, 12, 0, 0, 15, 0}
Returns: 719586427
{0, 2, 0, 4, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 1, 22, 0, 0, 23, 7, 0, 26, 0, 0, 0, 14, 0, 0, 0, 0, 20}
Returns: 551820632
{0, 35, 40, 2, 6, 16, 29, 27, 0, 34, 14, 0, 30, 24, 19, 1, 30, 8, 17, 0, 0, 4}
Returns: 19957860
{0, 42, 45, 46, 27, 0}
Returns: 722730741
{0, 0, 24, 0, 0, 0, 12, 1, 0, 7, 0, 12, 22, 0, 27, 8, 3, 0, 0, 0, 9, 0, 17, 0, 0, 0, 6, 3, 0, 0, 14, 21, 0, 0}
Returns: 407000947
{0, 0, 6, 2, 2, 0, 0, 14, 0, 0, 4, 7, 0, 0, 2, 0, 10, 0, 0, 0, 6, 0, 14, 3, 0, 0, 0, 16, 0, 0, 0, 1, 0, 19, 0, 0, 7, 0, 19}
Returns: 668089325
{0, 0, 0, 0, 0, 13, 19, 10, 8, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 18, 0, 0, 2, 0, 6, 12, 0, 12, 0, 0, 0, 0, 4}
Returns: 144695583
{0, 16, 5, 9, 20, 30, 17, 17, 0, 29, 0, 22, 0, 0, 22, 11, 3, 0, 10, 0, 8, 0, 0, 4, 16, 9, 16, 0}
Returns: 398518496
{0, 1, 16, 26, 28, 4}
Returns: 480150874
{0, 6, 0, 24, 1, 0, 0, 29, 0, 4, 0, 21, 0, 14, 0, 0, 0, 0, 7, 19, 17, 10, 0, 16, 11, 0, 0, 0, 21, 0, 0, 0}
Returns: 470147796
{0, 24, 46, 20, 47, 50, 17, 26, 15, 43, 33, 49, 46, 12}
Returns: 706092565
{0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 3, 0, 0, 1, 0, 0, 0, 0, 14, 0, 7, 18, 0, 0, 20, 1, 16, 0, 0, 0, 13, 0}
Returns: 916633412
{0, 0, 4, 13, 0, 15, 0, 0, 0, 0, 0, 3, 13, 0, 0, 0, 0, 8, 0, 2, 13, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 12, 0, 0, 8, 19, 0, 14, 0, 0, 7}
Returns: 920452864
{0, 0, 0, 0, 0, 16, 0, 0, 0, 9, 17, 14, 3, 0, 10, 0, 7, 0, 0, 0, 19, 18, 5, 9, 0, 0, 0, 11, 6, 5, 6, 0, 0, 1, 0, 9}
Returns: 510871560
{0, 0, 0, 0, 11, 0, 17, 0, 22, 18, 3, 0, 0, 1, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 22, 9, 21, 0, 16, 7, 0, 1}
Returns: 409199301
{0, 0, 33, 31, 0, 0, 0, 0, 1, 22, 12, 33, 16, 2, 0, 0, 3, 0, 0, 14, 32, 6, 29, 0, 0, 8}
Returns: 283890886
{0, 22, 28, 34, 50, 26, 5, 28, 50}
Returns: 539044234
{0, 0, 0, 0, 0, 0, 0, 11, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 5, 7, 0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 7, 0, 0, 0, 12, 0, 15}
Returns: 580150370
{0, 46, 14, 1, 38, 18, 7, 2, 2, 37, 38, 20, 42, 47, 14, 13, 10}
Returns: 971151304
{0, 29, 48}
Returns: 199506731
{0, 5, 23, 0, 4, 0, 12, 0, 21, 29, 8, 0, 0, 21, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 22, 0, 0, 2, 0, 0, 2, 0, 0, 0, 20, 2, 7, 0}
Returns: 784582860
{0, 40, 1, 46, 44}
Returns: 413615422
{0, 0, 0, 0, 0, 0, 0, 1, 1, 21, 0, 0, 1, 7, 13, 0, 4, 0, 0, 0, 0, 0, 18, 0, 0, 0, 23, 0, 13, 7, 0, 7, 9, 0, 0, 0, 0, 0, 10}
Returns: 59549076
{0, 0, 0, 2, 0, 0, 21, 4, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 2, 7, 0, 0, 4, 0, 0, 0, 1, 17, 0, 20, 0, 0, 0, 0, 8, 1, 0, 6, 0, 0, 0, 18, 0, 0, 0}
Returns: 485908108
{0, 24, 0, 0, 0, 7, 0, 0, 5, 0, 15, 0, 8, 0, 16, 0, 0, 5, 25, 22, 0, 12, 8, 22, 0, 8, 13}
Returns: 885333846
{0, 0, 0, 0, 0, 14, 22, 29, 22, 0, 0, 24, 15, 41, 11, 29, 36, 0, 15, 0}
Returns: 344048341
{0, 0, 35, 21, 15, 0, 9, 31, 11, 0, 0, 16, 13, 23, 0, 33, 3, 11, 14, 6, 0, 0, 4, 0, 26}
Returns: 208139320
{0, 19, 31, 35}
Returns: 225381555
{0, 25, 26, 10, 1, 2, 0, 0, 0, 24, 0, 0, 0, 4, 11, 0, 0, 0, 13, 16, 13, 0, 18, 0, 17, 0, 0, 8, 3, 19}
Returns: 375980103
{0, 16, 4, 24, 10, 0, 0, 0, 0, 10, 0, 0, 7, 25, 14, 0, 0, 0, 0, 15, 0, 0, 30, 16, 0, 14, 3, 0, 15, 0}
Returns: 88134120
{0, 21, 18, 0, 4, 0, 0, 0, 7, 0, 11, 0, 0, 15, 0, 0, 0, 0, 0, 0, 16, 0, 0, 15, 0, 10, 0, 0, 0, 18, 0, 0, 5, 24, 0, 5, 0, 0, 0, 0, 0, 0}
Returns: 127453771
{0, 0, 20, 4, 23, 23, 25, 33, 25, 8, 48, 39, 3, 28, 39}
Returns: 101834408
{0, 45, 27, 33, 5, 45, 5, 30}
Returns: 41891042
{0, 7, 19, 35, 50, 36, 12}
Returns: 852126283
{0, 0, 0, 0, 4, 0, 9, 0, 0, 19, 0, 0, 0, 13, 32, 0, 9, 0, 22, 0, 27, 0, 17, 29, 0}
Returns: 204444407
{0, 0, 0, 0, 31, 3, 12, 20, 28, 6, 36, 0, 0, 23, 28, 17, 10, 9, 0, 0, 0, 17, 0, 14, 3}
Returns: 544717437
{0, 9, 0, 12, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 21, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 17, 0, 5, 0, 13, 0, 0, 6, 0, 0, 5, 2, 0, 0, 5, 8, 9, 0, 0, 1}
Returns: 869233158
{0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 13, 15, 0, 0, 0, 24, 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, 12, 0, 7, 0, 4, 13, 0, 0, 19}
Returns: 175913862
{0, 17, 19, 14, 0, 8, 0, 0, 26, 0, 0, 7, 11, 0, 3, 0, 0, 0, 30, 3, 0, 33, 22, 27}
Returns: 685675031
{0, 31, 37, 40, 31, 20, 40}
Returns: 746162290
{0, 10, 11, 3, 22, 4, 3, 14, 7, 9, 20, 0, 30, 6, 24, 0, 0, 0, 0, 20, 11, 32, 16, 0}
Returns: 65886931
{0, 42, 35, 10, 44, 43, 0, 34}
Returns: 318578980
{0, 30, 11, 3, 13}
Returns: 341412171
{0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 3, 4, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 14, 11, 0, 10, 21, 0}
Returns: 280013780
{0, 37, 37, 30, 30, 47, 32, 11, 23, 12, 23, 47, 16, 10}
Returns: 185942853
{0, 33, 0, 16, 6, 22, 7, 38, 30, 34, 37, 1, 18, 42}
Returns: 584774706
{0, 45, 47, 31, 1, 17, 44, 28, 15, 39, 22, 8}
Returns: 305966761
{0, 18, 1, 1}
Returns: 184191949
{0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 5, 0, 26, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 13, 10, 0, 0, 3, 0, 0, 0, 0, 0, 15, 8, 8, 11, 0, 0, 0, 0, 0, 8, 0}
Returns: 952814822