+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
+174
src/05/solution.cxx
+174
src/05/solution.cxx
···
1
+
#include "common/getinputpath.h"
2
+
#include <algorithm>
3
+
#include <cstddef>
4
+
#include <filesystem>
5
+
#include <fstream>
6
+
#include <print>
7
+
#include <set>
8
+
#include <sstream>
9
+
#include <string>
10
+
#include <vector>
11
+
12
+
class Range {
13
+
public:
14
+
Range(long long from, long long to, bool inclusive)
15
+
: from(from), to(to), inclusive(inclusive) {}
16
+
17
+
long long from;
18
+
long long to;
19
+
bool inclusive;
20
+
21
+
bool contains(long long value) {
22
+
auto real_from = std::min(from, to);
23
+
auto real_to = std::max(from, to);
24
+
25
+
if (inclusive) {
26
+
return value >= real_from && value <= real_to;
27
+
} else {
28
+
return value >= real_from && value < real_to;
29
+
}
30
+
}
31
+
32
+
auto all_values() {
33
+
auto real_from = std::min(from, to);
34
+
auto real_to = std::max(from, to);
35
+
36
+
std::set<long long> out{};
37
+
if (inclusive) {
38
+
for (auto i = real_from; i <= real_to; ++i) {
39
+
out.insert(i);
40
+
}
41
+
}
42
+
43
+
return out;
44
+
}
45
+
46
+
long long size() {
47
+
auto real_from = std::min(from, to);
48
+
auto real_to = std::max(from, to);
49
+
if (inclusive) {
50
+
real_to += 1;
51
+
}
52
+
53
+
// TODO(fix): may be buggy with from is negative and to is positive
54
+
return real_to - real_from;
55
+
}
56
+
};
57
+
58
+
// runtime on Ryzen 5 5600G: 0.003s
59
+
int main() {
60
+
auto path = get_input_path(DATA_FOLDER);
61
+
auto data_size = std::filesystem::file_size(path);
62
+
std::string data = "";
63
+
data.resize(data_size);
64
+
std::ifstream data_ifstream(path);
65
+
if (!data_ifstream.is_open()) {
66
+
std::println("Unable to read from the solution file at {}", path.string());
67
+
return 1;
68
+
}
69
+
data_ifstream.read(data.data(), data_size);
70
+
71
+
auto split_idx = data.find("\n\n");
72
+
auto data_ranges = data.substr(0, split_idx);
73
+
auto data_ids = data.substr(split_idx + 2);
74
+
75
+
std::vector<Range> ranges{};
76
+
{
77
+
auto stream = std::stringstream(data_ranges);
78
+
for (std::string t; std::getline(stream, t);) {
79
+
// parsing
80
+
auto split_idx = t.find("-");
81
+
auto left = std::stoll(t.substr(0, split_idx));
82
+
auto right = std::stoll(t.substr(split_idx + 1));
83
+
84
+
// RAM is expensive these days
85
+
// burning the CPU in attempts to occupy as less RAM at peak as possible
86
+
// fuck OpenAI
87
+
bool skip = false;
88
+
for (size_t i = 0; i < ranges.size(); ++i) {
89
+
auto range = ranges[i];
90
+
91
+
bool left_in_range = left >= range.from && left <= range.to;
92
+
bool right_in_range = right >= range.from && right <= range.to;
93
+
if (left_in_range && right_in_range) {
94
+
// my hand just itches to use goto
95
+
skip = true;
96
+
break;
97
+
}
98
+
if (left_in_range) {
99
+
ranges[i] = Range(range.from, right, true);
100
+
skip = true;
101
+
break;
102
+
}
103
+
if (right_in_range) {
104
+
ranges[i] = Range(left, range.to, true);
105
+
skip = true;
106
+
break;
107
+
}
108
+
if (left <= range.from && right >= range.to) {
109
+
ranges[i] = Range(left, right, true);
110
+
skip = true;
111
+
break;
112
+
}
113
+
}
114
+
if (skip) {
115
+
continue;
116
+
}
117
+
118
+
auto new_range = Range(left, right, true);
119
+
ranges.push_back(new_range);
120
+
}
121
+
}
122
+
123
+
std::sort(ranges.begin(), ranges.end(),
124
+
[](Range one, Range other) { return one.from < other.from; });
125
+
126
+
std::vector<Range> merged_ranges{};
127
+
merged_ranges.push_back(ranges[0]);
128
+
for (size_t i = 1; i < ranges.size(); ++i) {
129
+
auto &last = merged_ranges.back();
130
+
auto &curr = ranges[i];
131
+
132
+
if (curr.from <= last.to) {
133
+
last.to = std::max(last.to, curr.to);
134
+
} else {
135
+
merged_ranges.push_back(curr);
136
+
}
137
+
}
138
+
139
+
std::vector<long long> ids{};
140
+
{
141
+
auto stream = std::stringstream(data_ids);
142
+
for (std::string t; std::getline(stream, t);) {
143
+
auto id = std::stoll(t);
144
+
ids.push_back(id);
145
+
}
146
+
}
147
+
148
+
long long password_part_1 = 0;
149
+
150
+
for (auto id : ids) {
151
+
bool is_fresh = false; // guilty until proven innocent!
152
+
for (auto range : merged_ranges) {
153
+
is_fresh = range.contains(id);
154
+
if (is_fresh) {
155
+
break;
156
+
}
157
+
}
158
+
if (is_fresh) {
159
+
password_part_1 += 1;
160
+
}
161
+
}
162
+
163
+
long long password_part_2 = 0;
164
+
165
+
for (auto range : merged_ranges) {
166
+
password_part_2 += range.size();
167
+
168
+
std::println("{} - {}", range.from, range.to);
169
+
}
170
+
171
+
std::println("Eureka! {} / {}", password_part_1, password_part_2);
172
+
173
+
return 0;
174
+
}