Problem Statement
A construction worker was assigned the task to build a chimney. The chimney consists of N layers of 4 bricks each. Each layer, when looked at from above, looks like this:
Layer 1 Layer 2 +-----+--+ +--+-----+ | 1 | | | | B | +--+--|2 | | A+--+--+ | | | | | | | | | 4+--+--+ +--+--+C | | | 3 | | D | | +--+-----+ +-----+--+
Each layer, except the bottommost one, is placed on top of the previous such that the borders coincide perfectly and each brick is placed on top of exactly two bricks from the layer below. In the example above, brick A is placed on top of bricks 1 and 4, brick B on top of bricks 1 and 2, C on top of 2 and 3 and D on top of 3 and 4.
A brick in a given layer can only be placed after both bricks below have already been placed. Of course, bricks on the bottommost layer have no such restrictions. There are many orders in which bricks can be placed. For instance, if only 1 layer is to be placed, there are 4! = 24 possible orders, because any order of the bricks is valid. However, when more layers are used, not every order of the total number of bricks is valid.
You will be given the total number of layers n. Return the number of orders in which bricks can be placed, modulo 1000000007.
Definition
- Class:
- Chimney
- Method:
- countWays
- Parameters:
- long
- Returns:
- int
- Method signature:
- int countWays(long n)
- (be sure your method is public)
Constraints
- n will be between 1 and 1000000000000000000 (10^18), inclusive.
Examples
1
Returns: 24
There are 4! = 4*3*2*1 = 24 ways of placing 4 bricks without dependencies.
2
Returns: 1088
5
Returns: 110198784
6
Returns: 138284509
100000
Returns: 19900327
1000000000000000000
Returns: 364019862
3
Returns: 50688
4
Returns: 2363392
7
Returns: 584934263
8
Returns: 226635915
9
Returns: 442731277
10
Returns: 746402694
11
Returns: 492527535
12
Returns: 871549439
13
Returns: 312610762
14
Returns: 226152767
15
Returns: 848244118
16
Returns: 241940394
17
Returns: 325515661
18
Returns: 140566512
19
Returns: 914190377
20
Returns: 884881090
1000000000000000000
Returns: 364019862
999999999999999999
Returns: 764053755
999999999999999998
Returns: 723602507
999999999999999997
Returns: 483888540
999999999999999996
Returns: 804735119
999999999999999995
Returns: 908490583
999999999999999994
Returns: 809418952
999999999999999993
Returns: 358494047
999999999999999992
Returns: 381223365
999999999999999991
Returns: 670941057
200
Returns: 787171472
108
Returns: 572366251
193
Returns: 944617417
184
Returns: 17073931
135
Returns: 539481840
1274
Returns: 49395495
1904
Returns: 522479802
1412
Returns: 651819626
1546
Returns: 21767390
1768
Returns: 405449637
8054473
Returns: 212209620
2101872
Returns: 648015706
2806429
Returns: 625206793
10133628
Returns: 687213396
15294943
Returns: 326487321
1000002803
Returns: 303972920
1000000276
Returns: 24167289
1000004460
Returns: 362967943
1000008951
Returns: 392371903
1000005498
Returns: 16978199
1000007365
Returns: 635815387
1000002325
Returns: 368755323
1000006901
Returns: 721209271
1000001069
Returns: 448591518
1000009153
Returns: 285293220
361
Returns: 897412922
6859
Returns: 990317770
130321
Returns: 908867540
2476099
Returns: 991604202
47045881
Returns: 965339545
893871739
Returns: 391942709
16983563041
Returns: 417250699
322687697779
Returns: 878866403
6131066257801
Returns: 532681067
116490258898219
Returns: 283174963
2213314919066161
Returns: 578195950
42052983462257059
Returns: 786673968
799006685782884121
Returns: 987474155
576460752303423487
Returns: 946324257
288230376151711743
Returns: 910557164
144115188075855871
Returns: 558974186
450283905890997362
Returns: 625809992
150094635296999120
Returns: 899843099
50031545098999706
Returns: 24613994
298023223876953124
Returns: 824133018
59604644775390624
Returns: 838840981
11920928955078124
Returns: 93771289
558545864083284006
Returns: 628140868
79792266297612000
Returns: 321969494
11398895185373142
Returns: 583306028
505447028499293770
Returns: 93328307
45949729863572160
Returns: 846195883
4177248169415650
Returns: 52608353
665416609183179840
Returns: 287865304
51185893014090756
Returns: 825266957
3937376385699288
Returns: 412854001
999999999999999987
Returns: 727912045
590345035376309527
Returns: 86035942