+7
.clang-format
+7
.clang-format
+15
.editorconfig
+15
.editorconfig
···
1
+
# EditorConfig is awesome: https://EditorConfig.org
2
+
3
+
# top-most EditorConfig file
4
+
root = true
5
+
6
+
# Unix-style newlines with a newline ending every file
7
+
[*]
8
+
end_of_line = lf
9
+
insert_final_newline = true
10
+
11
+
# 4 space indentation
12
+
[*.cxx]
13
+
indent_style = space
14
+
indent_size = 4
15
+
+2
-2
Justfile
+2
-2
Justfile
···
22
22
23
23
# Run tests for a specific day. Defaults to today's day-of-month.
24
24
test day=default_day: sync
25
-
day=$(printf '%02d' "{{day}}"); meson test -C build "day${day}"
25
+
day_raw="{{day}}"; day=$(printf '%02d' "$((10#$day_raw))"); meson test -C build "day${day}"
26
26
27
27
# Run a day's solution on the "real" data set.
28
28
run day=default_day: sync-release
29
-
day=$(printf '%02d' "{{day}}"); meson compile -C build-release "run-day${day}"
29
+
day_raw="{{day}}"; day=$(printf '%02d' "$((10#$day_raw))"); meson compile -C build-release "run-day${day}"
30
30
31
31
# Clean the build folder. Useful... sometimes.
32
32
clean:
+1191
data/05/input.txt
+1191
data/05/input.txt
···
1
+
527028483603237-530596046705806
2
+
231611686269733-232830228664181
3
+
75475032395596-76960084164171
4
+
203839219483157-205309276440608
5
+
50899806602568-58580276960637
6
+
348023446284659-349432400960533
7
+
99300079175333-99300079175333
8
+
243603050472076-244121129344428
9
+
215608453928184-218347151677708
10
+
559603756857369-560747959347574
11
+
357973561889555-361367389958275
12
+
153034818227400-159360207888955
13
+
502733798128162-503279006301491
14
+
323013740729363-323381915985523
15
+
527028483603237-530596046705806
16
+
61641386395983-67021230322014
17
+
91024067485337-99300079175333
18
+
232449072996959-234097971321113
19
+
148783445784670-148783445784670
20
+
15833326205797-17418339643302
21
+
505605330381036-506207894991252
22
+
112602413285185-119326613429128
23
+
123946485247056-129469892544921
24
+
137167742337992-137324020583710
25
+
511152287424346-511253380025377
26
+
246461419852156-247170936427773
27
+
504676621204473-505026491432594
28
+
510534926915260-510900675620171
29
+
234587388109332-235821545099396
30
+
329912182745310-330381374217602
31
+
73828954111068-75232756067163
32
+
135752935675329-136378697282213
33
+
496191249922313-501122630801934
34
+
133979736497382-134764106087904
35
+
252104186307035-257089307127655
36
+
504302623647034-505026491432594
37
+
76526080063341-78067653480180
38
+
133979736497382-134654293556154
39
+
558677362576826-560155745642088
40
+
74524948975609-76105959782870
41
+
235635330848985-237191841329135
42
+
541917811955625-541917811955625
43
+
119326613429129-119326613429129
44
+
553872392553945-555266156778988
45
+
366414367343123-371371164109127
46
+
345992126286124-347761851238364
47
+
133286158975157-133979736497382
48
+
505178666516591-505853679404368
49
+
385779390535182-389543666687966
50
+
136893495537949-137167742337992
51
+
327348264387941-327866800676191
52
+
131664742722233-132008978697672
53
+
516853543506548-521402105555623
54
+
354383952572690-357973561889554
55
+
82739490947292-89017889386605
56
+
552959255039459-554658031622118
57
+
342031782279918-343652907746898
58
+
508484714248278-508961054793712
59
+
237519915568507-239145977273580
60
+
507770887945018-508484714248278
61
+
343907345660132-345606200241766
62
+
483916138291259-490404769570928
63
+
464852542067488-467203292140343
64
+
77632426688474-79114482043408
65
+
442834205538352-447108362422934
66
+
403656227860835-403656227860835
67
+
246461419852156-247170936427773
68
+
222613372587062-226711219326389
69
+
325646224334292-326081258515740
70
+
273530143840563-280932638034120
71
+
2020409498513-6492182236039
72
+
239362201739794-240956508377631
73
+
103697640811728-103697640811728
74
+
464852542067488-471273807149096
75
+
137784042454372-138569267642138
76
+
556942026237883-558021643102410
77
+
250248951956584-250773157158356
78
+
508484714248278-508961054793712
79
+
329912182745310-330381374217602
80
+
247170936427773-247866876325266
81
+
438390869383638-441208567253203
82
+
166867276405365-169858552714393
83
+
317448008624870-317448008624870
84
+
131664742722233-132343845539301
85
+
322876735023384-323487090592579
86
+
557866275687601-559015258148801
87
+
262675114041629-270790651126896
88
+
413510315014473-420007769205209
89
+
242471956463321-242597321380948
90
+
521402105555623-521402105555623
91
+
243603050472076-244341783051255
92
+
142132531346043-148783445784670
93
+
131282276978058-131864946681032
94
+
453739749815969-459023513536430
95
+
415465248953494-418338269312101
96
+
435010996678516-438390869383637
97
+
245241776827571-245413024187675
98
+
218347151677709-218347151677709
99
+
374162092970043-377611071422835
100
+
504302623647034-504519885344972
101
+
34077459182861-39777947758526
102
+
26392981832048-27184361782686
103
+
455640553554951-461195813672932
104
+
537068214024169-541917811955624
105
+
376155658293602-380858986836400
106
+
82739490947292-84836363036474
107
+
397748480001034-397748480001034
108
+
136893495537949-137628729613168
109
+
507326835905711-508025842388742
110
+
324922873483849-325166493618721
111
+
195435929723019-200695398398917
112
+
41749006858622-45856980801485
113
+
78785040359990-80030288498488
114
+
134261966072861-135110609174502
115
+
385779390535182-389543666687966
116
+
262675114041629-262675114041629
117
+
163457238066213-166867276405364
118
+
544396384414554-551941721325111
119
+
403656227860836-408398229161489
120
+
70475724803704-71997715360766
121
+
41749006858622-45856980801485
122
+
20753943053572-27184361782686
123
+
103697640811728-109322877986643
124
+
504302623647034-504519885344972
125
+
53498304611067-55771266424594
126
+
181598181282532-190696236439008
127
+
136031474719714-136893495537949
128
+
140020791580455-140400459583434
129
+
305187053481863-310519894847258
130
+
283722612347495-288529460316528
131
+
324576992288902-325400357860404
132
+
335780791417434-340717141451355
133
+
135273702699110-136031474719714
134
+
321885261062598-322500760215531
135
+
2020409498512-2020409498512
136
+
247635420618152-248168741920366
137
+
10809942857493-15833326205796
138
+
244999949675850-245241776827571
139
+
122420293179842-126572678076742
140
+
346979435906074-348658916848459
141
+
473454317579521-481021223255510
142
+
252104186307035-257089307127655
143
+
332441272969558-335780791417432
144
+
426124866409633-429906562980455
145
+
249600206770349-249922379246403
146
+
248986021389910-249359585895003
147
+
561261795684072-562841287225609
148
+
393079650593881-397748480001033
149
+
185652825479208-187119812414873
150
+
173953027389372-179515478581254
151
+
327561022376665-328177748368301
152
+
349945753303336-351545827340308
153
+
236387775465212-238197708561329
154
+
233299681147638-235054475210142
155
+
244999949675850-245697091078303
156
+
560605314311115-561930684727783
157
+
238631856949366-239910573540071
158
+
364741905307008-371371164109127
159
+
243856713965175-244121129344428
160
+
247479120838145-247635420618152
161
+
31917117922914-34077459182859
162
+
292145500212003-292145500212003
163
+
511832090589807-512338970187689
164
+
447108362422936-449629160130141
165
+
424346163029900-429906562980455
166
+
509344387593849-509861907786160
167
+
344929686478190-346606734251988
168
+
314266885205282-317448008624870
169
+
349204609735176-350596934361940
170
+
555687085700713-557093789144241
171
+
133614070485386-133979736497382
172
+
473454317579521-473454317579521
173
+
226711219326391-230643027991650
174
+
276637728866547-280932638034120
175
+
342988184222313-344614607589202
176
+
292145500212003-297719133030350
177
+
133168028889494-133747912047206
178
+
504302623647034-504519885344972
179
+
135752935675329-136562658228344
180
+
203839219483157-209702986145200
181
+
134654293556154-134764106087904
182
+
173953027389371-173953027389371
183
+
544396384414553-544396384414553
184
+
72610827321812-74139327712477
185
+
506207894991252-507105474607917
186
+
555061918895904-556176843887873
187
+
192711220582644-196555681976860
188
+
283722612347495-287505783920120
189
+
71476667916353-73009555122235
190
+
486150733366819-488568724471762
191
+
192
+
333238176511983
193
+
485689992458747
194
+
549508264451078
195
+
33431507780279
196
+
559802145764979
197
+
233626241952600
198
+
561293064269704
199
+
54611723120308
200
+
329927376327474
201
+
316432132471650
202
+
176408968598599
203
+
302590848025064
204
+
225404480754421
205
+
355943937692688
206
+
230512904598418
207
+
12363346143090
208
+
114741821575203
209
+
425585306430426
210
+
105794541748033
211
+
63204897129359
212
+
480220099502638
213
+
369559694173945
214
+
259794609697498
215
+
394919482126261
216
+
95343838552578
217
+
377064693071571
218
+
387553021361688
219
+
54165960451051
220
+
68847393049220
221
+
518843425882193
222
+
159107953851712
223
+
217221319851440
224
+
315392797785894
225
+
143344047650409
226
+
227727688557414
227
+
29324798738189
228
+
44649229613259
229
+
287908262819671
230
+
23893469383317
231
+
71604573428899
232
+
291974862345939
233
+
386022920727495
234
+
184607106234930
235
+
15285701743385
236
+
339990086631368
237
+
91375408336743
238
+
367255925551385
239
+
78174550889769
240
+
152713653148877
241
+
6019989324296
242
+
181256493811438
243
+
83045077581486
244
+
491015280526305
245
+
414912747557253
246
+
414065279294813
247
+
275373389496166
248
+
21661434284885
249
+
496416852297839
250
+
477494791955461
251
+
327602736217782
252
+
138880747979879
253
+
271480550392019
254
+
158160500147986
255
+
22359716987517
256
+
414576689092834
257
+
305803184784229
258
+
65692053784284
259
+
360173762583092
260
+
458128731749150
261
+
378315157016904
262
+
198233403051772
263
+
52327402075788
264
+
459496109629835
265
+
48860372473025
266
+
454257819227706
267
+
97472804550722
268
+
502964175459770
269
+
459100485158840
270
+
131796816478263
271
+
495898100350915
272
+
509758287149052
273
+
554302977506672
274
+
141460841946747
275
+
368399402770221
276
+
144833542575552
277
+
459257396837051
278
+
128897248295935
279
+
94684258795493
280
+
517185225146550
281
+
353038510608703
282
+
438915863504618
283
+
44729354181035
284
+
274623254066270
285
+
77767089952860
286
+
199443030693887
287
+
245599182009338
288
+
513597666643845
289
+
548898983360812
290
+
168833181122479
291
+
108599615430535
292
+
267323690512525
293
+
478748932732586
294
+
418044899650582
295
+
438723699239049
296
+
377021028407774
297
+
521243413249980
298
+
186372087298993
299
+
177696180629499
300
+
424607798783136
301
+
175043083959588
302
+
71542085709966
303
+
122881136856443
304
+
53642445871607
305
+
55983883980568
306
+
307482918699313
307
+
548034266877241
308
+
107443352691469
309
+
308944791230750
310
+
336435445141577
311
+
18349719491670
312
+
448205670457427
313
+
71542585287717
314
+
408033037307226
315
+
480102956094501
316
+
420109993028969
317
+
395424521350835
318
+
185379878797077
319
+
203710057829105
320
+
36557592044669
321
+
551870675458765
322
+
546868807269922
323
+
504793474214081
324
+
66889203140506
325
+
277358386195352
326
+
154658725086261
327
+
458710471506147
328
+
140063001204899
329
+
554589123545113
330
+
187764639288738
331
+
280805527975913
332
+
458767928415331
333
+
327562713156083
334
+
227404441777348
335
+
58510480179466
336
+
288486494720799
337
+
63237257198643
338
+
448172041690679
339
+
42280135521746
340
+
192789521352439
341
+
156869200380410
342
+
333308827586207
343
+
168770744819228
344
+
206756346672463
345
+
445490948585152
346
+
558298887368719
347
+
41757079751796
348
+
123233680453554
349
+
101710668548164
350
+
293051383933234
351
+
462115775599059
352
+
156790852024775
353
+
42146634104362
354
+
529361812764217
355
+
375031732026888
356
+
361654048249706
357
+
556482382871481
358
+
438952718905184
359
+
195800957172995
360
+
447685099105065
361
+
3167800942342
362
+
208897665420647
363
+
315160556343878
364
+
345884001759232
365
+
122757578730601
366
+
126844669879576
367
+
286578117506275
368
+
559076784806808
369
+
133183790416412
370
+
424801834309423
371
+
224969252327364
372
+
374350766089642
373
+
20798997670184
374
+
289417380274906
375
+
184315518776518
376
+
371292335190090
377
+
114582339644698
378
+
208127482443002
379
+
279570456318369
380
+
477243481897708
381
+
137615434402227
382
+
155587329960576
383
+
66058404247566
384
+
6009626878305
385
+
467744254435927
386
+
247816923962984
387
+
261599002789618
388
+
297502156271657
389
+
506808816995009
390
+
545665721143573
391
+
147717106107093
392
+
4012198244055
393
+
148435918998957
394
+
246749347260119
395
+
239376349150393
396
+
227276111047012
397
+
364636121327145
398
+
517935259795945
399
+
474439763479168
400
+
43520261515585
401
+
280856775504394
402
+
75286142706624
403
+
131996546479158
404
+
86881586573971
405
+
508673411390645
406
+
250812186729577
407
+
423847559969065
408
+
223713790582714
409
+
546169006985788
410
+
315891576181866
411
+
489122094481310
412
+
475976446227767
413
+
154259526095214
414
+
128476226213058
415
+
503015859091746
416
+
334986513955732
417
+
75578041521823
418
+
411249026105852
419
+
6961569038731
420
+
530192246099700
421
+
446871809147527
422
+
277602939775284
423
+
258190499459374
424
+
539417674939313
425
+
478261671944180
426
+
165763609730570
427
+
117972782963073
428
+
469561640920263
429
+
120202048183618
430
+
422630678791095
431
+
524898844581346
432
+
294638145309687
433
+
254396332912069
434
+
56492904870038
435
+
181323276371441
436
+
24563499850507
437
+
205865074842223
438
+
148409995925774
439
+
395905756559261
440
+
246720675862029
441
+
66613251955864
442
+
54321217823722
443
+
83363680130035
444
+
31331826491519
445
+
369263420444315
446
+
153585492077154
447
+
26955824861402
448
+
22181157571828
449
+
33780712543998
450
+
56160872499578
451
+
390901897324810
452
+
438758055522387
453
+
83723410127998
454
+
239700116295950
455
+
10986346065127
456
+
21616081875381
457
+
183162530553635
458
+
423092070823128
459
+
166301878995476
460
+
369306563784273
461
+
16879629962184
462
+
560571735506509
463
+
387532639382396
464
+
458507186052187
465
+
42069097096577
466
+
259593097594975
467
+
310058462635834
468
+
299871431824265
469
+
16082780296802
470
+
296509123823706
471
+
310711658803761
472
+
295331711956231
473
+
263735055537003
474
+
352432028729091
475
+
126398905211847
476
+
519658672816043
477
+
280192070333888
478
+
95167114311387
479
+
7724622964718
480
+
369059413707853
481
+
407224185915014
482
+
157210350166793
483
+
487514577914260
484
+
98252950133724
485
+
440363069543446
486
+
417429307246762
487
+
405604516492090
488
+
265092074416263
489
+
126664645818342
490
+
113579085457754
491
+
75905498316434
492
+
302354855339641
493
+
59102049425656
494
+
280130340136360
495
+
478494650079721
496
+
264501498508817
497
+
116663854295906
498
+
284135376096844
499
+
57339172396252
500
+
125908990581492
501
+
218698452226404
502
+
479066189543047
503
+
193992192301764
504
+
26935168322503
505
+
371050124007331
506
+
444128611785680
507
+
54655542495528
508
+
556257788880115
509
+
156109812323271
510
+
405143694880279
511
+
355947553028693
512
+
279181834119431
513
+
417842173912253
514
+
475447264397728
515
+
55724984827730
516
+
425808365149730
517
+
168849060821640
518
+
156207061705977
519
+
131293018861777
520
+
397742035837384
521
+
96457963600273
522
+
46367169863551
523
+
337263087738255
524
+
394915248600831
525
+
444461394522373
526
+
517303468399826
527
+
429667661403856
528
+
196126205904706
529
+
345645786967901
530
+
395094838057755
531
+
2454513324534
532
+
10669231861146
533
+
181653878244795
534
+
5371429552757
535
+
437239845288438
536
+
305253685206642
537
+
397782367989380
538
+
116070532783845
539
+
360208932753546
540
+
386395002336574
541
+
518479266388798
542
+
479470049286739
543
+
245213360203745
544
+
544805559539410
545
+
339066959466973
546
+
469022935378584
547
+
79584652573505
548
+
312843271512692
549
+
134384452340553
550
+
178327648734890
551
+
306022231371999
552
+
3032700546010
553
+
233699956073485
554
+
135215114494364
555
+
219224396779922
556
+
113845604633989
557
+
34093972860838
558
+
194782165353201
559
+
499416593344766
560
+
255174640655237
561
+
402958518901791
562
+
265739275480141
563
+
25292455870054
564
+
276724600410563
565
+
355997692469246
566
+
457676611759223
567
+
386047176287638
568
+
190039724559619
569
+
518280416553328
570
+
445079132020583
571
+
366751170462266
572
+
498555774054597
573
+
72048936868320
574
+
342497936372764
575
+
361252126585596
576
+
327840502439476
577
+
438315420764905
578
+
377653416678653
579
+
306791029781783
580
+
143098032488114
581
+
489451109209073
582
+
77885509362987
583
+
6821213007110
584
+
440638166411650
585
+
132088062077987
586
+
380565217714357
587
+
206441957599982
588
+
230445944085264
589
+
294544923364596
590
+
550955891098415
591
+
14814329045909
592
+
350660806006538
593
+
350789312113174
594
+
285443827330665
595
+
228446679627565
596
+
58280132644935
597
+
77497961379779
598
+
284718621487764
599
+
91583410841066
600
+
240711774586230
601
+
307371626015792
602
+
360341200112712
603
+
560878863073836
604
+
234408108815672
605
+
217929533512520
606
+
380949194277822
607
+
181962520261892
608
+
540232704378619
609
+
555280853519688
610
+
339599056777540
611
+
253331530299096
612
+
246432668510514
613
+
239485570722378
614
+
380450561320510
615
+
225753113308679
616
+
117381802211798
617
+
374882327903152
618
+
108651606868446
619
+
196944808288008
620
+
356898895235334
621
+
468918539568103
622
+
269570725731051
623
+
95733154606750
624
+
56777936035388
625
+
223730424738654
626
+
446335891855758
627
+
365975701734335
628
+
135691958743519
629
+
242613950355869
630
+
339761933169496
631
+
554172216673937
632
+
376099942871301
633
+
218193986422737
634
+
186286494218132
635
+
15542487103388
636
+
413998674312200
637
+
55662990646422
638
+
527419095668533
639
+
371551454668194
640
+
93282723288280
641
+
57611056990687
642
+
38801274595908
643
+
465669027392228
644
+
478172714532509
645
+
321798249758777
646
+
562462072531947
647
+
27173249223386
648
+
541338226718552
649
+
510833718417249
650
+
459293257919227
651
+
2578180288392
652
+
208664979169711
653
+
84166930707618
654
+
500435517139878
655
+
562907926846899
656
+
517735411417109
657
+
179409781136024
658
+
34898720974673
659
+
284923768208670
660
+
157983270022598
661
+
153131433816426
662
+
18393721953180
663
+
316322152660920
664
+
22355375605940
665
+
397246603329883
666
+
554967036051278
667
+
497281145240675
668
+
247656977357763
669
+
453922640286096
670
+
145221535272945
671
+
34772548877377
672
+
377385228995380
673
+
488414668953237
674
+
560545999900166
675
+
397718924038897
676
+
480127998411675
677
+
112984100991634
678
+
240894109209186
679
+
485722350510848
680
+
43371763020897
681
+
558269615993025
682
+
215754841367985
683
+
390164427363240
684
+
14732406523558
685
+
236009002762192
686
+
174342432125225
687
+
255463600507178
688
+
395182843721300
689
+
342602554208911
690
+
528507951564388
691
+
241875347976305
692
+
113957535730919
693
+
216559962572878
694
+
182415070955063
695
+
163985599290058
696
+
371001440724072
697
+
15272810587403
698
+
193319822867177
699
+
556343558336378
700
+
179109223017207
701
+
415127953575123
702
+
297848316250039
703
+
392671541548341
704
+
405304458530244
705
+
274714701484250
706
+
15049178690632
707
+
338480856292885
708
+
286625209351685
709
+
425366337053578
710
+
448545315533944
711
+
541900814421204
712
+
256913769690019
713
+
288429342353686
714
+
228318984823114
715
+
527126883649505
716
+
484801026677458
717
+
133951108335060
718
+
529472005696509
719
+
59700611717831
720
+
487761375293315
721
+
447035565574216
722
+
317155237736864
723
+
397547052933411
724
+
275596068169327
725
+
512302379205978
726
+
205693522964636
727
+
379891574363121
728
+
365896673931096
729
+
328804216175169
730
+
200216131738280
731
+
302825641282669
732
+
473502552425839
733
+
66958058021682
734
+
51269372537828
735
+
500921134113309
736
+
103962306584888
737
+
539336505275948
738
+
117286064994115
739
+
172772484112629
740
+
239759022413835
741
+
521095052346700
742
+
454776741466267
743
+
447066658605720
744
+
547255227253350
745
+
304963494744784
746
+
289560800497618
747
+
316501300548757
748
+
479086400557057
749
+
95326786124590
750
+
140968225791906
751
+
115072271879595
752
+
7234969939639
753
+
482956881124572
754
+
183466145923095
755
+
235393384642509
756
+
62406042864843
757
+
400707058435945
758
+
503105276932101
759
+
357566027207386
760
+
148521846514124
761
+
275750878909114
762
+
339370667768190
763
+
127048273590265
764
+
458527823927160
765
+
97444273980082
766
+
16182985223411
767
+
213183555533691
768
+
45309658270905
769
+
403839396039789
770
+
466098726186136
771
+
106643286670766
772
+
38176877510118
773
+
198314756910366
774
+
346517497511178
775
+
205928624831403
776
+
222864314271686
777
+
251640741435146
778
+
407508376987872
779
+
92519113502818
780
+
407317720738958
781
+
175305340425784
782
+
476620889550377
783
+
87305299787417
784
+
444545756281778
785
+
404518714951703
786
+
555409238703627
787
+
251797579995822
788
+
255256702255660
789
+
176681045179075
790
+
77481671334174
791
+
116544169170029
792
+
444122536639737
793
+
389103049935920
794
+
498748642522853
795
+
3873265377540
796
+
98050617645202
797
+
116322321801355
798
+
226367094720147
799
+
485075143875541
800
+
242573360392439
801
+
71795567210757
802
+
476601047034728
803
+
508048526398655
804
+
159198298530093
805
+
216436956386224
806
+
345416699145181
807
+
90380860243029
808
+
253472698754537
809
+
83400513334807
810
+
427310261563924
811
+
69822171498753
812
+
559842914094152
813
+
459287725352528
814
+
243613041158610
815
+
10991341630189
816
+
228807721663261
817
+
7024115782429
818
+
267146826788972
819
+
338032239059017
820
+
289546948436021
821
+
35124843837602
822
+
394075516816769
823
+
268803645511645
824
+
359678225963348
825
+
447579217132384
826
+
337227837807736
827
+
50064495804948
828
+
346738572598688
829
+
236973679957932
830
+
43507024710250
831
+
182054289915448
832
+
144962295951723
833
+
306576462663442
834
+
158787725603721
835
+
495369066056668
836
+
447459395413273
837
+
344057922446779
838
+
395633153332042
839
+
504718322801880
840
+
235325433870928
841
+
437195528511478
842
+
244135922948465
843
+
479388167560850
844
+
178697225954098
845
+
354741533520645
846
+
266092889230046
847
+
204778327811708
848
+
133257651959153
849
+
559858783952067
850
+
561750347064356
851
+
502088076822870
852
+
57253215150981
853
+
380137870011881
854
+
477972427100420
855
+
240572372889603
856
+
176519348368910
857
+
337265364653435
858
+
425502606217221
859
+
88576070604575
860
+
317517207500234
861
+
334105164420725
862
+
419958207401485
863
+
226900054801398
864
+
276961545643777
865
+
370262654409489
866
+
398886404251719
867
+
296429275430113
868
+
195072882755515
869
+
396911272168989
870
+
442208814882751
871
+
113545916394642
872
+
489754561221551
873
+
233920144851839
874
+
173259249369816
875
+
500231355309754
876
+
498284415309088
877
+
125185151329730
878
+
186407854088461
879
+
435099856585532
880
+
312951870547422
881
+
173641362386746
882
+
360822501532038
883
+
74035636115208
884
+
504940391363034
885
+
276398928003630
886
+
81858899939103
887
+
498355101838391
888
+
375087870889487
889
+
228666656803973
890
+
117849645842035
891
+
82230055753383
892
+
335785444943772
893
+
548302224679651
894
+
185276923758010
895
+
164883456297448
896
+
22085894978041
897
+
332890468372985
898
+
235730411838964
899
+
132694589236093
900
+
465257687386031
901
+
45463633229820
902
+
512144440666001
903
+
480435371181081
904
+
142485026456679
905
+
462878761958728
906
+
311750601954392
907
+
553648287051728
908
+
531478033022331
909
+
460796621783993
910
+
142368477545699
911
+
74076278950557
912
+
140439968185513
913
+
236396470256590
914
+
91860232604208
915
+
223643558098429
916
+
186390913765094
917
+
364894662860662
918
+
447459334215839
919
+
537531128123739
920
+
466218978171566
921
+
126669151202583
922
+
444807397890455
923
+
349062089817739
924
+
267434577690225
925
+
560827859984118
926
+
543253291644329
927
+
514749596671611
928
+
214538957126727
929
+
123785267864708
930
+
72460640000387
931
+
113447716967257
932
+
268936473540085
933
+
276821706576117
934
+
544257143536500
935
+
82528952979392
936
+
63833623452162
937
+
327942426374098
938
+
327087219832414
939
+
198165652850622
940
+
479015009633885
941
+
64895098316007
942
+
109357893943813
943
+
426409434523539
944
+
112785097737550
945
+
416983983303055
946
+
142741383992303
947
+
538988077235072
948
+
16786678261214
949
+
21164214411945
950
+
134856300517455
951
+
305078463170046
952
+
303351929503674
953
+
247465549128864
954
+
263204170523635
955
+
364953615267699
956
+
521418348349631
957
+
63548040800203
958
+
467923158941396
959
+
92690222721000
960
+
254607307817705
961
+
315864590216006
962
+
560194766273868
963
+
57740965943123
964
+
467500963508666
965
+
64837056509709
966
+
388201743880703
967
+
449442624540704
968
+
514951833787168
969
+
108013527943658
970
+
35164526162999
971
+
245368857412234
972
+
138434397003144
973
+
36568275186461
974
+
428992681216520
975
+
88481766597912
976
+
245305461122876
977
+
194265537540846
978
+
168923914421957
979
+
386962933269608
980
+
137066559578368
981
+
458270149682274
982
+
488069857309447
983
+
234384742346167
984
+
62174068894886
985
+
557903634980987
986
+
207715338997417
987
+
480598384362874
988
+
154285980882286
989
+
154109362470773
990
+
426356812378993
991
+
137103739914800
992
+
530043648763879
993
+
237548210272004
994
+
407973990813914
995
+
325660721822690
996
+
366188709699096
997
+
66357483907787
998
+
508053585941702
999
+
497609763483254
1000
+
159345788693352
1001
+
266504908036111
1002
+
294179053237191
1003
+
79762673063029
1004
+
368453507033728
1005
+
88044353937870
1006
+
438409019445213
1007
+
293640084947314
1008
+
124562453993162
1009
+
270733529213570
1010
+
225383748762657
1011
+
22656925974863
1012
+
45753428221904
1013
+
12308965830816
1014
+
264478729958918
1015
+
187327926216617
1016
+
156237597038581
1017
+
512313969753142
1018
+
376857045442655
1019
+
547345752323760
1020
+
309009326256121
1021
+
322372699828345
1022
+
333725943467458
1023
+
471851170183208
1024
+
54397268148001
1025
+
35195325793204
1026
+
42277663445555
1027
+
183516135243541
1028
+
275376456197836
1029
+
369039746819263
1030
+
78769262868325
1031
+
372527716775987
1032
+
18484140147936
1033
+
85327286707391
1034
+
284283673228431
1035
+
355111648629777
1036
+
133597382682728
1037
+
475835693490394
1038
+
387127844576620
1039
+
507901751969565
1040
+
554351666415617
1041
+
289354297422412
1042
+
558003852365488
1043
+
99777852969028
1044
+
76910619800607
1045
+
269850823651503
1046
+
478945097944206
1047
+
75697824382299
1048
+
360460512821572
1049
+
293259869435075
1050
+
335549913652882
1051
+
497894910138558
1052
+
526824704037943
1053
+
58747445640376
1054
+
150428040936251
1055
+
334729039550240
1056
+
290593453052687
1057
+
308985893570621
1058
+
203875153466187
1059
+
422651545426053
1060
+
384663799808318
1061
+
361991609992814
1062
+
377373804266245
1063
+
455827670362139
1064
+
104590623650983
1065
+
57717523945642
1066
+
289215949135955
1067
+
279227190564306
1068
+
480037691230924
1069
+
379352975398179
1070
+
286239461806878
1071
+
6288706511920
1072
+
306203959502495
1073
+
132448912858619
1074
+
87444167270659
1075
+
195068918309615
1076
+
4583897617995
1077
+
278660466522789
1078
+
229077410961495
1079
+
252512285630884
1080
+
165702653225540
1081
+
57301645713338
1082
+
45476816770253
1083
+
104420509876312
1084
+
435928956867717
1085
+
273738252326421
1086
+
527592700256469
1087
+
274920860531438
1088
+
360461851428776
1089
+
457549708994889
1090
+
291781669625491
1091
+
74180496831125
1092
+
160275843387166
1093
+
193576416576971
1094
+
447891132305591
1095
+
136097875796043
1096
+
473879264008074
1097
+
342198614509293
1098
+
255620089584600
1099
+
253368119366628
1100
+
460058494829337
1101
+
238677179316060
1102
+
543435794096850
1103
+
125804528329371
1104
+
290067397130136
1105
+
232119285671042
1106
+
35694654573054
1107
+
42641552702267
1108
+
278776839076591
1109
+
103699070401591
1110
+
279365288063702
1111
+
417643384147076
1112
+
379617509547
1113
+
379645369232055
1114
+
311322634544213
1115
+
355309621133856
1116
+
429812843801729
1117
+
530934225704976
1118
+
330069171861872
1119
+
393722308841935
1120
+
68340441633804
1121
+
518143442338427
1122
+
232986159926944
1123
+
361743588078637
1124
+
217329960800401
1125
+
405088222683749
1126
+
343569438466783
1127
+
129128398485888
1128
+
253088938306002
1129
+
15716384141993
1130
+
237474176118378
1131
+
178860999465503
1132
+
75048075834107
1133
+
347432831372643
1134
+
374490515012787
1135
+
165463789709837
1136
+
43210266758020
1137
+
240320757904606
1138
+
546043742308925
1139
+
268675982457278
1140
+
177771306654206
1141
+
145786507718584
1142
+
11076363163905
1143
+
484909609574872
1144
+
128816963311079
1145
+
523319854124247
1146
+
26117232648704
1147
+
137050674692694
1148
+
23079577770737
1149
+
443411377285142
1150
+
65315168934772
1151
+
499140575667238
1152
+
527800907809878
1153
+
52685290797686
1154
+
145080076415183
1155
+
527652341580953
1156
+
238859707235644
1157
+
78797347429720
1158
+
356975639606757
1159
+
94196665557651
1160
+
435856797725816
1161
+
401856923204375
1162
+
4848439154911
1163
+
396231979271263
1164
+
446175960814349
1165
+
155684562354319
1166
+
175037918819066
1167
+
325333380510412
1168
+
368728830828405
1169
+
270416737462765
1170
+
169564774661274
1171
+
460530813706825
1172
+
540961108919221
1173
+
113046162484226
1174
+
96073579932556
1175
+
103978930453644
1176
+
509735553698137
1177
+
106330238456740
1178
+
145231786002646
1179
+
488984892594469
1180
+
44508439338201
1181
+
227325068421387
1182
+
237889201401574
1183
+
44486142440592
1184
+
424902175633277
1185
+
518747415560671
1186
+
33943878442428
1187
+
192946509962666
1188
+
509687942128140
1189
+
355986284736312
1190
+
387842938635694
1191
+
268219264421529
+12
data/05/test.txt
+12
data/05/test.txt
+5
data/06/input.txt
+5
data/06/input.txt
···
1
+
25 2965 84 3 591 58 6 824 218 77 6 241 2 8 49 89 5 33 23 3 7 12 5 551 25 512 3361 1 87 7113 93 9 849 266 9516 262 1 8 84 499 5667 6 87 8 1 7183 5 67 43 3945 42 87 62 3 9 5 11 3212 783 93 68 5 54 7 99 978 1694 1 75 26 6 47 76 928 535 4 86 221 68 53 63 31 71 22 27 27 4112 9 7 56 25 18 71 52 922 9 6138 9 897 7 9 6 1 58 7233 89 812 51 1315 674 2687 37 752 55 7 965 392 54 94 24 595 93 222 58 526 82 3 23 94 43 82 92 948 213 19 26 4273 79 5 921 76 542 78 213 55 55 7918 56 41 1388 6 64 57 83 54 647 3 6 76 67 324 823 83 534 44 315 936 915 5447 25 79 14 3 427 882 72 6 92 1 67 44 558 12 3 92 448 465 13 57 72 84 499 18 76 8 549 3916 3 55 978 8 6 4 8864 982 233 24 83 1 857 792 182 57 25 9 45 49 2746 446 883 46 42 43 91 975 8 772 489 72 7 98 92 71 31 76 174 39 49 433 4 23 39 117 19 358 84 13 71 65 89 2 8419 84 71 4 23 199 3284 52 6 397 74 43 61 9 9584 18 23 62 1614 94 957 28 45 2912 7 62 8 3 52 6 38 295 341 484 574 96 1542 618 51 92 5 9 78 2 92 284 91 476 62 7249 854 947 91 3 16 7 54 174 4338 762 11 766 84 61 49 6 883 3296 1595 8667 2 819 32 4 51 8531 689 3523 478 81 9 444 9 6416 9156 1 1 132 29 7 46 39 97 2518 45 68 1 1932 55 4 36 11 69 55 3 95 83 53 516 94 45 72 2 98 922 67 92 881 1 821 8 8 82 841 53 1331 572 84 5 529 62 3 5 99 38 86 2995 41 863 213 3 86 44 9773 4463 34 481 558 75 75 9989 31 5 213 17 75 295 652 21 126 735 43 34 439 2 8 71 514 8 5 3 28 71 4 16 366 3 5 564 768 45 81 7936 3 7 59 79 41 52 43 24 34 648 551 384 4917 283 982 42 2 8764 12 78 93 134 42 78 55 87 33 55 45 317 75 523 918 7 28 941 12 551 83 53 7 12 531 57 877 56 5 99 411 93 25 6 63 36 41 886 3 8245 88 87 262 25 653 4 23 889 92 6 827 99 427 16 728 743 69 2 6 39 997 52 56 43 169 68 13 55 86 88 4 269 258 7 7 5 329 688 7 79 913 51 38 7 6 53 85 7811 27 492 64 134 2 83 35 224 1 68 48 19 517 469 6 29 2 884 5473 19 26 52 91 5 381 91 79 97 35 49 8337 2147 52 11 986 3 62 35 33 7 63 54 3 82 369 74 48 2 5427 979 417 2 553 162 8 92 2344 457 464 9354 99 4 87 6 46 1558 9 41 111 8122 6693 77 615 815 447 25 875 35 22 4 946 86 94 979 1 799 86 519 237 1 436 57 972 445 87 58 12 5 78 95 4742 272 7 8867 767 81 968 83 599 6 5 34 999 88 372 792 52 287 876 331 65 6 45 1 593 212 832 37 72 843 987 31 35 9367 742 21 7 632 19 72 2191 75 5 84 218 8318 646 818 57 9 42 6 22 31 25 12 216 43 58 968 2532 293 759 932 57 276 511 86 589 51 1139 12 7421 913 298 982 455 277 71 2 56 52 649 894 1791 915 3294 593 38 8 3 27 8111 73 92 32 594 1 61 644 3 87 3 386 9475 39 5 93 7 28 963 32 1 34 296 699 3 61 25 7927 8 629 1265 24 19 14 461 1694 9 5 29 483 73 96 21 5 48 53 5 611 451 75 558 88 37 184 4 7884 9256 61 7413 67 33 2438 534 7 29 455 37 78 91 46 3295 66 13 491 52 5 958 86 123 48 2934 41 443 44 84 4 786 84 61 933 551 377 697 19 217 27 766 99 372 7 9 84 17 3 15 85 94 533 13 85 85 55 1776 2 9 36 27 7488 228 77 235 1448 21 293 847 641 4397 37 26 6734 81 72 6 9 379 43 53 255 2 14 341 551 84 369 384 46 769 1872 34 4 86 21 99 6 7 733 42 139 815 45 1 97 69 33 783 25 6 186 661 924 93 858 5 3 86 2 788 723 83 41 84 97 94 24 695 699 85 48 79 5497 15 19 57 9196 65 7213 5 56 69 293 8 5416 616 76 367 31 96 7 84 152 792 7812 92 62 195 48 71 18 552 21 5 642 924 12 78 385 489 29 83 3 73 99 82 48 54 919 4 851 63 61 91 25 198 38 717 6741 1 8416 418 61 46 8 9 119 38 89 7 836 238 62 9 2 38 995 38 788 88 5
2
+
676 8283 35 2 892 361 484 941 639 12 2 848 75 47 37 92 225 622 1 64 18 43 24 385 75 692 2977 3 19 4723 96 93 659 171 4621 823 39 17 68 942 6978 2 73 83 26 6968 41 896 84 7425 16 26 368 28 21 796 728 332 625 48 326 73 482 5 46 473 3714 73 98 24 7 29 49 386 932 3 989 158 86 71 82 387 88 48 49 918 2896 675 43 21 33 16 327 626 617 541 3743 6 4214 8 87 15 3 937 5434 15 338 3315 852 614 1166 66 267 38 5 519 816 38 98 47 511 83 924 23 598 18 6 77 78 32 711 46 15 176 861 42 9236 58 2 581 13 4459 72 572 62 12 2375 28 26 9715 71 658 46 44 4 729 5 97 27 68 744 335 622 21 213 547 378 997 2469 24 59 878 7 683 952 31 7 449 1 27 87 411 61 9 33 242 316 41 17 44 462 314 23 915 3 985 462 73 92 4219 93 59 75 426 43 241 29 13 145 756 852 242 46 441 928 899 7132 7215 946 283 53 41 28 88 112 57 939 731 77 4 61 76 27 56 95 7954 893 82 268 39 81 97 23 65 273 62 14 199 57 49 36 557 67 273 8 53 174 6512 65 12 437 23 32 668 165 6935 44 54 75 3133 17 775 236 66 9726 284 969 34 7 31 754 88 887 746 535 3237 67 3599 187 77 166 8 443 233 7 75 993 262 614 71 8913 555 288 27 24 94 54 94 789 3141 226 44 712 85 17 77 678 994 564 2732 1175 2 461 68 54 13 1387 384 326 323 86 52 81 2 9435 1164 32 6 297 13 71 51 73 82 822 2922 15 96 8849 32 34 45 39 37 192 5 56 94 29 984 38 68 44 6 84 275 6 518 621 45 484 463 9926 14 352 31 3463 216 67 5 966 52 75 94 33 17 637 9921 66 542 869 23 98 74 835 5795 18 725 689 19 48 2979 22 6 64 31 72 596 734 18 752 159 322 17 421 616 1 61 793 551 88 1 84 616 8 932 821 32 24 743 762 34 14 2676 767 9 49 65 57 76 58 126 258 898 318 781 9295 543 151 74 68 1588 6 37 574 225 764 69 62 91 43 286 45 783 92 933 48 66 31 729 79 576 94 38 4 58 583 63 78 65 18 95 389 24 184 6 12 11 62 931 761 527 55 75 811 48 714 76 556 549 49 946 961 96 596 42 116 256 47 9 17 4 919 33 17 42 512 67 87 21 16 23 5 827 366 22 9 95 235 241 5 44 863 6 73 12 3 26 91 5617 28 589 54 674 68 39 68 294 1 687 39 32 293 945 251 496 1 653 853 49 5 433 56 7 371 77 12 98 67 235 5837 118 87 61 396 79 8975 49 36 9 697 689 7 49 968 9 96 8 3916 396 387 5 818 134 93 37 4466 624 2115 4597 39 9385 61 9 46 8469 2 35 558 3758 386 43 749 171 333 99 736 476 62 6 694 57 76 534 7 658 81 433 678 282 48 656 198 746 38 29 85 7 22 47 449 578 67 2311 415 73 757 277 529 685 66 24 698 6313 51 977 262 377 694 243 66 41 23 62 566 242 827 92 891 916 78 99 795 7692 74 85 82 892 22 83 8453 35 97 23 865 2324 241 611 158 3 53 93 68 52 25 65 115 48 555 95 3194 618 318 327 876 445 269 92 426 7343 6528 87 2235 248 562 6747 313 177 66 25 155 43 717 826 2278 9663 3339 959 1833 5 24 92 7753 83 69 89 881 8 417 159 344 51 358 992 8149 84 68 58 382 43 838 57 99 22 663 525 43 58 338 416 85 227 7329 43 43 35 295 3785 85 1 19 145 9 37 21 1 36 24 57 142 294 42 3656 744 69 553 28 9185 2826 71 9829 45 54 4934 634 3 96 472 55 397 92 24 7535 5 88 96 21 53 974 2824 779 26 8191 84 692 676 83 73 747 64 46 145 317 5745 4239 24 866 65 436 61 182 4 933 35 18 351 51 315 94 6919 881 36 21 285 8468 39 56 49 63 5866 323 59 9457 2818 91 144 435 16 3839 78 153 93 25 25 21 7 39 75 943 688 9 95 199 182 537 4814 615 981 569 7292 81 4 21 2567 84 78 54 311 425 82 673 988 9 211 24 46 445 71 18 941 386 954 74 738 589 46 73 4 442 695 746 97 111 232 636 871 833 11 982 52 46 7455 9199 4882 7 646 79 163 76 44 59 842 9 4773 462 26 92 99 55 35 36 929 454 4419 56 7 653 63 883 82 236 62 53 555 11 71 95 759 213 56 89 91 46 87 514 81 999 324 4 156 22 927 64 48 554 51 6821 8769 6 7716 188 25 87 356 1 824 17 99 7 599 1356 84 38 83 13 849 397 475 66 535
3
+
449 1768 51 39 6267 194 1363 84 643 54 21 836 175 32 95 3 3354 736 6 43 162 22 82 468 3 138 599 7 67 1413 56 29 79 83 6833 74 149 742 334 482 793 28 59 343 365 3866 5624 215 62 334 1 59 568 42 326 698 984 767 15 238 2182 956 541 49 476 871 3214 15 81 87 426 77 692 536 712 11 685 76 47 21 87 7152 94 4 65 881 1546 936 6127 9 8897 1 228 816 58 245 477 33 1114 36 36 13 7 567 2973 66 731 8499 588 173 634 55 19 81 3 715 467 27 94 6 432 29 211 81 319 58 4 82 4428 18 292 27 6 394 458 54 1164 99 41 76 69 6977 18 681 4 75 4717 7 35 1346 567 356 581 67 7 47 35 17 35 881 893 29 929 8 629 179 8 616 2482 57 99 571 14 569 821 43 49 319 18 91 19 935 31 89 96 8644 711 27 15 42 1153 881 48 976 73 24 664 86 9 6254 88 16 27 113 96 347 65 671 394 62 999 685 5 837 713 6634 1485 858 955 71 25 699 829 269 443 881 476 966 74 48 72 13 39 13 3 7729 9831 55 387 82 1369 81 1 76 313 45 94 252 69 668 44 757 99 557 1 839 914 1259 3 13 187 6 68 141 196 3639 4397 4 15 669 76 792 811 15 72 566 114 397 71 65 343 923 9 969 854 9162 46 3737 19 96 9861 44 917 129 23 89 929 258 789 766 544 74 627 44 59 73 57 37 613 572 412 16 462 6 93 99 998 736 95 554 3214 39 826 28 17 563 9126 913 91 62 6 91 93 47 5413 4418 62 6 397 35 668 92 17 32 791 6343 71 54 8192 75 73 37 88 41 323 77 21 13 87 641 36 26 98 53 66 74 2 437 48 16 122 195 7354 43 921 14 7384 412 83 94 882 346 24 8373 39 315 9815 1846 3228 518 666 997 8 76 469 8372 74 36 915 57 83 565 326 82 78 13 156 197 26 2 276 798 215 88 162 558 9 381 355 6868 76 99 694 237 9 419 225 731 44 442 86 42 245 38 339 28 52 125 24 97 72 683 455 8762 777 1 825 861 67 81 82 3768 3 71 197 7884 272 67 61 34 84 2963 217 66 881 769 62 381 75 981 79 48 76 83 51 26 337 38 5 835 64 99 211 99 3317 6 81 4 56 918 645 449 49 54 144 15 278 89 576 51 17 218 38 33 4 96 826 52 73 56 67 5 978 44 49 46 944 8553 1 293 67 16 7 642 415 25 163 73 76 52 26 96 252 7 56 91 38 34 13 3587 9 298 62 78 36 19 27 218 68 7974 87 26 57 867 282 8249 87 66 73 66 9 858 37 51 715 214 1 6 12 728 1565 138 824 53 655 739 2477 7 27 68 822 1228 17 49 48 2 33 13 2721 364 649 429 242 463 36 733 8915 548 1163 271 62 9898 21 39 26 74 1 41 264 3767 662 56 367 892 317 15 71 175 28 59 277 1 2 33 7 664 15 778 852 849 66 822 844 96 76 77 38 89 45 67 539 61 86 792 93 8235 381 121 646 486 34 39 15 3647 57 455 265 74 846 349 14 61 86 58 694 694 527 79 997 85 95 151 458 1583 23 4 366 75 55 58 487 86 98 55 156 6837 26 82 284 399 57 76 45 57 46 44 74 17 944 3 835 962 422 86 961 749 397 66 435 1298 6931 29 1699 3965 322 7149 738 73 86 727 261 78 277 746 6742 1315 2551 683 6149 9 16 73 8297 56 19 21 686 1 882 285 527 21 5576 72 318 79 344 26 955 18 683 48 75 89 425 744 698 15 779 72 262 366 7377 84 57 25 13 548 11 33 1 669 5 43 95 4 84 47 45 13 371 26 2384 476 112 134 18 83 39 1 8 65 96 932 737 48 722 989 81 2437 51 59 7241 9 14 85 67 389 2547 1629 535 2 1878 712 241 854 67 99 288 68 63 34 532 5297 7958 46 728 25 786 28 361 36 4716 62 97 722 43 4256 56 2954 326 29 52 2271 5554 174 32 99 8 626 24 67 7123 146 71 636 46 55 939 45 269 63 96 96 95 58 29 1 4815 136 14 28 628 599 652 6678 46 698 928 161 654 17 17 8975 69 18 17 548 847 2 5 358 7 2958 55 78 143 23 58 59 411 446 46 69 6851 92 13 9 491 72 218 816 158 448 3194 238 148 83 952 68 57 6453 9749 9349 7 185 32 995 61 69 74 846 45 8766 925 67 71 39 23 41 15 283 788 984 8 5 32 37 387 475 56 85 41 939 23 473 93 682 758 543 15 392 36 4 336 296 684 99 22 143 21 713 13 3989 513 173 1994 5466 91 5999 718 8 2 728 82 442 64 991 53 332 2144 8 62 59 57 46 863 255 94 717
4
+
685 791 28 41 8761 757 7635 5 56 86 49 554 518 35 51 2 1718 4652 5 91 786 14 2349 442 3 999 715 14 35 177 83 31 87 31 55 46 561 951 767 2 98 48 8 771 397 83 6635 975 91 838 5 7 378 72 371 6239 537 96 1 616 5317 147 213 19 153 58 195 53 67 61 279 9 498 926 483 195 152 55 83 99 54 4625 4 3 18 834 3761 719 9985 6 7323 7 735 276 93 133 5 15 4994 92 46 65 73 192 371 5 3 4359 93 124 76 24 74 2 78 58 24 47 5 4 35 99 62 64 4 3 54 28 9529 38 986 5 5 617 856 51 2247 64 34 87 63 5771 1 9 5 1 85 5 23 8815 184 455 632 1 3 63 66 862 55 832 539 1 162 3 257 266 3 69 6 85 74 438 84 34 38 21 99 824 22 53 6 588 83 34 35 6949 538 87 27 39 5369 693 96 661 563 3 53 18 8 3592 1299 92 91 6 13 744 9 289 161 5 361 7165 7 641 836 7243 7947 5 367 24 69 425 872 544 4 634 7 563 85 23 18 4 32 624 5 8693 9533 5 497 71 2156 16 7 57 957 5 8 919 2 646 15 41 64 139 13 3366 775 8699 8 67 59 7 9 212 166 8766 1493 6 23 488 18 579 613 2 81 141 535 855 835 99 829 271 7 42 822 4178 94 836 15 99 6135 13 621 535 73 89 498 645 94 156 16 4 75 78 63 4 33 6 9 922 342 61 653 6 45 46 763 885 25 1 3328 34 2 7 93 856 633 2 78 66 8 975 31 46 5 59 91 97 26 66 561 3 9 78 667 2337 47 67 9988 6 19 67 15 15 348 87 79 77 7 718 1 85 78 24 9 17 6 794 5 53 927 569 1787 54 649 15 57 113 67 38 22 378 98 9126 7 411 4532 1133 7183 242 519 829 5 27 1 98 2 53 579 3 5 84 115 72 26 881 569 994 84 6 68 63 583 87 461 146 71 131 439 9333 65 25 789 342 78 555 723 115 35 531 28 4 456 94 157 41 9 432 33 4 13 131 461 3845 625 6 328 494 19 24 74 339 5 514 562 9721 961 2 98 31 63 1949 849 1 473 439 95 696 36 76 31 68 393 71 689 334 29 29 4 494 33 3 57 52 1328 47 48 6 9 18 767 421 56 9 571 45 735 49 132 85 15 197 15 9 4 89 17 1 85 72 94 7 58 62 9 9 45 9983 2 116 13 57 12 24 771 79 416 96 35 3 49 65 6 2 9343 25 46 32 24 128 8 449 6 6 53 84 26 4 75 2155 56 75 4 894 271 6871 425 89 25 64 9 652 72 86 9 621 4 8 55 162 298 65 411 31 983 989 7589 7 66 74 861 8643 94 22 5 4 16 32 2 19 757 2346 131 35 135 195 8 793 6286 897 15 8427 7 15 15 65 21 8 654 9377 9 61 121 52 5855 5 5 1952 9 52 19 4 9 54 73 594 71 16 959 489 7 665 3 54 99 65 53 254 23 57 31 7 28 92 9 5432 72 139 73 793 12 78 67 8451 21 25 486 46 719 5 25 59 51 12 81 6 558 91 517 8 59 894 535 977 64 3 348 3 65 94 86 68 62 1 512 9451 52 8 518 294 64 95 72 86 4 9 6 38 852 9 192 86 94 57 292 125 76 57 5 5467 121 22 723 2324 199 9114 376 3 14 629 457 745 91 36 77 8951 297 76 1943 47 55 34 61 31 92 28 363 36 765 287 382 71 3887 43 14 9 157 49 812 9 132 25 74 641 726 71 464 25 128 89 992 19 1664 58 83 45 49 62 45 51 7 4 2 12 4 697 29 9 39 24 6 9 4521 344 245 398 332 42 94 8 4 2 13 11 467 76 916 55 7 9144 5 32 779 3 78 6 48 182 7376 2581 73 4 91 172 912 157 1 78 111 9 133 3 4 6799 6327 23 1 79 79 3 19 87 4148 39 19 921 7 8734 97 2589 717 47 59 2569 14 122 97 4 1 892 66 2 9357 6 9 129 35 82 362 49 457 44 31 41 14 37 55 5 5171 55 49 47 2 389 362 1396 33 637 67 362 116 31 68 5194 46 97 57 53 932 4 6 946 26 6296 39 2 845 1 24 37 615 448 922 5 1947 23 7 53 845 86 859 628 218 361 3937 946 966 5 821 78 68 126 4864 9886 7 19 243 566 25 9 1 424 74 932 4 17 7 95 7 34 7 565 368 5 3 8 97 6 667 2359 88 535 31 57 7 786 3 26 232 195 81 426 579 7 967 267 527 9 53 719 16 4298 7 2763 429 665 2228 4286 24 56 37 4 2 217 66 91 33 854 62 672 9744 8 68 872 28 3 784 85 5 995
5
+
* + + * + * + * * + * * + + * * + + * + * * + * * * + + * + * + * * + * + * + + + * * * * + + * + + * + * * * + + + * + + * + * * * + * * + * + + * * + * * + + + + * + * * + * + * + + * * + * + + + + + + * * + + * + + + + * + + * * * + + + + * + + + * * * + + * + * * + + + + + * + + + + + + + + * + + * * + + + + * * * + * * * + * * + + + * + + * + + * * * * * * + * * + * * * * + * + * + * + * + + + * + + * + * * * * + + * * + + + + * * + * * + + * * * * * * * + * * + + * * * + * + + * + * * + * + + + + * + * + + * * + + * + + + + + + * * + * + * * * + * + + + * + + * + + + + + * + + * + * + + + * + + * + * * * + * * * * * * * * + + + * + * * + + * + * * * * + + + * + * + + * + * + + + + + * + * + + + + * + + + * + * * * + * * * * + * + * + + + * + * + * + + + + + + + * + * + + + + + * * * * + * * + + * * + + * + + * * * * + + + * * + * * * * + + * * * + + + * + * * * + * * + + + + * * + + + + * * + * * * + + + + * + * * * + * * * + * + * * * * * + + + + + + * * + + * + * * + + + * * + + + * * + * * + * + * + + + * * * + + * * + + + + * * * + * + + * + + + + * + + * * + * * * * + + + * * * * * + + + + + * * + * + * + + * + + + * * * + + * + * + + + * * + * * + * * + * * * * + * + + + + + + * + * * * + + + + + + + * + * + + * * * * * * * * * + + * + + * + * + + + * + + * + * * * * * + * + * * + * * * * * * + * * * * + * * * + + + * * + + * + * * * + + * * * * * + * * * + * * * * + + + + + * * * + + + * + + + + * * + * + * * * + + + + + + + * + + * + * * * * * * + * + * + + * * * * * + * + * * + + + + + + * * * + + + * + + + * * + * * + * + + * * * + + + * + + + + + + + + * + + + + * * * + * + + * * + + + * + + * * + + * + + * * + * + * + + * * + * + + + * + + + + * + * * + + + + + * * + + + * * + * + + * * * + * * + * + * + + * * + * * + + + * * + + + * + * + * * * * * * + * + + + + + * + * * * * * + * * * * * + + + + * + * + * * * + * + + * + + + * * + + + * * + * * + * * + + * * * + * + + + * * * + * + * * * + * + * + + + * + * + + * + * * * + + + + * * * + * * + *
+142
data/07/input.txt
+142
data/07/input.txt
···
1
+
......................................................................S......................................................................
2
+
.............................................................................................................................................
3
+
......................................................................^......................................................................
4
+
.............................................................................................................................................
5
+
.....................................................................^.^.....................................................................
6
+
.............................................................................................................................................
7
+
....................................................................^.^.^....................................................................
8
+
.............................................................................................................................................
9
+
...................................................................^...^.^...................................................................
10
+
.............................................................................................................................................
11
+
..................................................................^...^.^.^..................................................................
12
+
.............................................................................................................................................
13
+
.................................................................^...^.....^.................................................................
14
+
.............................................................................................................................................
15
+
................................................................^.^.......^.^................................................................
16
+
.............................................................................................................................................
17
+
...............................................................^.....^.^.^...^...............................................................
18
+
.............................................................................................................................................
19
+
..............................................................^...^.^.^.^...^.^..............................................................
20
+
.............................................................................................................................................
21
+
.............................................................^.^.^.........^.^.^.............................................................
22
+
.............................................................................................................................................
23
+
............................................................^...^.^.^.^.^...^.^.^............................................................
24
+
.............................................................................................................................................
25
+
...........................................................^.^.^.....^.^.^.....^.^...........................................................
26
+
.............................................................................................................................................
27
+
..........................................................^.....^.^.......^.^.^.^.^..........................................................
28
+
.............................................................................................................................................
29
+
.........................................................^.....^.....^...^.^...^...^.........................................................
30
+
.............................................................................................................................................
31
+
........................................................^.....^.^.^.^.^...^.^.....^.^........................................................
32
+
.............................................................................................................................................
33
+
.......................................................^...^...^.^...^.^.^.....^.....^.......................................................
34
+
.............................................................................................................................................
35
+
......................................................^.^.^...^.^.^.^...^.^.....^.^...^......................................................
36
+
.............................................................................................................................................
37
+
.....................................................^...^.^.^.^.^.^.^.^.^.....^.^.^.^.^.....................................................
38
+
.............................................................................................................................................
39
+
....................................................^.^.^.....^.^.^.^.^.^.^.^.^...^.^...^....................................................
40
+
.............................................................................................................................................
41
+
...................................................^.^.^.^.^...^.....^...^.......^.^.....^...................................................
42
+
.............................................................................................................................................
43
+
..................................................^.^.^...^.^.^.....^.^...^.^.^.^...^.^...^..................................................
44
+
.............................................................................................................................................
45
+
.................................................^...^.^.........^...^.^.^...^.....^.^.^...^.................................................
46
+
.............................................................................................................................................
47
+
................................................^.^.^...^...^.^.^.^.^.^...^.^.^...^.^.^.^...^................................................
48
+
.............................................................................................................................................
49
+
...............................................^.^.^.^.....^.^.^.^...^.^...^...^.....^.^.^.^.^...............................................
50
+
.............................................................................................................................................
51
+
..............................................^.^.^.^.^...^.^.....^.^.^.^.^.....^...^.^.^...^.^..............................................
52
+
.............................................................................................................................................
53
+
.............................................^.^.^.^...^.^.......^.^.^.^...^.^.^...^...^...^.^.^.............................................
54
+
.............................................................................................................................................
55
+
............................................^.^.........^.^.^...^...^.^.^.....^.^.^.....^...^.^.^............................................
56
+
.............................................................................................................................................
57
+
...........................................^.^.....^.^.^.^.^.^...^.^...^.^.^.....^.......^...^.^.^...........................................
58
+
.............................................................................................................................................
59
+
..........................................^.^.......^.^.^.....^.^.....^.................^.^.^.^.^.^..........................................
60
+
.............................................................................................................................................
61
+
.........................................^...^.^.^...^...^.^.^.^.^...^.^.^.....^.^.^...^.^.^.^.^...^.........................................
62
+
.............................................................................................................................................
63
+
........................................^.^...^.....^.^.......^.^...^.......^...^.^.^.^.^...^...^.^.^........................................
64
+
.............................................................................................................................................
65
+
.......................................^.^.^.^.....^.^.^...^...^.^.^.^.^.^.^.^.^...^.^.....^.^.^.^.^.^.......................................
66
+
.............................................................................................................................................
67
+
......................................^.^.........^.....^.^.^.....^.^...^...........^.^.^.^.......^.^.^......................................
68
+
.............................................................................................................................................
69
+
.....................................^...^...^.....^.^.^.....^.^.^...^.....^.^.^.^.^.^.^.^...^.^.^.....^.....................................
70
+
.............................................................................................................................................
71
+
....................................^.......^.^.^.^...^...^.^.^.^.^.^.^.^.^.^.^...^.^...^...^...^...^.^.^....................................
72
+
.............................................................................................................................................
73
+
...................................^...^.^.^.^.^...^...^.^.^.^.^...^.^.^...^...^.^...^.^.^.^.^...^.^.^.^.^...................................
74
+
.............................................................................................................................................
75
+
..................................^.^.^.^.^...^.^.^...^...^.^.^.^.^.^...^.^.......^.....^.^.^.^.......^.^.^..................................
76
+
.............................................................................................................................................
77
+
.................................^...^.^.^.^.^.^.^.^.^...^.....^.^.^.^.^...^.^.....^.^.^.^...^.^.^.....^.^.^.................................
78
+
.............................................................................................................................................
79
+
................................^...^.^...^.^.^.........^.^.^.....^.^.....^...^.^.^.^.^.^...^.^.^...^.^.^.^.^................................
80
+
.............................................................................................................................................
81
+
...............................^.^.^.....^.^...^.^.^.^...^.^.^.^.^...^.^.^.^.^.^.^.....^.^.^...^.^.^...^.^.^.^...............................
82
+
.............................................................................................................................................
83
+
..............................^.^...^.^.^...^.^.^.^.^...^...^.....^...^.^.^.....^.....^.^.^.^.....^.^.^.^.^...^..............................
84
+
.............................................................................................................................................
85
+
.............................^.......^.^.^...^.^...^.^.^.^.^.....^.^.........^.^.^...^.^.^.^.^.^.^.^.......^.^.^.............................
86
+
.............................................................................................................................................
87
+
............................^.^...^.^.^.....^.^.......^.^.^...^.^...^.^.....^.^...^.....^...^.^.^.^.^...^.^...^.^............................
88
+
.............................................................................................................................................
89
+
...........................^...^.^.^.......^.^...^.^.^.^.^.^.....^...^...^.^.^.^.....^.^.^...^.^.^...^.^.....^...^...........................
90
+
.............................................................................................................................................
91
+
..........................^.......^...^.^.^...^.^.^.^...^.^...^.^.^.^.^.^.^...^...^.^...^.....^...^.....^.^...^...^..........................
92
+
.............................................................................................................................................
93
+
.........................^.^.^.^.^.....^...^.^.^...^...^.^...^...^.^...^.^.^.^.....^...^...^.^.^...^...^.^.^.^.^.^.^.........................
94
+
.............................................................................................................................................
95
+
........................^.^...^.^.^.....^.^...^.^.^.^.^...^.^.^.^.^...^.....^.....^.^.^.^.^.^.^...^...^...^.^.^...^.^........................
96
+
.............................................................................................................................................
97
+
.......................^.^.^.^.^...^.^.......^.......^.^.^.^.....^...^.^.^.....^.^.^.......^.^.^...^...^.^.^.^.^.^.^.^.......................
98
+
.............................................................................................................................................
99
+
......................^.....^.^.......^.^.....^.^.^.^.^...^.....^.^.^.^.^.^.^.^.....^...^.^.^.....^...^.........^.^.^.^......................
100
+
.............................................................................................................................................
101
+
.....................^.^.^...^.^...^.^.^.^...^...^.^.^...^.....^.^.....^.^.....^.^.........^.^...^.^.^.^.^.^.....^.^.^.^.....................
102
+
.............................................................................................................................................
103
+
....................^.^.^.^.^...^...........^...^...^...^...^.^...^...^.....^.^.....^.^.....^.^.^.^.^.^.^...^.^.^.....^.^....................
104
+
.............................................................................................................................................
105
+
...................^.^...^.^...^...........^.^.^.^.^.^...^.^.....^.^.....^.....^.^.^...^.^.^.^.^...^.^.....^...^.^...^.^.^...................
106
+
.............................................................................................................................................
107
+
..................^.^.....^.............^.^.^.^.^.^.^.^.^.^...^...^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.....^.......^...^.^..................
108
+
.............................................................................................................................................
109
+
.................^.....^...^.^...^...^.^...^.^.^...^...^.^.^.^.....^.^.^...^.^.^.^.^...^.^.^.^.....^.....^...^...^.^...^.^.^.................
110
+
.............................................................................................................................................
111
+
................^.^.^.^.....^...^...^.^...^.^...^.^...^.^.....^.^.^.^...^.^.^.............^.^...^.^.........^.^.^...^.^.^.^.^................
112
+
.............................................................................................................................................
113
+
...............^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.........^.^.^.^...^.^.^.^.^...^...........^...^...^.^.^.^.....^...^.^...............
114
+
.............................................................................................................................................
115
+
..............^.....^.^...^.^.....^.^...^.^.^.^.^...^.^...^...^.^...^.......^.^...^.......^.^.....^.^...^.....^.......^.^.^.^.^..............
116
+
.............................................................................................................................................
117
+
.............^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^...^.....^.^...^.^.^.....^.^.^.^.^...^.^.^.^.^.^.^...^.^.^...^.^.^.^.^.^.^.^.............
118
+
.............................................................................................................................................
119
+
............^.^.^.^.^.^...^...^...........^.^.^.^.^.^.^...^.^...^...^...^.^.^.^.........^.^...^.^.^.^.^.^.^...^.....^.......^.^.^............
120
+
.............................................................................................................................................
121
+
...........^.^.....^.^.^.^.^.^.^.^...^.^.^.^.^...^.^.^.....^.^.^.^.^...^.......^...^.^.^.^.....^...^.^.^.^.^.....^.^.^.^.^...^.^.^...........
122
+
.............................................................................................................................................
123
+
..........^.^.^.^.^.^.^...^.....^.^.^...^.^.^...^...^.^.^.^.^.^.^.......^.^.......^.^.^.^.^.....^.^.^.^.^.^.....^.^...^.^...^.^.^.^..........
124
+
.............................................................................................................................................
125
+
.........^.....^.^.^.^...^...^...^...^.^...^.^.......^.^.^.^.^...^.^.^.....^.^.^.^.......^.^.^...^.^.^.^.^.......^...^.....^.^...^.^.........
126
+
.............................................................................................................................................
127
+
........^.^...^.^.^.^.^.^.....^...^.....^.^.^...^...^...^.^.^...^.^.^...^.^.....^...^.....^.^.^.^...^...^.^.^.^.....^.^.^...^.....^.^........
128
+
.............................................................................................................................................
129
+
.......^...^...^.^.^.....^.^...^...^.^.....^...^...^.^.^.^.^...^.^...^.^.^.^.....^.^.^...^.^.^...^.^...^.^.^.....^.^.^.^...^.^.^.^.^.^.......
130
+
.............................................................................................................................................
131
+
......^...........^.^.^.^.....^.^.^.^...^...............^.^.......^.^...^.^.^.^.....^...^...^.^.^.^.^...^.^...^.^.^.........^...^.^.^.^......
132
+
.............................................................................................................................................
133
+
.....^.^.^.^...^.^.^.^.^.^...^.......^.^...^.^.^.^.....^.^.^.^.^.^.^.^.^.^.^...^.^.....^.^.^...^.^...^.......^.^...^.^...^.^.^...^.^.^.^.....
134
+
.............................................................................................................................................
135
+
....^.^.^...^...^...^.^.^.^...^.^.......^.....^.....^...^.^...^...^.^.^.^.^.......^.^.^...^.^.^.....^.^.^...^...^.^.^.^.^...^.......^...^....
136
+
.............................................................................................................................................
137
+
...^.^.....^.^.^...^...^.^.^...^.^.^.^...^...^...^.^.^.^...^.^.^.^.^.^...^.^...^.^.^...^.....^.^.^...^.^.^...^.^.^.^.^.......^.^...^.^.^.^...
138
+
.............................................................................................................................................
139
+
..^.^.^.^...^.^.^.^...^.^.^.^.^.^.^...^...^.^.^.^...^.....^...^.^.^.^.^.^...^...^.^.^.^.....^.......^.^.^.^.^.....^.^.^.^.^.........^.^...^..
140
+
.............................................................................................................................................
141
+
.^.^.^.^.^.^.^.^.^...^.^.^...^...^.....^.^.....^.^.^.^.^.^...^...^.^...^.^.^.^.^...^.^.^.^...^.^.^.^...^...^...^...^.^.^.^.....^.^.^.....^.^.
142
+
.............................................................................................................................................
+16
data/07/test.txt
+16
data/07/test.txt
···
1
+
.......S.......
2
+
...............
3
+
.......^.......
4
+
...............
5
+
......^.^......
6
+
...............
7
+
.....^.^.^.....
8
+
...............
9
+
....^.^...^....
10
+
...............
11
+
...^.^...^.^...
12
+
...............
13
+
..^...^.....^..
14
+
...............
15
+
.^.^.^.^.^...^.
16
+
...............
+1000
data/08/input.txt
+1000
data/08/input.txt
···
1
+
47571,21070,9804
2
+
26014,44873,23440
3
+
21436,20018,6336
4
+
86942,19462,93901
5
+
49070,89301,48095
6
+
35616,79795,87684
7
+
46059,52360,21723
8
+
815,59491,16082
9
+
36997,51041,15723
10
+
48823,39495,7825
11
+
51753,4208,6052
12
+
54168,42076,29285
13
+
20754,25389,97173
14
+
59500,82003,9597
15
+
50009,95623,78606
16
+
16875,26902,85926
17
+
94936,11855,20459
18
+
29649,39961,5964
19
+
75013,82858,46898
20
+
41418,34129,78316
21
+
53899,91211,30110
22
+
23881,28275,96163
23
+
57427,65737,22498
24
+
61932,26265,53341
25
+
66932,22206,44871
26
+
21918,87742,17383
27
+
6367,78929,46730
28
+
45731,28754,95626
29
+
99274,72570,7847
30
+
30049,55955,65389
31
+
29114,49335,69452
32
+
93501,53260,46406
33
+
90751,50824,44853
34
+
17876,94582,42247
35
+
76370,58963,43822
36
+
7098,80312,49281
37
+
84161,27963,78109
38
+
26305,54455,7015
39
+
20715,36202,93555
40
+
53829,86237,93455
41
+
82380,63810,94552
42
+
89368,99839,21849
43
+
87497,47331,94985
44
+
15162,51381,770
45
+
95313,7542,11728
46
+
53233,25116,16166
47
+
39381,93503,98765
48
+
44807,73664,70213
49
+
64971,93696,88679
50
+
57739,609,67547
51
+
20052,59602,10551
52
+
97480,93610,27749
53
+
64800,39151,87207
54
+
20649,60628,94244
55
+
39906,63714,7798
56
+
63509,47318,9956
57
+
4450,90472,41313
58
+
63768,62774,11958
59
+
10544,27294,3096
60
+
36575,34168,46729
61
+
15982,19416,54354
62
+
79358,80933,60698
63
+
28189,14011,71324
64
+
99923,71592,65177
65
+
95588,3920,27088
66
+
20412,59125,6914
67
+
64359,62132,47563
68
+
80252,13527,57773
69
+
55512,16749,62123
70
+
29926,23937,64662
71
+
39571,82975,19998
72
+
45426,9316,91331
73
+
44477,20201,75955
74
+
2271,90540,17806
75
+
50227,93207,93092
76
+
11411,51340,57663
77
+
97754,96323,37130
78
+
98986,72665,15300
79
+
56185,47869,72908
80
+
41878,1363,14758
81
+
17185,33485,94935
82
+
56299,27990,23411
83
+
56452,5027,31447
84
+
29500,44948,51617
85
+
80321,14706,47434
86
+
11412,5698,63814
87
+
20894,72581,79096
88
+
16983,21117,47752
89
+
70243,75746,49340
90
+
8209,66696,24132
91
+
68345,8500,13353
92
+
66274,29803,36754
93
+
73740,3744,81183
94
+
93764,84714,68608
95
+
95758,92527,3581
96
+
1595,75495,24023
97
+
46264,54482,91932
98
+
88312,9307,89820
99
+
52494,90230,12337
100
+
13233,52655,32914
101
+
4316,69743,11655
102
+
60985,41967,58045
103
+
148,48360,76118
104
+
9168,81733,47376
105
+
7509,59153,81292
106
+
9286,92278,40935
107
+
6689,8277,65867
108
+
77303,26813,98281
109
+
97274,74605,8928
110
+
64111,1255,72466
111
+
47709,95260,99519
112
+
76389,53573,75496
113
+
91718,92565,80380
114
+
96354,38927,53770
115
+
54341,34652,75607
116
+
4883,54110,88424
117
+
7132,40749,94152
118
+
12116,58680,18862
119
+
82365,88948,64824
120
+
17238,81714,99059
121
+
7750,63178,72867
122
+
97873,63681,11835
123
+
29111,86352,22560
124
+
22221,10434,97955
125
+
33953,31092,14817
126
+
25563,63991,7561
127
+
91343,83184,43020
128
+
30333,91579,24170
129
+
43793,38500,78262
130
+
91079,65108,91185
131
+
9241,37569,48652
132
+
32460,746,63944
133
+
27812,99211,48865
134
+
33771,79759,60765
135
+
47927,66642,17212
136
+
21386,6415,23249
137
+
37948,8261,87194
138
+
43984,30104,67605
139
+
21734,65992,73999
140
+
86262,95474,9534
141
+
59214,83053,21772
142
+
90581,53940,87498
143
+
8241,19458,85268
144
+
58944,35703,85983
145
+
59911,38963,75410
146
+
99952,28406,68011
147
+
44037,55766,58629
148
+
4033,63003,64904
149
+
80639,28101,43807
150
+
56561,21523,8735
151
+
54799,81572,967
152
+
72303,47576,77866
153
+
73283,18699,89146
154
+
16438,5180,57306
155
+
85275,58630,78887
156
+
73122,12677,20791
157
+
23579,72966,44771
158
+
77605,53061,89981
159
+
44904,96197,31499
160
+
25606,69589,99058
161
+
90709,92773,25475
162
+
13674,79937,55109
163
+
30367,3176,72024
164
+
73198,59340,47212
165
+
66561,11630,359
166
+
81408,91758,96519
167
+
84170,22261,90978
168
+
61563,94745,30976
169
+
98606,76722,59057
170
+
72801,32395,14427
171
+
78479,39897,7663
172
+
97123,13861,46867
173
+
72658,62349,8080
174
+
14154,66620,28768
175
+
4557,99680,63147
176
+
2146,49024,61993
177
+
14654,3716,91456
178
+
66004,116,66251
179
+
2322,16850,71882
180
+
33229,94451,8875
181
+
29805,23309,81315
182
+
50029,36838,21929
183
+
82209,590,52032
184
+
21747,2975,97024
185
+
49535,18114,20733
186
+
3618,28912,40469
187
+
96636,97224,98582
188
+
57756,40775,84060
189
+
34034,79567,87609
190
+
25778,12133,5076
191
+
83296,8348,96603
192
+
70987,83036,78511
193
+
74585,66133,47503
194
+
45046,4953,14146
195
+
73068,56031,53588
196
+
53556,96933,17970
197
+
34304,44725,61677
198
+
81552,5207,10274
199
+
75676,34240,54779
200
+
26235,58317,78470
201
+
49044,58067,48983
202
+
41488,57392,13388
203
+
94175,28337,69652
204
+
22770,10382,52096
205
+
8129,73930,74894
206
+
27652,5751,2110
207
+
90856,9187,3182
208
+
71313,45401,62757
209
+
34566,84469,64732
210
+
59016,52067,4406
211
+
21917,26138,45029
212
+
97263,71628,37478
213
+
59537,72454,41174
214
+
4539,20633,62147
215
+
64138,74645,12101
216
+
83582,87586,79578
217
+
20401,60949,46910
218
+
70557,448,53317
219
+
85318,94930,54753
220
+
70992,94321,97929
221
+
25168,46035,84153
222
+
60606,1952,11388
223
+
21193,43019,39906
224
+
96635,25530,84545
225
+
374,52915,33797
226
+
4568,83473,12379
227
+
48299,44457,82027
228
+
83266,6879,32563
229
+
40391,95543,82502
230
+
38721,83550,86705
231
+
16498,3509,47973
232
+
46405,83872,84187
233
+
82310,92631,8186
234
+
96936,37313,2996
235
+
81772,60821,57329
236
+
71034,95270,59124
237
+
55347,49238,48950
238
+
38397,67390,4520
239
+
63155,14251,65728
240
+
76221,52730,58846
241
+
72010,46346,1935
242
+
10706,67290,12780
243
+
14173,89327,94873
244
+
81847,1935,70812
245
+
662,50973,84260
246
+
5755,43879,46625
247
+
24597,45916,35947
248
+
79693,44291,14249
249
+
57132,19072,4563
250
+
65615,47356,5321
251
+
51448,68876,39994
252
+
97074,47951,9852
253
+
84316,82211,79901
254
+
98008,94765,89135
255
+
66447,25627,42794
256
+
97780,52819,8822
257
+
21586,98713,27242
258
+
56338,25461,57018
259
+
21307,99640,86841
260
+
57220,4743,51006
261
+
54794,89524,22565
262
+
73269,13665,65911
263
+
91607,73120,69334
264
+
58479,41460,10925
265
+
48014,39814,63837
266
+
34417,90040,85444
267
+
7194,36015,93413
268
+
7868,97501,37561
269
+
91080,17487,79945
270
+
69784,87574,12615
271
+
3132,23539,47343
272
+
53840,21079,56691
273
+
14928,70069,77892
274
+
84516,59600,18173
275
+
94950,16419,10539
276
+
95786,75343,20956
277
+
77478,9485,20339
278
+
61532,12904,76720
279
+
57961,93013,50244
280
+
89776,75175,5051
281
+
65822,70073,28510
282
+
40531,35936,69847
283
+
59523,70583,52831
284
+
40175,32972,23371
285
+
90438,35912,38646
286
+
9190,71603,2301
287
+
89914,64437,39884
288
+
19231,20532,21738
289
+
20291,28387,29046
290
+
61401,12081,48512
291
+
70367,83299,72938
292
+
83775,15129,69950
293
+
65702,40589,28248
294
+
67004,66912,6380
295
+
92528,51355,9539
296
+
78714,75787,68757
297
+
11715,10091,10377
298
+
20186,48397,99790
299
+
92315,41383,55587
300
+
92772,78647,24218
301
+
27061,61947,52007
302
+
56991,14015,55863
303
+
61421,37878,69228
304
+
92103,39528,29743
305
+
72506,97359,35180
306
+
53018,24457,19496
307
+
3710,47703,24976
308
+
22916,27182,6379
309
+
42884,85646,26272
310
+
82100,98605,30769
311
+
1821,91791,94846
312
+
83792,55739,65047
313
+
46214,65415,81282
314
+
66988,40521,21596
315
+
45494,52681,57995
316
+
2212,70960,79823
317
+
33321,19720,39301
318
+
19669,55897,20490
319
+
9730,6780,10006
320
+
55897,67619,63154
321
+
85947,46340,80569
322
+
17833,80348,39175
323
+
53730,29488,16550
324
+
97827,97934,56043
325
+
79680,52251,79901
326
+
15440,84026,45232
327
+
34900,47716,88735
328
+
31175,30778,37122
329
+
653,6797,65269
330
+
39498,56985,61145
331
+
13639,4464,54937
332
+
36506,73704,92509
333
+
87986,54749,53371
334
+
86831,89128,24572
335
+
30369,50407,58265
336
+
44688,73717,6276
337
+
34669,23598,35669
338
+
38200,44889,66909
339
+
5804,48890,22794
340
+
33804,15381,41749
341
+
31083,32018,9933
342
+
41887,64511,29207
343
+
86779,64028,44144
344
+
82940,57300,4258
345
+
11837,83350,22362
346
+
53566,55374,15050
347
+
94542,42256,70529
348
+
57924,9304,52928
349
+
37874,91291,5924
350
+
27458,33422,50557
351
+
40032,20648,34773
352
+
19329,95504,64776
353
+
43060,59066,72108
354
+
38735,37842,70331
355
+
34756,30542,72483
356
+
8645,64076,29678
357
+
14422,9744,59856
358
+
36690,33825,5724
359
+
28010,71813,49198
360
+
79220,57332,56033
361
+
85797,27675,39216
362
+
20001,86620,15888
363
+
46676,25791,13225
364
+
31040,8856,9734
365
+
69598,20191,54257
366
+
31748,94398,62648
367
+
56233,47124,70615
368
+
86810,74097,63829
369
+
55402,87748,14049
370
+
64651,2504,94470
371
+
27971,25371,34425
372
+
7225,62165,53127
373
+
77869,9942,69819
374
+
72986,43646,21958
375
+
13212,64016,58505
376
+
99141,27615,61691
377
+
21479,16593,66867
378
+
13086,99145,53945
379
+
39562,70835,13715
380
+
77232,8696,6263
381
+
43493,37183,20948
382
+
90373,8567,28002
383
+
54144,51686,74721
384
+
20266,92932,54157
385
+
77664,69955,28639
386
+
18112,57499,37970
387
+
15268,17169,42698
388
+
32468,30659,49133
389
+
34070,13151,91140
390
+
87010,95748,2013
391
+
46275,45143,53050
392
+
10494,54292,36448
393
+
50234,76183,70819
394
+
80526,16331,62884
395
+
6032,43454,88976
396
+
1797,46200,32248
397
+
26840,76571,42950
398
+
27949,6053,95123
399
+
40843,57826,7905
400
+
62034,4876,80293
401
+
9905,9552,83286
402
+
75639,43573,56302
403
+
77035,5633,66609
404
+
11388,10209,68548
405
+
58492,99441,377
406
+
40265,14242,48084
407
+
4968,53030,15790
408
+
3046,79682,31531
409
+
71977,44774,83696
410
+
30341,61916,1749
411
+
30350,11026,837
412
+
44840,32588,63636
413
+
88505,10183,71612
414
+
32489,46938,18115
415
+
12210,5579,13040
416
+
17211,56521,90358
417
+
12646,96369,22505
418
+
34639,2499,36923
419
+
59882,65605,45102
420
+
77122,1567,96902
421
+
32974,16234,91201
422
+
52678,75753,35067
423
+
25434,92606,39762
424
+
93863,32581,75702
425
+
55269,32940,90736
426
+
31196,79296,2411
427
+
32139,5425,88534
428
+
42087,6540,70085
429
+
47680,12084,40442
430
+
82708,7433,75986
431
+
70100,43677,91632
432
+
75563,23981,42045
433
+
62069,50198,16274
434
+
91806,43797,19221
435
+
94941,43234,34002
436
+
93098,75133,93017
437
+
48110,24269,17706
438
+
90038,11689,72942
439
+
70544,38775,33456
440
+
2341,41646,83120
441
+
80223,44823,83163
442
+
23490,69775,90768
443
+
27119,88592,42351
444
+
49695,70167,79602
445
+
19734,54281,76912
446
+
3279,5818,16862
447
+
81007,57021,81242
448
+
81876,58981,63066
449
+
43321,31203,33556
450
+
31841,1330,10307
451
+
7949,71731,55618
452
+
26908,18268,30532
453
+
30285,88907,22633
454
+
24152,45805,60561
455
+
79302,72702,76457
456
+
24447,34767,60079
457
+
43353,98225,81031
458
+
68030,16759,9191
459
+
10141,12438,160
460
+
23463,5953,51134
461
+
15644,40590,57515
462
+
7584,17705,36278
463
+
45766,1900,6245
464
+
86762,62967,34062
465
+
54341,66546,41201
466
+
78187,91320,38408
467
+
37740,21065,4798
468
+
69745,98152,82847
469
+
58165,40210,7664
470
+
57808,97649,77099
471
+
59203,67064,43833
472
+
46238,42254,26635
473
+
42951,88292,67386
474
+
36255,71840,99352
475
+
86904,78475,63880
476
+
54625,41741,21814
477
+
51844,76869,66151
478
+
25449,1275,32406
479
+
53191,93381,13297
480
+
5047,32201,16966
481
+
78811,90884,23148
482
+
7102,60280,11362
483
+
74647,66893,26489
484
+
59242,8613,34456
485
+
28920,62015,38343
486
+
27722,65056,73880
487
+
84968,18892,48779
488
+
33795,33661,27615
489
+
95964,60359,73002
490
+
47608,24948,90615
491
+
83227,61252,77096
492
+
19549,49439,77542
493
+
38483,9359,99684
494
+
78665,15778,25976
495
+
13515,34388,9467
496
+
27094,30181,47555
497
+
77474,87811,56069
498
+
11371,79142,62321
499
+
35008,74101,91095
500
+
62614,92190,30576
501
+
45410,96553,90163
502
+
54834,29978,70659
503
+
73603,93724,29451
504
+
89408,16626,97888
505
+
61381,98593,92817
506
+
41656,60287,40274
507
+
42710,95785,86735
508
+
40148,27444,62101
509
+
38839,2726,156
510
+
53884,39879,77757
511
+
50182,33953,83335
512
+
4024,39407,78713
513
+
71201,69212,47612
514
+
72814,63909,21368
515
+
25091,8651,21835
516
+
66834,49263,47463
517
+
5794,19003,38757
518
+
25736,83973,63167
519
+
67326,69732,77723
520
+
55857,72729,21881
521
+
50893,26818,86959
522
+
21374,85006,32064
523
+
46247,5364,83390
524
+
64814,27275,70599
525
+
55152,54557,13088
526
+
24181,58143,23758
527
+
13931,48317,38065
528
+
66846,58449,51695
529
+
17876,21013,65658
530
+
99456,42478,6183
531
+
2146,27003,13244
532
+
79344,99111,98338
533
+
95675,22459,34986
534
+
67511,11973,23633
535
+
99088,18678,44464
536
+
17574,15741,74468
537
+
52103,86699,84509
538
+
78626,11978,41367
539
+
47184,33523,33023
540
+
62769,24411,39138
541
+
87083,10852,31442
542
+
71856,70552,41731
543
+
22827,20002,50990
544
+
3114,77254,71048
545
+
90444,55101,96536
546
+
12030,39124,9112
547
+
94730,50534,98462
548
+
65481,15521,6185
549
+
95416,25512,66803
550
+
30379,44564,35308
551
+
62359,30836,858
552
+
4783,30816,54071
553
+
93777,17819,93849
554
+
86860,48488,79960
555
+
38540,2096,26954
556
+
23403,55836,96988
557
+
92987,29804,88423
558
+
55332,20896,27899
559
+
10502,40551,24563
560
+
52516,39967,73612
561
+
99221,5902,84311
562
+
27715,4077,71754
563
+
26862,39283,2862
564
+
91760,34382,78320
565
+
49179,7364,82913
566
+
78199,2221,93708
567
+
61153,9597,79648
568
+
5073,82720,11302
569
+
61822,12463,66129
570
+
4315,14262,34326
571
+
77730,8771,72616
572
+
44595,64796,26351
573
+
61178,31519,77512
574
+
15747,87199,83147
575
+
16945,74163,59198
576
+
87054,85958,93672
577
+
28777,63191,29253
578
+
14354,8173,49003
579
+
52594,74550,96034
580
+
38416,18312,17255
581
+
73466,43537,40330
582
+
56769,52928,16350
583
+
96188,24420,61532
584
+
92933,42686,80599
585
+
74947,24413,55186
586
+
13898,41541,45573
587
+
5903,9073,21540
588
+
31417,19227,24337
589
+
5684,18176,63010
590
+
40224,43390,75761
591
+
98842,81166,44187
592
+
60881,32949,51308
593
+
53788,17800,23102
594
+
634,7754,1148
595
+
10482,71646,44004
596
+
7876,40227,62958
597
+
34829,29713,27785
598
+
68001,35821,96923
599
+
12827,8515,47275
600
+
54025,36049,42296
601
+
50915,34964,4004
602
+
23993,52708,56057
603
+
14674,10455,38981
604
+
31864,82531,59991
605
+
47438,24692,70707
606
+
92477,3072,40434
607
+
43571,76861,58998
608
+
80011,43036,49467
609
+
78019,90390,53249
610
+
53615,57975,45625
611
+
1702,24160,35037
612
+
35805,90333,23305
613
+
37707,79539,11741
614
+
2905,31052,78344
615
+
76311,17530,7380
616
+
44106,13061,19110
617
+
94819,93976,56394
618
+
12610,69169,81221
619
+
53121,60839,43572
620
+
21724,18243,70406
621
+
53261,60232,97572
622
+
28546,53689,69683
623
+
12694,57936,65968
624
+
82882,35505,12859
625
+
66837,55685,71303
626
+
11623,65623,62165
627
+
90587,26879,99017
628
+
27843,99230,84416
629
+
18509,40083,47141
630
+
32637,34159,3665
631
+
58801,76994,2826
632
+
73093,1048,47133
633
+
26146,25503,49013
634
+
7857,22552,93407
635
+
49429,99842,3603
636
+
54820,29343,21395
637
+
64989,49335,40131
638
+
40602,70291,18076
639
+
32379,67852,85939
640
+
20612,72997,59130
641
+
14587,34614,74057
642
+
72896,28351,44524
643
+
85587,53315,64171
644
+
36796,65835,69821
645
+
83564,79081,95423
646
+
56047,43325,37106
647
+
74816,99621,54441
648
+
70201,80468,22097
649
+
58402,85776,84389
650
+
4333,87626,83957
651
+
95489,48004,48147
652
+
37140,48179,76671
653
+
12264,22325,77463
654
+
70235,26337,43215
655
+
46901,79727,68156
656
+
23161,20519,23792
657
+
59846,24712,14913
658
+
88611,29379,9015
659
+
39654,50052,26737
660
+
56287,59461,66472
661
+
88871,52617,18550
662
+
79113,24225,16655
663
+
10981,25969,55227
664
+
8510,67023,66310
665
+
32241,81237,37402
666
+
13931,70565,9485
667
+
79335,45054,82935
668
+
49671,91517,34724
669
+
92078,48871,72204
670
+
56332,34226,55585
671
+
24562,71347,66647
672
+
82680,47080,28954
673
+
96352,1933,91494
674
+
72322,67853,89273
675
+
65082,14009,14444
676
+
1530,93847,47174
677
+
57820,18394,44986
678
+
22059,67185,79553
679
+
54557,53617,82442
680
+
46335,94730,72199
681
+
1962,12383,95849
682
+
65542,7955,29447
683
+
65144,38401,90221
684
+
35508,96042,82430
685
+
59163,14334,70945
686
+
70460,53300,52123
687
+
34023,78099,25284
688
+
19821,58522,74364
689
+
78588,13592,91207
690
+
89449,57983,53125
691
+
12631,60064,18667
692
+
23148,69953,14387
693
+
98065,60673,84824
694
+
3390,41925,34979
695
+
4661,22151,32161
696
+
42596,95326,23249
697
+
82168,82291,87225
698
+
78988,98863,79186
699
+
6992,45268,16858
700
+
69975,2042,57466
701
+
34943,27480,95116
702
+
8672,88889,10200
703
+
67403,28635,76571
704
+
46559,40091,74483
705
+
32881,7955,1367
706
+
51198,10001,96743
707
+
64130,56646,87474
708
+
80325,76483,89384
709
+
57046,60012,101
710
+
15077,16678,7927
711
+
3728,94382,39608
712
+
15964,69261,26463
713
+
83716,84460,70427
714
+
37320,30284,25700
715
+
46415,18770,63022
716
+
53399,28785,13774
717
+
74314,24151,28583
718
+
57140,15836,8623
719
+
71056,64222,65027
720
+
81218,79768,87696
721
+
22604,98045,70064
722
+
58915,75139,69740
723
+
56457,97339,81568
724
+
52208,10114,12451
725
+
74661,63103,4369
726
+
66959,4518,62250
727
+
49440,99642,8009
728
+
1807,65914,78391
729
+
27868,87246,62097
730
+
28780,60481,87911
731
+
27347,46484,10107
732
+
79586,4525,90940
733
+
17376,89075,64772
734
+
86798,5050,78881
735
+
40056,44781,7813
736
+
59740,19006,96758
737
+
84464,39836,33204
738
+
15036,29703,16044
739
+
40650,23464,33328
740
+
27586,94834,79957
741
+
72347,33172,98871
742
+
14928,56291,35185
743
+
19170,98017,88766
744
+
69095,39961,3157
745
+
14921,52255,4091
746
+
77408,21152,57035
747
+
15144,47264,61817
748
+
41243,87263,23238
749
+
49725,50503,70957
750
+
72742,49967,58307
751
+
62427,6785,17789
752
+
49372,10110,79026
753
+
73493,89522,62465
754
+
88764,83921,83214
755
+
85906,51672,39417
756
+
59951,8945,94301
757
+
66027,79004,89099
758
+
7721,79152,13019
759
+
31354,81139,71349
760
+
94292,22483,23272
761
+
83134,50745,53565
762
+
64572,51568,54087
763
+
35576,40786,82339
764
+
71536,29869,62731
765
+
82761,89931,9438
766
+
30326,6389,41591
767
+
88438,4028,46263
768
+
43045,39921,83709
769
+
19525,88390,6197
770
+
94923,78355,59908
771
+
66648,53480,72957
772
+
10316,95770,80697
773
+
64258,78272,34499
774
+
9602,14890,55144
775
+
32620,44416,74996
776
+
74381,54598,75987
777
+
68025,31961,88390
778
+
80103,84533,18000
779
+
52588,26228,18397
780
+
85996,65143,44905
781
+
58927,60922,53393
782
+
63291,59103,83939
783
+
44399,42038,79279
784
+
66706,53739,81533
785
+
97850,28487,74736
786
+
11409,45929,74659
787
+
76366,10982,68153
788
+
45192,22217,8001
789
+
12567,79477,83157
790
+
99016,29496,15868
791
+
99441,48371,39632
792
+
13125,33481,67353
793
+
14041,98765,696
794
+
57667,56475,65880
795
+
73596,42904,3828
796
+
40033,2119,49966
797
+
47248,88788,35167
798
+
12448,95861,56639
799
+
52634,66539,44159
800
+
78326,13152,13323
801
+
84603,97333,88368
802
+
25207,75486,41433
803
+
48253,93053,34986
804
+
43208,54954,83110
805
+
76374,5075,87221
806
+
91156,42808,47615
807
+
19242,85722,11737
808
+
49409,18079,11095
809
+
2164,15802,99410
810
+
51637,23686,84491
811
+
8799,33160,78581
812
+
45410,37478,85256
813
+
48724,80570,70207
814
+
5337,32514,2350
815
+
25825,34176,15584
816
+
23758,37015,71970
817
+
67949,45676,17850
818
+
69889,22576,9602
819
+
49666,25941,51764
820
+
82425,36914,85367
821
+
71935,5950,24079
822
+
99034,60825,28744
823
+
47463,71130,7873
824
+
65916,77191,67546
825
+
52639,64934,27059
826
+
25286,43802,54243
827
+
21765,82892,46133
828
+
83714,55468,26432
829
+
8234,25559,71966
830
+
69309,17480,92126
831
+
86058,99047,87034
832
+
70891,95150,42356
833
+
9190,82148,93273
834
+
88920,38914,57393
835
+
62428,31091,34420
836
+
34320,75262,48894
837
+
71159,98023,37547
838
+
16134,23614,55280
839
+
69673,12353,1603
840
+
49368,97222,43249
841
+
84405,95532,66840
842
+
37839,3437,48182
843
+
22393,71847,80523
844
+
93911,50316,60776
845
+
43028,3938,60629
846
+
27619,3021,9514
847
+
77399,27707,8919
848
+
57263,83406,68290
849
+
22053,30972,96730
850
+
53940,36034,57408
851
+
41239,99148,63259
852
+
57045,78769,10005
853
+
58374,63114,26580
854
+
50821,77483,49296
855
+
82959,42165,29481
856
+
96273,24985,2153
857
+
49241,7520,19081
858
+
50757,94282,77801
859
+
38752,75862,20439
860
+
26794,19821,90257
861
+
60011,47770,15012
862
+
99084,34347,79964
863
+
69079,11566,60069
864
+
75589,80080,46358
865
+
2731,39043,87971
866
+
81258,93577,27120
867
+
98782,3083,31148
868
+
21067,10434,97759
869
+
17633,90336,18283
870
+
42288,35286,35492
871
+
97043,85410,6868
872
+
15744,47437,31523
873
+
39150,72388,66272
874
+
29176,54342,60288
875
+
17332,51184,31921
876
+
98546,6055,85092
877
+
25437,71642,66423
878
+
10807,74499,22047
879
+
65389,64539,92105
880
+
13522,94556,95640
881
+
88993,44952,15621
882
+
44035,68710,12057
883
+
34173,62229,34852
884
+
48462,14122,96488
885
+
42631,98310,94112
886
+
28817,73863,45216
887
+
99285,74724,42942
888
+
32630,41705,74013
889
+
52914,89386,95045
890
+
3556,18655,22825
891
+
2197,65519,88154
892
+
56784,5609,52806
893
+
4401,90031,71062
894
+
89583,17186,94403
895
+
36613,70447,35887
896
+
93664,54419,41441
897
+
96846,91670,87650
898
+
52315,40033,99990
899
+
75452,67163,63407
900
+
44113,22893,12942
901
+
65470,67631,10701
902
+
18129,39210,64248
903
+
41498,571,37885
904
+
27692,49007,90764
905
+
65234,44201,37549
906
+
98101,76266,62596
907
+
89892,60472,76556
908
+
44543,72496,99023
909
+
37655,77646,27591
910
+
61180,40551,94668
911
+
45105,30201,36649
912
+
1620,31850,73921
913
+
58609,32384,11624
914
+
22892,66188,2899
915
+
62972,33611,70756
916
+
98837,98135,5464
917
+
66354,96306,20181
918
+
90856,2587,42432
919
+
43583,72337,78299
920
+
8702,45615,61530
921
+
65039,22806,64843
922
+
20120,41245,2180
923
+
30525,30948,54581
924
+
98879,57234,78496
925
+
41667,25886,83297
926
+
55523,71875,31645
927
+
92425,62653,32116
928
+
98157,24050,87488
929
+
15418,7193,9628
930
+
24897,83358,13207
931
+
77311,85920,40203
932
+
93757,20098,21627
933
+
23158,29915,65544
934
+
96552,55054,86728
935
+
63301,54813,44068
936
+
9332,69606,9495
937
+
74920,57406,77815
938
+
39925,15384,17409
939
+
76192,66369,4419
940
+
7579,48260,96351
941
+
59656,30550,75934
942
+
67737,67440,2241
943
+
49823,35541,55277
944
+
49428,19266,20196
945
+
39982,30538,15958
946
+
97713,42981,17162
947
+
44913,5665,26625
948
+
68888,94239,48645
949
+
20780,45996,92313
950
+
95933,17224,21793
951
+
63415,21295,8067
952
+
55039,38657,95442
953
+
75331,70835,14103
954
+
54143,10508,68882
955
+
43973,68618,68679
956
+
70531,12478,99652
957
+
35890,82580,8365
958
+
82110,41720,78025
959
+
47005,86989,64248
960
+
82238,51772,65545
961
+
63597,41735,96550
962
+
27146,93957,15649
963
+
49435,67306,14087
964
+
85150,43746,62836
965
+
69372,82749,49615
966
+
60686,63853,9791
967
+
25514,76765,56150
968
+
40131,55748,98207
969
+
74245,17028,5951
970
+
30561,94489,18399
971
+
70284,31612,20113
972
+
40691,63157,12305
973
+
98572,87740,48052
974
+
4913,93685,72983
975
+
4390,29821,52250
976
+
27517,82896,47853
977
+
95298,50022,36325
978
+
15917,50554,71325
979
+
2439,13008,41417
980
+
63228,43487,2803
981
+
27655,25186,81653
982
+
1750,16142,28036
983
+
795,65209,42189
984
+
43047,74977,86760
985
+
9260,32662,4268
986
+
89945,53054,67979
987
+
66023,27710,75801
988
+
34051,71757,96026
989
+
74547,84567,40114
990
+
55156,40862,19705
991
+
88279,57251,52701
992
+
97760,82882,52581
993
+
71440,82452,62216
994
+
12542,33903,6417
995
+
68098,28185,12970
996
+
19268,67975,24536
997
+
83973,44435,89151
998
+
96679,29711,69197
999
+
17807,80459,30036
1000
+
82541,92402,2312
+20
data/08/test.txt
+20
data/08/test.txt
···
1
+
162,817,812
2
+
57,618,57
3
+
906,360,560
4
+
592,479,940
5
+
352,342,300
6
+
466,668,158
7
+
542,29,236
8
+
431,825,988
9
+
739,650,466
10
+
52,470,668
11
+
216,146,977
12
+
819,987,18
13
+
117,168,530
14
+
805,96,715
15
+
346,949,466
16
+
970,615,88
17
+
941,993,340
18
+
862,61,35
19
+
984,92,344
20
+
425,690,689
+155
src/05/solution.cxx
+155
src/05/solution.cxx
···
1
+
#include "common/getinputpath.h"
2
+
#include <algorithm>
3
+
#include <filesystem>
4
+
#include <fstream>
5
+
#include <print>
6
+
#include <ranges>
7
+
#include <sstream>
8
+
#include <string>
9
+
#include <vector>
10
+
11
+
class Range {
12
+
public:
13
+
Range(long long from, long long to, bool inclusive)
14
+
: from(from), to(to), inclusive(inclusive) {}
15
+
16
+
long long from;
17
+
long long to;
18
+
bool inclusive;
19
+
20
+
bool contains(long long value) {
21
+
auto real_from = std::min(from, to);
22
+
auto real_to = std::max(from, to);
23
+
24
+
if (inclusive) {
25
+
return value >= real_from && value <= real_to;
26
+
} else {
27
+
return value >= real_from && value < real_to;
28
+
}
29
+
}
30
+
31
+
long long size() {
32
+
auto real_from = std::min(from, to);
33
+
auto real_to = std::max(from, to);
34
+
if (inclusive) {
35
+
real_to += 1;
36
+
}
37
+
38
+
// TODO(fix): may be buggy with from is negative and to is positive
39
+
return real_to - real_from;
40
+
}
41
+
};
42
+
43
+
// runtime on Ryzen 5 5600G: 0.003s
44
+
int main() {
45
+
auto path = get_input_path(DATA_FOLDER);
46
+
auto data_size = std::filesystem::file_size(path);
47
+
std::string data = "";
48
+
data.resize(data_size);
49
+
std::ifstream data_ifstream(path);
50
+
if (!data_ifstream.is_open()) {
51
+
std::println("Unable to read from the solution file at {}", path.string());
52
+
return 1;
53
+
}
54
+
data_ifstream.read(data.data(), data_size);
55
+
56
+
auto split_idx = data.find("\n\n");
57
+
auto data_ranges = data.substr(0, split_idx);
58
+
auto data_ids = data.substr(split_idx + 2);
59
+
60
+
std::vector<Range> ranges{};
61
+
{
62
+
auto stream = std::stringstream(data_ranges);
63
+
for (std::string t; std::getline(stream, t);) {
64
+
// parsing
65
+
auto split_idx = t.find("-");
66
+
auto left = std::stoll(t.substr(0, split_idx));
67
+
auto right = std::stoll(t.substr(split_idx + 1));
68
+
69
+
// RAM is expensive these days
70
+
// burning the CPU in attempts to occupy as less RAM at peak as possible
71
+
// fuck OpenAI
72
+
bool skip = false;
73
+
for (auto [i, range] : std::ranges::views::enumerate(ranges)) {
74
+
bool left_in_range = left >= range.from && left <= range.to;
75
+
bool right_in_range = right >= range.from && right <= range.to;
76
+
if (left_in_range && right_in_range) {
77
+
// my hand just itches to use goto
78
+
skip = true;
79
+
break;
80
+
}
81
+
if (left_in_range) {
82
+
ranges[i] = Range(range.from, right, true);
83
+
skip = true;
84
+
break;
85
+
}
86
+
if (right_in_range) {
87
+
ranges[i] = Range(left, range.to, true);
88
+
skip = true;
89
+
break;
90
+
}
91
+
if (left <= range.from && right >= range.to) {
92
+
ranges[i] = Range(left, right, true);
93
+
skip = true;
94
+
break;
95
+
}
96
+
}
97
+
if (skip) {
98
+
continue;
99
+
}
100
+
101
+
auto new_range = Range(left, right, true);
102
+
ranges.push_back(new_range);
103
+
}
104
+
}
105
+
106
+
std::sort(ranges.begin(), ranges.end(),
107
+
[](Range one, Range other) { return one.from < other.from; });
108
+
109
+
std::vector<Range> merged_ranges = std::ranges::fold_left(
110
+
ranges, std::vector<Range>(), [](std::vector<Range> acc, Range range) {
111
+
if (acc.empty() || acc.back().to < range.from) {
112
+
acc.push_back(range);
113
+
} else {
114
+
acc.back().to = std::max(range.to, acc.back().to);
115
+
}
116
+
117
+
return acc;
118
+
});
119
+
120
+
std::vector<long long> ids{};
121
+
{
122
+
auto stream = std::stringstream(data_ids);
123
+
for (std::string t; std::getline(stream, t);) {
124
+
auto id = std::stoll(t);
125
+
ids.push_back(id);
126
+
}
127
+
}
128
+
129
+
long long password_part_1 = 0;
130
+
131
+
std::ranges::for_each(ids, [&merged_ranges, &password_part_1](long long id) {
132
+
bool is_fresh = false; // guilty until proven innocent!
133
+
for (auto range : merged_ranges) {
134
+
is_fresh = range.contains(id);
135
+
if (is_fresh) {
136
+
break;
137
+
}
138
+
}
139
+
if (is_fresh) {
140
+
password_part_1 += 1;
141
+
}
142
+
});
143
+
144
+
long long password_part_2 = 0;
145
+
146
+
for (auto range : merged_ranges) {
147
+
password_part_2 += range.size();
148
+
149
+
std::println("{} - {}", range.from, range.to);
150
+
}
151
+
152
+
std::println("Eureka! {} / {}", password_part_1, password_part_2);
153
+
154
+
return 0;
155
+
}
+135
src/06/solution.cxx
+135
src/06/solution.cxx
···
1
+
#include "common/getinputpath.h"
2
+
#include <algorithm>
3
+
#include <cstddef>
4
+
#include <filesystem>
5
+
#include <fstream>
6
+
#include <functional>
7
+
#include <optional>
8
+
#include <print>
9
+
#include <sstream>
10
+
#include <string>
11
+
#include <vector>
12
+
13
+
int main() {
14
+
auto data_path = get_input_path(DATA_FOLDER);
15
+
auto data_size = std::filesystem::file_size(data_path);
16
+
std::ifstream data_ifstream(data_path);
17
+
if (!data_ifstream.is_open()) {
18
+
std::println("Failed to open input file at {}", data_path.string());
19
+
return 1;
20
+
}
21
+
22
+
std::string data{};
23
+
data.resize(data_size);
24
+
data_ifstream.read(data.data(), data_size);
25
+
26
+
long long password_part_1 = 0;
27
+
// password_part_2 requires a whole different way of parsing data. look for
28
+
// the next block.
29
+
{
30
+
std::vector<std::vector<std::string>> data_p1{};
31
+
std::stringstream data_ss(data);
32
+
for (std::string t; std::getline(data_ss, t);) {
33
+
std::stringstream t_stream(t);
34
+
35
+
std::string word;
36
+
std::vector<std::string> words{};
37
+
// stringstream >> buffer_string skips all whitespaces (space, tab, \n,
38
+
// etc.) and overwrites the buffer_string.
39
+
while (t_stream >> word) {
40
+
words.push_back(word);
41
+
}
42
+
data_p1.push_back(words);
43
+
}
44
+
45
+
// now, calculations.
46
+
47
+
for (size_t i = 0; i < data_p1[0].size(); ++i) {
48
+
std::optional<long long> subtotal = std::nullopt;
49
+
std::string operation = data_p1.back()[i];
50
+
51
+
for (size_t j = 0; j < data_p1.size() - 1; ++j) {
52
+
if (!subtotal.has_value()) {
53
+
subtotal = std::stoll(data_p1[j][i]);
54
+
continue;
55
+
}
56
+
57
+
switch (operation[0]) {
58
+
case '+': {
59
+
subtotal = subtotal.value() + std::stoll(data_p1[j][i]);
60
+
break;
61
+
}
62
+
case '*': {
63
+
subtotal = subtotal.value() * std::stoll(data_p1[j][i]);
64
+
break;
65
+
}
66
+
}
67
+
}
68
+
69
+
password_part_1 += subtotal.value();
70
+
}
71
+
}
72
+
73
+
long long password_part_2 = 0;
74
+
// let's rotate the world
75
+
{
76
+
// splitting string by \n
77
+
std::vector<std::string> data_p2{};
78
+
std::stringstream data_ss(data);
79
+
for (std::string t; std::getline(data_ss, t);) {
80
+
data_p2.push_back(t);
81
+
}
82
+
83
+
// reading it like Japanese hiragana in traditional (vertical,
84
+
// right-to-left) writing
85
+
std::vector<std::string> rotated_data{};
86
+
for (long i = data_p2[0].size() - 1; i >= 0; --i) {
87
+
std::string buffer_string{};
88
+
for (size_t j = 0; j < data_p2.size(); ++j) {
89
+
if (data_p2[j][i] == ' ') {
90
+
continue;
91
+
}
92
+
93
+
buffer_string.push_back(data_p2[j][i]);
94
+
}
95
+
if (!buffer_string.empty()) {
96
+
rotated_data.push_back(buffer_string);
97
+
}
98
+
}
99
+
100
+
std::vector<long long> acc{};
101
+
std::vector<long long> solutions{};
102
+
for (auto number : rotated_data) {
103
+
char last_character = number.back();
104
+
switch (last_character) {
105
+
case '*': {
106
+
auto actual_number = number.substr(0, number.size() - 1);
107
+
acc.push_back(std::stoll(actual_number));
108
+
long long solution =
109
+
std::ranges::fold_left(acc, 1LL, std::multiplies<>());
110
+
solutions.push_back(solution);
111
+
acc = std::vector<long long>();
112
+
continue;
113
+
break;
114
+
}
115
+
case '+': {
116
+
auto actual_number = number.substr(0, number.size() - 1);
117
+
acc.push_back(std::stoll(actual_number));
118
+
long long solution = std::ranges::fold_left(acc, 0LL, std::plus<>());
119
+
solutions.push_back(solution);
120
+
acc = std::vector<long long>();
121
+
continue;
122
+
break;
123
+
}
124
+
}
125
+
126
+
acc.push_back(std::stoll(number));
127
+
}
128
+
129
+
password_part_2 = std::ranges::fold_left(solutions, 0LL, std::plus<>());
130
+
}
131
+
132
+
std::println("Eureka! {} / {}", password_part_1, password_part_2);
133
+
134
+
return 0;
135
+
}
+142
src/07/solution.cxx
+142
src/07/solution.cxx
···
1
+
#include <cstddef>
2
+
#include <format>
3
+
#include <fstream>
4
+
#include <map>
5
+
#include <print>
6
+
#include <string>
7
+
#include <vector>
8
+
9
+
#include "common/getinputpath.h"
10
+
11
+
void render(std::vector<std::string>& data) {
12
+
if (data.size() < 2) {
13
+
return;
14
+
}
15
+
16
+
for (size_t i = 1; i < data.size(); ++i) {
17
+
auto& previous = data[i - 1];
18
+
auto& current = data[i];
19
+
20
+
for (size_t ch = 0; ch < current.size(); ++ch) {
21
+
char previous_ch = previous[ch];
22
+
char current_ch = current[ch];
23
+
if (previous_ch != 'S' && previous_ch != '|') {
24
+
continue;
25
+
}
26
+
27
+
// render
28
+
if (current_ch == '^') {
29
+
// split
30
+
if (ch > 0) {
31
+
current[ch - 1] = '|';
32
+
}
33
+
if (ch < current.size()) {
34
+
current[ch + 1] = '|';
35
+
}
36
+
} else {
37
+
current[ch] = '|';
38
+
}
39
+
}
40
+
}
41
+
}
42
+
43
+
long long count_beams_split(std::vector<std::string>& data) {
44
+
if (data.size() < 2) {
45
+
return 0;
46
+
}
47
+
auto out = 0;
48
+
49
+
for (size_t i = 1; i < data.size(); ++i) {
50
+
auto& previous = data[i - 1];
51
+
auto& current = data[i];
52
+
53
+
for (size_t ch = 0; ch < current.size(); ++ch) {
54
+
if (previous[ch] == '|' && current[ch] == '^') {
55
+
out += 1;
56
+
}
57
+
}
58
+
}
59
+
60
+
return out;
61
+
}
62
+
63
+
struct Position {
64
+
size_t x = 0;
65
+
size_t y = 0;
66
+
67
+
bool operator==(const Position& other) const {
68
+
return x == other.x && y == other.y;
69
+
}
70
+
71
+
bool operator<(const Position& other) const {
72
+
return y < other.y || (y == other.y && x < other.x);
73
+
}
74
+
};
75
+
76
+
long long count_possible_paths(std::vector<std::string>& data,
77
+
Position position,
78
+
std::map<Position, long long>& cache) {
79
+
// TODO
80
+
if (position.y == data.size()) { // if we reached bottom
81
+
return 1;
82
+
}
83
+
long long result = 0;
84
+
if (data[position.y][position.x] == '|' ||
85
+
data[position.y][position.x] == 'S') {
86
+
Position new_pos{.x = position.x, .y = position.y + 1};
87
+
result = count_possible_paths(data, new_pos, cache);
88
+
89
+
} else if (data[position.y][position.x] == '^') {
90
+
Position left = Position{.x = position.x - 1, .y = position.y};
91
+
Position right = Position{.x = position.x + 1, .y = position.y};
92
+
93
+
// a weird workaround to satisfy some static checks. maps must
94
+
// be sortable.
95
+
if (cache.contains(position)) {
96
+
result = cache[position];
97
+
} else {
98
+
result = count_possible_paths(data, left, cache) +
99
+
count_possible_paths(data, right, cache);
100
+
101
+
cache[position] = result;
102
+
}
103
+
}
104
+
105
+
return result;
106
+
}
107
+
108
+
long long count_possible_paths(std::vector<std::string>& data,
109
+
std::map<Position, long long>& cache) {
110
+
Position start{
111
+
.x = data[0].find_first_of('S'),
112
+
.y = 0,
113
+
};
114
+
return count_possible_paths(data, start, cache);
115
+
}
116
+
117
+
// runtime on Ryzen 5 5600G: 0.003s
118
+
int main() {
119
+
auto data_path = get_input_path(DATA_FOLDER);
120
+
std::ifstream data_ifstream(data_path);
121
+
if (!data_ifstream.is_open()) {
122
+
std::println("Cannot open the file at {}", data_path.string());
123
+
return 1;
124
+
}
125
+
126
+
std::vector<std::string> data{};
127
+
for (std::string t; std::getline(data_ifstream, t);) {
128
+
data.push_back(t);
129
+
}
130
+
131
+
render(data); // this has some great potential for TUI visualization
132
+
133
+
long long password_part_1 = count_beams_split(data);
134
+
135
+
std::map<Position, long long> cache{};
136
+
long long password_part_2 =
137
+
count_possible_paths(data, cache); // this one too
138
+
139
+
std::println("Eureka! {} / {}", password_part_1, password_part_2);
140
+
141
+
return 0;
142
+
}
+199
src/08/solution.cxx
+199
src/08/solution.cxx
···
1
+
#include <algorithm>
2
+
#include <cmath>
3
+
#include <fstream>
4
+
#include <iterator>
5
+
#include <map>
6
+
#include <print>
7
+
#include <ranges>
8
+
#include <set>
9
+
#include <vector>
10
+
11
+
#include "common/getinputpath.h"
12
+
#include "common/istest.h"
13
+
14
+
const int STEPS = is_test() ? 10 : 1000;
15
+
16
+
struct Box {
17
+
int x;
18
+
int y;
19
+
int z;
20
+
21
+
float euclidean(Box& other) {
22
+
return std::sqrt(std::pow((other.x - this->x), 2) +
23
+
std::pow((other.y - this->y), 2) +
24
+
std::pow((other.z - this->z), 2));
25
+
}
26
+
27
+
bool operator==(const Box other) const {
28
+
return this->x == other.x && this->y == other.y && this->z == other.z;
29
+
}
30
+
31
+
bool operator<(const Box other) const {
32
+
return this->x < other.x || (this->x == other.x && this->y < other.y) ||
33
+
(this->x == other.x && this->y == other.y && this->z < other.z);
34
+
}
35
+
36
+
std::string to_string() { return std::format("{} {} {}", x, y, z); }
37
+
};
38
+
39
+
struct Connection {
40
+
Box a;
41
+
Box b;
42
+
float distance;
43
+
44
+
bool operator==(const Connection& other) const {
45
+
return (other.a == this->a && other.b == this->b) ||
46
+
(other.a == this->b && other.b == this->a);
47
+
}
48
+
49
+
bool contains(Box box) { return this->a == box || this->b == box; }
50
+
51
+
bool connected(Connection connection) {
52
+
return this->contains(connection.a) || this->contains(connection.b);
53
+
}
54
+
55
+
bool operator<(const Connection other) const {
56
+
return this->distance < other.distance;
57
+
}
58
+
};
59
+
60
+
Connection make_connection(Box& one, Box& other) {
61
+
return Connection{.a = one, .b = other, .distance = one.euclidean(other)};
62
+
}
63
+
64
+
// standard DSU
65
+
class DSU {
66
+
std::vector<int> size{};
67
+
std::vector<int> parent{};
68
+
69
+
public:
70
+
DSU(int n) {
71
+
parent.resize(n);
72
+
size.resize(n);
73
+
74
+
for (int i = 0; i < n; ++i) {
75
+
parent[i] = i;
76
+
size[i] = 1;
77
+
}
78
+
}
79
+
80
+
int find(int i) {
81
+
return (parent[i] == i) ? i : (parent[i] = find(parent[i]));
82
+
}
83
+
84
+
void unite(int x, int y) {
85
+
int s1 = find(x);
86
+
int s2 = find(y);
87
+
88
+
if (s1 == s2) {
89
+
return;
90
+
}
91
+
if (size[s1] < size[s2]) {
92
+
parent[s1] = s2;
93
+
size[s2] += size[s1];
94
+
} else if (size[s1] > size[s2]) {
95
+
parent[s2] = s1;
96
+
size[s1] += size[s2];
97
+
} else {
98
+
parent[s2] = s1;
99
+
size[s1] += size[s2];
100
+
}
101
+
}
102
+
103
+
std::vector<int> sizes() { return size; }
104
+
};
105
+
106
+
int main() {
107
+
auto path = get_input_path(DATA_FOLDER);
108
+
std::ifstream data_ifstream(path);
109
+
if (!data_ifstream.is_open()) {
110
+
std::println("Cannot open the file at {}", path.string());
111
+
return 1;
112
+
}
113
+
114
+
std::vector<Box> data{};
115
+
for (std::string t; std::getline(data_ifstream, t);) {
116
+
int x{};
117
+
int y{};
118
+
int z{};
119
+
120
+
auto first_comma_idx = t.find_first_of(',');
121
+
auto x_str = t.substr(0, first_comma_idx);
122
+
auto yz_str = t.substr(first_comma_idx + 1);
123
+
auto second_comma_idx = yz_str.find_first_of(',');
124
+
auto y_str = yz_str.substr(0, second_comma_idx);
125
+
auto z_str = yz_str.substr(second_comma_idx + 1);
126
+
127
+
x = std::stoi(x_str);
128
+
y = std::stoi(y_str);
129
+
z = std::stoi(z_str);
130
+
131
+
data.push_back(Box{.x = x, .y = y, .z = z});
132
+
}
133
+
134
+
long long estimated_conns = data.size() * data.size() - data.size();
135
+
std::print("Generating connections... est. {}", estimated_conns);
136
+
137
+
// replacing this with an unordered set would make things faster
138
+
std::set<Connection> connections{};
139
+
for (auto box1 : data) {
140
+
for (auto box2 : data) {
141
+
if (box1 == box2) {
142
+
continue;
143
+
}
144
+
145
+
Connection conn = make_connection(box1, box2);
146
+
if (connections.contains(conn)) { // connection already exists
147
+
continue;
148
+
}
149
+
connections.insert(conn);
150
+
std::print("\r");
151
+
}
152
+
}
153
+
std::println();
154
+
155
+
std::println("Sorting connections...");
156
+
std::vector<Connection> connections_vec =
157
+
connections | std::ranges::to<std::vector<Connection>>();
158
+
std::ranges::sort(connections_vec, [](Connection one, Connection other) {
159
+
return one.distance < other.distance;
160
+
});
161
+
162
+
std::println("Calculating three largest connected components...");
163
+
DSU dsu(data.size());
164
+
165
+
std::map<Box, size_t> data_idxs{};
166
+
for (auto [idx, box] : data | std::ranges::views::enumerate) {
167
+
data_idxs[box] = idx;
168
+
}
169
+
170
+
long long counter = 0;
171
+
Connection last_connected;
172
+
long long password_part_1;
173
+
for (auto conn : connections_vec) {
174
+
counter += 1;
175
+
if (dsu.find(data_idxs[conn.a]) != dsu.find(data_idxs[conn.b])) {
176
+
dsu.unite(data_idxs[conn.a], data_idxs[conn.b]);
177
+
last_connected = conn;
178
+
}
179
+
if (counter == STEPS) {
180
+
auto sizes = dsu.sizes();
181
+
std::ranges::sort(sizes);
182
+
std::ranges::reverse(sizes);
183
+
184
+
std::println("Three biggest: {}, {}, {}", sizes[0], sizes[1],
185
+
sizes[2]);
186
+
int s1 = sizes[0];
187
+
int s2 = sizes[1];
188
+
int s3 = sizes[2];
189
+
password_part_1 = s1 * s2 * s3;
190
+
}
191
+
}
192
+
193
+
long long password_part_2 = last_connected.a.x * last_connected.b.x;
194
+
195
+
std::println();
196
+
std::println("Eureka! {} / {}", password_part_1, password_part_2);
197
+
198
+
return 0;
199
+
}
+5
-4
src/common/getinputpath.cxx
+5
-4
src/common/getinputpath.cxx
···
1
+
#include <filesystem>
2
+
1
3
#include "common/istest.h"
2
-
#include <filesystem>
3
4
4
5
const std::filesystem::path get_input_path(std::filesystem::path data_root) {
5
-
std::filesystem::path data_path =
6
-
data_root / (is_test() ? "test.txt" : "input.txt");
6
+
std::filesystem::path data_path =
7
+
data_root / (is_test() ? "test.txt" : "input.txt");
7
8
8
-
return data_path;
9
+
return data_path;
9
10
}
+5
-5
src/common/istest.cxx
+5
-5
src/common/istest.cxx
···
2
2
#include <string_view>
3
3
4
4
bool is_test() {
5
-
std::string_view mode = "real";
6
-
if (const char *env_mode = std::getenv("AOC_MODE")) {
7
-
mode = env_mode;
8
-
}
5
+
std::string_view mode = "real";
6
+
if (const char* env_mode = std::getenv("AOC_MODE")) {
7
+
mode = env_mode;
8
+
}
9
9
10
-
return mode == "test";
10
+
return mode == "test";
11
11
}