From 2fa934b2d0e7a90b5db6099b30d76851cd84eebb Mon Sep 17 00:00:00 2001 From: Tobias Radloff Date: Fri, 5 Dec 2025 17:53:51 +0100 Subject: [PATCH] Day 5 --- day05.py | 129 ++++++ day05input.txt | 1193 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1322 insertions(+) create mode 100644 day05.py create mode 100644 day05input.txt diff --git a/day05.py b/day05.py new file mode 100644 index 0000000..125d6f8 --- /dev/null +++ b/day05.py @@ -0,0 +1,129 @@ +#!/usr/bin/env python + +# https://adventofcode.com/2025/day/5 + +f = open("day05input.txt", "r") +#f = open("testinput.txt", "r") +d = [l.strip() for l in f.readlines()] + + +# prepare data +if "" in d: + i = d.index("") + Ranges = [[int(r.split("-")[0]), int(r.split("-")[1])] for r in d[:i]] + IDs = list(map(int, d[i+1:])) +else: + Ranges = [[int(r.split("-")[0]), int(r.split("-")[1])] for r in d] + + + + +def part1(ranges: list[list[int, int]], ids: list[int]) -> int: + for r in ranges: + assert int(r[0]) <= int(r[1]) + + total = 0 + + # loop over IDs + for _id in ids: + id_counter = 0 + + # loop over ranges + for r in ranges: + if r[0] <= _id <= r[1]: + total += 1 + break + + return total + + + +def part2(ranges: list[list[int, int]]) -> int: + for r in ranges: + assert int(r[0]) <= int(r[1]) + + distinct_ranges = [] + + + # integrates current range with current list of distinct ranges + # returns true if a change was made to distinct_ranges + def compare(c_range: list[int, int]) -> bool: + r_min, r_max = c_range + + # checks subcase + def subcase(): + # subcase a: it's the last distinct range or the range ends before the next distinct range starts + if i == len(distinct_ranges) - 1 or r_max < distinct_ranges[i + 1][0]: + d_range[1] = r_max + # subcase b: range ends inside next distinct range + elif distinct_ranges[i + 1][0] <= r_max <= distinct_ranges[i + 1][1]: + d_range[1] = distinct_ranges[i + 1][1] + distinct_ranges.pop(i + 1) + # subcase c: range stretches beyond the end of the next distinct range + # I'll ignore this case b/c I think it doesn't occur + else: + raise Exception("Shit, I missed a subcase!") + + + # loop over distinct ranges + for i in range(len(distinct_ranges)): + d_range = distinct_ranges[i] + + # case 1: range sits completely outside current distinct range + if r_max < d_range[0] or d_range[1] < r_min: + continue + + # case 2: range sits inside the current distinct range + elif d_range[0] <= r_min <= r_max <= d_range[1]: + return False + + # case 3: range spans from outside into current distant range, but not beyond + elif r_min < d_range[0] <= r_max <= d_range[1]: + d_range[0] = r_min + return True + + # case 4: range spans from inside the current distance range beyond its end + elif d_range[0] <= r_min <= d_range[1] < r_max: + subcase() + return True + + # case 5: range completely envelops current distant range + elif r_min < d_range[0] < d_range[1] < r_max: + d_range[0] = r_min + subcase() + return True + + # case 6: I missed a case + else: + raise Exception("Shit, I missed a case!") + + distinct_ranges.append(c_range) + distinct_ranges.sort(key=lambda a: a[0]) + return True + + + # compute ranges with no overlaps + for r in ranges: +# print(distinct_ranges) + + # no distinct ranges yet? + if len(distinct_ranges) == 0: + distinct_ranges.append(r) + continue + + # compare new range to all distinct ranges computed so far + # repeat until no changes happened + while True: + has_changed = compare(r) + + # make sure distinct ranges never overlap + assert all([distinct_ranges[j+1][0] - distinct_ranges[j][1] > 0 for j in range (len(distinct_ranges) - 1)]) + + if not has_changed: + break + + return sum([r[1] - r[0] + 1 for r in distinct_ranges]) + + +#print(part1(Ranges, IDs)) +print(part2(Ranges)) diff --git a/day05input.txt b/day05input.txt new file mode 100644 index 0000000..bf4f7e8 --- /dev/null +++ b/day05input.txt @@ -0,0 +1,1193 @@ +97596706806002-98423100350630 +95411255234103-95836383127226 +309758712692320-309758712692320 +95172104725993-95615699348893 +146177971361196-150334806359843 +325218979730534-327919958033941 +99602981232852-100064160332550 +11787294463625-19321972662910 +345824023042108-350865212199876 +43716142276244-46317399288763 +267755146882273-268325972614001 +488057949766591-489503919263831 +381374385275807-381706023550971 +93122515970552-93359472412065 +449194705707386-449558424003007 +232449820645815-234445170174934 +233530409184393-235373334339486 +28253181234019-29814838998822 +444175566409759-444387044695866 +378359051552334-379090312345035 +20228900326604-22052831731872 +553598490006703-561002213217870 +404310533429319-407182640606310 +252591375712746-260554651490050 +450835046043772-450920005108584 +154834732847468-159344263855090 +313156867912834-315114897698823 +293578873447977-299078737481626 +92917463552500-93122515970552 +373572420522274-373781559806914 +506413307295340-509536039244058 +262465185382190-263316889608921 +445149969683466-445667232866712 +376166275759926-376630527213653 +482774128315752-484300272557619 +239340080427047-241067252406813 +275094430906164-278057899755449 +312091638793485-314044640232246 +92917463552500-93359472412065 +166480018504158-169846488135418 +443506341249160-443910681147148 +254133003428054-257814161586024 +513874596414375-513874596414375 +24309079446032-25818890117158 +345824023042107-345824023042107 +97596706806002-97985645975690 +464657383254435-469717631612049 +318410539967876-319973624627676 +245782812614332-245782812614332 +561002213217870-561002213217870 +266353065107228-266730504305136 +91113873583277-91543581658023 +365338340099358-370545916155717 +195488167548920-200148853401110 +61995813326590-64954103162431 +51710775745798-59208314685197 +142958965559491-150334806359843 +322640845290506-329837062768108 +51710775745798-59208314685197 +99078236951037-99602981232852 +238170788122719-239817870354597 +4674824513344-8167535859581 +281906927909197-291048638749443 +86306595096954-88466949626371 +413685373764944-421352071587361 +493252508317485-496556942798103 +113361285146879-116489832045751 +267965293718586-268706890268512 +450002879156683-450395680429743 +122208054648766-126310161932463 +451299783410190-451680519151585 +182727916689477-187428314854942 +96379551963493-97094063212542 +394588020292717-396074040955107 +396074040955109-400185056022697 +25308821105745-26949428104425 +94405335386518-94681610665063 +31577790917770-35908978495537 +537795590510946-540195939998352 +263755594666571-264285386181087 +245782812614332-247952942233947 +544714484009194-544714484009194 +444980953356518-445149969683466 +267755146882273-267965293718586 +91833491386060-92590072082725 +487307973247340-488720338510008 +26318333486238-27830407257122 +266730504305136-267544490532973 +104295316873592-107457045122107 +332284199356245-337581887966623 +453216992759531-459643147992991 +423025884816538-431897845137563 +496556942798104-501851690340369 +451680519151585-452077055850506 +154834732847468-159344263855090 +234726258578834-236403225789604 +352996551390399-360854174357297 +382469265469558-389102852478301 +112035461029747-118979359245958 +380564909540278-381163788469007 +490095259568029-491488099049500 +293578873447977-293578873447977 +372238945233755-372760437979996 +450835046043772-451299783410190 +443506341249160-443671088602957 +195488167548919-195488167548919 +185641842002078-190726979033022 +22318045507425-23926351790553 +98141244658771-98983655360064 +64954103162433-68006107581516 +95615699348893-95836383127226 +386205104516918-391769086343318 +97596706806002-98141244658771 +237120169642739-238890622184904 +266104493887505-266555139578551 +423025884816538-428159586402963 +92917463552500-93122515970552 +432821079192454-441650147427684 +202395219292964-207308848636915 +435737658537579-438246320804009 +316850641382084-318638940251902 +370545916155717-370545916155717 +70786423366412-76929016148990 +464657383254435-469717631612049 +376630527213653-377411514876710 +216649680171589-216649680171589 +122208054648766-122208054648766 +445149969683466-445362743102580 +222624422384677-230759568445678 +175101065746244-177272748679734 +319560526191201-321192036753052 +374670567441876-375002512608285 +378186788372964-378894872351619 +379839115956529-380309245307783 +377070006542473-377855298674029 +513874596414376-519180189158631 +315601027801310-317688056765154 +90846148465266-91543581658023 +314635559134126-316521155512298 +407182640606311-409845046527186 +235903614718368-237634638373854 +23478636979104-25007215742833 +278057899755449-278057899755449 +445667232866712-445929476582393 +161716563202382-166480018504156 +489332927803384-490610437132779 +231703884118289-233218904066063 +444175566409759-444608462833903 +132345735188173-138337494570355 +449697410039502-450323439861408 +355801903243116-360854174357297 +27423629125499-28746920059107 +19321972662910-19321972662910 +485455202921927-486898609273098 +484628206521559-486061836424339 +534040396381699-537795590510944 +526338503719187-532327835545824 +92917463552500-93359472412065 +281906927909197-285684453841853 +446130693735134-446685824681966 +222624422384677-227502961443800 +375002512608285-375493704429363 +544714484009194-551866721705272 +380309245307783-381163788469007 +21232025534141-22884006139672 +302821892886180-309758712692319 +43716142276243-43716142276243 +474938300389601-480956919596400 +881258563891-4674824513343 +443003746974302-443506341249160 +378894872351619-379090312345035 +214705496770173-216649680171588 +459643147992992-459643147992992 +92309813950471-93122515970552 +446432136107915-447134775995710 +73279775002868-79695786662502 +413685373764944-421352071587361 +490941948516493-492177712072760 +31577790917770-37444098128576 +379839115956529-380564909540278 +207308848636916-208405321142707 +486526458479971-487763033224728 +138337494570356-138337494570356 +524058482733318-529644732746834 +483843971623039-485202051271454 +375002512608285-375346353856593 +478544175427197-480956919596400 +81498524231493-88466949626371 +444980953356518-445362743102580 +267755146882273-268325972614001 +267965293718586-268517411783344 +267544490532973-267965293718586 + +423958030092979 +77317400117834 +10305127356347 +216392988035843 +374417960181434 +384586470874084 +526894831298389 +375749609837369 +373655225273207 +305099721957936 +270920008760153 +47108449264771 +147568847943584 +260987138804229 +13211822480771 +452902102235624 +122642619371315 +80071732303282 +407516944570447 +336248031145310 +419316606413182 +408174972912546 +517281906594632 +387792002172122 +534928462752476 +300789917555848 +235908857658074 +239298978125111 +188001978595071 +500770033500888 +112353372394251 +183975261254768 +23834667515138 +543687815855651 +102309986381369 +286265606350384 +407906614448744 +13211848365650 +9520471472424 +486808205572159 +472191217196402 +216724729594444 +60025624448847 +55204551801110 +135893821708141 +293809396486724 +11300086570461 +204993442922252 +46639736196570 +227410381675605 +301658968455046 +392558211074076 +212283854857828 +178910203417013 +94528607424526 +532695678961678 +434407974620 +136586853226403 +12311662380500 +56566531193970 +325692744491230 +309424631521038 +262488264261638 +438253220578141 +323365674837734 +462739673170722 +307490470014938 +316756451335472 +347994753738219 +437438390194308 +403781560546816 +271782728278562 +88951362575741 +118214320311861 +440486870533769 +328653779540512 +283077492424572 +217090646317381 +375901790073618 +512290318182681 +153234902234852 +531586426606870 +546657704819607 +302202561686788 +92907497270905 +462845942151252 +483811997540601 +402108746487896 +171578451269528 +53931422451194 +209181406485914 +226982843859902 +369822911414573 +526115420493833 +340052152896550 +374865725602551 +35432764178033 +88753856606035 +254960185886365 +518457984705644 +257769860311172 +417747125586198 +70901119605934 +159502261266300 +436581306523824 +519185297352741 +530465848163818 +353495494933968 +344884321646897 +396984795775264 +486944078596314 +369614155177368 +470401826558084 +297079381530557 +122353344404458 +74470377193654 +159982793863307 +252552921516071 +157603648000863 +445237449279774 +257270592332561 +533775547401734 +219729021561739 +526783962392969 +22248238153767 +299484191090848 +408633020904877 +277840129217331 +556153072139803 +462643788503227 +415342762898251 +198268845480676 +236792588121899 +380229368102376 +441031946604126 +20734322287089 +479201911668503 +416419405266855 +55686084272399 +286606249439616 +479449728025803 +277004791048324 +227501454746947 +176434814589365 +207551301971419 +117527506252609 +193901869237214 +290749642286728 +150869821642025 +544311934390065 +72045553009027 +541699724406277 +156178227369304 +153158573821443 +536041343880888 +93599909640641 +255184802493056 +319889549943175 +527291604136056 +176905616863522 +295516556973299 +303225019812271 +349789236850339 +253375276391509 +98542699209719 +553602635924126 +556003596293200 +66746027830803 +135309613992509 +426455490743098 +415602499147745 +525979352285046 +145988311037871 +552436215122360 +235095942865985 +57532830241948 +478389689466555 +13916624001096 +493956613232336 +448102122508323 +122138347899176 +285384113057991 +137153213932468 +347193753380892 +259456422422504 +398597792890406 +283044239735919 +318862452530981 +404807452080502 +346166148863947 +42688716591045 +285570394725473 +471688297935796 +12237613560377 +91616388448485 +442939259735052 +483910957611004 +426180054946991 +32054961708294 +467718636614903 +417993514088969 +440207676471191 +208803878239042 +238769422120205 +159130974629190 +68462601282532 +521819943695104 +551729547387975 +237818619143775 +63163167772069 +343301839859932 +212448983743839 +417650305992207 +366349992481220 +323949580029108 +63253042589064 +535029481597995 +446485584932629 +369234037334993 +293257971611978 +63057282186525 +234377680341363 +137933679932938 +78231757284104 +247076887507867 +538913461736746 +466458161363246 +136184597984617 +237881963201839 +474611772564531 +57820476070834 +79666049974885 +69314662968506 +559520737045505 +53198927626994 +341758159744501 +479643777190406 +116179365884511 +408447689505445 +446706201750836 +10559306485256 +197461186437324 +393028224188295 +544048771748062 +548770965767185 +539604300984095 +92865012890323 +18497581870377 +275825284352946 +178791014234189 +325935217770960 +315892844831728 +483651117612366 +129132766177956 +68402137230128 +212560708932033 +178833634511253 +378885947622207 +360279970954165 +190122090438186 +114077133893217 +354742328555867 +56824203926063 +299029106823262 +143452636352540 +484636763488571 +426391002869638 +332326175422501 +403455844128591 +528222777428053 +356747115052348 +299437399970232 +440771937656347 +366738242393991 +496328213632459 +477469425012359 +225230815966909 +175878667663751 +476322698941642 +320607752128313 +273765224535685 +159194091126021 +391376125257123 +198215693853862 +157179108969080 +508327914102824 +484098019882275 +146332725845599 +6138278941583 +407777801888863 +98699402078787 +535943539414176 +452771431208696 +117043325654311 +302194940237313 +99500441569878 +518588301015041 +368303585363842 +191813600694333 +223680572066858 +212825512375548 +421693100308425 +117595342778160 +447013364852438 +314948862724641 +516878662596826 +360183313392901 +191492248951204 +107690936578996 +396085140134745 +204032999803993 +285600137922765 +44391516781324 +538931958711799 +301471578532315 +213889407926143 +189100154485854 +66218149042245 +443015965523558 +113783663997873 +496562136964482 +156033754789034 +367864617655640 +496000500768720 +397363473968596 +267435652860077 +412266042948413 +84886777846205 +468801703074519 +367272841754889 +45765695854840 +446190082748758 +344388754864388 +320723830097045 +373671459013561 +19144580316419 +359043582799780 +444912089085479 +336007679501043 +296605385051723 +401927382809735 +238006456944903 +316607110518603 +522054416008164 +397968704670655 +227436052387368 +157835118332535 +167220700456761 +315218442168523 +257168288178614 +493696692211646 +478401385432706 +336203073750912 +45587182118004 +299696165243559 +450251103382700 +91371904071731 +151557913789014 +456551614199200 +16970253373309 +267745134361627 +370703486752974 +201269914387337 +529556125175080 +37124808796671 +289717164348726 +144616842720906 +514897516372921 +193747854313212 +336238883135907 +306924112224883 +508425516810779 +208788342237643 +357056519496431 +468301283576141 +435065862520523 +61520889137921 +88136333745277 +85473009827066 +17589073368569 +96210182020295 +396089032747711 +227543067165740 +421562212558029 +482983715656918 +109184183820856 +270813577962025 +531240734493313 +385248204156119 +282330336777641 +45947048460729 +117740722505973 +260217705765090 +354994680791892 +289826585127665 +62080902928823 +95808860123786 +313147020415054 +179560589248016 +248934239650656 +55924183782391 +104405767247040 +196633990175227 +158559352228499 +299256331490447 +99553370912274 +122339257399210 +256909661306750 +432157486700572 +71256823807353 +306459905547451 +423535540566342 +435447445937769 +436247490942494 +275108915039262 +368336039514973 +52914414669038 +379450999896785 +227236262499832 +545226557219097 +536544615367357 +76307218359038 +150240461895185 +510287813588451 +360166476281311 +471456135709273 +239699607885195 +155697735614906 +64534720824030 +90139799029543 +145978118763681 +335050814406262 +446491166089105 +363368476117410 +199847836229575 +53165661500002 +342578842312083 +392014621043182 +4247846313918 +329277454117639 +499698374287964 +18356577795863 +58151056603080 +256599954358394 +378337005344691 +226698526718662 +534757533874228 +482358570882619 +239144400773092 +123835290217841 +433715263736804 +518327605601994 +257595331625727 +328253653324339 +414187409238678 +45898191756199 +359867009305094 +86603912890978 +120480279800820 +327829447586829 +192819298068843 +136805381813934 +315633672703124 +287032075170764 +68182124918694 +491312004663010 +318479219505132 +82371680867295 +531047808844831 +294028048475768 +241941681120530 +318315622928447 +232293683431499 +428373719680825 +378220845517291 +423099612865711 +521886357357213 +218794736067143 +177138735483054 +153856429520247 +555303701397211 +489792731889496 +113929819569655 +3667939784121 +191426766173484 +353446502085614 +550553770053318 +18817180601554 +545253354454846 +239684957231378 +376948959134142 +175213437394921 +57866916969548 +489194067833463 +530842134378804 +307479512245873 +167288735744299 +487434340865137 +40221682096079 +350649181070678 +292720264444471 +412180549467433 +252687607496071 +161864993381731 +129312432072081 +105936287937619 +66051299539156 +32899413260381 +449152580988502 +205624414269491 +514855517907066 +552052318420409 +479462579845912 +385875031243756 +454910006685132 +349118826477693 +414592519273354 +429103242381939 +79146652653492 +506604637827180 +320026582635283 +305360129997179 +13310835172520 +114312795052741 +277383731201479 +199392952934565 +302626955064120 +225678430054581 +425587903462503 +515467892215398 +263347115664525 +383549042243692 +27144626026633 +291856319406416 +35519261766304 +415074212687035 +523183803579198 +434613332197238 +172976869632908 +203286825460687 +237389619371190 +13741972675433 +434902958835398 +149683970856118 +331445524633892 +174147164968828 +445590009185001 +146207049615293 +114814053992389 +423170062396602 +186572772873366 +478934501062398 +256231980409378 +59722939305084 +145794586476879 +358267360803489 +18643594144140 +104691126838713 +556181253236448 +560481198545319 +105426124857155 +147375915075590 +55910086506636 +74384793886470 +61640019399282 +240603532606116 +10129133314396 +174407231481456 +316491885625139 +45614396251655 +185233779730965 +559791826114422 +117340827576405 +372510784556166 +476112992612016 +292272777547119 +269558835134579 +247821553858562 +104564815960104 +66829403818519 +111879094333387 +319521972449795 +280663879466455 +2636820428047 +461899922774700 +307059883375357 +548946352221514 +443061043455102 +38342057745814 +25590631855442 +531637460946311 +549952007014374 +389755641743319 +482141722823775 +197051904814630 +450502990218281 +123326695171880 +420351343675894 +74557605817304 +404560801429711 +24491609283075 +136710215072828 +363490686578450 +332586742360673 +74032187061393 +253856848756743 +560726783346912 +214819569717666 +285416096610704 +43523294590791 +127270591200279 +297777988836559 +333843756399509 +64478358019797 +306769001431028 +32908307953018 +317134903078998 +342696855412314 +31013605255247 +215630207769355 +220433888532738 +108981444636926 +349810028919973 +122448800600835 +558545418564058 +378196516564722 +227428215542325 +203747014110460 +319443770112498 +73112499813722 +136510942525933 +439440477345816 +79498593291285 +386642990540893 +427892763709306 +526519410821939 +450864380138567 +94414124812268 +44571023201866 +332891907167554 +315882167351844 +365519222811325 +535165019723048 +39113718600936 +207329803242001 +292552185394998 +111601839418192 +122724979264555 +338930893270603 +447035853254560 +462265891673669 +155939099736791 +252502479468800 +422097550749467 +93087555400953 +108575148771967 +421629637194448 +220259890835296 +208014259110896 +472808507845303 +551737544151714 +417081324528708 +355990554290675 +417615619250541 +374170240771266 +222032639994336 +245970566866286 +180112846898877 +262589100218733 +74846228246349 +179941213832180 +282353556609127 +128605044402225 +374734943787697 +121339658466938 +305568626015776 +317977436257500 +35074567906816 +185749572240156 +85620316081736 +158772173710211 +109166471389956 +354363563129031 +337742536291656 +530521300177036 +445218557382167 +356580338481120 +513562578235551 +324436441206185 +71887741596480 +273890061749524 +137203838638925 +496981709719545 +236980494844609 +370374664797309 +504043464412991 +515139017829229 +433780553308449 +327353375471153 +549067560222072 +145170151287586 +253973857997729 +428784925512190 +146160338132205 +395467677875037 +108348701647577 +367830188836892 +459504466576932 +339621184357104 +255516766676089 +510831545593118 +160565151638516 +446941516490401 +85356993055875 +200656451589480 +334399168366071 +347074783797124 +254888901271689 +203558952004893 +254339165392060 +526879066960419 +153327848738966 +41129229790725 +162355124360180 +367348984440151 +218721692435504 +35444282559968 +181553225187474 +340666982049913 +85512272774552 +190453228635098 +32566624366483 +335759587023369 +428124310783272 +369672654903567 +537486589580778 +479213215990984 +423493166691591 +65051572171530 +526075562641821 +381531907782923 +306672746609248 +376639773925708 +74831424542472 +149783977306984 +360929237746449 +69926185929105 +35196579473216 +219214977261579 +435354865788430 +483822459786932 +219752917435369 +64193060652808 +436187037347172 +493560920033079 +401114652300812 +525616936613531 +156862626023508 +169702088364298 +376250535422345 +493776348882819 +395478145043397 +188000608527977 +425189528825311 +27809329631131 +76066037860757 +539325302882900 +96270818076022 +98957476962695 +367153240885633 +47708086282696 +247066645926360 +500225161064655 +417842058493913 +77256589337134 +15167439446743 +383025859321378 +182012778967955 +384993712388132 +342121840853779 +355291422323407 +25089113648920 +18420240469148 +284131749427356 +271106321398924 +240934189375954 +229820472061700 +196621015496225 +441053211856160 +550401701019450 +22588992150852 +229300355353451 +321122268640771 +419730239995896 +126877769234054 +295114091991279 +84466718842260 +405552436807962 +335822188623677 +405205006596426 +31085449078119 +53768397220667 +85304150586938 +81711526843023 +15884445812499 +327555708665351 +152565243336020 +548836490707936 +262615373030078 +382885423109508 +277277592053216 +28546024027710 +69869473771749 +273843641007878 +398412221397889 +271404845930536 +348818829146675 +117911671337810 +277666204998561 +164171372690206 +414161976591378 +423429686763848 +451234132336871 +537007809718617 +112659903016633 +502444795558163 +20933385629775 +61598239193523 +204142658846827 +4264287622994 +89790212680635 +308639862838522 +37710595405701 +124744744139191 +40796030644882 +236736584799486 +74196753028109 +94052717535711 +56810221988672 +86464513416889 +311513274137833 +94034024338148 +151381885937468 +173705930262128 +349483819633333 +554777861232750 +544083883978849 +157836598127387 +155384123557688 +131129791315910 +388014602969682 +477081320434717 +293096844175180 +555915384504693 +405208944898701 +516213936044056 +36208237865242 +442493199826565 +114394107615938 +396154653295884 +177923440114810 +258695287694734 +64096203103766 +431643826379684 +245929557043576 +136677119148429 +36446835867188 +392656449061778 +485112755007826 +156886288118112 +225663491346100 +338265696219621 +485149822586821 +485074897711182 +124771512784005 +174523183240496 +255188524337206 +132041961288257 +428053966650604 +346062879108585 +316927491025827 +167958750737725 +551117413508888 +38843766238216 +189038540921979 +244182151628173 +479585722521732 +532143502585004 +441289047017406 +391993420535072 +491673068258201 +243117788964452 +79235549668757 +225166466282089 +106462345487939 +282972246597144 +88461018395942 +256823082249632 +272586019008910 +83550201754790 +188742145519576 +197533562685633 +209546385622455 +386198793490643 +376277920818918 +458865213727287 +452310771914065 +355198442277418 +545819402315077 +436130345072403 +86334582433713 +30227572632434 +535035522572951 +90455037186830 +163943442064895 +79508597227603 +45434701046794 +545570076719607 +268445944465190 +204168335614696 +58388068187480 +374298985661787 +246175851723872 +253650364698612 +158827784854521 +189201601472497 +186520187129273 +40395450959832 +282094961698943 +551379433327675 +150597600643258 +170173780255970 +283966765794655 +102993849865802 +347871473080647 +187875195997583 +177751919314748 +307839242783090 +435721839479596 +29032564113248 +266018452992395 +124834540278955 +488372545520732 +403269674017446 +90475273788135 +266594805037364 +349221819928229 +434189729252308 +297101012003706 +394050835178846 +57569277272282 +178693027697337 +436520917557805 +103699015300589 +85923170999006 +246614088520114 +251196284279312 +504282674401844 +121249488425560 +424094845561519 +499752492338520 +200485144107393 +391002235192104 +466466360196906 +357930093995028 +504071942138798 +345336954527807 +443435630953013 +300452617246181 +471757240843723 +460139334369080 +169029183109104 +525388335330598 +146093391308912 +479007791568428 +73968207513656 +61529054245857 +110979079875626 +350993193956022 +228876367384069 +206180023575803 +221351500255215 +147096104023651 +389085448191836 +422585063176188 +395952379570054 +398372641186875 +205898324713082 +524245449786997 +216692906213560 +228145730162016 +84236397774164 +974722201843 +73736445589565 +118009946794888 +264499970438641 +234031643639324 +302076622224141 +24582126078728 +500974025245499 \ No newline at end of file