+1
.direnv/flake-profile
+1
.direnv/flake-profile
···
1
+
flake-profile-20-link
+1
.direnv/flake-profile-20-link
+1
.direnv/flake-profile-20-link
···
1
+
/nix/store/qd65s0dwvzj0w0lv3qm6zci2sx8qn7d4-nix-shell-env
+1
.envrc
+1
.envrc
···
1
+
use flake
+25
Justfile
+25
Justfile
···
1
+
set shell := ["bash", "-eu", "-o", "pipefail", "-c"]
2
+
3
+
default_day := `date +'%d'`
4
+
5
+
default: sync build
6
+
7
+
# Run this whenever you change build files. This generates the latest build config.
8
+
sync:
9
+
meson setup --reconfigure build/
10
+
11
+
# Build everything Meson knows about.
12
+
build:
13
+
meson compile -C build/
14
+
15
+
# Run tests for a specific day. Defaults to today's day-of-month.
16
+
test day=default_day: sync
17
+
day=$(printf '%02d' "{{day}}"); meson test -C build "day${day}"
18
+
19
+
# Run a day's solution on the "real" data set.
20
+
run day=default_day: sync
21
+
day=$(printf '%02d' "{{day}}"); meson compile -C build "run-day${day}"
22
+
23
+
# Clean the build folder. Useful... sometimes.
24
+
clean:
25
+
meson setup --wipe build/
+22
README.md
+22
README.md
···
1
+
# Advent of Code 2025 (C++)
2
+
3
+
A Meson + Just playground tailored for day-by-day AoC work. Each day is its own executable that knows where to find its data without manual path plumbing.
4
+
5
+
## Workflow
6
+
7
+
```sh
8
+
nix develop # optional if tooling is installed already; brings in clang/meson/just
9
+
just # runs sync + build
10
+
just test 5 # run tests for day 05
11
+
just run # run today's solution on "real" data
12
+
```
13
+
14
+
`just test`/`run` default to today's day-of-month; pass an explicit day to override. Meson owns the build/run logic; Just only wires day selection and delegates.
15
+
16
+
## Layout
17
+
18
+
- `src/<day>/solution.cxx` — main for each day (`src/00/solution.cxx` is a stub).
19
+
- `data/<day>/` — input directory for that day.
20
+
- `DATA_FOLDER` — compile-time string macro injected by Meson pointing at `data/<day>/`.
21
+
22
+
Add new days by creating a `src/<day>/solution.cxx` (use two-digit day numbers) and a matching `data/<day>/` folder. Re-run `just sync` after adding new days so Meson picks them up.
+1
compile_commands.json
+1
compile_commands.json
···
1
+
builddir/compile_commands.json
+3
data/00/input.txt
+3
data/00/input.txt
+4431
data/01/input.txt
+4431
data/01/input.txt
···
1
+
L14
2
+
L46
3
+
L44
4
+
R17
5
+
L23
6
+
L39
7
+
R2
8
+
R12
9
+
L50
10
+
L11
11
+
R21
12
+
L11
13
+
L3
14
+
R48
15
+
L11
16
+
L50
17
+
L49
18
+
R47
19
+
L43
20
+
R6
21
+
R2
22
+
L17
23
+
R32
24
+
R22
25
+
L2
26
+
L37
27
+
L40
28
+
L50
29
+
L39
30
+
L14
31
+
R18
32
+
L22
33
+
R28
34
+
L24
35
+
L3
36
+
R30
37
+
R37
38
+
R31
39
+
R47
40
+
R17
41
+
R39
42
+
R24
43
+
R34
44
+
L35
45
+
L17
46
+
L41
47
+
R44
48
+
R3
49
+
R42
50
+
L18
51
+
L82
52
+
R82
53
+
R52
54
+
L96
55
+
R42
56
+
R52
57
+
R50
58
+
R45
59
+
L56
60
+
R11
61
+
L97
62
+
L21
63
+
R18
64
+
L12
65
+
R2
66
+
L90
67
+
L40
68
+
L60
69
+
R67
70
+
R69
71
+
L36
72
+
L8
73
+
L7
74
+
R4
75
+
R7
76
+
L96
77
+
L90
78
+
R45
79
+
L77
80
+
L1
81
+
L29
82
+
L48
83
+
R73
84
+
R27
85
+
L9
86
+
L60
87
+
L67
88
+
R98
89
+
L62
90
+
R12
91
+
R88
92
+
R75
93
+
L3
94
+
R50
95
+
L48
96
+
L62
97
+
R25
98
+
R63
99
+
R9
100
+
L27
101
+
R80
102
+
L53
103
+
L92
104
+
L17
105
+
L77
106
+
R77
107
+
R848
108
+
R97
109
+
R55
110
+
R22
111
+
R29
112
+
L78
113
+
L82
114
+
L91
115
+
R8
116
+
R49
117
+
L57
118
+
L65
119
+
L84
120
+
L44
121
+
R93
122
+
R11
123
+
R89
124
+
L57
125
+
R94
126
+
L17
127
+
L20
128
+
R69
129
+
R98
130
+
R4
131
+
L90
132
+
L62
133
+
R46
134
+
R35
135
+
R456
136
+
L56
137
+
L97
138
+
R46
139
+
R109
140
+
R142
141
+
L7
142
+
R167
143
+
R20
144
+
L38
145
+
L26
146
+
L5
147
+
R89
148
+
L3
149
+
L30
150
+
R33
151
+
L46
152
+
R16
153
+
L43
154
+
R37
155
+
L64
156
+
R93
157
+
R71
158
+
R36
159
+
L25
160
+
R40
161
+
L15
162
+
L14
163
+
L421
164
+
L65
165
+
L85
166
+
R82
167
+
L21
168
+
L520
169
+
L76
170
+
L33
171
+
R153
172
+
L26
173
+
R52
174
+
R474
175
+
L1
176
+
L1
177
+
R229
178
+
R90
179
+
L78
180
+
L39
181
+
L94
182
+
L6
183
+
L51
184
+
R35
185
+
R16
186
+
L22
187
+
R42
188
+
R72
189
+
L52
190
+
R18
191
+
R63
192
+
R79
193
+
L29
194
+
L71
195
+
L12
196
+
R12
197
+
R35
198
+
L35
199
+
L97
200
+
L23
201
+
R91
202
+
R77
203
+
R52
204
+
L241
205
+
L69
206
+
L90
207
+
L5
208
+
L95
209
+
L54
210
+
R4
211
+
R530
212
+
R20
213
+
L424
214
+
L76
215
+
L69
216
+
L10
217
+
L84
218
+
L63
219
+
R26
220
+
R125
221
+
L57
222
+
R86
223
+
R336
224
+
R910
225
+
L80
226
+
L75
227
+
L145
228
+
L47
229
+
L53
230
+
L76
231
+
R68
232
+
R8
233
+
R45
234
+
L58
235
+
R913
236
+
L85
237
+
R85
238
+
L28
239
+
R17
240
+
L15
241
+
L74
242
+
L72
243
+
L28
244
+
L51
245
+
L810
246
+
L75
247
+
R189
248
+
R47
249
+
R99
250
+
L16
251
+
R732
252
+
L15
253
+
R580
254
+
L680
255
+
R83
256
+
L83
257
+
L92
258
+
L46
259
+
R95
260
+
L29
261
+
R72
262
+
R28
263
+
L28
264
+
L53
265
+
L5
266
+
L89
267
+
R73
268
+
R82
269
+
R92
270
+
R58
271
+
R34
272
+
L92
273
+
L138
274
+
L33
275
+
L29
276
+
L15
277
+
L11
278
+
L5
279
+
L75
280
+
L80
281
+
L78
282
+
L36
283
+
R14
284
+
R86
285
+
L67
286
+
R25
287
+
R142
288
+
L90
289
+
R90
290
+
L48
291
+
R48
292
+
L89
293
+
L886
294
+
R59
295
+
L69
296
+
L915
297
+
R426
298
+
L61
299
+
R82
300
+
R53
301
+
L62
302
+
R62
303
+
R30
304
+
R7
305
+
L37
306
+
L99
307
+
R399
308
+
R88
309
+
R12
310
+
R216
311
+
L50
312
+
R63
313
+
L52
314
+
R456
315
+
L942
316
+
R9
317
+
L19
318
+
R1
319
+
L68
320
+
L414
321
+
L66
322
+
L62
323
+
L372
324
+
R73
325
+
L12
326
+
R60
327
+
R243
328
+
R96
329
+
L694
330
+
L66
331
+
R730
332
+
R57
333
+
R43
334
+
R35
335
+
L73
336
+
R4
337
+
R27
338
+
R77
339
+
R907
340
+
L61
341
+
R96
342
+
R54
343
+
R12
344
+
L4
345
+
L49
346
+
L56
347
+
R70
348
+
L5
349
+
L64
350
+
L621
351
+
L79
352
+
R83
353
+
R17
354
+
R90
355
+
L10
356
+
R878
357
+
R51
358
+
L66
359
+
L52
360
+
L308
361
+
L73
362
+
L52
363
+
R62
364
+
L36
365
+
L44
366
+
L70
367
+
L11
368
+
L22
369
+
L337
370
+
R77
371
+
R23
372
+
L39
373
+
R707
374
+
L4
375
+
R736
376
+
L92
377
+
R92
378
+
R205
379
+
R95
380
+
L22
381
+
L89
382
+
L55
383
+
R66
384
+
L41
385
+
R65
386
+
R76
387
+
R20
388
+
R780
389
+
R49
390
+
R71
391
+
L84
392
+
L36
393
+
R50
394
+
R50
395
+
R85
396
+
L85
397
+
R218
398
+
L18
399
+
L32
400
+
R72
401
+
R63
402
+
R897
403
+
R706
404
+
L106
405
+
L16
406
+
R58
407
+
L9
408
+
R67
409
+
R13
410
+
L29
411
+
R16
412
+
L27
413
+
L35
414
+
L38
415
+
R49
416
+
R851
417
+
L26
418
+
L47
419
+
R52
420
+
L22
421
+
L57
422
+
R2
423
+
L95
424
+
R73
425
+
L80
426
+
R25
427
+
R75
428
+
R30
429
+
R35
430
+
L331
431
+
L35
432
+
R1
433
+
L64
434
+
R64
435
+
L63
436
+
L31
437
+
R140
438
+
R95
439
+
L78
440
+
R37
441
+
L81
442
+
L76
443
+
L32
444
+
L24
445
+
L75
446
+
R88
447
+
L41
448
+
R44
449
+
R734
450
+
R8
451
+
R30
452
+
L290
453
+
R915
454
+
R14
455
+
R69
456
+
L83
457
+
L70
458
+
R980
459
+
L110
460
+
R55
461
+
R945
462
+
R659
463
+
L59
464
+
R50
465
+
R50
466
+
R51
467
+
R49
468
+
R1
469
+
R57
470
+
R42
471
+
L99
472
+
R99
473
+
R57
474
+
R43
475
+
R317
476
+
R67
477
+
R283
478
+
L67
479
+
L64
480
+
R97
481
+
L633
482
+
L70
483
+
R96
484
+
L69
485
+
R47
486
+
R64
487
+
L726
488
+
R958
489
+
R58
490
+
R44
491
+
R60
492
+
R438
493
+
R79
494
+
L677
495
+
R98
496
+
L95
497
+
L638
498
+
L41
499
+
R74
500
+
L333
501
+
L67
502
+
R72
503
+
L72
504
+
R96
505
+
L96
506
+
L354
507
+
L797
508
+
L92
509
+
R15
510
+
L29
511
+
L185
512
+
R16
513
+
R726
514
+
L68
515
+
R68
516
+
L53
517
+
L627
518
+
R80
519
+
R88
520
+
L88
521
+
L53
522
+
R45
523
+
R833
524
+
L82
525
+
R57
526
+
L94
527
+
L33
528
+
L356
529
+
L44
530
+
R267
531
+
R45
532
+
R7
533
+
L6
534
+
L588
535
+
R15
536
+
L108
537
+
R3
538
+
L8
539
+
L72
540
+
L28
541
+
R36
542
+
R67
543
+
L3
544
+
R89
545
+
L30
546
+
R41
547
+
L927
548
+
L73
549
+
L54
550
+
R64
551
+
L10
552
+
R83
553
+
R60
554
+
L43
555
+
L73
556
+
L445
557
+
L966
558
+
R88
559
+
L73
560
+
L31
561
+
L35
562
+
R35
563
+
R21
564
+
R56
565
+
R23
566
+
L98
567
+
R86
568
+
R30
569
+
R97
570
+
L39
571
+
R92
572
+
L80
573
+
L88
574
+
R82
575
+
L97
576
+
R88
577
+
L73
578
+
R60
579
+
L60
580
+
R76
581
+
L20
582
+
L529
583
+
R9
584
+
L37
585
+
R1
586
+
R59
587
+
L432
588
+
R973
589
+
L81
590
+
R15
591
+
R14
592
+
R452
593
+
L148
594
+
L52
595
+
L71
596
+
R71
597
+
L20
598
+
L580
599
+
L81
600
+
R81
601
+
R77
602
+
R23
603
+
L11
604
+
L89
605
+
L4
606
+
R4
607
+
L40
608
+
R210
609
+
L70
610
+
R185
611
+
R15
612
+
R41
613
+
L668
614
+
R327
615
+
R9
616
+
L31
617
+
L789
618
+
R11
619
+
L95
620
+
R15
621
+
R59
622
+
L72
623
+
R93
624
+
R92
625
+
L92
626
+
R29
627
+
R471
628
+
R90
629
+
R54
630
+
R81
631
+
L28
632
+
L48
633
+
L49
634
+
L238
635
+
R370
636
+
R384
637
+
L2
638
+
R86
639
+
R23
640
+
R77
641
+
R32
642
+
R42
643
+
L25
644
+
L20
645
+
L701
646
+
R35
647
+
L63
648
+
R2
649
+
L64
650
+
R34
651
+
L72
652
+
R88
653
+
R512
654
+
L77
655
+
R94
656
+
R830
657
+
R33
658
+
L80
659
+
L69
660
+
R3
661
+
L67
662
+
R53
663
+
R37
664
+
R59
665
+
R84
666
+
R9
667
+
L37
668
+
L23
669
+
R51
670
+
L39
671
+
R239
672
+
L492
673
+
R92
674
+
R20
675
+
L20
676
+
L38
677
+
L43
678
+
R78
679
+
R283
680
+
L80
681
+
L83
682
+
L317
683
+
L575
684
+
R927
685
+
L19
686
+
R467
687
+
R90
688
+
L14
689
+
L89
690
+
R86
691
+
R85
692
+
L60
693
+
L98
694
+
R23
695
+
R11
696
+
R25
697
+
L23
698
+
R94
699
+
R70
700
+
L18
701
+
R18
702
+
L46
703
+
R394
704
+
L77
705
+
L53
706
+
L98
707
+
R80
708
+
L66
709
+
L89
710
+
R441
711
+
L67
712
+
L19
713
+
R46
714
+
R54
715
+
L85
716
+
R94
717
+
L64
718
+
R655
719
+
R72
720
+
L868
721
+
L304
722
+
L574
723
+
R534
724
+
R40
725
+
L85
726
+
R33
727
+
L64
728
+
R73
729
+
L57
730
+
R87
731
+
L78
732
+
R91
733
+
R11
734
+
R35
735
+
L46
736
+
L67
737
+
L22
738
+
R18
739
+
L517
740
+
R75
741
+
L322
742
+
L76
743
+
L989
744
+
R79
745
+
R33
746
+
R588
747
+
R47
748
+
L47
749
+
L83
750
+
L417
751
+
L36
752
+
R136
753
+
L62
754
+
L38
755
+
R62
756
+
L62
757
+
R563
758
+
R44
759
+
L7
760
+
R92
761
+
L92
762
+
R6
763
+
R621
764
+
L27
765
+
L44
766
+
R42
767
+
R4
768
+
L24
769
+
L92
770
+
R14
771
+
R519
772
+
R66
773
+
L17
774
+
L12
775
+
R92
776
+
R52
777
+
R527
778
+
R73
779
+
R66
780
+
L66
781
+
R738
782
+
L4
783
+
R96
784
+
R27
785
+
L78
786
+
L579
787
+
R73
788
+
R7
789
+
R20
790
+
L98
791
+
L64
792
+
L48
793
+
R425
794
+
R26
795
+
L65
796
+
L2
797
+
R401
798
+
R3
799
+
R22
800
+
L64
801
+
L78
802
+
R42
803
+
L631
804
+
R288
805
+
L557
806
+
R23
807
+
R77
808
+
L27
809
+
R71
810
+
L54
811
+
L90
812
+
L99
813
+
R64
814
+
L884
815
+
L81
816
+
L92
817
+
L28
818
+
R7
819
+
L40
820
+
L664
821
+
L66
822
+
R60
823
+
R93
824
+
R32
825
+
L22
826
+
L50
827
+
L59
828
+
R29
829
+
L273
830
+
L92
831
+
R229
832
+
R36
833
+
L29
834
+
R7
835
+
L42
836
+
L36
837
+
L604
838
+
L96
839
+
R86
840
+
R8
841
+
L872
842
+
R42
843
+
R36
844
+
L76
845
+
L896
846
+
L28
847
+
L45
848
+
L40
849
+
R1
850
+
L90
851
+
L3
852
+
L97
853
+
L2
854
+
L24
855
+
R815
856
+
L30
857
+
R15
858
+
L490
859
+
L12
860
+
L98
861
+
L41
862
+
R41
863
+
R6
864
+
R26
865
+
L32
866
+
L11
867
+
L89
868
+
R56
869
+
L56
870
+
R123
871
+
L69
872
+
R20
873
+
L859
874
+
L313
875
+
L14
876
+
L88
877
+
R96
878
+
R33
879
+
R26
880
+
R45
881
+
R92
882
+
R86
883
+
R10
884
+
R12
885
+
R89
886
+
L33
887
+
R44
888
+
L61
889
+
L75
890
+
R336
891
+
R25
892
+
L25
893
+
L97
894
+
L603
895
+
L530
896
+
R230
897
+
L75
898
+
L63
899
+
L88
900
+
L74
901
+
L46
902
+
L25
903
+
L54
904
+
R39
905
+
L75
906
+
R72
907
+
R211
908
+
R929
909
+
R138
910
+
L934
911
+
L296
912
+
R66
913
+
L964
914
+
R439
915
+
L15
916
+
R15
917
+
L22
918
+
L78
919
+
L60
920
+
R60
921
+
L26
922
+
R687
923
+
L365
924
+
L38
925
+
L58
926
+
L25
927
+
L75
928
+
L54
929
+
L82
930
+
L99
931
+
L99
932
+
L266
933
+
L62
934
+
R79
935
+
R83
936
+
L37
937
+
R23
938
+
R57
939
+
R357
940
+
R54
941
+
R77
942
+
L69
943
+
L34
944
+
R872
945
+
R15
946
+
L15
947
+
R79
948
+
L28
949
+
R91
950
+
R83
951
+
R8
952
+
R67
953
+
R89
954
+
R11
955
+
R30
956
+
L30
957
+
L35
958
+
R35
959
+
R873
960
+
R463
961
+
L651
962
+
R15
963
+
L78
964
+
R20
965
+
L942
966
+
L38
967
+
R11
968
+
L73
969
+
L9
970
+
L91
971
+
R54
972
+
L554
973
+
L76
974
+
R81
975
+
R95
976
+
R70
977
+
L70
978
+
R70
979
+
L70
980
+
R69
981
+
R56
982
+
R75
983
+
L42
984
+
L64
985
+
R37
986
+
R56
987
+
R348
988
+
L755
989
+
R20
990
+
R86
991
+
R546
992
+
R68
993
+
L40
994
+
L31
995
+
R71
996
+
R6
997
+
R94
998
+
L21
999
+
L79
1000
+
L50
1001
+
L99
1002
+
R49
1003
+
L97
1004
+
R99
1005
+
R62
1006
+
R19
1007
+
R73
1008
+
R67
1009
+
R77
1010
+
R99
1011
+
L26
1012
+
R60
1013
+
L33
1014
+
L37
1015
+
R33
1016
+
R36
1017
+
L98
1018
+
R66
1019
+
R94
1020
+
R6
1021
+
L64
1022
+
R232
1023
+
L564
1024
+
R96
1025
+
L52
1026
+
R76
1027
+
L145
1028
+
R21
1029
+
R245
1030
+
R40
1031
+
R15
1032
+
R572
1033
+
R28
1034
+
L8
1035
+
L92
1036
+
R73
1037
+
L28
1038
+
L45
1039
+
L968
1040
+
L69
1041
+
L58
1042
+
R3
1043
+
L8
1044
+
L26
1045
+
L21
1046
+
L92
1047
+
R26
1048
+
R13
1049
+
R21
1050
+
L839
1051
+
R18
1052
+
R88
1053
+
R68
1054
+
R85
1055
+
R74
1056
+
L55
1057
+
L318
1058
+
L42
1059
+
R93
1060
+
R68
1061
+
R55
1062
+
R82
1063
+
L64
1064
+
R93
1065
+
R5
1066
+
R68
1067
+
L3
1068
+
R96
1069
+
L93
1070
+
R541
1071
+
R2
1072
+
R57
1073
+
L68
1074
+
R668
1075
+
L244
1076
+
L56
1077
+
R411
1078
+
R89
1079
+
L13
1080
+
L35
1081
+
R642
1082
+
R82
1083
+
R37
1084
+
R80
1085
+
L21
1086
+
L79
1087
+
R56
1088
+
L363
1089
+
L86
1090
+
L50
1091
+
L596
1092
+
R46
1093
+
R23
1094
+
R77
1095
+
L74
1096
+
R850
1097
+
R32
1098
+
R14
1099
+
L77
1100
+
L32
1101
+
R687
1102
+
R663
1103
+
R98
1104
+
L61
1105
+
R99
1106
+
L32
1107
+
L67
1108
+
R20
1109
+
L21
1110
+
R1
1111
+
L51
1112
+
R51
1113
+
L2
1114
+
L724
1115
+
R61
1116
+
L99
1117
+
R54
1118
+
R91
1119
+
L81
1120
+
L138
1121
+
L52
1122
+
L1
1123
+
R7
1124
+
L60
1125
+
R20
1126
+
R47
1127
+
R808
1128
+
L31
1129
+
L16
1130
+
L94
1131
+
R10
1132
+
L3
1133
+
L952
1134
+
L45
1135
+
L145
1136
+
L9
1137
+
R49
1138
+
L15
1139
+
L80
1140
+
R8
1141
+
R34
1142
+
L228
1143
+
L94
1144
+
L86
1145
+
R31
1146
+
L39
1147
+
L60
1148
+
L66
1149
+
R7
1150
+
L48
1151
+
L652
1152
+
R426
1153
+
R67
1154
+
R44
1155
+
R56
1156
+
L308
1157
+
L35
1158
+
R43
1159
+
L4
1160
+
L96
1161
+
R82
1162
+
R74
1163
+
L55
1164
+
L50
1165
+
R78
1166
+
L829
1167
+
L82
1168
+
L26
1169
+
L92
1170
+
R17
1171
+
R59
1172
+
L76
1173
+
L84
1174
+
L16
1175
+
R14
1176
+
R286
1177
+
R85
1178
+
L685
1179
+
L27
1180
+
L54
1181
+
L819
1182
+
L47
1183
+
R59
1184
+
L43
1185
+
L369
1186
+
L32
1187
+
L8
1188
+
R24
1189
+
R40
1190
+
R976
1191
+
R702
1192
+
R87
1193
+
L492
1194
+
R58
1195
+
L22
1196
+
R944
1197
+
R23
1198
+
L92
1199
+
L708
1200
+
L11
1201
+
R75
1202
+
L48
1203
+
L816
1204
+
L985
1205
+
R74
1206
+
L147
1207
+
L71
1208
+
R29
1209
+
L43
1210
+
R510
1211
+
R16
1212
+
R26
1213
+
L509
1214
+
R51
1215
+
L75
1216
+
R89
1217
+
R35
1218
+
L60
1219
+
R46
1220
+
R14
1221
+
R60
1222
+
L160
1223
+
L52
1224
+
R30
1225
+
R61
1226
+
L39
1227
+
R78
1228
+
R6
1229
+
L740
1230
+
L61
1231
+
R17
1232
+
R50
1233
+
L40
1234
+
R42
1235
+
R948
1236
+
R60
1237
+
R40
1238
+
L75
1239
+
L25
1240
+
R286
1241
+
R44
1242
+
L78
1243
+
L52
1244
+
L78
1245
+
R50
1246
+
R99
1247
+
R29
1248
+
R54
1249
+
L54
1250
+
L62
1251
+
R83
1252
+
R79
1253
+
L5
1254
+
L32
1255
+
L92
1256
+
R29
1257
+
R85
1258
+
L53
1259
+
R71
1260
+
R190
1261
+
L27
1262
+
R28
1263
+
L962
1264
+
L67
1265
+
R35
1266
+
L714
1267
+
R62
1268
+
L929
1269
+
L19
1270
+
R684
1271
+
R70
1272
+
L54
1273
+
L67
1274
+
L333
1275
+
R883
1276
+
L163
1277
+
R92
1278
+
R38
1279
+
R50
1280
+
R127
1281
+
R73
1282
+
L83
1283
+
L59
1284
+
L1
1285
+
L757
1286
+
R70
1287
+
L70
1288
+
R41
1289
+
L3
1290
+
R87
1291
+
R75
1292
+
L53
1293
+
R53
1294
+
L96
1295
+
L75
1296
+
R73
1297
+
R298
1298
+
R537
1299
+
L37
1300
+
L86
1301
+
L14
1302
+
L83
1303
+
R83
1304
+
R24
1305
+
R83
1306
+
R73
1307
+
L164
1308
+
R873
1309
+
L89
1310
+
R12
1311
+
R61
1312
+
L373
1313
+
R342
1314
+
R58
1315
+
R15
1316
+
L15
1317
+
L77
1318
+
R77
1319
+
R76
1320
+
L39
1321
+
L808
1322
+
L20
1323
+
R486
1324
+
L15
1325
+
L31
1326
+
R50
1327
+
L16
1328
+
R43
1329
+
L126
1330
+
R58
1331
+
L28
1332
+
L80
1333
+
R894
1334
+
L76
1335
+
R824
1336
+
L29
1337
+
R43
1338
+
R87
1339
+
R16
1340
+
L9
1341
+
L55
1342
+
L15
1343
+
R20
1344
+
R41
1345
+
L34
1346
+
R43
1347
+
R49
1348
+
L815
1349
+
L134
1350
+
R5
1351
+
R12
1352
+
L14
1353
+
R297
1354
+
L47
1355
+
R47
1356
+
R29
1357
+
L25
1358
+
R27
1359
+
L85
1360
+
L26
1361
+
L311
1362
+
L60
1363
+
R58
1364
+
L207
1365
+
R377
1366
+
R239
1367
+
R67
1368
+
R47
1369
+
L29
1370
+
L660
1371
+
L41
1372
+
R17
1373
+
L82
1374
+
L835
1375
+
L88
1376
+
L85
1377
+
R73
1378
+
L76
1379
+
R74
1380
+
R56
1381
+
R61
1382
+
L59
1383
+
L999
1384
+
R61
1385
+
R92
1386
+
R87
1387
+
R3
1388
+
R11
1389
+
R534
1390
+
L840
1391
+
R95
1392
+
R94
1393
+
R906
1394
+
R801
1395
+
L53
1396
+
L13
1397
+
L64
1398
+
L64
1399
+
L63
1400
+
R56
1401
+
R35
1402
+
L35
1403
+
R807
1404
+
R390
1405
+
L97
1406
+
L72
1407
+
R86
1408
+
L21
1409
+
R74
1410
+
L15
1411
+
L52
1412
+
L844
1413
+
L227
1414
+
R718
1415
+
L71
1416
+
L77
1417
+
L31
1418
+
L71
1419
+
R46
1420
+
R5
1421
+
R52
1422
+
L44
1423
+
L56
1424
+
R97
1425
+
L291
1426
+
L38
1427
+
R32
1428
+
L21
1429
+
L37
1430
+
L19
1431
+
L58
1432
+
R94
1433
+
R41
1434
+
R48
1435
+
R47
1436
+
R21
1437
+
L53
1438
+
L63
1439
+
L593
1440
+
L84
1441
+
L107
1442
+
R59
1443
+
R25
1444
+
R274
1445
+
R1
1446
+
L82
1447
+
R7
1448
+
L255
1449
+
L45
1450
+
R87
1451
+
L56
1452
+
L92
1453
+
L938
1454
+
L76
1455
+
L25
1456
+
L91
1457
+
L465
1458
+
R846
1459
+
L37
1460
+
R47
1461
+
L10
1462
+
R10
1463
+
R99
1464
+
L97
1465
+
L51
1466
+
R39
1467
+
L37
1468
+
R7
1469
+
L87
1470
+
R46
1471
+
L421
1472
+
L82
1473
+
R84
1474
+
L2
1475
+
L98
1476
+
R236
1477
+
L916
1478
+
R80
1479
+
L20
1480
+
L641
1481
+
L18
1482
+
R39
1483
+
L560
1484
+
R98
1485
+
L69
1486
+
R71
1487
+
R87
1488
+
L48
1489
+
L96
1490
+
L79
1491
+
R36
1492
+
L43
1493
+
R43
1494
+
L12
1495
+
L79
1496
+
R91
1497
+
L2
1498
+
R47
1499
+
R812
1500
+
L11
1501
+
L75
1502
+
L19
1503
+
R948
1504
+
L38
1505
+
L62
1506
+
R11
1507
+
R86
1508
+
L97
1509
+
R46
1510
+
R80
1511
+
R74
1512
+
R6
1513
+
R20
1514
+
R5
1515
+
L31
1516
+
L53
1517
+
L498
1518
+
R51
1519
+
L4
1520
+
L296
1521
+
R29
1522
+
R71
1523
+
L93
1524
+
L53
1525
+
R46
1526
+
L50
1527
+
L850
1528
+
R44
1529
+
L64
1530
+
R20
1531
+
R799
1532
+
R855
1533
+
R846
1534
+
L870
1535
+
L9
1536
+
L241
1537
+
L78
1538
+
R723
1539
+
L57
1540
+
R130
1541
+
R2
1542
+
R255
1543
+
R45
1544
+
R87
1545
+
R46
1546
+
L20
1547
+
R87
1548
+
L75
1549
+
L44
1550
+
L81
1551
+
L24
1552
+
R37
1553
+
R31
1554
+
R82
1555
+
R74
1556
+
L992
1557
+
R992
1558
+
L37
1559
+
R25
1560
+
R12
1561
+
R37
1562
+
R63
1563
+
L52
1564
+
L21
1565
+
L27
1566
+
R55
1567
+
R45
1568
+
R952
1569
+
R20
1570
+
R28
1571
+
L96
1572
+
R96
1573
+
R34
1574
+
L94
1575
+
L67
1576
+
R27
1577
+
R50
1578
+
L50
1579
+
L642
1580
+
L21
1581
+
R57
1582
+
L26
1583
+
L40
1584
+
L334
1585
+
R52
1586
+
L88
1587
+
L558
1588
+
L958
1589
+
L84
1590
+
R42
1591
+
L66
1592
+
R65
1593
+
R1
1594
+
R10
1595
+
R35
1596
+
R339
1597
+
L84
1598
+
R85
1599
+
R15
1600
+
L89
1601
+
L911
1602
+
L87
1603
+
L13
1604
+
L65
1605
+
L5
1606
+
L30
1607
+
R25
1608
+
R75
1609
+
R61
1610
+
R8
1611
+
L469
1612
+
L26
1613
+
R26
1614
+
R25
1615
+
R75
1616
+
L9
1617
+
L37
1618
+
R98
1619
+
R43
1620
+
L928
1621
+
L167
1622
+
L19
1623
+
L67
1624
+
R73
1625
+
R313
1626
+
L272
1627
+
R17
1628
+
R55
1629
+
L35
1630
+
R27
1631
+
L492
1632
+
L70
1633
+
L53
1634
+
L77
1635
+
R10
1636
+
R90
1637
+
L764
1638
+
R64
1639
+
R77
1640
+
L77
1641
+
R47
1642
+
R82
1643
+
L44
1644
+
R142
1645
+
L80
1646
+
R35
1647
+
R29
1648
+
L720
1649
+
R9
1650
+
L97
1651
+
R93
1652
+
R199
1653
+
R5
1654
+
R11
1655
+
R881
1656
+
R4
1657
+
L29
1658
+
L27
1659
+
L46
1660
+
R6
1661
+
L73
1662
+
R4
1663
+
R798
1664
+
R12
1665
+
L4
1666
+
R63
1667
+
R89
1668
+
L12
1669
+
L84
1670
+
R7
1671
+
R45
1672
+
L345
1673
+
L45
1674
+
R245
1675
+
L77
1676
+
L87
1677
+
R51
1678
+
R17
1679
+
L204
1680
+
L24
1681
+
L11
1682
+
L41
1683
+
R56
1684
+
L546
1685
+
L34
1686
+
L42
1687
+
L86
1688
+
R70
1689
+
L42
1690
+
L67
1691
+
L33
1692
+
L1
1693
+
R1
1694
+
R86
1695
+
R14
1696
+
L12
1697
+
R209
1698
+
R937
1699
+
L370
1700
+
R36
1701
+
L36
1702
+
R96
1703
+
L60
1704
+
L74
1705
+
L915
1706
+
L4
1707
+
R69
1708
+
L703
1709
+
R27
1710
+
R5
1711
+
R133
1712
+
L167
1713
+
R54
1714
+
R75
1715
+
R961
1716
+
R51
1717
+
R20
1718
+
L32
1719
+
L99
1720
+
L1
1721
+
L9
1722
+
L86
1723
+
R1
1724
+
R394
1725
+
R589
1726
+
L16
1727
+
R23
1728
+
L96
1729
+
R485
1730
+
L7
1731
+
R22
1732
+
R14
1733
+
R86
1734
+
R97
1735
+
R77
1736
+
L33
1737
+
L598
1738
+
L43
1739
+
R86
1740
+
L36
1741
+
L6
1742
+
R39
1743
+
R929
1744
+
L12
1745
+
L92
1746
+
R44
1747
+
L52
1748
+
L924
1749
+
L76
1750
+
L28
1751
+
L88
1752
+
L84
1753
+
R64
1754
+
L37
1755
+
L27
1756
+
L52
1757
+
R90
1758
+
R8
1759
+
L46
1760
+
L27
1761
+
L73
1762
+
L51
1763
+
R51
1764
+
R28
1765
+
R72
1766
+
L11
1767
+
L599
1768
+
L45
1769
+
R62
1770
+
R79
1771
+
R654
1772
+
R73
1773
+
L18
1774
+
L95
1775
+
R91
1776
+
R771
1777
+
R83
1778
+
L359
1779
+
L848
1780
+
R62
1781
+
R46
1782
+
L28
1783
+
L26
1784
+
R32
1785
+
L90
1786
+
R97
1787
+
R93
1788
+
R198
1789
+
R94
1790
+
R84
1791
+
L31
1792
+
R461
1793
+
R70
1794
+
L96
1795
+
L4
1796
+
L72
1797
+
R96
1798
+
R38
1799
+
L62
1800
+
R65
1801
+
L65
1802
+
R12
1803
+
L7
1804
+
L30
1805
+
L75
1806
+
L25
1807
+
R554
1808
+
R80
1809
+
L2
1810
+
R93
1811
+
R175
1812
+
L333
1813
+
L42
1814
+
L774
1815
+
L8
1816
+
R58
1817
+
R288
1818
+
L17
1819
+
R68
1820
+
R185
1821
+
L63
1822
+
R14
1823
+
R77
1824
+
R772
1825
+
R56
1826
+
L93
1827
+
L63
1828
+
L69
1829
+
R801
1830
+
L68
1831
+
L13
1832
+
L44
1833
+
R993
1834
+
L24
1835
+
R24
1836
+
L61
1837
+
L39
1838
+
R68
1839
+
R88
1840
+
R29
1841
+
R15
1842
+
R54
1843
+
L54
1844
+
R832
1845
+
R699
1846
+
L71
1847
+
R40
1848
+
L763
1849
+
R63
1850
+
R9
1851
+
R91
1852
+
R973
1853
+
L73
1854
+
L49
1855
+
L56
1856
+
L88
1857
+
R53
1858
+
R140
1859
+
R230
1860
+
R52
1861
+
L82
1862
+
L67
1863
+
R67
1864
+
R14
1865
+
L14
1866
+
L79
1867
+
R42
1868
+
L63
1869
+
L99
1870
+
L1
1871
+
L37
1872
+
R937
1873
+
R61
1874
+
R39
1875
+
R25
1876
+
L242
1877
+
L16
1878
+
L89
1879
+
R22
1880
+
R36
1881
+
R13
1882
+
R84
1883
+
L33
1884
+
R74
1885
+
L74
1886
+
L15
1887
+
L17
1888
+
L92
1889
+
L36
1890
+
L13
1891
+
R74
1892
+
R53
1893
+
R64
1894
+
L818
1895
+
L56
1896
+
R56
1897
+
L69
1898
+
L80
1899
+
R49
1900
+
R54
1901
+
R72
1902
+
R74
1903
+
L36
1904
+
R36
1905
+
R87
1906
+
L924
1907
+
L33
1908
+
L1
1909
+
L29
1910
+
R82
1911
+
L1
1912
+
R19
1913
+
R25
1914
+
R375
1915
+
R9
1916
+
R791
1917
+
L24
1918
+
L34
1919
+
R64
1920
+
R75
1921
+
R19
1922
+
R94
1923
+
L94
1924
+
R38
1925
+
R15
1926
+
R56
1927
+
R688
1928
+
R3
1929
+
R41
1930
+
L33
1931
+
R60
1932
+
R32
1933
+
R72
1934
+
R41
1935
+
L13
1936
+
R336
1937
+
R64
1938
+
L74
1939
+
L41
1940
+
R15
1941
+
L86
1942
+
L97
1943
+
R97
1944
+
R86
1945
+
L52
1946
+
L13
1947
+
R39
1948
+
R26
1949
+
R44
1950
+
L71
1951
+
L73
1952
+
L91
1953
+
R62
1954
+
L8
1955
+
R41
1956
+
L4
1957
+
R88
1958
+
R12
1959
+
R77
1960
+
L559
1961
+
R91
1962
+
L9
1963
+
L94
1964
+
R606
1965
+
R38
1966
+
L50
1967
+
R44
1968
+
L41
1969
+
R89
1970
+
R8
1971
+
R98
1972
+
L27
1973
+
L96
1974
+
R25
1975
+
L923
1976
+
L77
1977
+
R55
1978
+
R51
1979
+
L607
1980
+
L6
1981
+
R37
1982
+
L30
1983
+
R68
1984
+
R316
1985
+
R34
1986
+
R82
1987
+
R11
1988
+
L11
1989
+
R8
1990
+
L8
1991
+
L9
1992
+
R32
1993
+
R77
1994
+
R240
1995
+
L65
1996
+
R25
1997
+
L11
1998
+
R11
1999
+
L55
2000
+
L35
2001
+
R27
2002
+
L31
2003
+
L6
2004
+
L196
2005
+
R96
2006
+
R57
2007
+
R52
2008
+
R45
2009
+
L954
2010
+
L3
2011
+
L690
2012
+
R93
2013
+
L68
2014
+
L51
2015
+
L41
2016
+
R42
2017
+
L82
2018
+
R71
2019
+
R29
2020
+
R6
2021
+
L564
2022
+
L42
2023
+
R4
2024
+
R68
2025
+
L83
2026
+
L2
2027
+
R77
2028
+
L87
2029
+
R857
2030
+
L15
2031
+
R2
2032
+
R19
2033
+
L130
2034
+
R16
2035
+
L11
2036
+
L35
2037
+
L2
2038
+
L82
2039
+
L84
2040
+
R5
2041
+
L25
2042
+
R8
2043
+
L67
2044
+
R67
2045
+
R88
2046
+
L88
2047
+
R35
2048
+
R65
2049
+
L913
2050
+
L37
2051
+
R750
2052
+
R44
2053
+
L60
2054
+
R16
2055
+
R88
2056
+
R48
2057
+
L60
2058
+
R891
2059
+
R92
2060
+
L55
2061
+
R42
2062
+
L40
2063
+
R38
2064
+
L44
2065
+
R126
2066
+
R65
2067
+
R9
2068
+
R592
2069
+
L35
2070
+
R43
2071
+
R9
2072
+
L9
2073
+
R55
2074
+
R69
2075
+
R38
2076
+
R75
2077
+
R63
2078
+
L24
2079
+
L56
2080
+
R80
2081
+
R77
2082
+
L91
2083
+
R614
2084
+
R227
2085
+
L285
2086
+
L50
2087
+
L92
2088
+
R95
2089
+
R62
2090
+
L11
2091
+
R69
2092
+
L15
2093
+
R30
2094
+
R36
2095
+
L580
2096
+
R14
2097
+
L8
2098
+
L192
2099
+
L30
2100
+
R30
2101
+
L78
2102
+
L45
2103
+
L77
2104
+
R309
2105
+
L93
2106
+
L16
2107
+
L849
2108
+
R512
2109
+
L61
2110
+
L69
2111
+
R24
2112
+
R43
2113
+
R43
2114
+
R74
2115
+
R755
2116
+
L460
2117
+
L11
2118
+
L446
2119
+
L93
2120
+
R38
2121
+
L63
2122
+
L68
2123
+
L756
2124
+
L51
2125
+
R38
2126
+
L98
2127
+
R314
2128
+
R940
2129
+
R61
2130
+
R38
2131
+
R92
2132
+
R9
2133
+
R82
2134
+
L1
2135
+
L678
2136
+
L434
2137
+
L1
2138
+
R51
2139
+
L11
2140
+
R96
2141
+
R69
2142
+
R22
2143
+
L34
2144
+
R39
2145
+
R97
2146
+
R25
2147
+
R45
2148
+
L80
2149
+
L41
2150
+
L8
2151
+
R16
2152
+
R92
2153
+
L37
2154
+
R35
2155
+
L88
2156
+
L97
2157
+
R431
2158
+
R83
2159
+
L29
2160
+
R97
2161
+
L97
2162
+
L14
2163
+
R13
2164
+
L99
2165
+
L5
2166
+
R45
2167
+
L5
2168
+
R7
2169
+
L42
2170
+
R19
2171
+
L19
2172
+
R21
2173
+
R79
2174
+
R975
2175
+
L75
2176
+
L46
2177
+
R38
2178
+
R83
2179
+
R25
2180
+
R874
2181
+
L22
2182
+
L15
2183
+
L617
2184
+
L92
2185
+
L28
2186
+
L31
2187
+
L80
2188
+
L6
2189
+
R19
2190
+
R30
2191
+
L332
2192
+
R51
2193
+
R49
2194
+
L86
2195
+
L14
2196
+
R35
2197
+
R265
2198
+
R443
2199
+
L20
2200
+
L43
2201
+
R35
2202
+
L88
2203
+
R74
2204
+
L747
2205
+
L775
2206
+
R287
2207
+
R80
2208
+
L46
2209
+
L72
2210
+
R60
2211
+
R80
2212
+
L468
2213
+
L99
2214
+
L1
2215
+
R257
2216
+
L50
2217
+
L7
2218
+
L49
2219
+
L8
2220
+
R76
2221
+
R20
2222
+
R44
2223
+
R95
2224
+
L796
2225
+
L50
2226
+
L232
2227
+
L97
2228
+
L39
2229
+
L58
2230
+
R94
2231
+
R99
2232
+
L51
2233
+
L48
2234
+
L158
2235
+
R58
2236
+
L395
2237
+
L29
2238
+
R75
2239
+
L885
2240
+
R87
2241
+
L820
2242
+
R88
2243
+
L94
2244
+
R73
2245
+
R73
2246
+
L73
2247
+
L3
2248
+
R3
2249
+
R31
2250
+
L31
2251
+
L90
2252
+
R32
2253
+
R58
2254
+
R744
2255
+
R85
2256
+
R71
2257
+
L604
2258
+
L79
2259
+
R6
2260
+
R77
2261
+
L349
2262
+
R802
2263
+
R47
2264
+
R59
2265
+
L193
2266
+
L66
2267
+
R87
2268
+
L429
2269
+
L27
2270
+
R391
2271
+
R34
2272
+
L79
2273
+
R323
2274
+
R96
2275
+
L96
2276
+
R27
2277
+
R73
2278
+
L93
2279
+
L88
2280
+
L927
2281
+
L792
2282
+
L82
2283
+
L55
2284
+
L365
2285
+
R66
2286
+
L64
2287
+
L29
2288
+
L71
2289
+
L83
2290
+
L15
2291
+
R98
2292
+
L91
2293
+
R51
2294
+
L74
2295
+
L911
2296
+
L26
2297
+
L34
2298
+
L15
2299
+
R24
2300
+
L137
2301
+
R13
2302
+
L772
2303
+
L28
2304
+
R30
2305
+
L808
2306
+
L1
2307
+
L21
2308
+
R481
2309
+
R60
2310
+
L41
2311
+
R41
2312
+
R76
2313
+
R60
2314
+
L839
2315
+
L42
2316
+
R804
2317
+
R10
2318
+
L89
2319
+
R96
2320
+
R83
2321
+
R80
2322
+
L78
2323
+
L323
2324
+
L26
2325
+
L70
2326
+
L36
2327
+
R39
2328
+
R83
2329
+
R46
2330
+
R42
2331
+
R82
2332
+
R212
2333
+
R49
2334
+
R13
2335
+
L67
2336
+
R54
2337
+
R57
2338
+
R95
2339
+
L94
2340
+
R42
2341
+
R86
2342
+
R31
2343
+
L20
2344
+
R26
2345
+
L91
2346
+
R56
2347
+
L95
2348
+
L61
2349
+
L32
2350
+
R77
2351
+
L77
2352
+
R48
2353
+
R52
2354
+
R78
2355
+
L2
2356
+
L4
2357
+
L72
2358
+
R774
2359
+
L774
2360
+
L30
2361
+
L70
2362
+
L73
2363
+
R48
2364
+
R94
2365
+
R965
2366
+
L34
2367
+
R92
2368
+
R8
2369
+
L36
2370
+
L32
2371
+
L97
2372
+
L935
2373
+
R53
2374
+
R91
2375
+
R56
2376
+
R123
2377
+
R41
2378
+
L721
2379
+
R88
2380
+
R67
2381
+
L45
2382
+
L381
2383
+
R1
2384
+
R27
2385
+
R32
2386
+
R13
2387
+
L9
2388
+
L36
2389
+
R647
2390
+
R39
2391
+
L51
2392
+
R165
2393
+
R12
2394
+
L40
2395
+
L82
2396
+
L85
2397
+
L5
2398
+
L87
2399
+
R87
2400
+
R177
2401
+
L377
2402
+
L37
2403
+
R63
2404
+
R93
2405
+
R887
2406
+
L45
2407
+
R39
2408
+
R69
2409
+
R471
2410
+
R35
2411
+
L70
2412
+
L5
2413
+
R58
2414
+
L58
2415
+
R26
2416
+
L26
2417
+
R67
2418
+
L67
2419
+
L48
2420
+
R57
2421
+
L79
2422
+
R329
2423
+
L80
2424
+
L79
2425
+
R83
2426
+
R17
2427
+
L38
2428
+
R96
2429
+
R42
2430
+
L84
2431
+
R86
2432
+
R4
2433
+
L606
2434
+
L1
2435
+
L43
2436
+
L56
2437
+
L79
2438
+
R279
2439
+
R94
2440
+
R83
2441
+
R23
2442
+
L325
2443
+
R44
2444
+
R463
2445
+
L21
2446
+
L61
2447
+
R28
2448
+
R40
2449
+
L43
2450
+
R64
2451
+
L46
2452
+
L443
2453
+
R18
2454
+
L18
2455
+
L99
2456
+
L80
2457
+
L90
2458
+
R71
2459
+
L54
2460
+
L67
2461
+
R82
2462
+
L19
2463
+
L44
2464
+
L59
2465
+
L56
2466
+
R20
2467
+
L53
2468
+
R748
2469
+
R51
2470
+
L51
2471
+
L258
2472
+
R19
2473
+
L986
2474
+
R37
2475
+
L612
2476
+
L37
2477
+
R754
2478
+
R489
2479
+
R94
2480
+
R4
2481
+
R96
2482
+
L15
2483
+
R515
2484
+
R19
2485
+
R2
2486
+
L29
2487
+
R42
2488
+
L29
2489
+
L26
2490
+
L779
2491
+
R29
2492
+
R26
2493
+
L94
2494
+
R39
2495
+
L28
2496
+
L72
2497
+
L58
2498
+
L58
2499
+
L23
2500
+
R198
2501
+
L59
2502
+
L45
2503
+
L55
2504
+
L4
2505
+
R4
2506
+
L70
2507
+
R5
2508
+
L51
2509
+
R76
2510
+
R708
2511
+
L596
2512
+
R69
2513
+
R42
2514
+
L738
2515
+
R55
2516
+
R933
2517
+
R69
2518
+
R198
2519
+
L94
2520
+
R94
2521
+
L10
2522
+
R57
2523
+
L3
2524
+
R856
2525
+
R93
2526
+
L93
2527
+
L757
2528
+
R76
2529
+
L819
2530
+
L137
2531
+
R28
2532
+
L27
2533
+
R57
2534
+
L121
2535
+
L64
2536
+
L336
2537
+
R80
2538
+
L713
2539
+
R27
2540
+
R529
2541
+
R777
2542
+
R98
2543
+
L99
2544
+
R73
2545
+
R528
2546
+
L269
2547
+
L81
2548
+
L650
2549
+
R55
2550
+
L84
2551
+
R89
2552
+
R40
2553
+
R30
2554
+
L79
2555
+
R49
2556
+
R410
2557
+
L18
2558
+
L84
2559
+
R44
2560
+
L52
2561
+
R11
2562
+
R689
2563
+
L71
2564
+
R71
2565
+
R17
2566
+
R65
2567
+
R28
2568
+
R90
2569
+
L38
2570
+
L70
2571
+
L92
2572
+
R924
2573
+
L655
2574
+
L957
2575
+
R1
2576
+
L4
2577
+
L9
2578
+
L419
2579
+
L81
2580
+
R34
2581
+
R66
2582
+
L93
2583
+
L10
2584
+
L97
2585
+
L477
2586
+
L923
2587
+
L86
2588
+
R86
2589
+
R41
2590
+
L67
2591
+
R77
2592
+
R34
2593
+
L8
2594
+
R49
2595
+
L26
2596
+
L40
2597
+
L54
2598
+
R94
2599
+
L95
2600
+
L83
2601
+
R478
2602
+
L10
2603
+
L90
2604
+
L94
2605
+
L73
2606
+
L476
2607
+
R43
2608
+
L92
2609
+
L8
2610
+
R87
2611
+
R13
2612
+
L41
2613
+
L81
2614
+
R47
2615
+
L89
2616
+
R64
2617
+
R83
2618
+
L61
2619
+
L28
2620
+
R7
2621
+
L1
2622
+
R89
2623
+
R6
2624
+
R2
2625
+
L97
2626
+
R984
2627
+
L84
2628
+
L24
2629
+
R26
2630
+
R31
2631
+
L32
2632
+
L66
2633
+
L42
2634
+
R5
2635
+
R2
2636
+
R64
2637
+
L64
2638
+
L86
2639
+
R27
2640
+
R39
2641
+
L80
2642
+
L38
2643
+
L86
2644
+
L59
2645
+
L17
2646
+
L71
2647
+
R71
2648
+
R44
2649
+
R95
2650
+
R61
2651
+
L871
2652
+
L50
2653
+
L79
2654
+
R88
2655
+
R61
2656
+
R51
2657
+
L23
2658
+
L77
2659
+
R6
2660
+
R7
2661
+
R87
2662
+
R69
2663
+
L94
2664
+
R325
2665
+
L46
2666
+
R74
2667
+
R936
2668
+
L64
2669
+
L61
2670
+
L39
2671
+
R18
2672
+
L8
2673
+
R190
2674
+
R464
2675
+
L64
2676
+
R63
2677
+
R51
2678
+
L81
2679
+
R959
2680
+
R96
2681
+
R26
2682
+
R61
2683
+
L75
2684
+
R838
2685
+
L10
2686
+
R88
2687
+
R36
2688
+
R748
2689
+
L62
2690
+
L38
2691
+
L46
2692
+
L89
2693
+
L23
2694
+
R21
2695
+
L67
2696
+
R69
2697
+
R43
2698
+
L1
2699
+
R50
2700
+
R68
2701
+
R42
2702
+
L6
2703
+
R160
2704
+
L33
2705
+
L88
2706
+
L45
2707
+
R354
2708
+
L9
2709
+
L599
2710
+
R99
2711
+
R356
2712
+
R18
2713
+
L74
2714
+
L84
2715
+
R85
2716
+
R99
2717
+
R743
2718
+
L43
2719
+
R743
2720
+
R57
2721
+
R98
2722
+
R710
2723
+
R92
2724
+
R990
2725
+
R69
2726
+
R18
2727
+
R75
2728
+
L90
2729
+
L62
2730
+
L68
2731
+
R23
2732
+
R12
2733
+
R33
2734
+
L95
2735
+
L294
2736
+
R19
2737
+
R770
2738
+
L17
2739
+
R17
2740
+
L47
2741
+
R49
2742
+
L38
2743
+
R36
2744
+
R29
2745
+
R71
2746
+
L39
2747
+
L961
2748
+
R385
2749
+
L67
2750
+
L5
2751
+
R68
2752
+
L71
2753
+
L4
2754
+
L37
2755
+
L24
2756
+
R55
2757
+
L21
2758
+
L91
2759
+
L282
2760
+
R95
2761
+
L75
2762
+
R74
2763
+
L38
2764
+
L62
2765
+
L706
2766
+
R38
2767
+
R24
2768
+
R75
2769
+
R169
2770
+
L787
2771
+
R87
2772
+
L30
2773
+
R39
2774
+
L9
2775
+
L6
2776
+
L263
2777
+
L771
2778
+
L6
2779
+
L87
2780
+
L30
2781
+
R31
2782
+
L17
2783
+
R49
2784
+
R95
2785
+
L30
2786
+
R77
2787
+
L42
2788
+
L187
2789
+
R69
2790
+
R72
2791
+
L36
2792
+
L19
2793
+
R1
2794
+
R7
2795
+
R25
2796
+
R27
2797
+
L59
2798
+
L69
2799
+
L88
2800
+
R44
2801
+
L21
2802
+
L12
2803
+
L54
2804
+
R297
2805
+
L97
2806
+
L730
2807
+
L759
2808
+
L31
2809
+
R20
2810
+
L701
2811
+
R107
2812
+
R475
2813
+
R719
2814
+
L49
2815
+
R831
2816
+
L82
2817
+
R682
2818
+
R30
2819
+
R84
2820
+
R95
2821
+
L84
2822
+
L11
2823
+
L59
2824
+
L412
2825
+
R846
2826
+
R29
2827
+
L35
2828
+
R35
2829
+
L356
2830
+
R51
2831
+
R15
2832
+
L10
2833
+
L49
2834
+
L14
2835
+
R68
2836
+
R76
2837
+
L81
2838
+
R51
2839
+
L51
2840
+
R11
2841
+
R63
2842
+
L512
2843
+
R38
2844
+
R45
2845
+
R540
2846
+
L74
2847
+
R6
2848
+
L32
2849
+
R415
2850
+
R29
2851
+
L5
2852
+
L24
2853
+
R17
2854
+
R49
2855
+
R14
2856
+
L80
2857
+
R82
2858
+
R32
2859
+
L14
2860
+
R87
2861
+
R49
2862
+
R14
2863
+
L724
2864
+
R74
2865
+
L24
2866
+
R46
2867
+
R20
2868
+
R91
2869
+
R3
2870
+
L36
2871
+
R1
2872
+
R99
2873
+
L26
2874
+
L8
2875
+
L987
2876
+
R21
2877
+
R10
2878
+
R241
2879
+
R22
2880
+
R50
2881
+
L34
2882
+
L1
2883
+
L88
2884
+
L87
2885
+
R87
2886
+
L13
2887
+
L85
2888
+
L875
2889
+
R73
2890
+
R37
2891
+
L20
2892
+
L34
2893
+
R896
2894
+
R721
2895
+
L79
2896
+
R83
2897
+
R16
2898
+
L676
2899
+
L79
2900
+
R77
2901
+
L9
2902
+
L13
2903
+
L85
2904
+
R37
2905
+
L54
2906
+
R82
2907
+
L74
2908
+
R940
2909
+
R24
2910
+
R7
2911
+
L10
2912
+
L87
2913
+
R38
2914
+
R95
2915
+
R899
2916
+
R68
2917
+
R489
2918
+
R46
2919
+
L35
2920
+
L39
2921
+
R39
2922
+
L35
2923
+
R287
2924
+
L4
2925
+
L3
2926
+
R55
2927
+
R8
2928
+
R92
2929
+
L34
2930
+
L91
2931
+
R55
2932
+
R3
2933
+
L77
2934
+
L593
2935
+
L627
2936
+
R64
2937
+
R57
2938
+
R43
2939
+
R15
2940
+
L63
2941
+
L58
2942
+
R46
2943
+
R60
2944
+
R9
2945
+
L818
2946
+
R16
2947
+
R21
2948
+
R72
2949
+
R24
2950
+
L831
2951
+
L77
2952
+
L16
2953
+
L433
2954
+
R84
2955
+
L596
2956
+
L89
2957
+
L56
2958
+
L18
2959
+
L692
2960
+
L766
2961
+
R67
2962
+
R99
2963
+
L59
2964
+
L854
2965
+
R60
2966
+
L47
2967
+
R24
2968
+
R76
2969
+
L36
2970
+
L64
2971
+
L8
2972
+
R8
2973
+
R308
2974
+
L93
2975
+
R24
2976
+
L39
2977
+
R70
2978
+
L42
2979
+
L97
2980
+
R14
2981
+
R439
2982
+
L96
2983
+
L18
2984
+
L51
2985
+
L43
2986
+
L70
2987
+
L35
2988
+
R29
2989
+
L98
2990
+
L312
2991
+
L90
2992
+
R77
2993
+
L77
2994
+
R89
2995
+
R7
2996
+
R404
2997
+
L79
2998
+
L182
2999
+
R810
3000
+
R351
3001
+
L68
3002
+
R64
3003
+
R99
3004
+
L13
3005
+
L876
3006
+
R94
3007
+
L228
3008
+
R26
3009
+
L26
3010
+
L272
3011
+
R34
3012
+
R66
3013
+
L880
3014
+
L36
3015
+
R83
3016
+
L55
3017
+
R80
3018
+
R60
3019
+
L139
3020
+
L75
3021
+
R1
3022
+
L39
3023
+
L60
3024
+
L3
3025
+
R750
3026
+
R213
3027
+
R373
3028
+
R327
3029
+
L2
3030
+
R2
3031
+
R793
3032
+
L44
3033
+
R251
3034
+
L11
3035
+
L89
3036
+
L837
3037
+
R37
3038
+
L69
3039
+
L37
3040
+
L594
3041
+
R45
3042
+
R34
3043
+
L81
3044
+
R2
3045
+
R1
3046
+
L84
3047
+
L917
3048
+
R602
3049
+
L839
3050
+
R71
3051
+
R465
3052
+
L18
3053
+
L2
3054
+
L33
3055
+
L46
3056
+
L68
3057
+
R16
3058
+
L48
3059
+
L53
3060
+
L93
3061
+
L62
3062
+
L30
3063
+
L152
3064
+
L10
3065
+
L63
3066
+
L152
3067
+
L85
3068
+
R88
3069
+
L11
3070
+
L408
3071
+
L895
3072
+
R33
3073
+
L7
3074
+
R17
3075
+
R80
3076
+
R23
3077
+
L51
3078
+
L13
3079
+
L63
3080
+
L90
3081
+
L16
3082
+
L849
3083
+
R62
3084
+
R36
3085
+
R279
3086
+
L110
3087
+
L105
3088
+
R24
3089
+
R82
3090
+
L6
3091
+
L11
3092
+
R11
3093
+
L317
3094
+
L27
3095
+
R8
3096
+
R32
3097
+
R568
3098
+
R36
3099
+
R229
3100
+
L57
3101
+
L9
3102
+
L71
3103
+
L83
3104
+
L9
3105
+
L28
3106
+
R84
3107
+
L1
3108
+
L2
3109
+
L59
3110
+
R64
3111
+
R42
3112
+
L76
3113
+
L24
3114
+
R14
3115
+
L579
3116
+
L32
3117
+
L3
3118
+
L87
3119
+
R42
3120
+
R628
3121
+
R17
3122
+
R63
3123
+
R59
3124
+
L632
3125
+
L83
3126
+
L29
3127
+
L48
3128
+
R57
3129
+
L66
3130
+
L21
3131
+
R11
3132
+
L11
3133
+
L53
3134
+
L47
3135
+
R34
3136
+
L616
3137
+
L74
3138
+
L83
3139
+
R664
3140
+
R975
3141
+
L69
3142
+
L37
3143
+
L99
3144
+
L95
3145
+
L58
3146
+
L52
3147
+
R29
3148
+
L19
3149
+
L35
3150
+
R4
3151
+
R56
3152
+
L25
3153
+
R98
3154
+
L98
3155
+
R48
3156
+
R63
3157
+
R89
3158
+
L261
3159
+
R59
3160
+
R78
3161
+
L61
3162
+
L516
3163
+
R26
3164
+
L790
3165
+
L392
3166
+
R957
3167
+
L92
3168
+
L45
3169
+
R37
3170
+
R4
3171
+
L22
3172
+
L71
3173
+
R752
3174
+
L923
3175
+
L537
3176
+
L37
3177
+
L566
3178
+
R63
3179
+
L42
3180
+
L99
3181
+
R510
3182
+
L4
3183
+
R24
3184
+
L91
3185
+
R70
3186
+
L31
3187
+
L58
3188
+
L942
3189
+
R24
3190
+
R76
3191
+
L28
3192
+
L29
3193
+
R61
3194
+
L4
3195
+
L115
3196
+
L16
3197
+
L25
3198
+
L65
3199
+
L79
3200
+
R404
3201
+
L30
3202
+
R381
3203
+
R81
3204
+
R64
3205
+
L80
3206
+
L279
3207
+
R28
3208
+
L76
3209
+
R92
3210
+
L85
3211
+
R23
3212
+
R43
3213
+
L25
3214
+
L31
3215
+
R49
3216
+
R24
3217
+
L83
3218
+
R53
3219
+
R38
3220
+
R9
3221
+
R525
3222
+
L25
3223
+
R84
3224
+
L84
3225
+
R705
3226
+
L363
3227
+
R4
3228
+
L32
3229
+
L40
3230
+
R56
3231
+
L274
3232
+
R65
3233
+
R4
3234
+
R774
3235
+
L12
3236
+
R50
3237
+
L40
3238
+
R94
3239
+
R9
3240
+
R724
3241
+
L424
3242
+
L856
3243
+
L44
3244
+
R48
3245
+
L48
3246
+
L1
3247
+
R18
3248
+
L2
3249
+
L342
3250
+
L73
3251
+
L544
3252
+
L32
3253
+
R14
3254
+
L38
3255
+
R696
3256
+
R4
3257
+
R318
3258
+
L18
3259
+
L24
3260
+
L582
3261
+
L70
3262
+
R71
3263
+
L95
3264
+
R85
3265
+
R38
3266
+
L73
3267
+
R50
3268
+
L377
3269
+
R82
3270
+
L346
3271
+
L42
3272
+
L19
3273
+
R2
3274
+
R608
3275
+
R92
3276
+
L4
3277
+
R604
3278
+
L35
3279
+
R96
3280
+
L30
3281
+
R43
3282
+
R26
3283
+
L16
3284
+
R641
3285
+
L34
3286
+
L1
3287
+
R779
3288
+
R331
3289
+
L50
3290
+
L50
3291
+
R90
3292
+
R431
3293
+
R79
3294
+
L83
3295
+
R83
3296
+
L25
3297
+
L61
3298
+
L414
3299
+
L97
3300
+
R41
3301
+
R18
3302
+
R54
3303
+
R73
3304
+
L28
3305
+
L793
3306
+
R14
3307
+
L282
3308
+
R56
3309
+
R242
3310
+
R2
3311
+
L69
3312
+
R69
3313
+
L68
3314
+
R268
3315
+
R5
3316
+
L5
3317
+
L23
3318
+
L920
3319
+
R90
3320
+
R91
3321
+
R62
3322
+
R21
3323
+
R179
3324
+
L44
3325
+
R97
3326
+
R47
3327
+
R32
3328
+
L32
3329
+
R53
3330
+
R47
3331
+
L20
3332
+
R20
3333
+
L44
3334
+
R99
3335
+
L45
3336
+
R90
3337
+
R29
3338
+
R51
3339
+
L10
3340
+
L620
3341
+
R66
3342
+
R14
3343
+
L30
3344
+
R4
3345
+
L904
3346
+
L81
3347
+
R55
3348
+
R37
3349
+
L7
3350
+
R22
3351
+
R74
3352
+
R89
3353
+
R20
3354
+
L9
3355
+
R14
3356
+
R15
3357
+
R8
3358
+
L8
3359
+
L85
3360
+
R91
3361
+
R61
3362
+
R4
3363
+
L951
3364
+
L46
3365
+
L907
3366
+
R45
3367
+
R78
3368
+
R62
3369
+
R79
3370
+
R37
3371
+
L485
3372
+
R52
3373
+
R90
3374
+
L34
3375
+
R9
3376
+
L2
3377
+
R73
3378
+
R24
3379
+
L24
3380
+
L81
3381
+
L19
3382
+
L348
3383
+
L49
3384
+
R60
3385
+
R45
3386
+
L522
3387
+
R356
3388
+
R25
3389
+
L94
3390
+
L87
3391
+
L51
3392
+
R65
3393
+
R15
3394
+
R14
3395
+
L29
3396
+
L70
3397
+
R99
3398
+
L29
3399
+
L59
3400
+
L41
3401
+
R27
3402
+
L27
3403
+
R91
3404
+
L91
3405
+
R32
3406
+
R68
3407
+
L92
3408
+
R98
3409
+
R92
3410
+
R12
3411
+
L96
3412
+
R86
3413
+
L18
3414
+
R301
3415
+
L20
3416
+
L959
3417
+
L79
3418
+
L25
3419
+
L92
3420
+
R92
3421
+
L52
3422
+
L8
3423
+
L69
3424
+
L71
3425
+
L42
3426
+
L58
3427
+
R41
3428
+
R37
3429
+
R318
3430
+
R82
3431
+
R37
3432
+
R85
3433
+
R523
3434
+
L52
3435
+
L51
3436
+
R80
3437
+
L168
3438
+
L61
3439
+
R39
3440
+
L14
3441
+
L53
3442
+
L43
3443
+
L27
3444
+
L760
3445
+
R87
3446
+
R36
3447
+
R46
3448
+
L882
3449
+
R24
3450
+
R49
3451
+
L522
3452
+
L451
3453
+
R64
3454
+
L658
3455
+
L6
3456
+
R58
3457
+
L75
3458
+
L522
3459
+
R46
3460
+
L7
3461
+
L1
3462
+
L99
3463
+
R66
3464
+
L70
3465
+
R35
3466
+
L31
3467
+
L23
3468
+
R570
3469
+
L847
3470
+
R44
3471
+
L474
3472
+
R91
3473
+
R39
3474
+
R90
3475
+
L94
3476
+
R63
3477
+
L39
3478
+
L66
3479
+
L408
3480
+
R59
3481
+
L66
3482
+
L14
3483
+
L55
3484
+
R66
3485
+
L858
3486
+
L78
3487
+
R23
3488
+
L17
3489
+
R5
3490
+
L56
3491
+
L42
3492
+
L44
3493
+
R71
3494
+
L40
3495
+
R13
3496
+
L83
3497
+
R70
3498
+
R19
3499
+
R76
3500
+
L95
3501
+
L31
3502
+
L69
3503
+
R54
3504
+
R12
3505
+
R10
3506
+
R90
3507
+
L66
3508
+
R39
3509
+
R77
3510
+
L216
3511
+
L77
3512
+
R18
3513
+
L54
3514
+
L87
3515
+
L85
3516
+
R271
3517
+
L93
3518
+
R74
3519
+
R33
3520
+
L72
3521
+
L28
3522
+
L15
3523
+
L959
3524
+
R874
3525
+
R654
3526
+
R14
3527
+
L68
3528
+
L89
3529
+
L811
3530
+
L75
3531
+
L18
3532
+
R82
3533
+
L11
3534
+
L78
3535
+
L31
3536
+
R31
3537
+
L4
3538
+
R66
3539
+
L329
3540
+
L11
3541
+
R96
3542
+
L85
3543
+
L756
3544
+
L877
3545
+
R419
3546
+
L19
3547
+
L218
3548
+
R88
3549
+
L3
3550
+
L55
3551
+
L12
3552
+
R26
3553
+
R16
3554
+
L51
3555
+
L65
3556
+
R85
3557
+
L46
3558
+
L595
3559
+
L548
3560
+
L67
3561
+
R56
3562
+
L23
3563
+
L74
3564
+
R43
3565
+
R18
3566
+
R416
3567
+
R80
3568
+
R31
3569
+
L751
3570
+
L777
3571
+
L1
3572
+
L349
3573
+
R250
3574
+
R826
3575
+
R87
3576
+
L74
3577
+
L8
3578
+
L91
3579
+
R484
3580
+
L83
3581
+
L70
3582
+
R28
3583
+
R69
3584
+
L4
3585
+
L38
3586
+
R68
3587
+
L26
3588
+
L42
3589
+
R56
3590
+
R50
3591
+
R402
3592
+
L92
3593
+
L16
3594
+
R876
3595
+
L94
3596
+
R18
3597
+
R41
3598
+
L44
3599
+
L64
3600
+
L42
3601
+
R9
3602
+
R16
3603
+
R991
3604
+
R23
3605
+
L49
3606
+
L16
3607
+
L65
3608
+
L38
3609
+
L50
3610
+
L62
3611
+
L984
3612
+
R79
3613
+
R27
3614
+
L8
3615
+
L25
3616
+
R83
3617
+
L24
3618
+
R102
3619
+
L374
3620
+
L60
3621
+
L66
3622
+
R13
3623
+
L13
3624
+
R401
3625
+
R33
3626
+
R56
3627
+
R10
3628
+
L23
3629
+
R923
3630
+
R40
3631
+
L37
3632
+
L69
3633
+
R41
3634
+
L781
3635
+
L18
3636
+
R993
3637
+
L82
3638
+
L39
3639
+
L49
3640
+
L49
3641
+
L50
3642
+
L22
3643
+
L29
3644
+
R67
3645
+
R357
3646
+
R504
3647
+
L477
3648
+
R5
3649
+
L96
3650
+
R91
3651
+
L52
3652
+
R374
3653
+
L22
3654
+
L95
3655
+
R895
3656
+
L3
3657
+
L48
3658
+
L49
3659
+
L62
3660
+
L74
3661
+
R836
3662
+
R21
3663
+
R79
3664
+
L766
3665
+
R66
3666
+
R17
3667
+
R83
3668
+
R493
3669
+
L87
3670
+
R49
3671
+
R45
3672
+
L35
3673
+
R33
3674
+
R4
3675
+
R205
3676
+
R90
3677
+
R8
3678
+
R315
3679
+
R80
3680
+
L82
3681
+
L18
3682
+
R64
3683
+
R36
3684
+
R5
3685
+
R66
3686
+
L42
3687
+
L29
3688
+
R77
3689
+
L80
3690
+
L353
3691
+
R56
3692
+
L66
3693
+
L64
3694
+
R30
3695
+
L422
3696
+
R7
3697
+
R75
3698
+
L60
3699
+
L73
3700
+
L27
3701
+
R166
3702
+
R34
3703
+
L48
3704
+
R3
3705
+
L3
3706
+
L994
3707
+
L63
3708
+
R366
3709
+
R53
3710
+
R29
3711
+
L43
3712
+
L8
3713
+
L677
3714
+
L96
3715
+
L54
3716
+
R52
3717
+
R98
3718
+
L93
3719
+
L22
3720
+
R75
3721
+
L17
3722
+
R25
3723
+
R217
3724
+
L62
3725
+
L96
3726
+
L42
3727
+
R210
3728
+
R611
3729
+
R34
3730
+
L74
3731
+
R49
3732
+
R47
3733
+
R23
3734
+
R48
3735
+
R59
3736
+
R93
3737
+
L11
3738
+
L922
3739
+
L67
3740
+
L81
3741
+
L7
3742
+
L12
3743
+
L377
3744
+
L29
3745
+
R115
3746
+
R93
3747
+
R98
3748
+
L240
3749
+
R96
3750
+
L56
3751
+
L51
3752
+
R51
3753
+
L11
3754
+
R11
3755
+
L69
3756
+
L95
3757
+
L98
3758
+
R80
3759
+
L97
3760
+
R94
3761
+
L47
3762
+
L34
3763
+
R23
3764
+
R231
3765
+
L85
3766
+
L96
3767
+
L336
3768
+
L419
3769
+
R38
3770
+
L90
3771
+
L64
3772
+
R64
3773
+
R72
3774
+
L153
3775
+
R105
3776
+
L19
3777
+
R42
3778
+
R53
3779
+
R745
3780
+
R32
3781
+
L77
3782
+
L91
3783
+
R2
3784
+
R492
3785
+
L3
3786
+
L5
3787
+
R2
3788
+
R23
3789
+
L21
3790
+
L12
3791
+
L14
3792
+
L396
3793
+
R23
3794
+
L85
3795
+
R85
3796
+
R250
3797
+
R62
3798
+
L56
3799
+
L43
3800
+
R16
3801
+
L29
3802
+
L84
3803
+
L852
3804
+
L63
3805
+
L155
3806
+
L346
3807
+
R82
3808
+
L959
3809
+
L23
3810
+
R35
3811
+
L35
3812
+
L22
3813
+
R22
3814
+
R7
3815
+
R89
3816
+
L1
3817
+
L69
3818
+
L26
3819
+
R98
3820
+
L85
3821
+
L99
3822
+
L90
3823
+
R76
3824
+
L23
3825
+
L77
3826
+
L26
3827
+
R83
3828
+
R43
3829
+
R24
3830
+
L862
3831
+
L97
3832
+
L71
3833
+
L71
3834
+
L25
3835
+
L33
3836
+
L19
3837
+
R54
3838
+
R34
3839
+
L71
3840
+
L27
3841
+
L36
3842
+
L60
3843
+
R60
3844
+
R62
3845
+
R27
3846
+
R55
3847
+
R56
3848
+
L137
3849
+
R92
3850
+
R45
3851
+
R7
3852
+
L41
3853
+
L13
3854
+
R4
3855
+
R32
3856
+
R92
3857
+
R19
3858
+
L51
3859
+
R69
3860
+
L29
3861
+
L89
3862
+
L69
3863
+
L89
3864
+
R46
3865
+
R53
3866
+
L75
3867
+
R34
3868
+
L76
3869
+
L83
3870
+
R259
3871
+
L69
3872
+
R7
3873
+
L36
3874
+
R9
3875
+
L43
3876
+
R80
3877
+
R43
3878
+
L63
3879
+
R872
3880
+
L64
3881
+
R64
3882
+
R88
3883
+
L77
3884
+
R39
3885
+
L55
3886
+
L15
3887
+
R15
3888
+
R31
3889
+
L693
3890
+
R1
3891
+
L34
3892
+
L41
3893
+
R41
3894
+
R19
3895
+
L19
3896
+
L51
3897
+
R51
3898
+
L7
3899
+
L46
3900
+
L47
3901
+
R92
3902
+
R8
3903
+
L46
3904
+
R46
3905
+
L29
3906
+
R40
3907
+
R689
3908
+
L93
3909
+
R93
3910
+
R34
3911
+
R77
3912
+
L11
3913
+
L24
3914
+
R74
3915
+
L52
3916
+
L398
3917
+
R91
3918
+
L91
3919
+
L55
3920
+
R443
3921
+
L27
3922
+
R39
3923
+
L49
3924
+
R760
3925
+
R96
3926
+
L31
3927
+
R24
3928
+
L91
3929
+
L55
3930
+
L756
3931
+
R622
3932
+
R71
3933
+
L23
3934
+
L68
3935
+
L10
3936
+
L90
3937
+
R4
3938
+
L23
3939
+
R19
3940
+
L61
3941
+
R566
3942
+
L476
3943
+
L95
3944
+
L579
3945
+
L55
3946
+
R60
3947
+
L98
3948
+
R63
3949
+
R275
3950
+
R73
3951
+
R27
3952
+
R482
3953
+
L594
3954
+
R76
3955
+
L64
3956
+
L68
3957
+
L49
3958
+
R17
3959
+
R35
3960
+
R81
3961
+
L56
3962
+
R63
3963
+
R91
3964
+
L41
3965
+
L671
3966
+
R57
3967
+
R41
3968
+
R73
3969
+
R27
3970
+
R45
3971
+
R68
3972
+
L436
3973
+
L5
3974
+
R321
3975
+
L643
3976
+
L50
3977
+
R85
3978
+
R591
3979
+
L76
3980
+
L41
3981
+
L659
3982
+
R22
3983
+
R80
3984
+
R53
3985
+
L47
3986
+
L95
3987
+
R72
3988
+
L11
3989
+
R96
3990
+
L70
3991
+
L82
3992
+
L618
3993
+
L88
3994
+
R88
3995
+
R82
3996
+
L97
3997
+
L85
3998
+
L88
3999
+
L12
4000
+
R619
4001
+
L119
4002
+
R855
4003
+
R60
4004
+
R79
4005
+
L94
4006
+
R44
4007
+
R56
4008
+
R96
4009
+
R52
4010
+
L991
4011
+
L7
4012
+
R50
4013
+
R73
4014
+
L473
4015
+
L759
4016
+
L41
4017
+
L96
4018
+
L97
4019
+
L99
4020
+
R413
4021
+
L31
4022
+
L90
4023
+
R490
4024
+
R257
4025
+
L71
4026
+
L76
4027
+
R4
4028
+
L24
4029
+
L56
4030
+
R205
4031
+
L29
4032
+
R70
4033
+
L70
4034
+
L36
4035
+
R26
4036
+
R10
4037
+
R92
4038
+
R2
4039
+
L93
4040
+
L31
4041
+
R418
4042
+
L91
4043
+
R3
4044
+
R48
4045
+
L88
4046
+
L60
4047
+
R97
4048
+
R754
4049
+
R44
4050
+
R20
4051
+
R55
4052
+
R88
4053
+
R42
4054
+
L36
4055
+
R936
4056
+
L62
4057
+
L54
4058
+
L13
4059
+
R29
4060
+
R56
4061
+
R62
4062
+
L70
4063
+
L86
4064
+
L162
4065
+
R824
4066
+
R458
4067
+
L48
4068
+
L44
4069
+
R51
4070
+
L21
4071
+
L870
4072
+
L95
4073
+
R8
4074
+
R459
4075
+
L893
4076
+
L10
4077
+
R81
4078
+
L42
4079
+
L83
4080
+
R262
4081
+
L31
4082
+
R93
4083
+
L23
4084
+
L376
4085
+
R10
4086
+
R90
4087
+
L5
4088
+
R5
4089
+
L82
4090
+
L18
4091
+
R12
4092
+
L88
4093
+
L69
4094
+
R79
4095
+
R60
4096
+
R399
4097
+
R73
4098
+
L23
4099
+
L17
4100
+
R74
4101
+
L797
4102
+
L263
4103
+
L37
4104
+
R97
4105
+
R57
4106
+
R27
4107
+
L25
4108
+
R14
4109
+
L98
4110
+
L75
4111
+
R44
4112
+
R78
4113
+
L22
4114
+
L81
4115
+
L619
4116
+
L30
4117
+
L70
4118
+
L97
4119
+
L95
4120
+
L90
4121
+
R99
4122
+
L38
4123
+
L79
4124
+
R57
4125
+
L84
4126
+
R11
4127
+
R31
4128
+
R5
4129
+
L98
4130
+
R14
4131
+
R805
4132
+
R59
4133
+
R30
4134
+
R46
4135
+
R84
4136
+
R40
4137
+
R51
4138
+
R32
4139
+
R92
4140
+
L99
4141
+
R16
4142
+
L44
4143
+
R52
4144
+
R38
4145
+
L20
4146
+
L505
4147
+
R65
4148
+
L78
4149
+
L71
4150
+
L829
4151
+
L95
4152
+
R58
4153
+
L563
4154
+
R36
4155
+
L36
4156
+
R20
4157
+
L20
4158
+
R61
4159
+
L61
4160
+
L46
4161
+
L73
4162
+
L72
4163
+
R91
4164
+
R929
4165
+
L33
4166
+
R4
4167
+
L82
4168
+
L18
4169
+
L301
4170
+
R71
4171
+
R79
4172
+
R220
4173
+
R43
4174
+
R81
4175
+
L578
4176
+
L869
4177
+
L408
4178
+
L36
4179
+
L47
4180
+
L255
4181
+
R25
4182
+
L508
4183
+
L64
4184
+
R47
4185
+
L70
4186
+
R55
4187
+
L85
4188
+
R27
4189
+
L43
4190
+
L13
4191
+
R890
4192
+
L361
4193
+
L28
4194
+
R1
4195
+
R6
4196
+
R39
4197
+
L93
4198
+
L556
4199
+
L64
4200
+
L305
4201
+
L90
4202
+
R24
4203
+
R66
4204
+
L1
4205
+
R32
4206
+
R482
4207
+
L27
4208
+
R46
4209
+
R68
4210
+
R10
4211
+
R90
4212
+
R87
4213
+
L464
4214
+
R82
4215
+
L41
4216
+
L64
4217
+
R3
4218
+
R97
4219
+
L35
4220
+
R35
4221
+
R98
4222
+
R602
4223
+
R98
4224
+
L98
4225
+
R51
4226
+
L51
4227
+
R66
4228
+
L266
4229
+
L156
4230
+
R56
4231
+
R45
4232
+
L45
4233
+
R57
4234
+
R36
4235
+
R7
4236
+
L28
4237
+
L61
4238
+
L203
4239
+
R72
4240
+
R220
4241
+
R18
4242
+
L18
4243
+
L9
4244
+
L97
4245
+
R262
4246
+
L56
4247
+
R71
4248
+
L19
4249
+
L52
4250
+
R45
4251
+
R32
4252
+
R778
4253
+
L883
4254
+
L72
4255
+
L86
4256
+
R86
4257
+
L96
4258
+
L12
4259
+
R74
4260
+
R61
4261
+
L79
4262
+
R43
4263
+
R62
4264
+
R72
4265
+
L60
4266
+
R33
4267
+
L98
4268
+
L59
4269
+
L35
4270
+
L906
4271
+
R25
4272
+
R675
4273
+
R97
4274
+
R44
4275
+
L58
4276
+
R4
4277
+
R30
4278
+
R37
4279
+
L64
4280
+
L90
4281
+
L15
4282
+
R15
4283
+
L47
4284
+
R16
4285
+
L41
4286
+
L28
4287
+
R55
4288
+
L55
4289
+
R43
4290
+
R57
4291
+
R75
4292
+
L75
4293
+
R8
4294
+
R817
4295
+
L4
4296
+
L35
4297
+
L240
4298
+
L46
4299
+
R40
4300
+
R70
4301
+
R11
4302
+
R259
4303
+
L93
4304
+
L136
4305
+
R55
4306
+
L125
4307
+
R88
4308
+
L325
4309
+
L44
4310
+
R153
4311
+
L53
4312
+
R24
4313
+
R76
4314
+
L26
4315
+
R80
4316
+
R661
4317
+
L34
4318
+
L44
4319
+
L47
4320
+
L226
4321
+
R36
4322
+
L66
4323
+
R88
4324
+
R346
4325
+
R32
4326
+
R85
4327
+
L32
4328
+
L91
4329
+
R38
4330
+
R574
4331
+
R38
4332
+
L3
4333
+
R91
4334
+
R81
4335
+
L46
4336
+
R39
4337
+
L22
4338
+
L95
4339
+
L40
4340
+
L52
4341
+
R35
4342
+
R27
4343
+
R58
4344
+
L76
4345
+
L28
4346
+
L11
4347
+
R7
4348
+
L99
4349
+
R22
4350
+
R79
4351
+
R42
4352
+
R79
4353
+
L26
4354
+
R4
4355
+
L78
4356
+
R45
4357
+
L45
4358
+
R89
4359
+
R10
4360
+
L37
4361
+
R38
4362
+
L32
4363
+
R4
4364
+
L72
4365
+
L30
4366
+
R32
4367
+
L68
4368
+
L76
4369
+
L26
4370
+
L6
4371
+
L26
4372
+
R4
4373
+
R35
4374
+
R1
4375
+
R60
4376
+
R44
4377
+
R56
4378
+
R24
4379
+
L51
4380
+
L92
4381
+
R13
4382
+
L24
4383
+
L28
4384
+
L2
4385
+
R2
4386
+
R10
4387
+
R44
4388
+
R48
4389
+
L16
4390
+
L45
4391
+
R8
4392
+
R5
4393
+
L11
4394
+
L8
4395
+
L50
4396
+
R49
4397
+
L28
4398
+
R39
4399
+
L12
4400
+
R8
4401
+
R37
4402
+
L2
4403
+
R8
4404
+
R35
4405
+
R21
4406
+
R9
4407
+
R2
4408
+
R17
4409
+
L50
4410
+
L13
4411
+
R46
4412
+
L50
4413
+
L27
4414
+
L45
4415
+
L8
4416
+
L1
4417
+
L39
4418
+
R38
4419
+
L43
4420
+
L37
4421
+
R16
4422
+
L36
4423
+
R39
4424
+
R43
4425
+
R41
4426
+
R1
4427
+
R50
4428
+
R48
4429
+
R8
4430
+
R8
4431
+
L27
+10
data/01/test.txt
+10
data/01/test.txt
+27
flake.lock
+27
flake.lock
···
1
+
{
2
+
"nodes": {
3
+
"nixpkgs": {
4
+
"locked": {
5
+
"lastModified": 1763464769,
6
+
"narHash": "sha256-AJHrsT7VoeQzErpBRlLJM1SODcaayp0joAoEA35yiwM=",
7
+
"owner": "NixOS",
8
+
"repo": "nixpkgs",
9
+
"rev": "6f374686605df381de8541c072038472a5ea2e2d",
10
+
"type": "github"
11
+
},
12
+
"original": {
13
+
"owner": "NixOS",
14
+
"ref": "nixpkgs-unstable",
15
+
"repo": "nixpkgs",
16
+
"type": "github"
17
+
}
18
+
},
19
+
"root": {
20
+
"inputs": {
21
+
"nixpkgs": "nixpkgs"
22
+
}
23
+
}
24
+
},
25
+
"root": "root",
26
+
"version": 7
27
+
}
+83
flake.nix
+83
flake.nix
···
1
+
{
2
+
description = "Flake-based development environment for C++.";
3
+
4
+
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; # unstable Nixpkgs
5
+
6
+
outputs =
7
+
{ self, ... }@inputs:
8
+
9
+
let
10
+
supportedSystems = [
11
+
"x86_64-linux"
12
+
"aarch64-linux"
13
+
"x86_64-darwin"
14
+
"aarch64-darwin"
15
+
];
16
+
forEachSupportedSystem =
17
+
f:
18
+
inputs.nixpkgs.lib.genAttrs supportedSystems (
19
+
system:
20
+
f {
21
+
pkgs = import inputs.nixpkgs { inherit system; };
22
+
}
23
+
);
24
+
in
25
+
{
26
+
devShells = forEachSupportedSystem (
27
+
{ pkgs }:
28
+
{
29
+
default =
30
+
pkgs.mkShell.override
31
+
{
32
+
# Override stdenv in order to change compiler:
33
+
stdenv = pkgs.clangStdenv;
34
+
# Comment the line above if you want GCC
35
+
}
36
+
{
37
+
packages =
38
+
with pkgs;
39
+
[
40
+
clang-tools # IMPORTANT - it **always** MUST stay right above clang
41
+
clang
42
+
43
+
codespell
44
+
cppcheck
45
+
doxygen
46
+
gtest
47
+
lcov
48
+
vcpkg
49
+
vcpkg-tool
50
+
51
+
# BUILD
52
+
pkg-config
53
+
meson
54
+
ninja
55
+
just
56
+
57
+
# LIBRARIES
58
+
libcxx
59
+
60
+
# DEBUGGERS
61
+
lldb
62
+
]
63
+
++ (if system == "aarch64-darwin" then [ ] else [ gdb ]);
64
+
65
+
env = {
66
+
# Tell clangd to use the real clang wrapper that *knows* about include paths.
67
+
CLANGD_FLAGS = "--query-driver=${pkgs.clang}/bin/clang*";
68
+
69
+
# Ensure Meson picks clang instead of GCC.
70
+
CC = "${pkgs.clang}/bin/clang";
71
+
CXX = "${pkgs.clang}/bin/clang++";
72
+
};
73
+
};
74
+
}
75
+
);
76
+
77
+
# Feel free to delete this once the project is initialized.
78
+
templates.default = {
79
+
path = ./.;
80
+
description = "Meson-based C++ project template";
81
+
};
82
+
};
83
+
}
+10
meson.build
+10
meson.build
+42
src/00/solution.cxx
+42
src/00/solution.cxx
···
1
+
#include <cstdlib>
2
+
#include <filesystem>
3
+
#include <fstream>
4
+
#include <iostream>
5
+
#include <print>
6
+
#include <string_view>
7
+
#include <string>
8
+
9
+
// DATA_FOLDER is injected by Meson so solutions do not have to care about paths.
10
+
#ifndef DATA_FOLDER
11
+
#error "DATA_FOLDER is not defined. Meson should inject it via cpp_args."
12
+
#endif
13
+
14
+
int main(int argc, char **argv) {
15
+
std::string_view mode = "real";
16
+
if (const char *env_mode = std::getenv("AOC_MODE")) {
17
+
mode = env_mode;
18
+
}
19
+
if (argc > 1) {
20
+
mode = argv[1];
21
+
}
22
+
23
+
std::println("Day 00 placeholder");
24
+
std::println("Mode: {}", mode);
25
+
std::println("Data folder: {}", DATA_FOLDER);
26
+
27
+
const std::filesystem::path data_root{DATA_FOLDER};
28
+
const auto input_path = data_root / "input.txt";
29
+
30
+
std::ifstream input{input_path};
31
+
if (!input.is_open()) {
32
+
std::println(std::cerr, "Failed to open {}", input_path.string());
33
+
return EXIT_FAILURE;
34
+
}
35
+
36
+
std::println("Contents of {}:", input_path.string());
37
+
for (std::string line; std::getline(input, line);) {
38
+
std::println(" {}", line);
39
+
}
40
+
41
+
return EXIT_SUCCESS;
42
+
}
+96
src/01/solution.cxx
+96
src/01/solution.cxx
···
1
+
#include "common/istest.h"
2
+
#include <algorithm>
3
+
#include <cstdlib>
4
+
#include <filesystem>
5
+
#include <fstream>
6
+
#include <print>
7
+
#include <ranges>
8
+
#include <string>
9
+
#include <string_view>
10
+
11
+
#ifndef DATA_FOLDER
12
+
#error "DATA_FOLDER is not defined. Meson should inject it via cpp_args."
13
+
#endif // !DATA_FOLDER
14
+
15
+
const std::filesystem::path data_root{DATA_FOLDER};
16
+
17
+
struct Rotary {
18
+
int value = 50;
19
+
};
20
+
21
+
// @return how many times the rotary crossed 0, but *not* the times it stopped
22
+
// at 0
23
+
int rotate(Rotary &rotary, int value) {
24
+
int result = rotary.value + value;
25
+
int crossed_0 = 0;
26
+
27
+
int begin = std::min(result, rotary.value); // looks modern, but it's really
28
+
int end = std::max(result, rotary.value); // hideous
29
+
auto range = std::ranges::views::iota(begin + 1, end) |
30
+
std::ranges::views::filter([](int x) { return x % 100 == 0; });
31
+
32
+
for (int _ : range) { // Kotlin .forEach would have looked so much better
33
+
crossed_0 += 1;
34
+
}
35
+
36
+
while (result < 0) {
37
+
result += 100;
38
+
}
39
+
while (result > 99) {
40
+
result -= 100;
41
+
}
42
+
rotary.value = result;
43
+
44
+
return crossed_0;
45
+
}
46
+
47
+
int main() {
48
+
// scaffolding
49
+
std::string data_path{};
50
+
if (is_test()) {
51
+
data_path = data_root / "test.txt";
52
+
} else {
53
+
data_path = data_root / "input.txt";
54
+
}
55
+
56
+
std::ifstream input{data_path};
57
+
if (!input.is_open()) {
58
+
std::println("Can't open the file.");
59
+
return 1;
60
+
}
61
+
// end scaffolding
62
+
63
+
Rotary rotary{};
64
+
int password_part_1 = 0;
65
+
int password_part_2 = 0;
66
+
67
+
int times_crossed_0 = 0;
68
+
69
+
// horrendous code below
70
+
71
+
for (std::string line; std::getline(input, line);) {
72
+
std::string_view rotation = std::string_view(line.data(), 1);
73
+
std::string_view number_sv = std::string_view(line.data() + 1);
74
+
75
+
auto number = std::stoi(number_sv.data());
76
+
77
+
if (rotation == "L") {
78
+
number = -number;
79
+
}
80
+
81
+
// ridiculous - a function has both side effect and a return value
82
+
// this shit reminds me of out parameter convention so much...
83
+
times_crossed_0 += rotate(rotary, number);
84
+
85
+
if (rotary.value == 0) {
86
+
password_part_1 += 1;
87
+
}
88
+
}
89
+
90
+
password_part_2 = password_part_1 + times_crossed_0;
91
+
92
+
std::println("Eureka! {} / {}", password_part_1, password_part_2);
93
+
94
+
input.close();
95
+
return 0;
96
+
}
+11
src/common/istest.cxx
+11
src/common/istest.cxx
+1
src/common/istest.h
+1
src/common/istest.h
···
1
+
bool is_test();
+61
src/meson.build
+61
src/meson.build
···
1
+
common_inc = include_directories('common')
2
+
common_lib = static_library(
3
+
'aoc_common',
4
+
sources: files('common/istest.cxx'),
5
+
include_directories: common_inc,
6
+
)
7
+
8
+
day_list_cmd = run_command(
9
+
'python3',
10
+
'-c',
11
+
'''
12
+
import os, sys
13
+
root = sys.argv[1]
14
+
for name in sorted(os.listdir(root)):
15
+
if name == 'common':
16
+
continue
17
+
path = os.path.join(root, name)
18
+
if os.path.isdir(path) and os.path.isfile(os.path.join(path, 'solution.cxx')):
19
+
print(name)
20
+
''',
21
+
meson.current_source_dir(),
22
+
check: true,
23
+
)
24
+
25
+
day_dirs_raw = day_list_cmd.stdout().strip()
26
+
day_dirs = []
27
+
if day_dirs_raw != ''
28
+
day_dirs = day_dirs_raw.split('\n')
29
+
endif
30
+
31
+
foreach day : day_dirs
32
+
day_src = join_paths(day, 'solution.cxx')
33
+
day_data = join_paths(meson.project_source_root(), 'data', day)
34
+
35
+
day_exe = executable(
36
+
'day' + day,
37
+
sources: day_src,
38
+
include_directories: [common_inc],
39
+
link_with: common_lib,
40
+
cpp_args: ['-DDATA_FOLDER="@0@"'.format(day_data)],
41
+
)
42
+
43
+
test(
44
+
'day' + day,
45
+
day_exe,
46
+
args: ['--mode=test'],
47
+
env: {
48
+
'DATA_FOLDER': day_data,
49
+
'AOC_MODE': 'test',
50
+
},
51
+
)
52
+
53
+
run_target(
54
+
'run-day' + day,
55
+
command: day_exe,
56
+
env: {
57
+
'DATA_FOLDER': day_data,
58
+
'AOC_MODE': 'real',
59
+
},
60
+
)
61
+
endforeach