+1
.envrc
+1
.envrc
···
1
+
use flake .
+37
build.zig
+37
build.zig
···
1
+
const std = @import("std");
2
+
3
+
pub fn build(b: *std.Build) void {
4
+
const target = b.standardTargetOptions(.{});
5
+
const optimize = b.standardOptimizeOption(.{});
6
+
7
+
const exe = b.addExecutable(.{
8
+
.name = "aoc2025",
9
+
.root_module = b.createModule(.{
10
+
.root_source_file = b.path("src/main.zig"),
11
+
.target = target,
12
+
.optimize = optimize,
13
+
}),
14
+
});
15
+
16
+
b.installArtifact(exe);
17
+
18
+
const run_step = b.step("run", "Run the app");
19
+
20
+
const run_cmd = b.addRunArtifact(exe);
21
+
run_step.dependOn(&run_cmd.step);
22
+
23
+
run_cmd.step.dependOn(b.getInstallStep());
24
+
25
+
if (b.args) |args| {
26
+
run_cmd.addArgs(args);
27
+
}
28
+
29
+
const exe_tests = b.addTest(.{
30
+
.root_module = exe.root_module,
31
+
});
32
+
33
+
const run_exe_tests = b.addRunArtifact(exe_tests);
34
+
35
+
const test_step = b.step("test", "Run tests");
36
+
test_step.dependOn(&run_exe_tests.step);
37
+
}
+12
build.zig.zon
+12
build.zig.zon
+42
flake.lock
+42
flake.lock
···
1
+
{
2
+
"nodes": {
3
+
"nixpkgs": {
4
+
"locked": {
5
+
"lastModified": 1764517877,
6
+
"narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=",
7
+
"owner": "NixOS",
8
+
"repo": "nixpkgs",
9
+
"rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c",
10
+
"type": "github"
11
+
},
12
+
"original": {
13
+
"owner": "NixOS",
14
+
"ref": "nixos-unstable",
15
+
"repo": "nixpkgs",
16
+
"type": "github"
17
+
}
18
+
},
19
+
"root": {
20
+
"inputs": {
21
+
"nixpkgs": "nixpkgs",
22
+
"systems": "systems"
23
+
}
24
+
},
25
+
"systems": {
26
+
"locked": {
27
+
"lastModified": 1681028828,
28
+
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
29
+
"owner": "nix-systems",
30
+
"repo": "default",
31
+
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
32
+
"type": "github"
33
+
},
34
+
"original": {
35
+
"id": "systems",
36
+
"type": "indirect"
37
+
}
38
+
}
39
+
},
40
+
"root": "root",
41
+
"version": 7
42
+
}
+31
flake.nix
+31
flake.nix
···
1
+
{
2
+
inputs = {
3
+
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
4
+
};
5
+
6
+
outputs =
7
+
{
8
+
systems,
9
+
nixpkgs,
10
+
...
11
+
}:
12
+
let
13
+
eachSystem = nixpkgs.lib.genAttrs (import systems);
14
+
in
15
+
{
16
+
devShells = eachSystem (
17
+
system:
18
+
let
19
+
pkgs = nixpkgs.legacyPackages.${system};
20
+
in
21
+
{
22
+
default = nixpkgs.legacyPackages.${system}.mkShell {
23
+
packages = [
24
+
pkgs.zig
25
+
pkgs.zls
26
+
];
27
+
};
28
+
}
29
+
);
30
+
};
31
+
}
+4510
inputs/day1.txt
+4510
inputs/day1.txt
···
1
+
R46
2
+
L12
3
+
R1
4
+
R12
5
+
R41
6
+
R10
7
+
L45
8
+
R32
9
+
R6
10
+
R31
11
+
R46
12
+
L18
13
+
L33
14
+
R19
15
+
R38
16
+
L32
17
+
R39
18
+
L14
19
+
L33
20
+
L35
21
+
R14
22
+
R20
23
+
L49
24
+
R37
25
+
L25
26
+
R26
27
+
L37
28
+
L30
29
+
R25
30
+
L2
31
+
R43
32
+
R16
33
+
L26
34
+
R30
35
+
R9
36
+
L36
37
+
R38
38
+
L37
39
+
R41
40
+
R5
41
+
L39
42
+
R41
43
+
R9
44
+
L43
45
+
L27
46
+
R22
47
+
R28
48
+
R49
49
+
L33
50
+
R83
51
+
L1
52
+
R50
53
+
R50
54
+
L19
55
+
R74
56
+
R28
57
+
L60
58
+
L34
59
+
R84
60
+
R65
61
+
L96
62
+
L95
63
+
L36
64
+
R7
65
+
R43
66
+
L46
67
+
R7
68
+
L22
69
+
L13
70
+
R80
71
+
L72
72
+
L12
73
+
L23
74
+
L60
75
+
L24
76
+
R69
77
+
R55
78
+
R74
79
+
L14
80
+
L69
81
+
L49
82
+
L1
83
+
L41
84
+
R58
85
+
L40
86
+
R51
87
+
L56
88
+
R87
89
+
L70
90
+
R80
91
+
R55
92
+
R35
93
+
R4
94
+
L99
95
+
L5
96
+
L53
97
+
R27
98
+
L97
99
+
L51
100
+
L88
101
+
R69
102
+
R17
103
+
R66
104
+
L81
105
+
R91
106
+
R89
107
+
L89
108
+
L513
109
+
R94
110
+
R19
111
+
R99
112
+
L99
113
+
L82
114
+
L26
115
+
R440
116
+
L32
117
+
R580
118
+
R959
119
+
L930
120
+
L9
121
+
R76
122
+
L6
123
+
L34
124
+
L612
125
+
L24
126
+
L593
127
+
L7
128
+
R38
129
+
R62
130
+
L66
131
+
R45
132
+
L24
133
+
R14
134
+
R731
135
+
R79
136
+
R19
137
+
R190
138
+
R720
139
+
L43
140
+
L26
141
+
R861
142
+
L863
143
+
L15
144
+
L22
145
+
R67
146
+
L67
147
+
L37
148
+
L485
149
+
R252
150
+
R70
151
+
R10
152
+
L93
153
+
L17
154
+
R36
155
+
R4
156
+
L79
157
+
L955
158
+
R156
159
+
L40
160
+
L22
161
+
L311
162
+
R9
163
+
L82
164
+
L97
165
+
R94
166
+
L58
167
+
L55
168
+
R895
169
+
R53
170
+
L73
171
+
L25
172
+
R734
173
+
L62
174
+
L489
175
+
L33
176
+
L55
177
+
L61
178
+
R356
179
+
R81
180
+
R54
181
+
R847
182
+
L866
183
+
R46
184
+
L42
185
+
L66
186
+
L94
187
+
R180
188
+
R89
189
+
R58
190
+
R425
191
+
L62
192
+
L90
193
+
R23
194
+
R76
195
+
L99
196
+
R61
197
+
R39
198
+
R80
199
+
L21
200
+
R41
201
+
R62
202
+
R85
203
+
L471
204
+
L40
205
+
L80
206
+
L40
207
+
R27
208
+
R57
209
+
L36
210
+
L31
211
+
L95
212
+
L285
213
+
L85
214
+
R32
215
+
L37
216
+
R56
217
+
L392
218
+
R594
219
+
L74
220
+
L59
221
+
R911
222
+
R1
223
+
R43
224
+
L18
225
+
R912
226
+
R863
227
+
L20
228
+
L80
229
+
R87
230
+
L596
231
+
R9
232
+
L69
233
+
L64
234
+
R70
235
+
R98
236
+
L38
237
+
R85
238
+
L26
239
+
L6
240
+
R53
241
+
R97
242
+
L81
243
+
L43
244
+
L70
245
+
L86
246
+
L11
247
+
L25
248
+
R41
249
+
L8
250
+
R383
251
+
R35
252
+
L67
253
+
L90
254
+
L78
255
+
L35
256
+
L65
257
+
R94
258
+
R6
259
+
R60
260
+
R40
261
+
R51
262
+
L84
263
+
R38
264
+
L543
265
+
L72
266
+
R88
267
+
L87
268
+
R9
269
+
L37
270
+
R237
271
+
L67
272
+
R301
273
+
L15
274
+
R81
275
+
L58
276
+
R31
277
+
R2
278
+
L1
279
+
L61
280
+
R38
281
+
R349
282
+
L72
283
+
R72
284
+
R578
285
+
R362
286
+
L40
287
+
R81
288
+
R19
289
+
R54
290
+
L48
291
+
L77
292
+
R71
293
+
R73
294
+
L473
295
+
R110
296
+
R90
297
+
R51
298
+
L51
299
+
R53
300
+
L796
301
+
R43
302
+
R99
303
+
L555
304
+
R204
305
+
R52
306
+
R93
307
+
R7
308
+
R55
309
+
R45
310
+
L218
311
+
L82
312
+
L449
313
+
L70
314
+
R50
315
+
R969
316
+
L665
317
+
L28
318
+
R99
319
+
R51
320
+
R43
321
+
R70
322
+
L19
323
+
R45
324
+
L30
325
+
R434
326
+
R62
327
+
L712
328
+
L50
329
+
R190
330
+
R47
331
+
L341
332
+
L196
333
+
R852
334
+
L54
335
+
L65
336
+
R36
337
+
L69
338
+
R83
339
+
L93
340
+
L190
341
+
L807
342
+
R7
343
+
L2
344
+
R2
345
+
R5
346
+
R82
347
+
L26
348
+
R39
349
+
R95
350
+
R85
351
+
L80
352
+
R11
353
+
R89
354
+
L89
355
+
L25
356
+
R14
357
+
L53
358
+
L218
359
+
R70
360
+
R44
361
+
L32
362
+
L786
363
+
R87
364
+
L33
365
+
R21
366
+
L483
367
+
L17
368
+
L81
369
+
L70
370
+
L40
371
+
L611
372
+
L93
373
+
L5
374
+
R49
375
+
R51
376
+
L61
377
+
L57
378
+
R18
379
+
R62
380
+
R53
381
+
R85
382
+
R40
383
+
L17
384
+
R506
385
+
L49
386
+
L243
387
+
R63
388
+
L49
389
+
R96
390
+
L31
391
+
R52
392
+
L80
393
+
L71
394
+
L44
395
+
R27
396
+
R1
397
+
L1
398
+
R89
399
+
L589
400
+
R40
401
+
L85
402
+
R45
403
+
L25
404
+
L91
405
+
L84
406
+
R43
407
+
L55
408
+
L49
409
+
R993
410
+
L38
411
+
R6
412
+
L47
413
+
L1
414
+
L82
415
+
R32
416
+
L2
417
+
L723
418
+
R48
419
+
R94
420
+
R18
421
+
L863
422
+
L826
423
+
L44
424
+
L4
425
+
R7
426
+
R93
427
+
R78
428
+
R30
429
+
L71
430
+
L37
431
+
L651
432
+
L79
433
+
L58
434
+
R576
435
+
L610
436
+
R22
437
+
R77
438
+
L77
439
+
R430
440
+
R99
441
+
L530
442
+
R5
443
+
L4
444
+
L305
445
+
L95
446
+
L863
447
+
L81
448
+
R44
449
+
L836
450
+
L91
451
+
R12
452
+
R15
453
+
R38
454
+
R689
455
+
L86
456
+
R59
457
+
L27
458
+
R63
459
+
R64
460
+
R67
461
+
R33
462
+
R27
463
+
R264
464
+
R130
465
+
R579
466
+
L95
467
+
L459
468
+
L46
469
+
R411
470
+
L21
471
+
R15
472
+
R1
473
+
L806
474
+
L77
475
+
R85
476
+
L3
477
+
L5
478
+
L654
479
+
R54
480
+
L64
481
+
L285
482
+
R73
483
+
L65
484
+
R41
485
+
R29
486
+
L146
487
+
R417
488
+
L62
489
+
L82
490
+
R32
491
+
R374
492
+
R26
493
+
L457
494
+
L23
495
+
L10
496
+
R34
497
+
R68
498
+
L37
499
+
R33
500
+
L15
501
+
L97
502
+
L40
503
+
L58
504
+
L28
505
+
L9
506
+
L27
507
+
R37
508
+
R8
509
+
R711
510
+
R22
511
+
L373
512
+
L27
513
+
L94
514
+
R21
515
+
L35
516
+
L92
517
+
R33
518
+
L85
519
+
R552
520
+
R17
521
+
L65
522
+
R309
523
+
R39
524
+
L903
525
+
R63
526
+
R83
527
+
R41
528
+
L56
529
+
R10
530
+
R62
531
+
L270
532
+
L22
533
+
R157
534
+
L35
535
+
L30
536
+
L11
537
+
R49
538
+
L5
539
+
R967
540
+
R94
541
+
R46
542
+
L740
543
+
R77
544
+
R23
545
+
L12
546
+
L15
547
+
R27
548
+
R4
549
+
L630
550
+
L16
551
+
L26
552
+
R68
553
+
L50
554
+
L556
555
+
R6
556
+
R639
557
+
R630
558
+
L98
559
+
L71
560
+
R21
561
+
L21
562
+
R75
563
+
R53
564
+
L84
565
+
R56
566
+
R86
567
+
R14
568
+
R55
569
+
L57
570
+
R4
571
+
R98
572
+
L30
573
+
R20
574
+
R10
575
+
R98
576
+
R5
577
+
R56
578
+
R207
579
+
R34
580
+
L7
581
+
R7
582
+
L19
583
+
R92
584
+
L242
585
+
R43
586
+
L19
587
+
R3
588
+
L27
589
+
L31
590
+
L16
591
+
R17
592
+
L48
593
+
R92
594
+
L11
595
+
R32
596
+
L12
597
+
L64
598
+
R10
599
+
L86
600
+
L414
601
+
R676
602
+
L76
603
+
L27
604
+
R16
605
+
R12
606
+
R99
607
+
L83
608
+
L7
609
+
R90
610
+
L82
611
+
L5
612
+
R83
613
+
R30
614
+
L26
615
+
L51
616
+
L594
617
+
R719
618
+
L74
619
+
L7
620
+
L493
621
+
L99
622
+
L44
623
+
L68
624
+
L772
625
+
R83
626
+
L36
627
+
L76
628
+
L28
629
+
R89
630
+
L35
631
+
L44
632
+
L350
633
+
L78
634
+
L45
635
+
R77
636
+
R78
637
+
L52
638
+
L73
639
+
L27
640
+
L73
641
+
R34
642
+
L32
643
+
R57
644
+
L86
645
+
L43
646
+
L4
647
+
L28
648
+
R75
649
+
L4
650
+
R98
651
+
R57
652
+
L51
653
+
R55
654
+
L38
655
+
R83
656
+
R65
657
+
R95
658
+
R40
659
+
L89
660
+
L16
661
+
L44
662
+
L41
663
+
L23
664
+
L987
665
+
R65
666
+
L208
667
+
R198
668
+
L55
669
+
R52
670
+
R36
671
+
R40
672
+
L72
673
+
R44
674
+
R48
675
+
R20
676
+
L68
677
+
R2
678
+
L78
679
+
R96
680
+
R62
681
+
L77
682
+
L305
683
+
R146
684
+
R17
685
+
L63
686
+
L3
687
+
R10
688
+
R693
689
+
L78
690
+
L59
691
+
R5
692
+
R32
693
+
L91
694
+
L34
695
+
R25
696
+
L185
697
+
R15
698
+
L78
699
+
L79
700
+
R69
701
+
R58
702
+
R88
703
+
R12
704
+
R94
705
+
R45
706
+
L91
707
+
R47
708
+
L663
709
+
R868
710
+
L759
711
+
L97
712
+
R60
713
+
R64
714
+
L68
715
+
R87
716
+
R13
717
+
R67
718
+
R92
719
+
R1
720
+
R42
721
+
L402
722
+
R3
723
+
R4
724
+
R90
725
+
L13
726
+
R16
727
+
R89
728
+
R6
729
+
L795
730
+
L26
731
+
L91
732
+
R17
733
+
R88
734
+
R12
735
+
R96
736
+
L96
737
+
R81
738
+
R76
739
+
R43
740
+
L84
741
+
R84
742
+
R96
743
+
L50
744
+
R6
745
+
L15
746
+
L911
747
+
L60
748
+
L66
749
+
L832
750
+
R68
751
+
L36
752
+
R60
753
+
R40
754
+
L753
755
+
R73
756
+
L15
757
+
L71
758
+
R484
759
+
R517
760
+
R66
761
+
R476
762
+
L77
763
+
R22
764
+
R78
765
+
R20
766
+
R2
767
+
L722
768
+
L32
769
+
R41
770
+
L328
771
+
L23
772
+
R42
773
+
L97
774
+
R735
775
+
L807
776
+
R81
777
+
R88
778
+
R58
779
+
R179
780
+
R42
781
+
L79
782
+
L68
783
+
R68
784
+
R1
785
+
L42
786
+
R71
787
+
R72
788
+
R95
789
+
L53
790
+
R56
791
+
L48
792
+
L52
793
+
R449
794
+
R51
795
+
L30
796
+
L70
797
+
R25
798
+
L77
799
+
R52
800
+
R65
801
+
R228
802
+
L93
803
+
R64
804
+
R476
805
+
R46
806
+
R59
807
+
R69
808
+
R45
809
+
R21
810
+
R51
811
+
L16
812
+
L224
813
+
L80
814
+
R301
815
+
R88
816
+
R385
817
+
L30
818
+
R22
819
+
L39
820
+
L38
821
+
L75
822
+
R175
823
+
L74
824
+
L486
825
+
L40
826
+
L1
827
+
R1
828
+
L61
829
+
L72
830
+
L367
831
+
R54
832
+
R46
833
+
R89
834
+
L4
835
+
R15
836
+
L63
837
+
R67
838
+
R62
839
+
R34
840
+
R12
841
+
R95
842
+
R93
843
+
R36
844
+
L95
845
+
L3
846
+
R77
847
+
R29
848
+
R71
849
+
L15
850
+
L581
851
+
R53
852
+
R528
853
+
L20
854
+
L80
855
+
L98
856
+
R98
857
+
R55
858
+
L555
859
+
L866
860
+
R51
861
+
R15
862
+
R899
863
+
L399
864
+
R5
865
+
L758
866
+
L28
867
+
R82
868
+
L401
869
+
R51
870
+
L45
871
+
L6
872
+
L14
873
+
R40
874
+
L253
875
+
L473
876
+
R50
877
+
R150
878
+
R11
879
+
R80
880
+
R612
881
+
R833
882
+
L712
883
+
L89
884
+
R30
885
+
R60
886
+
R75
887
+
L4
888
+
L66
889
+
R22
890
+
R68
891
+
L56
892
+
L93
893
+
L11
894
+
R340
895
+
L926
896
+
R212
897
+
L36
898
+
R51
899
+
L959
900
+
R65
901
+
R93
902
+
L37
903
+
L63
904
+
R12
905
+
L62
906
+
R92
907
+
R20
908
+
R38
909
+
R887
910
+
R13
911
+
R92
912
+
R34
913
+
R818
914
+
L196
915
+
R52
916
+
R6
917
+
L6
918
+
L72
919
+
R19
920
+
R94
921
+
L41
922
+
R413
923
+
L67
924
+
R54
925
+
R719
926
+
L41
927
+
R22
928
+
R96
929
+
L796
930
+
R64
931
+
L84
932
+
L22
933
+
L58
934
+
R56
935
+
L314
936
+
R284
937
+
L194
938
+
L85
939
+
R49
940
+
L896
941
+
R42
942
+
R95
943
+
R63
944
+
L305
945
+
R98
946
+
L42
947
+
R49
948
+
L936
949
+
L10
950
+
L47
951
+
R27
952
+
R66
953
+
L48
954
+
R48
955
+
R34
956
+
R45
957
+
R67
958
+
R54
959
+
L98
960
+
L57
961
+
L66
962
+
R21
963
+
L12
964
+
L577
965
+
L74
966
+
R863
967
+
R66
968
+
R98
969
+
L29
970
+
R420
971
+
L255
972
+
R81
973
+
R53
974
+
L34
975
+
L24
976
+
R226
977
+
R21
978
+
L30
979
+
L43
980
+
L429
981
+
R921
982
+
L23
983
+
L19
984
+
L59
985
+
R57
986
+
L3
987
+
L595
988
+
R111
989
+
R68
990
+
L79
991
+
R1
992
+
L703
993
+
R2
994
+
L5
995
+
L40
996
+
L10
997
+
L79
998
+
L66
999
+
L310
1000
+
L90
1001
+
L66
1002
+
L8
1003
+
L44
1004
+
R6
1005
+
L31
1006
+
R43
1007
+
R14
1008
+
R86
1009
+
R79
1010
+
L438
1011
+
R59
1012
+
R81
1013
+
R83
1014
+
L894
1015
+
L3
1016
+
L99
1017
+
L841
1018
+
R92
1019
+
R623
1020
+
L151
1021
+
R77
1022
+
R32
1023
+
L64
1024
+
L99
1025
+
L8
1026
+
L29
1027
+
L85
1028
+
R97
1029
+
R49
1030
+
L61
1031
+
L56
1032
+
R32
1033
+
L76
1034
+
L36
1035
+
R36
1036
+
R474
1037
+
R26
1038
+
L825
1039
+
R67
1040
+
L49
1041
+
R7
1042
+
R51
1043
+
L12
1044
+
L83
1045
+
L9
1046
+
L77
1047
+
L62
1048
+
R92
1049
+
L73
1050
+
L706
1051
+
R19
1052
+
L55
1053
+
R70
1054
+
L72
1055
+
L83
1056
+
L38
1057
+
L58
1058
+
L804
1059
+
L692
1060
+
R92
1061
+
R54
1062
+
R27
1063
+
L876
1064
+
R607
1065
+
R49
1066
+
L9
1067
+
R38
1068
+
R819
1069
+
R48
1070
+
L57
1071
+
L188
1072
+
R88
1073
+
R26
1074
+
L26
1075
+
L76
1076
+
R72
1077
+
R22
1078
+
R97
1079
+
L22
1080
+
R596
1081
+
L70
1082
+
R81
1083
+
L37
1084
+
L33
1085
+
R26
1086
+
L43
1087
+
R87
1088
+
R67
1089
+
L55
1090
+
R107
1091
+
L73
1092
+
R54
1093
+
R17
1094
+
R81
1095
+
L41
1096
+
L57
1097
+
R49
1098
+
L42
1099
+
R293
1100
+
R85
1101
+
L85
1102
+
R25
1103
+
R832
1104
+
R65
1105
+
L48
1106
+
L99
1107
+
L96
1108
+
L79
1109
+
R93
1110
+
R79
1111
+
R30
1112
+
L183
1113
+
L36
1114
+
L22
1115
+
L29
1116
+
R845
1117
+
L25
1118
+
R637
1119
+
R11
1120
+
R15
1121
+
L43
1122
+
R28
1123
+
R99
1124
+
R28
1125
+
R19
1126
+
R28
1127
+
R326
1128
+
L76
1129
+
L924
1130
+
R61
1131
+
R50
1132
+
L27
1133
+
R16
1134
+
R757
1135
+
R373
1136
+
L30
1137
+
R57
1138
+
R68
1139
+
R72
1140
+
L811
1141
+
R47
1142
+
L12
1143
+
L21
1144
+
L56
1145
+
L541
1146
+
R7
1147
+
L10
1148
+
L211
1149
+
L89
1150
+
R67
1151
+
R25
1152
+
R80
1153
+
R38
1154
+
L17
1155
+
R85
1156
+
R61
1157
+
R95
1158
+
R66
1159
+
L319
1160
+
R61
1161
+
L2
1162
+
R960
1163
+
L89
1164
+
R71
1165
+
R19
1166
+
R20
1167
+
L21
1168
+
L186
1169
+
R47
1170
+
R39
1171
+
R71
1172
+
R14
1173
+
R15
1174
+
L26
1175
+
R84
1176
+
L58
1177
+
L51
1178
+
L49
1179
+
L99
1180
+
L1
1181
+
L65
1182
+
L135
1183
+
R27
1184
+
L827
1185
+
L47
1186
+
L321
1187
+
L32
1188
+
L79
1189
+
L29
1190
+
L34
1191
+
R96
1192
+
L54
1193
+
R63
1194
+
R2
1195
+
L44
1196
+
R181
1197
+
R982
1198
+
L78
1199
+
L6
1200
+
L72
1201
+
R69
1202
+
R603
1203
+
L19
1204
+
R19
1205
+
R41
1206
+
L73
1207
+
R465
1208
+
R20
1209
+
L69
1210
+
R590
1211
+
R93
1212
+
R6
1213
+
R12
1214
+
L9
1215
+
L84
1216
+
L389
1217
+
R97
1218
+
R494
1219
+
L88
1220
+
L106
1221
+
L21
1222
+
L79
1223
+
R11
1224
+
R33
1225
+
L439
1226
+
R612
1227
+
L90
1228
+
R73
1229
+
L675
1230
+
L87
1231
+
R65
1232
+
L36
1233
+
L67
1234
+
R66
1235
+
L96
1236
+
L388
1237
+
L89
1238
+
R6
1239
+
L99
1240
+
R71
1241
+
R982
1242
+
L9
1243
+
L533
1244
+
L111
1245
+
L37
1246
+
R923
1247
+
L72
1248
+
R86
1249
+
R16
1250
+
R33
1251
+
L72
1252
+
L67
1253
+
R90
1254
+
L42
1255
+
R4
1256
+
R735
1257
+
R9
1258
+
R94
1259
+
L4
1260
+
L96
1261
+
L36
1262
+
R31
1263
+
R20
1264
+
R37
1265
+
L452
1266
+
L63
1267
+
L40
1268
+
L88
1269
+
R88
1270
+
L82
1271
+
R92
1272
+
L7
1273
+
R35
1274
+
R27
1275
+
R51
1276
+
R87
1277
+
R45
1278
+
R29
1279
+
L74
1280
+
R311
1281
+
R89
1282
+
L62
1283
+
R94
1284
+
L37
1285
+
L95
1286
+
R545
1287
+
R14
1288
+
R41
1289
+
R82
1290
+
L82
1291
+
L55
1292
+
L345
1293
+
R1
1294
+
L59
1295
+
R238
1296
+
L30
1297
+
R50
1298
+
R275
1299
+
L66
1300
+
R90
1301
+
L56
1302
+
R99
1303
+
L188
1304
+
R829
1305
+
R17
1306
+
L421
1307
+
R21
1308
+
R46
1309
+
R68
1310
+
R13
1311
+
R49
1312
+
R424
1313
+
R93
1314
+
R7
1315
+
R74
1316
+
L974
1317
+
L93
1318
+
R81
1319
+
L94
1320
+
L66
1321
+
L26
1322
+
R40
1323
+
R58
1324
+
R23
1325
+
R18
1326
+
R59
1327
+
R43
1328
+
L46
1329
+
R63
1330
+
L81
1331
+
R21
1332
+
L62
1333
+
R62
1334
+
R697
1335
+
L97
1336
+
R80
1337
+
L766
1338
+
R45
1339
+
L59
1340
+
R291
1341
+
R9
1342
+
L68
1343
+
R58
1344
+
L94
1345
+
R50
1346
+
R718
1347
+
L35
1348
+
L29
1349
+
L73
1350
+
R581
1351
+
L708
1352
+
R88
1353
+
R12
1354
+
R73
1355
+
L77
1356
+
R81
1357
+
R97
1358
+
L542
1359
+
R17
1360
+
R1
1361
+
L94
1362
+
L56
1363
+
L48
1364
+
L57
1365
+
R5
1366
+
L9
1367
+
R20
1368
+
L763
1369
+
L56
1370
+
L24
1371
+
L368
1372
+
L22
1373
+
L40
1374
+
R62
1375
+
R30
1376
+
R70
1377
+
L51
1378
+
R33
1379
+
L82
1380
+
R75
1381
+
L60
1382
+
L70
1383
+
R3
1384
+
L61
1385
+
R613
1386
+
R792
1387
+
R108
1388
+
L37
1389
+
R37
1390
+
L69
1391
+
R34
1392
+
R835
1393
+
R67
1394
+
R33
1395
+
L157
1396
+
L43
1397
+
R816
1398
+
L44
1399
+
L72
1400
+
R58
1401
+
L58
1402
+
R28
1403
+
L3
1404
+
L72
1405
+
L73
1406
+
L80
1407
+
L26
1408
+
L39
1409
+
L81
1410
+
L754
1411
+
L96
1412
+
L85
1413
+
R50
1414
+
L258
1415
+
L27
1416
+
R16
1417
+
L84
1418
+
R12
1419
+
R672
1420
+
L99
1421
+
R230
1422
+
R70
1423
+
R99
1424
+
L83
1425
+
R583
1426
+
L82
1427
+
L14
1428
+
R96
1429
+
R343
1430
+
L577
1431
+
R93
1432
+
R41
1433
+
L894
1434
+
R28
1435
+
R66
1436
+
R76
1437
+
L76
1438
+
L677
1439
+
L23
1440
+
L35
1441
+
L41
1442
+
R98
1443
+
L103
1444
+
L688
1445
+
R18
1446
+
R34
1447
+
R82
1448
+
R46
1449
+
L11
1450
+
L14
1451
+
L5
1452
+
L81
1453
+
R35
1454
+
L53
1455
+
L82
1456
+
L5
1457
+
L44
1458
+
L37
1459
+
L64
1460
+
L17
1461
+
L87
1462
+
L46
1463
+
R876
1464
+
R224
1465
+
L799
1466
+
L63
1467
+
R62
1468
+
L65
1469
+
L65
1470
+
L70
1471
+
R46
1472
+
R24
1473
+
R30
1474
+
L63
1475
+
L24
1476
+
R387
1477
+
L71
1478
+
R71
1479
+
L94
1480
+
L36
1481
+
L70
1482
+
L32
1483
+
L77
1484
+
L762
1485
+
L29
1486
+
L17
1487
+
R225
1488
+
L32
1489
+
R96
1490
+
L72
1491
+
R77
1492
+
R16
1493
+
R7
1494
+
L51
1495
+
R445
1496
+
R6
1497
+
L32
1498
+
L77
1499
+
R9
1500
+
L5
1501
+
L95
1502
+
R20
1503
+
L59
1504
+
L18
1505
+
L32
1506
+
L329
1507
+
L723
1508
+
R41
1509
+
L69
1510
+
L12
1511
+
R922
1512
+
L67
1513
+
L950
1514
+
R476
1515
+
R27
1516
+
R173
1517
+
R83
1518
+
L962
1519
+
L56
1520
+
R59
1521
+
R60
1522
+
R513
1523
+
L97
1524
+
R70
1525
+
R54
1526
+
L24
1527
+
R416
1528
+
R484
1529
+
R57
1530
+
R21
1531
+
R22
1532
+
L57
1533
+
R71
1534
+
R686
1535
+
R93
1536
+
L616
1537
+
R747
1538
+
R81
1539
+
L323
1540
+
R418
1541
+
R32
1542
+
R97
1543
+
R28
1544
+
R460
1545
+
L58
1546
+
R73
1547
+
L26
1548
+
L6
1549
+
R6
1550
+
L21
1551
+
R76
1552
+
L286
1553
+
R629
1554
+
L4
1555
+
L52
1556
+
R10
1557
+
R87
1558
+
R55
1559
+
R55
1560
+
L76
1561
+
L26
1562
+
L35
1563
+
R82
1564
+
R715
1565
+
R85
1566
+
R78
1567
+
L34
1568
+
L27
1569
+
L8
1570
+
R26
1571
+
L35
1572
+
R93
1573
+
R7
1574
+
R48
1575
+
R62
1576
+
R84
1577
+
L94
1578
+
R96
1579
+
L89
1580
+
L29
1581
+
R2
1582
+
L80
1583
+
R933
1584
+
L33
1585
+
L59
1586
+
L77
1587
+
R111
1588
+
R25
1589
+
R76
1590
+
L76
1591
+
R56
1592
+
L37
1593
+
R84
1594
+
R97
1595
+
L25
1596
+
L79
1597
+
R4
1598
+
R92
1599
+
R96
1600
+
L67
1601
+
R42
1602
+
R46
1603
+
R28
1604
+
L37
1605
+
R29
1606
+
L29
1607
+
R34
1608
+
R93
1609
+
R19
1610
+
R84
1611
+
R770
1612
+
L56
1613
+
R689
1614
+
L74
1615
+
L1
1616
+
R42
1617
+
L72
1618
+
R72
1619
+
L609
1620
+
R945
1621
+
R15
1622
+
R49
1623
+
R8
1624
+
R492
1625
+
R58
1626
+
R42
1627
+
R470
1628
+
R34
1629
+
R17
1630
+
R94
1631
+
R5
1632
+
R4
1633
+
R82
1634
+
L85
1635
+
L62
1636
+
R41
1637
+
R37
1638
+
R63
1639
+
L50
1640
+
R17
1641
+
R41
1642
+
R92
1643
+
R995
1644
+
R5
1645
+
L63
1646
+
R63
1647
+
R23
1648
+
L41
1649
+
R55
1650
+
L601
1651
+
L40
1652
+
L14
1653
+
L87
1654
+
L221
1655
+
R24
1656
+
R49
1657
+
R712
1658
+
L359
1659
+
L28
1660
+
R28
1661
+
L844
1662
+
R79
1663
+
R90
1664
+
R75
1665
+
L46
1666
+
L64
1667
+
L14
1668
+
R97
1669
+
L655
1670
+
R90
1671
+
L20
1672
+
R12
1673
+
R79
1674
+
L1
1675
+
L78
1676
+
R72
1677
+
L99
1678
+
L1
1679
+
R602
1680
+
L19
1681
+
R72
1682
+
R8
1683
+
L78
1684
+
L36
1685
+
R87
1686
+
L23
1687
+
R23
1688
+
L408
1689
+
R57
1690
+
R590
1691
+
R66
1692
+
R339
1693
+
R53
1694
+
L5
1695
+
L90
1696
+
L6
1697
+
L76
1698
+
R31
1699
+
R854
1700
+
L13
1701
+
R43
1702
+
L65
1703
+
R122
1704
+
L592
1705
+
L75
1706
+
L61
1707
+
L82
1708
+
L90
1709
+
R86
1710
+
L86
1711
+
R64
1712
+
R97
1713
+
L57
1714
+
R44
1715
+
L88
1716
+
L94
1717
+
R279
1718
+
L10
1719
+
R13
1720
+
R56
1721
+
R12
1722
+
R84
1723
+
R59
1724
+
L75
1725
+
L84
1726
+
R80
1727
+
R20
1728
+
L18
1729
+
L1
1730
+
L267
1731
+
R786
1732
+
L197
1733
+
R597
1734
+
R10
1735
+
L99
1736
+
R89
1737
+
L19
1738
+
L81
1739
+
L877
1740
+
L23
1741
+
L35
1742
+
R82
1743
+
L47
1744
+
R37
1745
+
R63
1746
+
R43
1747
+
R57
1748
+
R38
1749
+
R62
1750
+
R36
1751
+
R52
1752
+
L9
1753
+
R321
1754
+
R92
1755
+
R73
1756
+
R53
1757
+
L37
1758
+
R19
1759
+
R36
1760
+
L36
1761
+
R121
1762
+
R665
1763
+
L621
1764
+
R92
1765
+
L57
1766
+
L52
1767
+
R86
1768
+
R72
1769
+
R12
1770
+
R358
1771
+
L809
1772
+
L6
1773
+
R39
1774
+
R11
1775
+
L52
1776
+
R95
1777
+
R95
1778
+
L12
1779
+
R33
1780
+
R30
1781
+
R53
1782
+
R41
1783
+
R10
1784
+
R96
1785
+
L87
1786
+
L13
1787
+
L33
1788
+
L90
1789
+
L77
1790
+
L89
1791
+
L11
1792
+
R51
1793
+
R43
1794
+
L45
1795
+
L92
1796
+
L857
1797
+
L86
1798
+
L82
1799
+
L29
1800
+
L26
1801
+
R1
1802
+
R507
1803
+
R94
1804
+
L90
1805
+
L89
1806
+
L55
1807
+
L3
1808
+
L62
1809
+
R20
1810
+
R36
1811
+
R164
1812
+
L14
1813
+
R62
1814
+
L42
1815
+
L27
1816
+
L56
1817
+
L50
1818
+
R27
1819
+
L47
1820
+
R32
1821
+
L11
1822
+
R64
1823
+
L738
1824
+
L41
1825
+
R518
1826
+
R67
1827
+
L16
1828
+
L28
1829
+
L451
1830
+
L264
1831
+
R15
1832
+
R57
1833
+
L398
1834
+
L705
1835
+
R481
1836
+
L35
1837
+
L23
1838
+
R58
1839
+
R6
1840
+
R88
1841
+
R79
1842
+
R92
1843
+
L99
1844
+
L94
1845
+
L24
1846
+
L58
1847
+
L20
1848
+
L63
1849
+
L42
1850
+
R95
1851
+
L42
1852
+
R92
1853
+
L999
1854
+
L85
1855
+
R362
1856
+
L23
1857
+
L23
1858
+
R82
1859
+
R41
1860
+
R79
1861
+
R21
1862
+
R720
1863
+
L43
1864
+
L530
1865
+
R8
1866
+
R45
1867
+
L3
1868
+
R3
1869
+
L66
1870
+
L34
1871
+
R727
1872
+
R509
1873
+
R93
1874
+
L29
1875
+
R97
1876
+
R61
1877
+
L58
1878
+
R82
1879
+
R32
1880
+
R29
1881
+
R57
1882
+
L13
1883
+
L87
1884
+
R385
1885
+
L23
1886
+
L408
1887
+
R46
1888
+
R59
1889
+
L59
1890
+
L23
1891
+
R521
1892
+
R46
1893
+
R54
1894
+
R902
1895
+
L634
1896
+
L75
1897
+
R9
1898
+
R655
1899
+
L29
1900
+
L30
1901
+
R93
1902
+
R84
1903
+
R66
1904
+
L540
1905
+
R10
1906
+
R91
1907
+
L910
1908
+
R97
1909
+
R46
1910
+
L33
1911
+
L2
1912
+
L60
1913
+
L93
1914
+
L45
1915
+
R73
1916
+
R27
1917
+
R20
1918
+
L720
1919
+
L90
1920
+
R90
1921
+
L76
1922
+
L655
1923
+
R31
1924
+
L2
1925
+
L498
1926
+
R41
1927
+
R71
1928
+
L12
1929
+
R378
1930
+
R222
1931
+
R37
1932
+
R98
1933
+
R26
1934
+
L61
1935
+
L490
1936
+
L10
1937
+
L66
1938
+
R66
1939
+
L48
1940
+
R82
1941
+
L41
1942
+
L393
1943
+
L52
1944
+
R652
1945
+
R483
1946
+
L83
1947
+
R75
1948
+
L788
1949
+
R38
1950
+
L62
1951
+
R37
1952
+
R56
1953
+
R71
1954
+
L21
1955
+
R19
1956
+
R75
1957
+
R92
1958
+
L17
1959
+
L75
1960
+
R44
1961
+
R356
1962
+
L95
1963
+
L5
1964
+
L140
1965
+
L52
1966
+
R41
1967
+
R43
1968
+
R78
1969
+
L13
1970
+
R64
1971
+
R73
1972
+
L994
1973
+
R861
1974
+
L7
1975
+
R46
1976
+
L842
1977
+
L406
1978
+
L15
1979
+
R863
1980
+
L812
1981
+
R3
1982
+
L26
1983
+
R35
1984
+
L15
1985
+
R15
1986
+
R87
1987
+
L29
1988
+
L54
1989
+
L95
1990
+
L9
1991
+
L5
1992
+
R423
1993
+
R38
1994
+
L18
1995
+
R701
1996
+
R61
1997
+
L20
1998
+
R20
1999
+
R11
2000
+
R61
2001
+
L225
2002
+
R78
2003
+
R17
2004
+
L43
2005
+
L32
2006
+
L64
2007
+
R372
2008
+
L75
2009
+
L41
2010
+
R94
2011
+
R47
2012
+
L11
2013
+
L89
2014
+
L87
2015
+
L59
2016
+
R46
2017
+
R127
2018
+
L676
2019
+
R48
2020
+
R1
2021
+
L268
2022
+
R68
2023
+
L54
2024
+
R76
2025
+
L22
2026
+
L52
2027
+
L53
2028
+
R906
2029
+
R99
2030
+
L82
2031
+
R382
2032
+
R87
2033
+
R13
2034
+
R806
2035
+
R36
2036
+
R78
2037
+
L20
2038
+
L762
2039
+
R62
2040
+
L66
2041
+
L34
2042
+
R49
2043
+
R51
2044
+
L65
2045
+
R65
2046
+
L21
2047
+
L62
2048
+
R32
2049
+
L770
2050
+
R98
2051
+
L723
2052
+
L543
2053
+
R89
2054
+
L47
2055
+
L53
2056
+
L59
2057
+
R12
2058
+
L53
2059
+
R85
2060
+
L945
2061
+
L82
2062
+
R27
2063
+
L58
2064
+
L97
2065
+
L883
2066
+
R53
2067
+
R21
2068
+
L62
2069
+
R526
2070
+
R15
2071
+
L89
2072
+
L30
2073
+
R365
2074
+
R70
2075
+
L16
2076
+
R142
2077
+
L89
2078
+
L88
2079
+
R35
2080
+
R24
2081
+
R776
2082
+
R21
2083
+
L38
2084
+
L83
2085
+
L21
2086
+
R22
2087
+
L60
2088
+
R53
2089
+
L613
2090
+
L81
2091
+
R569
2092
+
L33
2093
+
R64
2094
+
R89
2095
+
L64
2096
+
R64
2097
+
R11
2098
+
R64
2099
+
L64
2100
+
R15
2101
+
R96
2102
+
L35
2103
+
L85
2104
+
R9
2105
+
L29
2106
+
L61
2107
+
L83
2108
+
R36
2109
+
L14
2110
+
L64
2111
+
R15
2112
+
R16
2113
+
L204
2114
+
L408
2115
+
L4
2116
+
R21
2117
+
L11
2118
+
R690
2119
+
L23
2120
+
R423
2121
+
R376
2122
+
L446
2123
+
L45
2124
+
R15
2125
+
L65
2126
+
R7
2127
+
L2
2128
+
L48
2129
+
L92
2130
+
L54
2131
+
R33
2132
+
L53
2133
+
R41
2134
+
R33
2135
+
R2
2136
+
L69
2137
+
R933
2138
+
L66
2139
+
L20
2140
+
R90
2141
+
R20
2142
+
R310
2143
+
L893
2144
+
L56
2145
+
L63
2146
+
L57
2147
+
R57
2148
+
R41
2149
+
R10
2150
+
R61
2151
+
L65
2152
+
R98
2153
+
R25
2154
+
R41
2155
+
L57
2156
+
R82
2157
+
L124
2158
+
R57
2159
+
L5
2160
+
R24
2161
+
R85
2162
+
L24
2163
+
L80
2164
+
R212
2165
+
R28
2166
+
L97
2167
+
L4
2168
+
R12
2169
+
R41
2170
+
L49
2171
+
R795
2172
+
R5
2173
+
L31
2174
+
L8
2175
+
R88
2176
+
R92
2177
+
R16
2178
+
L157
2179
+
L92
2180
+
R71
2181
+
L79
2182
+
L352
2183
+
R45
2184
+
R45
2185
+
L38
2186
+
R83
2187
+
L61
2188
+
R78
2189
+
R64
2190
+
L64
2191
+
L41
2192
+
L59
2193
+
R247
2194
+
R53
2195
+
L80
2196
+
L20
2197
+
L23
2198
+
R89
2199
+
R34
2200
+
L323
2201
+
R723
2202
+
L799
2203
+
R75
2204
+
R50
2205
+
R40
2206
+
R9
2207
+
L807
2208
+
R36
2209
+
R56
2210
+
R40
2211
+
R590
2212
+
R88
2213
+
R9
2214
+
R13
2215
+
L38
2216
+
R38
2217
+
R20
2218
+
R76
2219
+
R2
2220
+
R2
2221
+
R32
2222
+
L38
2223
+
L194
2224
+
R77
2225
+
R14
2226
+
R94
2227
+
L85
2228
+
L8
2229
+
R58
2230
+
R2
2231
+
R25
2232
+
R23
2233
+
R86
2234
+
L32
2235
+
R85
2236
+
L3
2237
+
L91
2238
+
L45
2239
+
R75
2240
+
R27
2241
+
L50
2242
+
R9
2243
+
L61
2244
+
L32
2245
+
R94
2246
+
L762
2247
+
R42
2248
+
L33
2249
+
R47
2250
+
L56
2251
+
L91
2252
+
L9
2253
+
L13
2254
+
L87
2255
+
L88
2256
+
R688
2257
+
L94
2258
+
L36
2259
+
R71
2260
+
R82
2261
+
R77
2262
+
R24
2263
+
L205
2264
+
R15
2265
+
L34
2266
+
R69
2267
+
L90
2268
+
R18
2269
+
L14
2270
+
L92
2271
+
L43
2272
+
R52
2273
+
R66
2274
+
R175
2275
+
L26
2276
+
L15
2277
+
L18
2278
+
R46
2279
+
R66
2280
+
R24
2281
+
L18
2282
+
R91
2283
+
L54
2284
+
L84
2285
+
L2
2286
+
R534
2287
+
R82
2288
+
L185
2289
+
L6
2290
+
L48
2291
+
L28
2292
+
R8
2293
+
R292
2294
+
R88
2295
+
R516
2296
+
R76
2297
+
R132
2298
+
L87
2299
+
R75
2300
+
L22
2301
+
L66
2302
+
R55
2303
+
L67
2304
+
L36
2305
+
L56
2306
+
R92
2307
+
L83
2308
+
R98
2309
+
L24
2310
+
R62
2311
+
R71
2312
+
R44
2313
+
L68
2314
+
R52
2315
+
L48
2316
+
R3
2317
+
R93
2318
+
R68
2319
+
L68
2320
+
R95
2321
+
R69
2322
+
L951
2323
+
L69
2324
+
R56
2325
+
L482
2326
+
R82
2327
+
R34
2328
+
R59
2329
+
R507
2330
+
L47
2331
+
R94
2332
+
R63
2333
+
L49
2334
+
R39
2335
+
R55
2336
+
L444
2337
+
R89
2338
+
R5
2339
+
R95
2340
+
R44
2341
+
L33
2342
+
L11
2343
+
L311
2344
+
L89
2345
+
L63
2346
+
R75
2347
+
L49
2348
+
L88
2349
+
L98
2350
+
L549
2351
+
L533
2352
+
R5
2353
+
L54
2354
+
R94
2355
+
R60
2356
+
R63
2357
+
L563
2358
+
R77
2359
+
R23
2360
+
L44
2361
+
L42
2362
+
R886
2363
+
L51
2364
+
R51
2365
+
R967
2366
+
L67
2367
+
R71
2368
+
R73
2369
+
L548
2370
+
L23
2371
+
L19
2372
+
L61
2373
+
R7
2374
+
R52
2375
+
R31
2376
+
R18
2377
+
L39
2378
+
R77
2379
+
R4
2380
+
R6
2381
+
L81
2382
+
R29
2383
+
L476
2384
+
L979
2385
+
L42
2386
+
L90
2387
+
R90
2388
+
R843
2389
+
R74
2390
+
L83
2391
+
L34
2392
+
L668
2393
+
R50
2394
+
R462
2395
+
R53
2396
+
R3
2397
+
R679
2398
+
R821
2399
+
L238
2400
+
R67
2401
+
R11
2402
+
L30
2403
+
R56
2404
+
L73
2405
+
L410
2406
+
R91
2407
+
L95
2408
+
R21
2409
+
L87
2410
+
L35
2411
+
R90
2412
+
L52
2413
+
L17
2414
+
L27
2415
+
R28
2416
+
R53
2417
+
L33
2418
+
R702
2419
+
R78
2420
+
R614
2421
+
L52
2422
+
R59
2423
+
L6
2424
+
R85
2425
+
R56
2426
+
R58
2427
+
R32
2428
+
L94
2429
+
L82
2430
+
R629
2431
+
L603
2432
+
L96
2433
+
L54
2434
+
R43
2435
+
R11
2436
+
R15
2437
+
R85
2438
+
L35
2439
+
L65
2440
+
L13
2441
+
R74
2442
+
R88
2443
+
L349
2444
+
R83
2445
+
L74
2446
+
L83
2447
+
R74
2448
+
L93
2449
+
R61
2450
+
R83
2451
+
L52
2452
+
L99
2453
+
L83
2454
+
R15
2455
+
R38
2456
+
L759
2457
+
L711
2458
+
R54
2459
+
R46
2460
+
L301
2461
+
L99
2462
+
L32
2463
+
L548
2464
+
R22
2465
+
L39
2466
+
R24
2467
+
L7
2468
+
L58
2469
+
R32
2470
+
L94
2471
+
R309
2472
+
R80
2473
+
L89
2474
+
R47
2475
+
R53
2476
+
L49
2477
+
L51
2478
+
L91
2479
+
L429
2480
+
L80
2481
+
R72
2482
+
L45
2483
+
R935
2484
+
R30
2485
+
R638
2486
+
R372
2487
+
R98
2488
+
L94
2489
+
R74
2490
+
L93
2491
+
L663
2492
+
L73
2493
+
L51
2494
+
R444
2495
+
L799
2496
+
L61
2497
+
R43
2498
+
L35
2499
+
L18
2500
+
R68
2501
+
R25
2502
+
L524
2503
+
L41
2504
+
L2
2505
+
R61
2506
+
R51
2507
+
R55
2508
+
L67
2509
+
L755
2510
+
L945
2511
+
R52
2512
+
L60
2513
+
L42
2514
+
R80
2515
+
R167
2516
+
L119
2517
+
L278
2518
+
R94
2519
+
L92
2520
+
L77
2521
+
R51
2522
+
R84
2523
+
L19
2524
+
R10
2525
+
L51
2526
+
L95
2527
+
L59
2528
+
L46
2529
+
L79
2530
+
L54
2531
+
L34
2532
+
L33
2533
+
R69
2534
+
L175
2535
+
L410
2536
+
R61
2537
+
R11
2538
+
L56
2539
+
L34
2540
+
R878
2541
+
L56
2542
+
R65
2543
+
L43
2544
+
R90
2545
+
R89
2546
+
L89
2547
+
L5
2548
+
L56
2549
+
L7
2550
+
L756
2551
+
R71
2552
+
R53
2553
+
R441
2554
+
R59
2555
+
L114
2556
+
L47
2557
+
R33
2558
+
R72
2559
+
R856
2560
+
R6
2561
+
L320
2562
+
L86
2563
+
L202
2564
+
L62
2565
+
L36
2566
+
R78
2567
+
L78
2568
+
R23
2569
+
L915
2570
+
L91
2571
+
L17
2572
+
L70
2573
+
R11
2574
+
R59
2575
+
L42
2576
+
L51
2577
+
R17
2578
+
L26
2579
+
L798
2580
+
R49
2581
+
R997
2582
+
R87
2583
+
R28
2584
+
L84
2585
+
L10
2586
+
L12
2587
+
L55
2588
+
L753
2589
+
R553
2590
+
R75
2591
+
L69
2592
+
R649
2593
+
L55
2594
+
R79
2595
+
R21
2596
+
L57
2597
+
R41
2598
+
L84
2599
+
R38
2600
+
R18
2601
+
R434
2602
+
L190
2603
+
R41
2604
+
L41
2605
+
L140
2606
+
R75
2607
+
R65
2608
+
R50
2609
+
L50
2610
+
R71
2611
+
R59
2612
+
L619
2613
+
R43
2614
+
R94
2615
+
L43
2616
+
L95
2617
+
R3
2618
+
R248
2619
+
R39
2620
+
R38
2621
+
L33
2622
+
R95
2623
+
L90
2624
+
R20
2625
+
L30
2626
+
R404
2627
+
R96
2628
+
L59
2629
+
L12
2630
+
L629
2631
+
L48
2632
+
L854
2633
+
R97
2634
+
R54
2635
+
L46
2636
+
R97
2637
+
L39
2638
+
L90
2639
+
R6
2640
+
L77
2641
+
R2
2642
+
R11
2643
+
R39
2644
+
L287
2645
+
R735
2646
+
R99
2647
+
R76
2648
+
R925
2649
+
R665
2650
+
R35
2651
+
R150
2652
+
R3
2653
+
R47
2654
+
R17
2655
+
R83
2656
+
R469
2657
+
R34
2658
+
R97
2659
+
R2
2660
+
R98
2661
+
L39
2662
+
L69
2663
+
R8
2664
+
L399
2665
+
L69
2666
+
L44
2667
+
L2
2668
+
L586
2669
+
R21
2670
+
L57
2671
+
L64
2672
+
L28
2673
+
R28
2674
+
L69
2675
+
L89
2676
+
L74
2677
+
R32
2678
+
L283
2679
+
R73
2680
+
L12
2681
+
R22
2682
+
R617
2683
+
R25
2684
+
R558
2685
+
L78
2686
+
R78
2687
+
R34
2688
+
R69
2689
+
L612
2690
+
L91
2691
+
L14
2692
+
R14
2693
+
R91
2694
+
L75
2695
+
R84
2696
+
L35
2697
+
L13
2698
+
R676
2699
+
R182
2700
+
R48
2701
+
L62
2702
+
L85
2703
+
R2
2704
+
R71
2705
+
R79
2706
+
L74
2707
+
L938
2708
+
L32
2709
+
R81
2710
+
R6
2711
+
L19
2712
+
R13
2713
+
L609
2714
+
L26
2715
+
L85
2716
+
L654
2717
+
R74
2718
+
R597
2719
+
L97
2720
+
L721
2721
+
R21
2722
+
L70
2723
+
L87
2724
+
L75
2725
+
R34
2726
+
L32
2727
+
R80
2728
+
R59
2729
+
R91
2730
+
L51
2731
+
L81
2732
+
R10
2733
+
R39
2734
+
R35
2735
+
L74
2736
+
R822
2737
+
R932
2738
+
R875
2739
+
L151
2740
+
R58
2741
+
L914
2742
+
R11
2743
+
L17
2744
+
R69
2745
+
R791
2746
+
L69
2747
+
L94
2748
+
L40
2749
+
R23
2750
+
R93
2751
+
R90
2752
+
L2
2753
+
R59
2754
+
L814
2755
+
L79
2756
+
L13
2757
+
L44
2758
+
L64
2759
+
R57
2760
+
R5
2761
+
R26
2762
+
R1
2763
+
R1
2764
+
R21
2765
+
R89
2766
+
R2
2767
+
L89
2768
+
R32
2769
+
L45
2770
+
L28
2771
+
R64
2772
+
L36
2773
+
L97
2774
+
L30
2775
+
L73
2776
+
L17
2777
+
L883
2778
+
L62
2779
+
R69
2780
+
R119
2781
+
R74
2782
+
L17
2783
+
L83
2784
+
L381
2785
+
R25
2786
+
L44
2787
+
L80
2788
+
L92
2789
+
R64
2790
+
R949
2791
+
L871
2792
+
L827
2793
+
R57
2794
+
L197
2795
+
L4
2796
+
L2
2797
+
R88
2798
+
R59
2799
+
R788
2800
+
L37
2801
+
L95
2802
+
R38
2803
+
R27
2804
+
R35
2805
+
R23
2806
+
L17
2807
+
R194
2808
+
L69
2809
+
L71
2810
+
R26
2811
+
R83
2812
+
R31
2813
+
R18
2814
+
R39
2815
+
L57
2816
+
L65
2817
+
R89
2818
+
R133
2819
+
L57
2820
+
R98
2821
+
L644
2822
+
L50
2823
+
R980
2824
+
R85
2825
+
R962
2826
+
L34
2827
+
L61
2828
+
R77
2829
+
R339
2830
+
R48
2831
+
L81
2832
+
L58
2833
+
L780
2834
+
R19
2835
+
R48
2836
+
R52
2837
+
L240
2838
+
R82
2839
+
R658
2840
+
R28
2841
+
R39
2842
+
R88
2843
+
R45
2844
+
R8
2845
+
L79
2846
+
R21
2847
+
L50
2848
+
R82
2849
+
L82
2850
+
R710
2851
+
R87
2852
+
L397
2853
+
R430
2854
+
L30
2855
+
R44
2856
+
L31
2857
+
R96
2858
+
L27
2859
+
R18
2860
+
L94
2861
+
L676
2862
+
L116
2863
+
R61
2864
+
R50
2865
+
L68
2866
+
R43
2867
+
L1
2868
+
L99
2869
+
R783
2870
+
R209
2871
+
L39
2872
+
L46
2873
+
R36
2874
+
L54
2875
+
R211
2876
+
L46
2877
+
L395
2878
+
R17
2879
+
R393
2880
+
L36
2881
+
L633
2882
+
L29
2883
+
R43
2884
+
L75
2885
+
L939
2886
+
L59
2887
+
L74
2888
+
R148
2889
+
L26
2890
+
R11
2891
+
L45
2892
+
L98
2893
+
L87
2894
+
R18
2895
+
R12
2896
+
R13
2897
+
R87
2898
+
L83
2899
+
R83
2900
+
R49
2901
+
L49
2902
+
L46
2903
+
L24
2904
+
L21
2905
+
L32
2906
+
R90
2907
+
R33
2908
+
R85
2909
+
L85
2910
+
R23
2911
+
R77
2912
+
L34
2913
+
L66
2914
+
L85
2915
+
L15
2916
+
R3
2917
+
L3
2918
+
L454
2919
+
R579
2920
+
L78
2921
+
L47
2922
+
R50
2923
+
L32
2924
+
L18
2925
+
R39
2926
+
R91
2927
+
L40
2928
+
R10
2929
+
R84
2930
+
L35
2931
+
R751
2932
+
R67
2933
+
R64
2934
+
L31
2935
+
R8
2936
+
R8
2937
+
L83
2938
+
L33
2939
+
L50
2940
+
L50
2941
+
R64
2942
+
R36
2943
+
R71
2944
+
L70
2945
+
R56
2946
+
R43
2947
+
L23
2948
+
R523
2949
+
L295
2950
+
L457
2951
+
R52
2952
+
R4
2953
+
R47
2954
+
L51
2955
+
R35
2956
+
R98
2957
+
R87
2958
+
R80
2959
+
R24
2960
+
R50
2961
+
L39
2962
+
L9
2963
+
L71
2964
+
R45
2965
+
R10
2966
+
L24
2967
+
L986
2968
+
R373
2969
+
R99
2970
+
L472
2971
+
L26
2972
+
R26
2973
+
L1
2974
+
R85
2975
+
R22
2976
+
L6
2977
+
L35
2978
+
L65
2979
+
L37
2980
+
L99
2981
+
L664
2982
+
R56
2983
+
R64
2984
+
L20
2985
+
L1
2986
+
L65
2987
+
R68
2988
+
L2
2989
+
L558
2990
+
L42
2991
+
L87
2992
+
R887
2993
+
L18
2994
+
R92
2995
+
R26
2996
+
L24
2997
+
L43
2998
+
L50
2999
+
L29
3000
+
R446
3001
+
R539
3002
+
R61
3003
+
L947
3004
+
R829
3005
+
L806
3006
+
L76
3007
+
R830
3008
+
L91
3009
+
R34
3010
+
L77
3011
+
R86
3012
+
L94
3013
+
R12
3014
+
L446
3015
+
L77
3016
+
L533
3017
+
L39
3018
+
R92
3019
+
L7
3020
+
L74
3021
+
R68
3022
+
R116
3023
+
R88
3024
+
L88
3025
+
L31
3026
+
L20
3027
+
R83
3028
+
L32
3029
+
L71
3030
+
R784
3031
+
L13
3032
+
L9
3033
+
L304
3034
+
L87
3035
+
R665
3036
+
L53
3037
+
L12
3038
+
L76
3039
+
L87
3040
+
R125
3041
+
R33
3042
+
L772
3043
+
R77
3044
+
L89
3045
+
L11
3046
+
L70
3047
+
L30
3048
+
R26
3049
+
L965
3050
+
R39
3051
+
R153
3052
+
R47
3053
+
R648
3054
+
R52
3055
+
R108
3056
+
L71
3057
+
R63
3058
+
L17
3059
+
R17
3060
+
L63
3061
+
L74
3062
+
L16
3063
+
R21
3064
+
L68
3065
+
L93
3066
+
L46
3067
+
R539
3068
+
R60
3069
+
R269
3070
+
L84
3071
+
R37
3072
+
L287
3073
+
L83
3074
+
L31
3075
+
R4
3076
+
L85
3077
+
L82
3078
+
R84
3079
+
L28
3080
+
R136
3081
+
R90
3082
+
L86
3083
+
L945
3084
+
R28
3085
+
R49
3086
+
R79
3087
+
R142
3088
+
R831
3089
+
R24
3090
+
L491
3091
+
L42
3092
+
R1
3093
+
L52
3094
+
R68
3095
+
L2
3096
+
R96
3097
+
R69
3098
+
R28
3099
+
L544
3100
+
R323
3101
+
L76
3102
+
L74
3103
+
R74
3104
+
L76
3105
+
R154
3106
+
L78
3107
+
R2
3108
+
L981
3109
+
L21
3110
+
R46
3111
+
R91
3112
+
L37
3113
+
L92
3114
+
R92
3115
+
R76
3116
+
R88
3117
+
L64
3118
+
R56
3119
+
L82
3120
+
L674
3121
+
R63
3122
+
R87
3123
+
R50
3124
+
L65
3125
+
L8
3126
+
L47
3127
+
L587
3128
+
R11
3129
+
L4
3130
+
R80
3131
+
L80
3132
+
R391
3133
+
R888
3134
+
R23
3135
+
R19
3136
+
L370
3137
+
L760
3138
+
L491
3139
+
L873
3140
+
L72
3141
+
L89
3142
+
R34
3143
+
R23
3144
+
R70
3145
+
R943
3146
+
L36
3147
+
R42
3148
+
L27
3149
+
L62
3150
+
L78
3151
+
L26
3152
+
L11
3153
+
L538
3154
+
R534
3155
+
L34
3156
+
L282
3157
+
R30
3158
+
R33
3159
+
L77
3160
+
R96
3161
+
L853
3162
+
L80
3163
+
R8
3164
+
R37
3165
+
L40
3166
+
L30
3167
+
L142
3168
+
L701
3169
+
L58
3170
+
R53
3171
+
L94
3172
+
R73
3173
+
R127
3174
+
R42
3175
+
L42
3176
+
R329
3177
+
L516
3178
+
L76
3179
+
L154
3180
+
R930
3181
+
L97
3182
+
L16
3183
+
L63
3184
+
R28
3185
+
L365
3186
+
R796
3187
+
L96
3188
+
L81
3189
+
R92
3190
+
R8
3191
+
L1
3192
+
L86
3193
+
R254
3194
+
R51
3195
+
R63
3196
+
L71
3197
+
R54
3198
+
L54
3199
+
L16
3200
+
L107
3201
+
L406
3202
+
R80
3203
+
L71
3204
+
R579
3205
+
R24
3206
+
R188
3207
+
R69
3208
+
L69
3209
+
L92
3210
+
R92
3211
+
R328
3212
+
R72
3213
+
L70
3214
+
R35
3215
+
L43
3216
+
L282
3217
+
R425
3218
+
L7
3219
+
L69
3220
+
R99
3221
+
L36
3222
+
R82
3223
+
R65
3224
+
L488
3225
+
L80
3226
+
L1
3227
+
R63
3228
+
R7
3229
+
L51
3230
+
R651
3231
+
L25
3232
+
R402
3233
+
R23
3234
+
L18
3235
+
R77
3236
+
R41
3237
+
R15
3238
+
L7
3239
+
L632
3240
+
R94
3241
+
R12
3242
+
R18
3243
+
R89
3244
+
R58
3245
+
L595
3246
+
L70
3247
+
L15
3248
+
R86
3249
+
L2
3250
+
L61
3251
+
L190
3252
+
R358
3253
+
L45
3254
+
R75
3255
+
L88
3256
+
L24
3257
+
L76
3258
+
L89
3259
+
L85
3260
+
R72
3261
+
L98
3262
+
L82
3263
+
L89
3264
+
L29
3265
+
R62
3266
+
L42
3267
+
R84
3268
+
L184
3269
+
R1
3270
+
R87
3271
+
R92
3272
+
R261
3273
+
R87
3274
+
R52
3275
+
L44
3276
+
R28
3277
+
L97
3278
+
R80
3279
+
L967
3280
+
R98
3281
+
R18
3282
+
R88
3283
+
L69
3284
+
L87
3285
+
R918
3286
+
R1
3287
+
R33
3288
+
R50
3289
+
L13
3290
+
R21
3291
+
L55
3292
+
L3
3293
+
L390
3294
+
R90
3295
+
L70
3296
+
L95
3297
+
L35
3298
+
L64
3299
+
R64
3300
+
L86
3301
+
R16
3302
+
L73
3303
+
L57
3304
+
L12
3305
+
R12
3306
+
R693
3307
+
L16
3308
+
L82
3309
+
L99
3310
+
L18
3311
+
R779
3312
+
R22
3313
+
L453
3314
+
L14
3315
+
L12
3316
+
L43
3317
+
L257
3318
+
R30
3319
+
R52
3320
+
L82
3321
+
R2
3322
+
R74
3323
+
L92
3324
+
R592
3325
+
L76
3326
+
L80
3327
+
R80
3328
+
R40
3329
+
R60
3330
+
L56
3331
+
R24
3332
+
L86
3333
+
L607
3334
+
R25
3335
+
L56
3336
+
R56
3337
+
L84
3338
+
L52
3339
+
L40
3340
+
L24
3341
+
R51
3342
+
R49
3343
+
R58
3344
+
R94
3345
+
R84
3346
+
L474
3347
+
R57
3348
+
L19
3349
+
L55
3350
+
R921
3351
+
L366
3352
+
R88
3353
+
R5
3354
+
R7
3355
+
L419
3356
+
R23
3357
+
R78
3358
+
L82
3359
+
R81
3360
+
R15
3361
+
R78
3362
+
L74
3363
+
L29
3364
+
R29
3365
+
R35
3366
+
L72
3367
+
L63
3368
+
L378
3369
+
L95
3370
+
L27
3371
+
R69
3372
+
R78
3373
+
R29
3374
+
L58
3375
+
L41
3376
+
R23
3377
+
L265
3378
+
L276
3379
+
L59
3380
+
L41
3381
+
L859
3382
+
R16
3383
+
L97
3384
+
L84
3385
+
L64
3386
+
L78
3387
+
R71
3388
+
L41
3389
+
R55
3390
+
R52
3391
+
L41
3392
+
R90
3393
+
R15
3394
+
R12
3395
+
R22
3396
+
L28
3397
+
R17
3398
+
R75
3399
+
R8
3400
+
R61
3401
+
R47
3402
+
R28
3403
+
L36
3404
+
R89
3405
+
R5
3406
+
R6
3407
+
R79
3408
+
L879
3409
+
L91
3410
+
R62
3411
+
L68
3412
+
R49
3413
+
R45
3414
+
L92
3415
+
R15
3416
+
R58
3417
+
L31
3418
+
R53
3419
+
L45
3420
+
R3
3421
+
L789
3422
+
L9
3423
+
L70
3424
+
L978
3425
+
R5
3426
+
L9
3427
+
R75
3428
+
L77
3429
+
R9
3430
+
L76
3431
+
R87
3432
+
L55
3433
+
L29
3434
+
R358
3435
+
L287
3436
+
L47
3437
+
L27
3438
+
R61
3439
+
R36
3440
+
R478
3441
+
L53
3442
+
R62
3443
+
L54
3444
+
L69
3445
+
R61
3446
+
R53
3447
+
R79
3448
+
R42
3449
+
R46
3450
+
L81
3451
+
R73
3452
+
R27
3453
+
L2
3454
+
R2
3455
+
R69
3456
+
L77
3457
+
R7
3458
+
L73
3459
+
R81
3460
+
L807
3461
+
L8
3462
+
R61
3463
+
L64
3464
+
R11
3465
+
L43
3466
+
R99
3467
+
L56
3468
+
L97
3469
+
L95
3470
+
R92
3471
+
R45
3472
+
R55
3473
+
R84
3474
+
R47
3475
+
L597
3476
+
R66
3477
+
L86
3478
+
R786
3479
+
R12
3480
+
R35
3481
+
L47
3482
+
R59
3483
+
L559
3484
+
L66
3485
+
R19
3486
+
L87
3487
+
L91
3488
+
L275
3489
+
L86
3490
+
R99
3491
+
R902
3492
+
L515
3493
+
L44
3494
+
R314
3495
+
L71
3496
+
R80
3497
+
L231
3498
+
L46
3499
+
R675
3500
+
R23
3501
+
L67
3502
+
R167
3503
+
R123
3504
+
L49
3505
+
L268
3506
+
L410
3507
+
R605
3508
+
L75
3509
+
R43
3510
+
R43
3511
+
R68
3512
+
R20
3513
+
L596
3514
+
R96
3515
+
L53
3516
+
R92
3517
+
R65
3518
+
L4
3519
+
R12
3520
+
L97
3521
+
R85
3522
+
L49
3523
+
L4
3524
+
L947
3525
+
L83
3526
+
R386
3527
+
L83
3528
+
R53
3529
+
L94
3530
+
L151
3531
+
R40
3532
+
L71
3533
+
R47
3534
+
R56
3535
+
R89
3536
+
R11
3537
+
L54
3538
+
R88
3539
+
R66
3540
+
R816
3541
+
L816
3542
+
R7
3543
+
L903
3544
+
L44
3545
+
L60
3546
+
R16
3547
+
R84
3548
+
L23
3549
+
R23
3550
+
R78
3551
+
L574
3552
+
L4
3553
+
R31
3554
+
L62
3555
+
L69
3556
+
L64
3557
+
L97
3558
+
L32
3559
+
R93
3560
+
R22
3561
+
L22
3562
+
L9
3563
+
R870
3564
+
R56
3565
+
L102
3566
+
R85
3567
+
L23
3568
+
R75
3569
+
R221
3570
+
R2
3571
+
R75
3572
+
R146
3573
+
R6
3574
+
R3
3575
+
L5
3576
+
R13
3577
+
L94
3578
+
L51
3579
+
L68
3580
+
R34
3581
+
R46
3582
+
L80
3583
+
L43
3584
+
R43
3585
+
R88
3586
+
R96
3587
+
R74
3588
+
L9
3589
+
R2
3590
+
L218
3591
+
R467
3592
+
R44
3593
+
R36
3594
+
R620
3595
+
L16
3596
+
L50
3597
+
L34
3598
+
L209
3599
+
R9
3600
+
R40
3601
+
L40
3602
+
R817
3603
+
L64
3604
+
L53
3605
+
R659
3606
+
L429
3607
+
R22
3608
+
L33
3609
+
R98
3610
+
R4
3611
+
R36
3612
+
R66
3613
+
L723
3614
+
R83
3615
+
R781
3616
+
R494
3617
+
R91
3618
+
R51
3619
+
R61
3620
+
R86
3621
+
R11
3622
+
L968
3623
+
R3
3624
+
R707
3625
+
R39
3626
+
L39
3627
+
L69
3628
+
R11
3629
+
R85
3630
+
R41
3631
+
R75
3632
+
L89
3633
+
R55
3634
+
R36
3635
+
R83
3636
+
L28
3637
+
L45
3638
+
L55
3639
+
L66
3640
+
R66
3641
+
R12
3642
+
L72
3643
+
L66
3644
+
R13
3645
+
L787
3646
+
L586
3647
+
R1
3648
+
R85
3649
+
R53
3650
+
L996
3651
+
R237
3652
+
L194
3653
+
L90
3654
+
L53
3655
+
R37
3656
+
L438
3657
+
R33
3658
+
R911
3659
+
L94
3660
+
R173
3661
+
L39
3662
+
R84
3663
+
L24
3664
+
L16
3665
+
L84
3666
+
L534
3667
+
R4
3668
+
L70
3669
+
L81
3670
+
L37
3671
+
L30
3672
+
R355
3673
+
R93
3674
+
L21
3675
+
R75
3676
+
L97
3677
+
L27
3678
+
L30
3679
+
L58
3680
+
L96
3681
+
R54
3682
+
R41
3683
+
L734
3684
+
R42
3685
+
L49
3686
+
L53
3687
+
L72
3688
+
L43
3689
+
L32
3690
+
R97
3691
+
L497
3692
+
R21
3693
+
R6
3694
+
L857
3695
+
R569
3696
+
L684
3697
+
L64
3698
+
L896
3699
+
L95
3700
+
R33
3701
+
L77
3702
+
R44
3703
+
R84
3704
+
R38
3705
+
R78
3706
+
R67
3707
+
R33
3708
+
R81
3709
+
R19
3710
+
L364
3711
+
R81
3712
+
R39
3713
+
L56
3714
+
L88
3715
+
L936
3716
+
R734
3717
+
L43
3718
+
L67
3719
+
L675
3720
+
L25
3721
+
L68
3722
+
R53
3723
+
L4
3724
+
R41
3725
+
L22
3726
+
L15
3727
+
L46
3728
+
L15
3729
+
R19
3730
+
L43
3731
+
R56
3732
+
R19
3733
+
L28
3734
+
R553
3735
+
L68
3736
+
L819
3737
+
L50
3738
+
L663
3739
+
L82
3740
+
L58
3741
+
R40
3742
+
R53
3743
+
L24
3744
+
L29
3745
+
R53
3746
+
L53
3747
+
L542
3748
+
R42
3749
+
L76
3750
+
R76
3751
+
L833
3752
+
L82
3753
+
L85
3754
+
L49
3755
+
L851
3756
+
L64
3757
+
L69
3758
+
L67
3759
+
R21
3760
+
R68
3761
+
R21
3762
+
R713
3763
+
L23
3764
+
L56
3765
+
L44
3766
+
R233
3767
+
L54
3768
+
L79
3769
+
L55
3770
+
R83
3771
+
R65
3772
+
L84
3773
+
L37
3774
+
L396
3775
+
R324
3776
+
R77
3777
+
L77
3778
+
L855
3779
+
R9
3780
+
L44
3781
+
R90
3782
+
R73
3783
+
L254
3784
+
R81
3785
+
R80
3786
+
L63
3787
+
L264
3788
+
R71
3789
+
R63
3790
+
R13
3791
+
L86
3792
+
R34
3793
+
R52
3794
+
R20
3795
+
R90
3796
+
L462
3797
+
R561
3798
+
L609
3799
+
R12
3800
+
L57
3801
+
L55
3802
+
R92
3803
+
L61
3804
+
R69
3805
+
R6
3806
+
L6
3807
+
L18
3808
+
L82
3809
+
R23
3810
+
R73
3811
+
R78
3812
+
L74
3813
+
R99
3814
+
L30
3815
+
R88
3816
+
L38
3817
+
L19
3818
+
R1
3819
+
R82
3820
+
R54
3821
+
L737
3822
+
R26
3823
+
R74
3824
+
R92
3825
+
R21
3826
+
R87
3827
+
R5
3828
+
L11
3829
+
R31
3830
+
R875
3831
+
L72
3832
+
L28
3833
+
L11
3834
+
L50
3835
+
R61
3836
+
L166
3837
+
R306
3838
+
L165
3839
+
L69
3840
+
L59
3841
+
L257
3842
+
L182
3843
+
L81
3844
+
R73
3845
+
L54
3846
+
R8
3847
+
L1
3848
+
R21
3849
+
L23
3850
+
L22
3851
+
R71
3852
+
R14
3853
+
L14
3854
+
R9
3855
+
L95
3856
+
R86
3857
+
R65
3858
+
R92
3859
+
R49
3860
+
L48
3861
+
L158
3862
+
L37
3863
+
L63
3864
+
L78
3865
+
R18
3866
+
L940
3867
+
L36
3868
+
R8
3869
+
L72
3870
+
L742
3871
+
L5
3872
+
R990
3873
+
R251
3874
+
R42
3875
+
L30
3876
+
L31
3877
+
R25
3878
+
L32
3879
+
L468
3880
+
R97
3881
+
L23
3882
+
L265
3883
+
L778
3884
+
L52
3885
+
L29
3886
+
R50
3887
+
R8
3888
+
R92
3889
+
L793
3890
+
L4
3891
+
L3
3892
+
L63
3893
+
L30
3894
+
L34
3895
+
L73
3896
+
L58
3897
+
L642
3898
+
R83
3899
+
L62
3900
+
R59
3901
+
R15
3902
+
R5
3903
+
R67
3904
+
L67
3905
+
R55
3906
+
R45
3907
+
L99
3908
+
R46
3909
+
L747
3910
+
R620
3911
+
L20
3912
+
L94
3913
+
L9
3914
+
L797
3915
+
R105
3916
+
R64
3917
+
L69
3918
+
R354
3919
+
R63
3920
+
R84
3921
+
R11
3922
+
R85
3923
+
R99
3924
+
L42
3925
+
L54
3926
+
L47
3927
+
L578
3928
+
L475
3929
+
R21
3930
+
L35
3931
+
R96
3932
+
R85
3933
+
L69
3934
+
L48
3935
+
L40
3936
+
R90
3937
+
R40
3938
+
R254
3939
+
R531
3940
+
L446
3941
+
R960
3942
+
R90
3943
+
R67
3944
+
R839
3945
+
R65
3946
+
R25
3947
+
L68
3948
+
L557
3949
+
R34
3950
+
R936
3951
+
L68
3952
+
R81
3953
+
R96
3954
+
L79
3955
+
L20
3956
+
L80
3957
+
R511
3958
+
R89
3959
+
L84
3960
+
R83
3961
+
L95
3962
+
L10
3963
+
R93
3964
+
R713
3965
+
L9
3966
+
R74
3967
+
L81
3968
+
R716
3969
+
L35
3970
+
L965
3971
+
L66
3972
+
R66
3973
+
R786
3974
+
R14
3975
+
R76
3976
+
L51
3977
+
L25
3978
+
R85
3979
+
R79
3980
+
L64
3981
+
R88
3982
+
L788
3983
+
L78
3984
+
R1
3985
+
L74
3986
+
L549
3987
+
L643
3988
+
R43
3989
+
R42
3990
+
L42
3991
+
L34
3992
+
R34
3993
+
L147
3994
+
L53
3995
+
R3
3996
+
R934
3997
+
L97
3998
+
L740
3999
+
L33
4000
+
R33
4001
+
R30
4002
+
L430
4003
+
R189
4004
+
R3
4005
+
R29
4006
+
R79
4007
+
L609
4008
+
L11
4009
+
R730
4010
+
R290
4011
+
L4
4012
+
L72
4013
+
L28
4014
+
R53
4015
+
R51
4016
+
L64
4017
+
L88
4018
+
R80
4019
+
R72
4020
+
L50
4021
+
L65
4022
+
R81
4023
+
L8
4024
+
R344
4025
+
L2
4026
+
R92
4027
+
R8
4028
+
L562
4029
+
R62
4030
+
R724
4031
+
L65
4032
+
R31
4033
+
R66
4034
+
R58
4035
+
L23
4036
+
R69
4037
+
L147
4038
+
L513
4039
+
L30
4040
+
R39
4041
+
R51
4042
+
R40
4043
+
L997
4044
+
R64
4045
+
R65
4046
+
R68
4047
+
R42
4048
+
R89
4049
+
R32
4050
+
R85
4051
+
R52
4052
+
R90
4053
+
L86
4054
+
L26
4055
+
R356
4056
+
L7
4057
+
L266
4058
+
R17
4059
+
L47
4060
+
L54
4061
+
L26
4062
+
R83
4063
+
L34
4064
+
L95
4065
+
R2
4066
+
L42
4067
+
R75
4068
+
R462
4069
+
L302
4070
+
R67
4071
+
R33
4072
+
R33
4073
+
R8
4074
+
R603
4075
+
L44
4076
+
R51
4077
+
R1
4078
+
R14
4079
+
L966
4080
+
L50
4081
+
L39
4082
+
L11
4083
+
R361
4084
+
R99
4085
+
L288
4086
+
L35
4087
+
R63
4088
+
L30
4089
+
L20
4090
+
L846
4091
+
R747
4092
+
L14
4093
+
R153
4094
+
L64
4095
+
R59
4096
+
R115
4097
+
R46
4098
+
R38
4099
+
L30
4100
+
L88
4101
+
R102
4102
+
L520
4103
+
L48
4104
+
R3
4105
+
R497
4106
+
R93
4107
+
L510
4108
+
R70
4109
+
L52
4110
+
R86
4111
+
R13
4112
+
R43
4113
+
R39
4114
+
R73
4115
+
L623
4116
+
R40
4117
+
R19
4118
+
R11
4119
+
L96
4120
+
R794
4121
+
R188
4122
+
L46
4123
+
L64
4124
+
L87
4125
+
R253
4126
+
R26
4127
+
L70
4128
+
R66
4129
+
L98
4130
+
R24
4131
+
L92
4132
+
R45
4133
+
L73
4134
+
L15
4135
+
L75
4136
+
R44
4137
+
L726
4138
+
L78
4139
+
R1
4140
+
R215
4141
+
R162
4142
+
R71
4143
+
L10
4144
+
R39
4145
+
L65
4146
+
L2
4147
+
L77
4148
+
R90
4149
+
L46
4150
+
L88
4151
+
L9
4152
+
R481
4153
+
R41
4154
+
L25
4155
+
R41
4156
+
L40
4157
+
R99
4158
+
L98
4159
+
L12
4160
+
L66
4161
+
R22
4162
+
L58
4163
+
L88
4164
+
R13
4165
+
L28
4166
+
L103
4167
+
R245
4168
+
R96
4169
+
R65
4170
+
R1
4171
+
R18
4172
+
R85
4173
+
L19
4174
+
R27
4175
+
L34
4176
+
L940
4177
+
L877
4178
+
R51
4179
+
L67
4180
+
L597
4181
+
R58
4182
+
L99
4183
+
L92
4184
+
L601
4185
+
R569
4186
+
L71
4187
+
R767
4188
+
L12
4189
+
R554
4190
+
R27
4191
+
R81
4192
+
R83
4193
+
R59
4194
+
L26
4195
+
L93
4196
+
L52
4197
+
R33
4198
+
L21
4199
+
L662
4200
+
L93
4201
+
L45
4202
+
L77
4203
+
R970
4204
+
L30
4205
+
L63
4206
+
R843
4207
+
R68
4208
+
L11
4209
+
R246
4210
+
L25
4211
+
L90
4212
+
L31
4213
+
L8
4214
+
L718
4215
+
R26
4216
+
L860
4217
+
L22
4218
+
R93
4219
+
R50
4220
+
R39
4221
+
L392
4222
+
R14
4223
+
L87
4224
+
R1
4225
+
R50
4226
+
L86
4227
+
L48
4228
+
L52
4229
+
R77
4230
+
R23
4231
+
R58
4232
+
R42
4233
+
R745
4234
+
L20
4235
+
L25
4236
+
R55
4237
+
R19
4238
+
L12
4239
+
R8
4240
+
L18
4241
+
R28
4242
+
L80
4243
+
L78
4244
+
L81
4245
+
R59
4246
+
R65
4247
+
L82
4248
+
L83
4249
+
L32
4250
+
L31
4251
+
L29
4252
+
R86
4253
+
L94
4254
+
R6
4255
+
L4
4256
+
L80
4257
+
R78
4258
+
R38
4259
+
L96
4260
+
R658
4261
+
R92
4262
+
R308
4263
+
R97
4264
+
R203
4265
+
R30
4266
+
R170
4267
+
R194
4268
+
R60
4269
+
L134
4270
+
L86
4271
+
L21
4272
+
R87
4273
+
R17
4274
+
L57
4275
+
L40
4276
+
R21
4277
+
L24
4278
+
R83
4279
+
R718
4280
+
L52
4281
+
R275
4282
+
L694
4283
+
L86
4284
+
R51
4285
+
R88
4286
+
L9
4287
+
R9
4288
+
L80
4289
+
L20
4290
+
R682
4291
+
R18
4292
+
R236
4293
+
L94
4294
+
L42
4295
+
R82
4296
+
R18
4297
+
L41
4298
+
R41
4299
+
L51
4300
+
L24
4301
+
L25
4302
+
R67
4303
+
L190
4304
+
L31
4305
+
R79
4306
+
L32
4307
+
L93
4308
+
R16
4309
+
R19
4310
+
L135
4311
+
L60
4312
+
L240
4313
+
L102
4314
+
R828
4315
+
R566
4316
+
L36
4317
+
L656
4318
+
R11
4319
+
L62
4320
+
R94
4321
+
R64
4322
+
L21
4323
+
R44
4324
+
R67
4325
+
L97
4326
+
L658
4327
+
L11
4328
+
L162
4329
+
L69
4330
+
L557
4331
+
L30
4332
+
L57
4333
+
R483
4334
+
R605
4335
+
L44
4336
+
R22
4337
+
L622
4338
+
L686
4339
+
L14
4340
+
R97
4341
+
L60
4342
+
L53
4343
+
L52
4344
+
R974
4345
+
L78
4346
+
L680
4347
+
L48
4348
+
L31
4349
+
R731
4350
+
L12
4351
+
L50
4352
+
R62
4353
+
R55
4354
+
L31
4355
+
L99
4356
+
L732
4357
+
L37
4358
+
R616
4359
+
R17
4360
+
R28
4361
+
R53
4362
+
L56
4363
+
R7
4364
+
L13
4365
+
R53
4366
+
L61
4367
+
L29
4368
+
L47
4369
+
R76
4370
+
R55
4371
+
L39
4372
+
R90
4373
+
R81
4374
+
L4
4375
+
L452
4376
+
R18
4377
+
L49
4378
+
L996
4379
+
R94
4380
+
R216
4381
+
L924
4382
+
L90
4383
+
L65
4384
+
L191
4385
+
L7
4386
+
L90
4387
+
L47
4388
+
R23
4389
+
R77
4390
+
L204
4391
+
R69
4392
+
L65
4393
+
L89
4394
+
L54
4395
+
R1
4396
+
R42
4397
+
L66
4398
+
R79
4399
+
R87
4400
+
R705
4401
+
R765
4402
+
L70
4403
+
R62
4404
+
L32
4405
+
L80
4406
+
R91
4407
+
R44
4408
+
L18
4409
+
L176
4410
+
R72
4411
+
L7
4412
+
L48
4413
+
R47
4414
+
L74
4415
+
L34
4416
+
R92
4417
+
R61
4418
+
R96
4419
+
L79
4420
+
R43
4421
+
L73
4422
+
R31
4423
+
L59
4424
+
L28
4425
+
R88
4426
+
L55
4427
+
R51
4428
+
R15
4429
+
R31
4430
+
L5
4431
+
L19
4432
+
R34
4433
+
R29
4434
+
L92
4435
+
R82
4436
+
L90
4437
+
L19
4438
+
L71
4439
+
R12
4440
+
L45
4441
+
L77
4442
+
L65
4443
+
R65
4444
+
R37
4445
+
R33
4446
+
L81
4447
+
R46
4448
+
R38
4449
+
L92
4450
+
R34
4451
+
L26
4452
+
L89
4453
+
L24
4454
+
R22
4455
+
R62
4456
+
R3
4457
+
R94
4458
+
R88
4459
+
L14
4460
+
L14
4461
+
R40
4462
+
R27
4463
+
L35
4464
+
L47
4465
+
L24
4466
+
R3
4467
+
L32
4468
+
R33
4469
+
R4
4470
+
L33
4471
+
R49
4472
+
L47
4473
+
R31
4474
+
R43
4475
+
R11
4476
+
L12
4477
+
L18
4478
+
R15
4479
+
L18
4480
+
L22
4481
+
L43
4482
+
L7
4483
+
L8
4484
+
R6
4485
+
L14
4486
+
L46
4487
+
R49
4488
+
R5
4489
+
R32
4490
+
R38
4491
+
L45
4492
+
R22
4493
+
L1
4494
+
R11
4495
+
L22
4496
+
R49
4497
+
R28
4498
+
R41
4499
+
R12
4500
+
R25
4501
+
R3
4502
+
R22
4503
+
R25
4504
+
L26
4505
+
R45
4506
+
R22
4507
+
L43
4508
+
R9
4509
+
R48
4510
+
R1
+10
inputs/day1test.txt
+10
inputs/day1test.txt
+1
inputs/day2.txt
+1
inputs/day2.txt
···
1
+
1061119-1154492,3-23,5180469-5306947,21571-38630,1054-2693,141-277,2818561476-2818661701,21177468-21246892,40-114,782642-950030,376322779-376410708,9936250-10074071,761705028-761825622,77648376-77727819,2954-10213,49589608-49781516,9797966713-9797988709,4353854-4515174,3794829-3861584,7709002-7854055,7877419320-7877566799,953065-1022091,104188-122245,25-39,125490-144195,931903328-931946237,341512-578341,262197-334859,39518-96428,653264-676258,304-842,167882-252124,11748-19561
+1
inputs/day2test.txt
+1
inputs/day2test.txt
···
1
+
11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124
+200
inputs/day3.txt
+200
inputs/day3.txt
···
1
+
5966546654588755548354591946657465889859765969657756889447669666979883895847755487857956955568577855
2
+
4542746645767855433451537445453466457263428353646434434876784556524857444555654342425558296642647865
3
+
5422251221224555623173322266326732412226343722532361271223275221532113734725256725254212236227222221
4
+
2324224426223243523532255245222222132222322212312412227525212622115222222422233212314232235522221282
5
+
3425335254326242335625565223334643464624361863233224152423533244376533232372522332643344363223232343
6
+
3323233325233222363224231232322322233232322313334122322327222324232232121323535223223323423333234333
7
+
2322422254231122221232525212231322423522221222282422162223425222232222652214222222232454212324522222
8
+
4415447714455363455685537565354363676452954665753777666562457835446656284751447993777546734467675755
9
+
1321372222222122333322332123323422222322252223222122222332122222322232125211331223132323222331122332
10
+
2242236323222342222112272221213212334114222323242122132214324232233232222263223222222432432223322122
11
+
8666442549563855473429495687888487174444636934689888567563752469997857776888435384749968858433947468
12
+
2324313232246343222224342234422321245212242423323411424213432222224342232332324232413423243423233121
13
+
2683781715168555587665344823228541542218165425258188531728734552264673257425771487447756633636163149
14
+
1222223226221322222222223222212222322122125422222222324224424422232223225223281322213534227324222222
15
+
5453552445153545644522534554544354555623563556577572237374753435463833254947544334526638415427343432
16
+
3342222252323515234222627222212413112534241272422423223227282252222254242224333544215112522943221225
17
+
7695333726436944223333723215353562935131693232362577267258343264534326334936632133292734373323684433
18
+
3232532232532213351332221323343312123432222223162223263333325232221224213321122397232432943333323223
19
+
2112422344232232513332265243223234713344645443375227325332223332723334345263432322512425374152552325
20
+
2112223322222265325221122221122322344221322222212222623122162212222222622273252415212543236224282226
21
+
3522223324214143232445522222552232222425242341322325223221441354225135322232144422223312633322314451
22
+
3553546964645433646854444545654684586664444554557344656544674454866542455564244724584635864456553552
23
+
2712132121124212228421333223222232222222232124122134222312221222233132212432223222423223222142222242
24
+
5243944565445115245394423332345325453227656933441445744435386341486555446252345552545553153155414455
25
+
5772447636633536424366261954729934453835645363432553634652753366355883885321733333657475668366474567
26
+
2232222423224213542322311322117222322242124212222212222222224222221311222411142122222233222241221222
27
+
2172222222222212172122543112232222222221222222244522122321235322221222223222222222222222215222232332
28
+
3232253411243335242423333323332232433322544313233221242223512322333233223626228323312243113212231323
29
+
4354444244443444424444454477434344455432453523444454343422334434444643644422433443243433445424346344
30
+
5654443436244425651246555333445346246614244246522445624445547356466332343845372444136585636453343646
31
+
2261413264273432522132262224336131112623313612262232223531724262612623213426342123442222222261225132
32
+
4373423443864444237444325623423232442462514423354435433543444556446334342465349435334635744411243244
33
+
5422222243422233424421322322425222213133122221222322251421223223211124225122323421322631212321522223
34
+
5963425243163332355331441641433333326335525213433232232231326234615232642432634222826632333323924451
35
+
2324222222132312333321322225434334223323234141273322325342323213653322322335412222326323331363123524
36
+
5333224514863533453264233532582633373331444536362422774345533363335783331322425432393454336733374523
37
+
6664464844646545643544454444254444265353434444542454344566441844433442436253654434566284334643344434
38
+
1124522111242222322227222224224221222327222122221212125252251222222252223323221232224522122222321222
39
+
3333442334343434244343225353423354573442454223433432513444343433243231444354135144434435452344224333
40
+
2262236237137225321226221221236253135467323313327813423513926312252334262272412611566632233361342242
41
+
5392592455444746485543643423688666547355365445734465633539744375937844375476945332576556454437338526
42
+
5332322363334313543655443375335343337333334325233352317335354433136535354333533334332542343322331334
43
+
2628652623641252526739354945246675138456355651565467436384464627556352765562222374242655131322464255
44
+
4252232443221482452342244241632224852342234454453297576353341322331334334324427462226124222634324484
45
+
2343524324251432343246435412256145211311154332123623231522124342233124542142122212433532122132314313
46
+
3121112232232226342222252124122252313222212223221212212112333422222222321222222222214122222324222121
47
+
4545155455423544422347654224443555454345452455344535453555555454463645445339625143555465443335555441
48
+
5232112323357534334442634546523833463236681345253623329255242273527442366224324461232145276286752531
49
+
2222242544156542442622344421254632325542352232224232645322232332516644243263334234224265151224422625
50
+
3232111512134223231412251249322622243314221121242521732332241112222322122253222213225222212223133223
51
+
2137456446344823253847425324457735964736765465454553665529426837274845146672425239823723678622542976
52
+
3232431332441314142343443324323133323333443343343343433343324433333354331423453433543659333221333543
53
+
3792349222426221232328521274527712222212236287629895275222522285952122145272182426478113226763322359
54
+
7232242443222323253213237222232437322224232242342222243173422251162244332422472222162238221422741244
55
+
3866476683744737663346554542536441642942416535726656534356736771635556445574363637258365544336427341
56
+
6989475847166863753683472846257524673255552682346416464575366742647387437723554233365788818885437874
57
+
2321312261931222324262621424212222257228613642222221822242471224242627237377383462243392325323532494
58
+
5526448865492548412356563325695884355822787558444326673637562977684644265493677563655114625574666445
59
+
5161451222522622612543222524225232224124243232224273553261338242221526212222523422253426472261572522
60
+
2234435355325343525422555553333545233523355252232535452333233332545354435452244553547542455323522343
61
+
3323333333433422433342333423532333383333333333332333433324742333234312334333233333332143332333134323
62
+
6274624676266423372423166657524747572423742244422172765691253246455536287625642573414593394834966487
63
+
2492462814355722424462725721442241222555686632111535122622554256225338242262642443624528243355562557
64
+
2222222322222212212224321132322224223222212122212228212217222124222152332222222122222223311233221223
65
+
3323222322223232324213223224224212233422222232222422222223324223623231332222333433325223323222312331
66
+
6843444733422331541526232332253335334454344296626313322444235544444523231322534513484224344543484475
67
+
3322212221222221222222212122522211122223322212248222122272222222352432112212221214423113223222232422
68
+
2954465557768644246662646996625779626629677338557847267476472846655567884645856765775586665366284525
69
+
4144434432182345324664773444643333434322737444536337329324733674332444634343443423531335322454345815
70
+
6337323722422446423612813562356353443433335371325263243235432566633124336463565756725343331423346356
71
+
1321467267713441124514622232756371645651116755716557177213236767653267434122662432455424215765442689
72
+
1352422333742333426333422332143314232133234341322343344334254332332342641423633444522255353235273232
73
+
5666486465666676663165636645468553453634666665636576548584666696678656766576678645665786669576567765
74
+
2233233223333342323221423332323332323533363213224334327233323212423121524433523322323332223432227355
75
+
2332125232123221222222322235232522222324222222222621122532222232341315224223224222223224321321645312
76
+
3433441344344444354461454433313325643331523224462434323465433523434234354333544342233444423344534634
77
+
3243223424221322133322434313123353432232134322334224232212233332223432223221334142224124223124342352
78
+
3321233333533313333343384446574333243333232313443354442362343333333423322453443144333345443232233421
79
+
5143343533454435554332443333343424355444253453433228343324245435433543333333513434535355233233543355
80
+
5493355975555767457451576475466757564945655386654644844364595655467684446534246847763251655467536853
81
+
1422232252222244223314342442214222222212432252222222232142212232211211223312222364443282282422334221
82
+
2422222142221232333321222231222422212422222222223222222322222121172222222122212211231222222222222213
83
+
4232332233445435543544132223432323134222223341333133443534421423232422323332332424452132322324343334
84
+
5333333232555553422337547533354245234652554554545433542552354453343555554315333343544743353447462554
85
+
8223564221936743763777324425733373415526479287562386241766624787522626327237265478331332285223424926
86
+
4641336733527335563784257333348885332443483535372331648749334829374337737534666733378445369363327372
87
+
2537623646443355552263644746464533355345433343357535564354351565545523168233536655546436642352434645
88
+
2152134125311143243351453321232142342155135343143523135515252121341442514331135454354321433512526789
89
+
3223133234721443432311332332323252343332222223222233153232253313347332433333333423232222333223231151
90
+
6572776785737735753946665862896387826755845269998549992857936376966753465489955574499145885395549264
91
+
3141326224334322222322335353443263223322352235242463222246552324423655422152543223252235211334744288
92
+
3452233433334233364225523335333335373442233553332656432633136366326453533353333343322745334533354633
93
+
4453358679558455454455655559433243495345474175545835555345754152535555854455455855355336525874354525
94
+
2112842221322212341241272227521929124282284244723222422218426224222623222222112169257225162226132221
95
+
6354323563231433446256927333437365936353452553234357451134663245626563744445354132664332645425713545
96
+
6442322366534344344123323733265342632232323313935373343333424334233341335335412843344433233244422635
97
+
3225212222124222222422222323121242222142222222222141122322224222244222222132222212223122221132242242
98
+
3568364547563266273735644938534578738465559383615775337332835678843357435868448872838933847745336847
99
+
4565754312212444453434544642553633622423452554362372424752734435485236336275344554436555524244136553
100
+
6436114624354253213444646233634112136433156435465442232252352226442553541464113336226514346645525789
101
+
1423311231234334321123424413141224312412313434222242221322433114341324432221211441424443323334456789
102
+
8552543584793363447722232252568544516923637822434363233257335437727438383533435336322465745452365423
103
+
3363432162212712133312222223241235211324122222143123222222623222222212713521322242233123234351222731
104
+
3323443314443353143332413122124243322242323332233333443346243522242323424233134133343225532344433462
105
+
5354454225434314351546442422332222443456242462336354846647332542333222232421344525245464426323223434
106
+
2152322321342232222421332222224121221212232223222332323522122231234241422112311122412121112242211322
107
+
2227145451222236213322564255646212212222224421222223421124123231621222267241322225221122912222262111
108
+
3546344553226433252323357324365336323524624546454333336735923445345366433787754247453744353353342466
109
+
4266155222212222131222512122232326222252621428124221122222222261222262454111122452231215221233232222
110
+
8462466626545326243532255335417443361226666625556926634465451545654312563666643444245586556644463534
111
+
5235123522251251652235324212242113221157622332255332222512221242221152224251262213225242422126223115
112
+
2542433334352333335225232234333433352123422324243334333552333233335235324452533452133232235722334333
113
+
2433343532225534434332235134334323333531334413242341124332334333442333133432333443653223333343333423
114
+
2222132122233242422242233224232221132422362222221224223241332233554222341122112313135225222122123222
115
+
2313434442451151114122212333221262442222442144223242232243342242432222233434223222423433441232252544
116
+
2324243623121264363332236122243226332331672232522733513222321335342553233235433332153233212624623323
117
+
5635333443333733324334334133322442432413253334354213133334333433343233285345933236327212734353221355
118
+
2222225422242428332142142234222241362412332523331415224112264523322222212452222422424631322314441143
119
+
4475657476878685867484639857645948655788668536475657788484657753555949667865645465763786488978775655
120
+
9848447474667345747435326259288747656536755884544764343644543338453359234332463632566275454636438687
121
+
6432363437755273265623524444533257237334336234321623235433252366433633255655225756312564253446457442
122
+
5546856627678773727172469177764592642687586647529895336678557676388743572936655854414676423547775383
123
+
7162633493716443455872541433245413484313733452444734444443735433449334449544355743436223666644343321
124
+
2572563533546546653354454645455555474464655365344755454455837555674442464654441346646546564663523445
125
+
1224322522324224633241324433731212125512121249343714322251226522232461225334521312243332243623222352
126
+
1352322131221222222232723221222122222232122222223233222222321311234122222122222224222112222223122221
127
+
3252231432252243451335351534337232434323534236222243234234334323432243435242334347434385222134223375
128
+
7443335445434424253427657435264354445443444244432347543425337444525314336543354843158465439435434316
129
+
3222982682222612772861233572624864321221122224223321224722213122286123222313323327132224238422431222
130
+
3583331732927282422534313323233223335233653324539244123233272535833341233333569473249435233422612333
131
+
3222322333222112233233221223222122331223121232131233323333323222221332322222222221213221222212214212
132
+
6353363846364648646668363433543348755462736564266654664453642653554245665434426463444435537354765558
133
+
3423333221233336431243133223632523221433632333342223243323223324343333432132323344332426313344332342
134
+
3223322333221132513222232222362312227222735233422222322233233223222223223223232226225233323223223122
135
+
6553646555554651555648765744544555364165855566558717565344555444356452556585231755555456564479565439
136
+
4243222422224233113222422222112424162122224121242342222322322123212311442223212214322221222322241324
137
+
4233211543232214522345423233436232542235243214452245225123332423232243456321244122322222312122323322
138
+
3345533464734436856864333868255322554635832443937355244434533849338945443344624545452467334964497233
139
+
3173224222412521239312233219224352422712312214135124322721322122127132219242229418225222714223142229
140
+
3162432244234745352223325184245322847342714422522321223235843322224286225632528466615689683136253244
141
+
4235443335446233232464634343733642242443444434214422633443441431321563412352243134322344333553324343
142
+
3823325334231322342312235313542113322854675333642436345333333232531131233232626343323233333533333532
143
+
2236143222222523311264442153341623316366132121222421125234232535222325263212221322122122365172122231
144
+
2434224457335331163122536122434244143142522464253442243472644243571345241145436593432425324332423365
145
+
2393223335343332233333237234333233212345383133223233323323332235323222321372335352133233838233239423
146
+
3322854732234455221443232154445442444225411441433343434243234425445345255152343245414242344253335552
147
+
2232332342424222322222234422361112222222422322252432413233223222242322322211222233222233212312221242
148
+
4563322912162552292222214622227125363121673551222224137354217832622292422242916312432222811222724552
149
+
4635352525532364322423332412333463553534533523434455333433353352542335433533443332234247335523433493
150
+
2294444542133424422422355444452438347432242333213614242435223332422131212345324224323233443833544331
151
+
4174736724576257235447954142252828447241324247253444226752582818365231137562835462123244353224243232
152
+
3242227322323232212623222222222132223113336371123243334233232234212122213313232218725322223224232254
153
+
2133441334322223442352317742724334343433121235333423243331331125224343533332233324231327438334334523
154
+
3221123111122234331232432532132222223232224322322223223221313422232631312444241232222322311123342222
155
+
3272222123233224222312222232222212223352121252232221221223423322212222322122324612222222522232442222
156
+
2311225212524174125221222193462121825412221213612462225273423252722222221272622111324238221191232262
157
+
2237623172221535335987425563349754836432546631871455984471335427235235532464413722536613447344235432
158
+
2262423412535112233123337922362144535322434433123322223249332324323423423333524438823224332544254321
159
+
2222222212222222222322122122222222222232211222231222323122221223222222122222222152112121121122222222
160
+
1323248243324353637234224642171243534222442341434429323432221228446322212322143373243342291216636342
161
+
7987579256589679753389663399597634538395537994734689877374477535869584689979667957875566992768596673
162
+
2652275416222222324126622163122244262281372524225672432226252743252665552521225722236347352467233452
163
+
2212231222223222432225332112224323141232232222223323221213211222222222222422221222222376226122232215
164
+
2224222253352211132221241422371214221343729211422222112223222224123222222122112122422233221132324251
165
+
9344534654223744453425555324553554447523553756365549453243434443352524444554434534342534595552364353
166
+
4322533534436362432354233246542455564333253354335433326656617455342452366323366355535416243634743223
167
+
4676645447577676445654544665577775772363446565564575486544444744446745576456554457544455464445455755
168
+
3322212242324222312533322332313323431323322253323213382253316323222231723232142322223133321222212123
169
+
2572222122232422221792522242122325212232442424222442222221454523341222122231222227322224327122222623
170
+
7334447633626359444442545837435676143333574646264533755445555625464676753765324645434643544454464766
171
+
2322222132232334332233233463313323322322333323334226323333123323233332333333442361223212222322343722
172
+
2242336244446434444435444534143433444374746464444543443433374435345543347444464474344454444473444434
173
+
3123322313262231332225222113322234342221233722212322323414433331233442223262212313373332332224234252
174
+
9352412214242122232222432123422662232322321134242342223323222212232226233212222233121122322222332242
175
+
4736431626714323842651212533433573342355532543222331333554366272447555533135242642244334645355545545
176
+
2472223225223243422342419362233325227851222222225242452223222164223324321552243322112524411453122232
177
+
2252322413521221142342133233231422232424122551252542322222224421121733213592228612333464563262324334
178
+
2523553215362323542323338155821424424443834352254226529566534556453564333642524272924632627535323515
179
+
6554345479377685374765446735558667354545646558567463863444555854579473554268452646777677778774564657
180
+
3232235235333537433236234445553345231333333433332333373152532243352338335343431584424323433351523433
181
+
1521522241532122522222222521222222222342322111233253322221222522322222232221352231233213214122121251
182
+
2444223414441453424247563364834454154582463338424436545334355334254634244444523444344844443264385333
183
+
8484934248686434424347878474937455235484656654643299454444433676573457675578544556428594354533924344
184
+
2264221112146221123225222222222121212222221213116212225222222122222122251132222165224522228222222222
185
+
4335444334342436244432332354332753314422524434765543359335522243353625433234235233622335433186522222
186
+
6774525555567545566345585775465752455561583545555448595552556353555655555455555445653264634545452196
187
+
8767574132734963847872834724176579773753887822475446995355475274834842122652346537485587595572495594
188
+
4221222343422545312522321222431243542321254223245125252435324613262223723223252121232422262256166262
189
+
6334632424242442512232423442441312715342234423462344432423332224422344342234222662314423413134235224
190
+
2323342323322333323213322223333323111273141111113332435424423223533243132332333432233324232333213114
191
+
2346135221242136352126332345432632222325132632265232622213272522321222242252345833222539235313123122
192
+
3383444684433314435473444453291443543434443434868443824343535464233463744433834743433443439814453584
193
+
2352254744214432641473842923244324222273123342344423232423232322344222331834342253932222622235423241
194
+
1332314211242422222221322222322112222222221222323223231422223222313212322314222212123221323323312112
195
+
2232344422342333212212421231222132123222221227224233332232222235222212332452212322232233142534213421
196
+
6445776542465468544242457727683445544443962648646641476446476776636454444646664864745529576337624474
197
+
7722122222234222472214222222212422223812223742415321422228423223331323222242346242622222284222221121
198
+
4531123234334233233248633323343142333332444234332323234434414148453332244343442223152333442433345823
199
+
2221316224345532222214424621334432622232324326226223222222212342223244232513433522145226533232122623
200
+
9454527354735656537472876857246747554763445832354347645346455852255465346827664554778667358636366668
+4
inputs/day3test.txt
+4
inputs/day3test.txt
+35
src/day1.zig
+35
src/day1.zig
···
1
+
const std = @import("std");
2
+
3
+
pub fn run(input: []u8) !void {
4
+
var lines = std.mem.tokenizeScalar(u8, input, '\n');
5
+
6
+
var dial: u8 = 50;
7
+
var zeroes_p1: u64 = 0;
8
+
var zeroes_p2: u64 = 0;
9
+
while (lines.next()) |line| {
10
+
const direction: i2 = switch (line[0]) {
11
+
'L' => -1,
12
+
'R' => 1,
13
+
else => unreachable,
14
+
};
15
+
const turns = try std.fmt.parseInt(u16, line[1..], 10);
16
+
17
+
const new_rotation: i17 = dial + @as(i17, direction) * turns;
18
+
19
+
var zeroes_clicked: u64 = @intCast(@abs(@divTrunc(new_rotation, 100)));
20
+
if (dial != 0 and new_rotation <= 0) {
21
+
zeroes_clicked += 1;
22
+
}
23
+
24
+
dial = @intCast(@mod(new_rotation, 100));
25
+
26
+
if (dial == 0) {
27
+
zeroes_p1 += 1;
28
+
}
29
+
30
+
zeroes_p2 += zeroes_clicked;
31
+
}
32
+
33
+
std.debug.print("Answer P1: {d}\n", .{zeroes_p1});
34
+
std.debug.print("Answer P2: {d}\n", .{zeroes_p2});
35
+
}
+53
src/day2.zig
+53
src/day2.zig
···
1
+
const std = @import("std");
2
+
3
+
pub fn run(input: []u8) !void {
4
+
var ranges = std.mem.tokenizeScalar(u8, std.mem.trimEnd(u8, input, "\n"), ',');
5
+
6
+
var answer1: u64 = 0;
7
+
var answer2: u64 = 0;
8
+
while (ranges.next()) |range_str| {
9
+
var range = std.mem.tokenizeScalar(u8, range_str, '-');
10
+
11
+
const low = try std.fmt.parseInt(u64, range.next().?, 10);
12
+
const high = try std.fmt.parseInt(u64, range.next().?, 10);
13
+
14
+
var buf: [32]u8 = undefined;
15
+
for (low..high + 1) |num| {
16
+
const num_str = try std.fmt.bufPrint(&buf, "{d}", .{num});
17
+
18
+
const middle = num_str.len / 2;
19
+
20
+
if (std.mem.eql(u8, num_str[0..middle], num_str[middle..])) {
21
+
answer1 += num;
22
+
answer2 += num;
23
+
continue;
24
+
}
25
+
26
+
for (1..middle + 1) |chunk_len| {
27
+
const repeating_str = num_str[0..chunk_len];
28
+
29
+
var is_repeating = true;
30
+
var i = chunk_len;
31
+
while (i + chunk_len <= num_str.len) : (i += chunk_len) {
32
+
if (num_str.len % chunk_len != 0) {
33
+
is_repeating = false;
34
+
break;
35
+
}
36
+
37
+
if (!std.mem.eql(u8, repeating_str, num_str[i .. i + chunk_len])) {
38
+
is_repeating = false;
39
+
break;
40
+
}
41
+
}
42
+
43
+
if (is_repeating) {
44
+
answer2 += num;
45
+
break;
46
+
}
47
+
}
48
+
}
49
+
}
50
+
51
+
std.debug.print("Answer P1: {d}\n", .{answer1});
52
+
std.debug.print("Answer P2: {d}\n", .{answer2});
53
+
}
+32
src/day3.zig
+32
src/day3.zig
···
1
+
const std = @import("std");
2
+
3
+
pub fn run(input: []u8) !void {
4
+
var lines = std.mem.tokenizeScalar(u8, input, '\n');
5
+
6
+
var answer1: u64 = 0;
7
+
var answer2: u64 = 0;
8
+
while (lines.next()) |line| {
9
+
answer1 += try calculateJoltage(line, 2);
10
+
answer2 += try calculateJoltage(line, 12);
11
+
}
12
+
13
+
std.debug.print("Answer P1: {d}\n", .{answer1});
14
+
std.debug.print("Answer P2: {d}\n", .{answer2});
15
+
}
16
+
17
+
fn calculateJoltage(line: []const u8, num_digits: usize) !u64 {
18
+
var index: usize = 0;
19
+
var value: usize = 0;
20
+
var total: usize = 0;
21
+
for (0..num_digits) |i| {
22
+
const start = if (i == 0) 0 else index + 1;
23
+
const end = line.len - (num_digits - i - 1);
24
+
25
+
index = std.mem.indexOfMax(u8, line[start..end]) + start;
26
+
value = try std.fmt.charToDigit(line[index], 10);
27
+
28
+
total += value * std.math.pow(usize, 10, num_digits - i - 1);
29
+
}
30
+
31
+
return total;
32
+
}
+40
src/main.zig
+40
src/main.zig
···
1
+
const std = @import("std");
2
+
const day1 = @import("./day1.zig");
3
+
const day2 = @import("./day2.zig");
4
+
const day3 = @import("./day3.zig");
5
+
6
+
pub fn main() !void {
7
+
var args = std.process.args();
8
+
_ = args.skip();
9
+
10
+
const day_str = args.next() orelse {
11
+
std.debug.print("Needs day arg\n", .{});
12
+
std.process.exit(0);
13
+
};
14
+
15
+
const test_str = args.next() orelse "";
16
+
17
+
var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init;
18
+
const allocator = gpa.allocator();
19
+
20
+
const day = try std.fmt.parseInt(u4, day_str, 10);
21
+
22
+
const input_path = try std.fmt.allocPrint(allocator, "inputs/day{d}{s}.txt", .{ day, test_str });
23
+
defer allocator.free(input_path);
24
+
25
+
const input_file = try std.fs.cwd().openFile(input_path, .{});
26
+
defer input_file.close();
27
+
28
+
var buf: [4096]u8 = undefined;
29
+
30
+
var reader = input_file.reader(&buf);
31
+
const input_content = try reader.interface.allocRemaining(allocator, .unlimited);
32
+
defer allocator.free(input_content);
33
+
34
+
switch (day) {
35
+
1 => try day1.run(input_content),
36
+
2 => try day2.run(input_content),
37
+
3 => try day3.run(input_content),
38
+
else => {},
39
+
}
40
+
}