Problem Statement
X[0] = X0 MOD L
X[i] = (X[i-1]*A+B) MOD L (note that X[i-1]*A+B may overflow a 32-bit integer)
The price of planting tree i is the sum of the distances between tree i and each tree numbered less than i. Calculate the product of the prices of all the trees (except tree 0), and return this number modulo 1,000,000,007.
Definition
- Class:
- ProductOfPrices
- Method:
- product
- Parameters:
- int, int, int, int, int
- Returns:
- int
- Method signature:
- int product(int N, int L, int X0, int A, int B)
- (be sure your method is public)
Constraints
- N will be between 2 and 200,000, inclusive.
- L will be between 1 and 200,000, inclusive.
- X0,A,B will each be between 0 and 1,000,000,000, inclusive.
Examples
5
10
3
1
1
Returns: 180
The trees are planted at positions: 3, 4, 5, 6, 7. Their prices are (starting from tree 1): 1, 3, 6, 10. The product of prices is 1 * 3 * 6 * 10 = 180.
3
20
5
2
3
Returns: 64
4
21
1
7
1
Returns: 3087
10
100
4
37
11
Returns: 591860767
13581
95224
350
92105
7812
Returns: 425853540
32587
72963
858
57778
15129
Returns: 873253283
6393
85434
19434
28677
81819
Returns: 936153250
25435
68151
8486
53726
54733
Returns: 52874401
1350
61602
33120
56633
7108
Returns: 719507598
23301
66993
18052
61204
14102
Returns: 124349808
21142
17989
13131
12663
8305
Returns: 14469149
44016
37799
14927
22974
14193
Returns: 100706128
33201
33547
27394
24075
29660
Returns: 530872757
27301
61816
34438
25550
44538
Returns: 396374845
30818
91558
52102
70697
42268
Returns: 949547358
2526
19991
17815
17571
7841
Returns: 793586311
2407
38520
247
22469
30071
Returns: 828290093
1227
58191
29113
27041
28658
Returns: 346407296
19736
10003
3039
1678
4843
Returns: 955301883
48318
17478
14601
847
5638
Returns: 294755456
11092
17597
17395
10850
9477
Returns: 26934147
48838
3744
1920
608
3146
Returns: 660894866
17124
85887
19591
71228
48195
Returns: 88064867
8531
39958
6893
7255
38435
Returns: 228638846
30572
37655
15312
14475
718
Returns: 736603828
10113
94972
53507
16248
73321
Returns: 107751165
26171
58377
54646
25112
19293
Returns: 677427515
21301
40949
18444
9959
24319
Returns: 231911130
2023
75163
44017
1422
55302
Returns: 658964165
20484
10811
7998
2674
1965
Returns: 981910604
12388
70517
34089
26554
66754
Returns: 311468353
40050
13353
1835
2036
8572
Returns: 420465876
41901
64956
53878
25052
49369
Returns: 501018975
28250
66466
35109
36140
38324
Returns: 43524289
17051
69954
58152
35465
36515
Returns: 92318821
43787
31570
1645
465
15941
Returns: 982368909
1517
50473
46468
27278
89
Returns: 77747239
28613
94639
36937
58671
70752
Returns: 517332894
42450
48475
13227
26688
34939
Returns: 787721080
32639
90765
26079
67169
86382
Returns: 416241334
21973
94060
17339
3642
85831
Returns: 877812144
8673
12119
10495
4108
6172
Returns: 837580511
39508
27106
4112
21
19624
Returns: 498491
32673
65923
32266
10144
40888
Returns: 609727347
135035
200000
160896
188253
164579
Returns: 225360414
56027
91714
37679
79857
29983
Returns: 502723285
159167
158159
144403
109260
31426
Returns: 939542237
133506
63956
44366
13405
40355
Returns: 198420718
87903
102154
39621
72647
81439
Returns: 366060051
105083
131673
104542
10253
128840
Returns: 395301960
62492
187471
123475
109454
115033
Returns: 724482282
200000
200000
96826
92288
76859
Returns: 966728250
150507
200000
144526
196414
81964
Returns: 300128655
200000
146857
143819
87990
62518
Returns: 303911806
92681
200000
32261
146108
190794
Returns: 703116537
200000
200000
176100
28551
157621
Returns: 485400433
200000
200000
113701
80020
168689
Returns: 821676669
200000
200000
53631
81883
75644
Returns: 51745470
200000
200000
130279
194876
143888
Returns: 351328776
200000
200000
114880
168329
4021
Returns: 83526623
200000
200000
52590
93116
158850
Returns: 442195328
200000
200000
37193
94162
69515
Returns: 1787913
200000
200000
10405
121012
118630
Returns: 261044987
200000
200000
140219
185071
1479
Returns: 909353568
5
200000
999999999
123456789
987654321
Returns: 499739175
199999
200000
999999999
123456789
987654321
Returns: 988935907
43661
200000
999999999
123456789
987654321
Returns: 498323077
200000
200000
999999999
123456789
987654321
Returns: 725110457
200000
200000
200000
200000
200000
Returns: 0
200000
100
4
37
11
Returns: 118468348
200000
199997
999999999
123456789
987654321
Returns: 435256351
200000
17
1276512
12675127
1276182
Returns: 262774090
200000
199967
999999999
123456789
987654321
Returns: 27701017
200000
200000
1
1
1
Returns: 407222067
200000
200000
999999997
999999995
999999993
Returns: 623728084
200000
199999
999999999
999999999
999999999
Returns: 826784755
200000
197637
693997111
979735977
345999
Returns: 857097268
200000
200000
1000000
1000000
1000000
Returns: 0
200000
194673
1000000000
999999998
77697697
Returns: 604808605
2
11
22
0
5
Returns: 5
200000
200000
1000000000
1000000000
1000000000
Returns: 0
200000
200000
5
6
7
Returns: 661005811
200000
200000
392032
328943
4894343
Returns: 804429083
200000
200000
2432434
3235323
13213212
Returns: 403372060
200000
98765
500000
1234567
678912345
Returns: 568102096
200000
200000
0
1
1
Returns: 407222067
200000
200000
456165158
489451458
789484818
Returns: 465182110
200000
197256
999999999
999732569
925943587
Returns: 576379154
200000
1
15
15
15
Returns: 0
200000
100000
99
19999999
999999917
Returns: 842482663
199937
184214
923431534
923431537
923431539
Returns: 10305340
200000
1
1
7
1
Returns: 0
20
10000
999999
6
4
Returns: 225219841