From 9efb5b409fa624c40aaca777a41ff3fddf0da3f5 Mon Sep 17 00:00:00 2001 From: omagdy Date: Mon, 9 Dec 2024 20:09:16 +0200 Subject: Horrible solution for day9 but it works I guess. --- 2024/go/input/day9.prod | 1 + 2024/go/input/day9.test | 1 + 2024/go/src/day8/main.go | 26 +- 2024/go/src/day9/main.go | 172 + 2024/go/src/log.txt | 193677 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 193862 insertions(+), 15 deletions(-) create mode 100644 2024/go/input/day9.prod create mode 100644 2024/go/input/day9.test create mode 100644 2024/go/src/day9/main.go create mode 100644 2024/go/src/log.txt diff --git a/2024/go/input/day9.prod b/2024/go/input/day9.prod new file mode 100644 index 0000000..b632cf8 --- /dev/null +++ b/2024/go/input/day9.prod @@ -0,0 +1 @@ +8344894997247919706132254734322836346242207378552420699813367551416968491319512518592646626569964818974774915246474191615273835822122155863392343212388744802787509799317530256568863245614923305254301264433187808740258581391832216685255339465627821626616160796945678659742070505679162048351230462662134657336289125134609127637587179556211660248637174420289644745168422036297546281549714924698458874741151732877249461472972669785854652059743054161990184821114157695754917385788865696479538349175585329885343058959381137281419831724581867380443739887240649848497322891016775379905054433583235160808342443451429574552368601424932361247614871595742215112932129063537419107597154373762065534521923013699876168357613257215173576498973275143516765579884554871346649196969343219716736881915813332919372978425457289315465050792727931114482510927152306049917116203314407165241180253046975177829098509817168556923844454053506150402070986528277083357373192284318798115868758477312710272286968949561558747783545346702177445768789511682385238564696917682372236758392745584411349227834926896633403087456985715425934058858250394764475853507528229071851939383621481792629933878667906284878978952571939423328470793169422018932186215466816755205244172257179759441239627953614252511392161669478728616032624275786479837918134323306153943213904623341544476241748937683319124569491629166317588063205760641948298341226389538843931096428279691316198655935487902711173289234237874965432867729988157114833613512833721677315222145552241514356668773229416599524726822943338163359869508668724182183371299797566779143327945481583361985720626090649592266346853696546371595972364395978644595279339213495113764756151995923791623523831066659719963394897642771499479751426319264195658172779354688586274370705645805018842028675628739369718951257769855549399554252756163658262884535172664478298867172112605274494015775743793359761829419567938312725097941247923814546318206777436058622760309317361650577362671745809282184098485097275511811824542364858831241020763830479122616066184693717694196456632460267270818870208099266528101212696746801264565893423367732419387472945566714796546295475448386795883079416961256624245633516217267658559318993394384091698853692727955946123829533932315191907552587652197659238859364847465396312763436296572051884046863352492568181167697418391750421990107951929843274285793781233572631841501239594434423797264730325846441268663014826117806310653838634551948576815789185676235067998828287091282240235360148989699931702454679776941344239174833865461428542129774513122545454477345639816612847021681414461014895528749970122833781915254795355466237210672420522419362214458771833088784516195557276082323054496857985769842252223947403242595638923562438862777447557145868254376344413182467179877547245927663563534823835320186844969246577155852965273213788755544263195154716384752485997350446216262511694992616744622847791941672112973235446567188367475360357318822392272885641883523770466256714739976173743980816271905235834473613338326551266986635496106378448940779285252478283212935255144386466939174148991636754545825158137076879239839057756443996167131486181074658428636349951270885161599797567224274890431234597715461654993241129078451727888313533895509575219572137264369374416920908871782546369144198991218649216032376225716090756184993418275766768058167129389182757513738663957110985078233164178819232567836626529177711814916925152771411657621524477365336459364781212474336763292032829276668110652937904039414654916710506897663897788624983288392724267699305992939991191515241117247957351213374468639254333058667240142879254847543516409710812438484652875730885826496019439435184626304920567470616525569954439386147764389618259288301694821733754528272564371589689581324547183356767849376158996122178812756422922365345760802064579291495549337611641937114391372530136631511183696546203382178741676245899213662599181219279899792465265148264318962032137932924095468847159826227048788449243255846943717933118360528920942017271164354280546079643432506432722253677815104298748867838332121963621553602472848163745952472450833915204264534689938115456825646497161477691545769935844585115881952791588798711442144120226670146163228691622122377084191813953092346566317269262211351346624342964145255786226762437344282255191946137596344295945462955319374831646980148247159752376144914963746894687377795814849167624174239121132177251547109061655569609612308730883548438681369623389371881499139051593311964033293474795343768113673422997354186044546348203151859523913462255716772424527367478838418883237942888367173588809125946247998298642674308225937821522878183152371062148146526140128979878773486356709011378011599731697637736984321044693145574422388589598671437083351096321633241637891159924652561834633523613517419677259885379151484846527569435186157071933818449566474793725614497187593626448599916961391632593681397354857591498396415531233937477858543594228734282814328439359358667579728876281543909970499678882540634370934942694518798158632251863332161192454015298943418470352537507891711669351510491929149341492384658353489111675432141731814816486810471640204438893552455716895474288350595695773461425140984391648096337354398582302736948020432515373150781652426562247229765682251446519461805284786848162774288170204566353711151163371347563642135729387095349227937940797037848831208064371781986678895075601449715099566198594229298141336937734820465113459911227920817092233082913636259867937623661853802724221849163931728541156411219587427492621083734820695294784834253297679681787837395220578338793028957195134414174864329958743138859234495396628125501542815114266992646760562855865739516774793021249323872171135766544315311856209547851284659329783441314944377563384717996016232011886143967557971287938551987245334734772051905269476384145322199271431844444165235972679776862886218280201420903971837631942082934151884935885416153022652657823529936237618175514592459921126312443254321527441396386988167777366816836754825483142476275134649881243011651755841225683592719477636092841270355927969662556898509859742911507445637377718399876535972098812751883098383631683980704423139081646299943264406720383294252667435564818026802125261991712736625814965623829837903421201387285083122618989127982659614818401192259382586168248885805331245557997340521255782733888156471766709982979753915925907511531728273341702248597176563551814647193141222429888866441096437830173630292638442987417232406410683020562192134464464436975367408821135979363116627210152184663967303765505723539392459254807285497331794783828292956795407859599469108788156181371133853021491993155569944472112275701281894785422045491844426723706345944759222719741250224761128859902764622155673964396744685355612259468974381660207347145224164761812194291245883223171474553918559230661639624922341214901739879617897879325318866074625740417869205890797899873143428751778435507487586060107911742185573460344512265633645121413961261956968461131654215646378525995971497342101733654767694089696315891656858925208924862889847258812765516277649847277448992975737481688752408164459611764410586297362535363829146929598589585218205066534911414872851059253893919060751065441172627171917065309263324045114713623192141338679420486344894399498564259487491312529911924366624856808055113441217232425528888815118288339090218070644096878812488855858557102541757860938728755223256518843453606524923550782161272450263097235223876685486394553471709611464684671867438382668670921193692159992136856353544521891247569228403695114774461151157118612071103526764114156743782825374780639350744696988848822741677496109010841447745521895844884987411676512131775183988760896495926432899779308757172073926681944552932351972233748359316063452624364977312869926185857242344619483631744986621156616798881687949355705555399958595558818789264181276742145768119555117710217715639779435828392213197644597554242172522917428989968661529570467150478073646123471296117727375088112576153725961995514225863040456138146820481125727141269112318076906387344836753770451954307549764676533255445051607883576570993228237714692667781555791087909553364250218950147265232438497352574217651521841571664888489454789069562997721597468697235879569355746046462477867874512297598439577291546320423747465962223072165411797941806524113791469174248829633923685779606193909937708268145733794921285945713329284687595236899472209246371829214164969748628924562633934987951753378768967034701248919532612227202119997678937930967529825665443387492334944792555633694267288091414123648382756649699538396999415840786560205132981447461189583399915369861016187338242664207892242468875036692022736022186317976966727234469756817160639195442118391690802035941391993617267880972350148795986950903920263938909928968974433443645337517273462195566561963975203659283688227792445753142782585723751481917441996077256285747275548455285074886998674130487967825587889027519257875092111727868222183136428652121225385821412986253641142927654169544074623872437972253613656229888221304520664260443399358929211272982824417564562950857165142343252392976831988879214811345988604867819090525196913585659689568993964736712917439432427141495147149053817733244174278032209761581361411324487089239214565923387485174617749244864274557744591784487322623656502948409512417588398016982472162271768412283099466683755050206685889836824868194068409554648265573437953828389872189931944035566263625157686449424877904744346991754436871374579472656239172797849371497443598592369083895680526059178338848354666365142861915966734937839231735444796621875454912317673876931073231762346316349069479337633767569581168275497393145342765935324332435112231947597722483582165285871975581493397093536790681278729385231315976598645437254134303444188928856239402438158538896871925117692565439884594019698088261122726919311188149484891576778536613257453623207794844166557616738582366829311062496466335676495693612675515298779321929868794580528246558014721070423017508036353144631943533752877566792746442475435481292283424383891783833642774183163619873925963349586042945360618950737342297486709369181558813521707753418177113985239753278571771516473817151022501418124696114628673149884075467151792128426345898917951240204121739059307711415692862431542127253683281751571443454754518557422786162440877830117524273117485125812146874457418634397976221340594067811831723381698318934867423347489190829228195854447289608821987751615787414410391579135738648766758292686554177321355531225357337768865842468678414767611672443684269662237773502429135754376885432310586794506931867134796782221859527491745010449459423946809514772116576846135780891780444194904720171857612842989754754488757727469885608888762139426126278640621492808833644641786530984585604767988652608340751892297037923738707931745489661561299850423916331256678829659437602999914559102178626278665173712198774096721563948174163315965219347526165037505153271471905731992750162452999273279898552887676460921252207254659142154140408873133474796872982682542880324691248879457295271240996142702178287727309884828343347336428145484339106073991492405936186480924758621086827886354782362045616915661517851912105949698324719615256113929138938665877765615667677854989418612151552937159255677931433437732312597280105571149582769413966981923182346466278065225733109639821710455284182068887382332054974616927080792359911642219129648648172333628217178388727431992232124437667420786267912275954430392443156751656210498788217644501095127241773759906155166960259898938114149999396914257834561673341790626360849288674718868936149449244789423337187078331239579395823619895157477865241331332630683265167177686223209832342913122556556266338113133777775853686828284620207566332165277079345146128956907311688255547384883993964627813597208381811171768140457861107044106343962946356485323099303523216824661544759251549130226524918326417515432678611415827239564385287868709074948145776343394586579265772455531577946016414148781060377436259461372213132983935111106686961574569198693253373179166592946321299818417985112590512499605734814172363027245660839574646162561365555390534391406278221463833915561091335534913315181045591119745892561173844195132591743768481043138729169911985519537710334075285810503546232240352483571549876112741124603067903382489975436373794445625121746773751010473815899527454142992293952667831329422217964328632176749948345825228944235254169029649381462164177840519815936146642834468386452435602357257767972984917161639467101717395498688321373777584831311168833696563665966549739298861183212722844997439386953845528813161346427380113944641412701345858394351068717145108428118087532876448330142094601776638177374336387587632963566880234582909354916611777173852066205553216251507782781754534115299453351526826979307269874784467453989317195580889340191526779181676014816478223036988454669210661268294845677799753043547812871687668057845311589495599769342463394270432553944428928774754689246017238278314754538783588894902170918768773870167481758222416766646489174859296393237643759161275073684885722242589534585474908688567380161914945967737739352556839824472430459930874039556212868670167273298223766854767398876023745886901922521049959661867377439499235276392492488737512436473120752796834781812863497710287999522721516474793755631243183353396657275828572255696092535417946266746210201275946628786619898533882799962050223095525258939373637620991444738791646395125232936426496758745277437284904886149553243169478692215999141570188215506839523958323316579423754631185767919488994852287996939441348387321868975789383159243036968459556026807884163447732497489388944826174667259721863548546037406719887572132168795019168585492522899929384368569431674024926213754193614236102661718544285480444586265567879538789856174014765296543897638785367979773914556723673719234565471952778945995313719224726627873950975128771876301665564150159487881156822188814451948921612461766593396288156288604334369179489222743521351392904390945353909230537068739360898777361184611421933852288091657214166364435596979175346789401612605499177111928691693438164363424618801745161057418410664428775472973489973814637981612723389234119743805780892591829088578869455855353597484263844833575298973996706854312079933653201261152235482763768078423288958292407143971512123218782956488433947393498749621977443337585824213614165142696388559215678289499467211872204663906055426824983715735766917395683853698999419750231250487531285177372426601564799581245224698786688152276342325310378931749671177161563780701333296577525632173520697623993789418234188142403515924651789631326116185195247744805888115668601244795776597696987086267380413071749097285850622876577564188888463131782356971596692997567898904277405169488069604522896451726630816786387092613074633133765446701679294896885592665935905032719470467690681668142161332679183729102627728172828655963715116653939932567367552277982794596736338265665021601035846625329222675445791022414426662935613816379990785532591139949232434219931033533765883783642273381921596961715366278136101451594543787171969563651222851738239448343178358263733486793195175998384062777457869620996070708894663452431623378478915889591420777921391859472760915347393784494746654446681118516799802642219774524471655980528269498093691537972010988396605425816053168335548455332983132858135736831548525265894155885019917995456555928573496578467320334746312133622226919688732355146670548477767762596820694783893077372641562613675561291778463339432530876738982474281688824436439179307183405380526777659463874998386963228764494473402866134579876831326858529849616261433417873243794614354391112379832734146262319540955572324126445696542023557366883598224228917244196273344195313818296246504529839492583039323568205475597124796117495648614148934821563450783225281928658167823055248215175765997099901257925674948769409398574397468688688296192018463189912839662186792196164133526556676735799186649124545310995840136955713170432266747243968331204682114893374482424923432247592776492362675098155246214358537538433012178113163135476026949521393870283097608064283940336489472186441344391134111297348269253937732770847767132718709293667654796867277744552121794414855649261334402168382444114272585525149938178693335572293143503118727724736829683942302447357314984741747193691079809320584928381928409248856817514396227567389686135540664924559596676951567223923638764032634629917117433879794280181943373752537879114599947482266596736314941097289450924633882851395152795836416175774522313715903755657798516979572566313555237239958272869941123199665674566361254688325446589148185234266173466989107363944192798620541611209019911974142793433556892292319252348110311119773494859599531018909999481561168763821479215553993493493997203442573090643927667894225582161665927917197867812256212149179054772275523299382385732196957012661024629759802732628769577862692775977616645155978797407118304080311314193590521193463333299129144219448461545235351398203292811131997519403253506075826118779646513631176193831335765893587813653690324995214319967491299829107352403213752139136720559138282559272337745221943843533611492151736233769556183542369341173927782139409069868571534079601545891962631862598987811560966060482871793345669692426333317242864716387654588531721777132011617119523098753310916621288840967062255145204110925862115166971771381653982733613969715121137975621788502690497799742497942647274968441898433849925693854673788237614922425917211839757446928161133465264941246951276992366965302962524377681758892756498070769112953691959849567936931074598428432662872798265296356676146324179073799763612190325990956399226256756255495413427058182753252952975335557826981710951465612935109567962311319031694592419825765392348854714651131984818258806258181575158370204732749625559080959032354611423338717913776273469689994622314781186948399943528823842675463052838864778278121278651015998625221840786252259282932284892386696830962462994994396073736270729946722428661473101958451168628954489583691116336039429951125017687726595494373671163867328688864552762960481137787491154756957391361537368581738229468838645380396840174882701091537972907884563968907964972899482612357011836678479788959229844133787274312067711365736440281989989373502560547043407418753571976515931114387491198669338942686041307949505461422768734376175873568278374220806757467113881916113686774095788176652379187875658873196827796686347787934489212542288660439090731785642397778877807241353791881085221511859724212142909175353482738986501051835556784027184975839369168416343951902263223714569329911259457831495493771722114494163240264074799479954342791877935417732610651110512221365412518791256495611586418148915286306072142067196869625732881873898517248858602373346653471081567270556369795740678720282866569611618265682414642017824363509025468696415233881742121641761335158415159768195045583616411913894819923353964768921520561518997651571437888124283569766714345781358555126441957472244677825585178022291464805672592081931999464560447884157928784171413165677542979831558425374971619790321511211184327249189875825183853346745852184640936572684359209238747797995557897490166611771682669180395999943078142898182843519039844047439414246872142787979314712840642592871493628533138483191164605220312864131513516082347721511768454875639984114746874915398899352926566813676662299518213064598618368290924312228758378232493858436388696532863712603919664361903350587449595188514084262292586957392854154239777228715472828139912048561994661646424153792690346750862587511619515984481188389138769883456587397820982248377657793940616668936634572085409516661055134380321215793642209011492063381915753332198038652832709441189689562589865577945419416810854853867974892154621485257926766072507298823585697921538473481324114692791881875699857794215917558036462396675014118336182570206713107930316152611574942351385680732132948932911432143124414960312845127143135299439861759098114576334147375981265924804512151510949430823637365643681041775623581475539198479 diff --git a/2024/go/input/day9.test b/2024/go/input/day9.test new file mode 100644 index 0000000..f96c390 --- /dev/null +++ b/2024/go/input/day9.test @@ -0,0 +1 @@ +2333133121414131402 diff --git a/2024/go/src/day8/main.go b/2024/go/src/day8/main.go index ab5901d..e801340 100644 --- a/2024/go/src/day8/main.go +++ b/2024/go/src/day8/main.go @@ -49,21 +49,17 @@ type Points = [][2]int func getPosMap(grid *Grid) map[rune]Points { n, m := len(*grid), len((*grid)[0]) - posMap := make(map[rune]Points) + antinodes := make(map[rune]Points) for i := 0; i < n; i++ { for j := 0; j < m; j++ { curPos := Point{i, j} curRune := (*grid)[i][j] if curRune != '.' { - if _, exists := posMap[curRune]; exists { - posMap[curRune] = append(posMap[curRune], curPos) - } else { - posMap[curRune] = [][2]int{curPos} - } + antinodes[curRune] = append(antinodes[curRune], curPos) } } } - return posMap + return antinodes } func isValidAntenna(grid *Grid, i, j int) bool { @@ -76,9 +72,9 @@ func isValidAntenna(grid *Grid, i, j int) bool { func solve_part_one(data string) int { grid := parseInput(data) - posMap := getPosMap(&grid) - set := make(map[Point]struct{}) - for _, val := range posMap { + antennas := getPosMap(&grid) + antinodes := make(map[Point]struct{}) + for _, val := range antennas { for i := 0; i < len(val); i++ { curPosI := val[i] for j := i + 1; j < len(val); j++ { @@ -88,22 +84,22 @@ func solve_part_one(data string) int { firstAntennaPos := [2]int{curPosI[0] + diffOne[0], curPosI[1] + diffOne[1]} secondAntennaPos := [2]int{curPosJ[0] + diffTwo[0], curPosJ[1] + diffTwo[1]} if isValidAntenna(&grid, firstAntennaPos[0], firstAntennaPos[1]) { - set[firstAntennaPos] = struct{}{} + antinodes[firstAntennaPos] = struct{}{} } if isValidAntenna(&grid, secondAntennaPos[0], secondAntennaPos[1]) { - set[secondAntennaPos] = struct{}{} + antinodes[secondAntennaPos] = struct{}{} } } } } - return len(set) + return len(antinodes) } func solve_part_two(data string) int { grid := parseInput(data) - posMap := getPosMap(&grid) + antennas := getPosMap(&grid) cnt := 0 - for _, val := range posMap { + for _, val := range antennas { for i := 0; i < len(val); i++ { curPosI := val[i] for j := i + 1; j < len(val); j++ { diff --git a/2024/go/src/day9/main.go b/2024/go/src/day9/main.go new file mode 100644 index 0000000..83351b4 --- /dev/null +++ b/2024/go/src/day9/main.go @@ -0,0 +1,172 @@ +package main + +import ( + "fmt" + "os" + "strconv" +) + +func InsertAt(arr *[]FileBlock, index int, value FileBlock) error { + if index < 0 || index > len(*arr) { + return fmt.Errorf("index out of range") + } + *arr = append((*arr)[:index], append([]FileBlock{value}, (*arr)[index:]...)...) + return nil +} + +func RemoveAt(arr *[]FileBlock, index int) (FileBlock, error) { + if index < 0 || index >= len(*arr) { + return FileBlock{}, fmt.Errorf("index out of range") + } + ele := (*arr)[index] + *arr = append((*arr)[:index], (*arr)[index+1:]...) + return ele, nil +} + +func FileRead(path string) string { + file, err := os.ReadFile(path) + if err != nil { + fmt.Println("Couldn't Read file: ", err) + } + return string(file) + +} + +func parseInput(data string) string { + return data +} + +func genereateBlockMap(diskMap string) []string { + var blockMap []string + id := 0 + for i, ch := range diskMap { + rep, _ := strconv.Atoi(string(ch)) + if i%2 == 0 { + for i := 0; i < rep; i++ { + blockMap = append(blockMap, strconv.Itoa(id)) + } + id += 1 + } else { + for i := 0; i < rep; i++ { + blockMap = append(blockMap, ".") + } + } + } + return blockMap +} + +func genereateFileBlocks(diskMap string) []FileBlock { + var fileBlocks []FileBlock + id := 0 + for i, ch := range diskMap { + rep, _ := strconv.Atoi(string(ch)) + if i%2 == 0 { + block := FileBlock{id: id, space: rep} + fileBlocks = append(fileBlocks, block) + id += 1 + } else { + block := FileBlock{id: -1, space: rep} + if rep > 0 { + fileBlocks = append(fileBlocks, block) + } + } + } + return fileBlocks +} + +func moveBlocks(blockMap []string) { + i := 0 + j := len(blockMap) - 1 + for i < j { + if blockMap[i] == "." { + if blockMap[j] != "." { + blockMap[i], blockMap[j] = blockMap[j], blockMap[i] + i++ + } + j-- + } else { + i++ + } + } +} + +type FileBlock struct { + id int // id -1 will be the free block '.' + space int +} + +// i = 1 j=12 +// [{0 2} {-1 3} {-1,1} {1 3} {-1 3} {2 1} {-1 3} {3 3} {-1 1} {4 2} {-1 1} {5 4} {-1 1} {6 4} {-1 1} {7 3} {-1 1} {8 4} {9 2}] + +func moveBlocksPartTwo(fileBlocks []FileBlock) []string { + for i := 0; i < len(fileBlocks); i++ { + if fileBlocks[i].id != -1 { + continue + } + for j := len(fileBlocks) - 1; j >= i; j-- { + if fileBlocks[j].id == -1 { + continue + } + if fileBlocks[i].space == fileBlocks[j].space { + fileBlocks[i], fileBlocks[j] = fileBlocks[j], fileBlocks[i] + i++ + j-- + break + } else if fileBlocks[i].space > fileBlocks[j].space { + _ = InsertAt(&fileBlocks, i+1, FileBlock{id: -1, space: fileBlocks[i].space - fileBlocks[j].space}) + spaceJ := fileBlocks[j+1].space + fileBlocks[i], fileBlocks[j+1] = fileBlocks[j+1], fileBlocks[i] + fileBlocks[j+1].id = -1 + fileBlocks[j+1].space = spaceJ + break + } + } + } + var blocks []string + for _, block := range fileBlocks { + if block.id == -1 { + for i := 0; i < block.space; i++ { + blocks = append(blocks, ".") + } + } else { + for i := 0; i < block.space; i++ { + blocks = append(blocks, strconv.Itoa(block.id)) + } + } + } + return blocks +} + +func checkSum(blockMap []string) int64 { + var sum int64 = 0 + for i, ch := range blockMap { + if ch == "." { + continue + } + id, _ := strconv.Atoi(ch) + sum += int64(id) * int64(i) + } + return sum +} +func solve_part_one(data string) int64 { + diskMap := parseInput(data) + blockMap := genereateBlockMap(diskMap) + moveBlocks(blockMap) + return checkSum(blockMap) +} + +func solve_part_two(data string) int64 { + diskMap := parseInput(data) + fileBlocks := genereateFileBlocks(diskMap) + blocks := moveBlocksPartTwo(fileBlocks) + return checkSum(blocks) +} + +func main() { + test := FileRead("../input/day9.test") + prod := FileRead("../input/day9.prod") + fmt.Println("Part_1 test: ", solve_part_one(test)) + fmt.Println("Part_1 prod: ", solve_part_one(prod)) + fmt.Println("Part_2 test: ", solve_part_two(test)) + fmt.Println("Part_2 prod: ", solve_part_two(prod)) +} diff --git a/2024/go/src/log.txt b/2024/go/src/log.txt new file mode 100644 index 0000000..64192c6 --- /dev/null +++ b/2024/go/src/log.txt @@ -0,0 +1,193677 @@ +bytes: 0099811188827773336446555566.............. +0 * 0 = 0 +0 * 1 = 0 +9 * 2 = 18 +9 * 3 = 27 +8 * 4 = 32 +1 * 5 = 5 +1 * 6 = 6 +1 * 7 = 7 +8 * 8 = 64 +8 * 9 = 72 +8 * 10 = 80 +2 * 11 = 22 +7 * 12 = 84 +7 * 13 = 91 +7 * 14 = 98 +3 * 15 = 45 +3 * 16 = 48 +3 * 17 = 51 +6 * 18 = 108 +4 * 19 = 76 +4 * 20 = 80 +6 * 21 = 126 +5 * 22 = 110 +5 * 23 = 115 +5 * 24 = 120 +5 * 25 = 125 +6 * 26 = 156 +6 * 27 = 162 +Part_1 test: 1928 +bytes: 000000009991111999922222222999999999333399999999944444444499999995599996666666899989998799989997988888889999999101010971111999791212121299799971313139997141414991515979997991616169799961717179996181818181818991919191996202021212121212121999222222222222226999699923232323236999624249996252526262626262699969995927272727272727272799599959289952929299995993030303030303094999313131313143232323293333333333339949994993434343434349499949935353535949993999362993792999299938383838382393999929409919991941414141419909990994242909990434343439990994444444444449945454545454589998464646464646999899989474747474747474747998999484848488999899849899889985050505050505050508998899515151517899689525252525252529689535353535353535353954545454546855555555996899565656566899689575757579585858585858585858559595959595986060606060996161616161616158962626262626262629586363636363995899486464996548666696767676767948996868686868686868489948696969993707070707070707070897171719389727272937389747474928992897575757575757575928991876767676991877777777777777777878991899079797979797979798990899808080808081818181818181818108990898282828282828282829089908998383830848484848484848990885858586869997987878787878799799888888888888979987998989898989898989879987909090999191919187998929292929292793939393998799879949498795959596969696969997979797978799989898997710010010010010010099771011011011019971021021027103103103103103103103103997799710410410410410410410410410510510510510510510510579977991061061061061071077799710810810810810810810810879977109109109109109109109109911011011096799579911147993799112112112271131139114114114114114114927992115115115115115115115115799271161169917911711711711711791711811811899179917911911911911991799112012012012012079917912112191799071221221221221221221221229912307999612412499969912512512512512512591261261261261261266127127127127127127128128128128128128128999699969129129129129129129986998699130130130130769971311311311311311316997699132132132132132132132132769976133133133133133997699769134134134134134134134976913513513613613613613613613613713713713713713813813813813896699613913913913913913913969966996614099669914114114214214214256995699143143143569941446914514514514614614614694699414714769946914814814814814814893149699150150150150369936151151151151151993699215215215269915315315315315315326154154154154154154154154992699169155911561561561561566157157157991615815815815815815815915915915915915915915915991601609169916161161161161161161991162162162162162162162699161631631631631631631631639906990164699069916516516516516516516516516506999166166166166166599859167167916885998516916916916916916917017099851711711711711711711711719985991721721728599859173985998517417417417499751751751761769975997517717717717717717717717717799759917817817817875991791791791791791791797599180180180180180718118118118118118159975997182182182182591831831841841849659961851855996599651861861861861861861869965918718718718796599618818859955995189599551901901901909955995591911911911911911911919192192192192559945994193193599419419419419419419459945994519519519519519519519519599451961961961961969945994519719719719719719719719799459931981981981985993599199199199199320059935201992599220220220259203203203203203203203203925992520420420420420420420499205205205205259925992206206206206599259207925920820820820820820820891209209209209209209209209209599159921021015991521121121121121121199159905921221221221221221221299499949213213213213213994999492142142142142149849215215215215215215984992162162172172172172178499849982182182182182182182184998219219219220220220220220499822149974922296499649922322322322322322322322322322464996499225225225225549954992262264227422822822822892292292292292299449944230230230230230230993499349231231231231231934993423223223223223299342332332332332332332332332339234234234234234234234934235235235235235235235235992492362362362362362362369249924923723723723723723723723792499149238238238238238238914992392392392392392391499149902402402402402402404990241241241241241241241499939993242242242242242999243243243243243243243243399244244244244839973997245399739924624624624624663995247247247247247247247247399532482482489924924924924924924924924924953995399250250250250250250250250539952512512513995252252252253253253253253399539952542542542542542542542542543994325525525525525525525525525599425625625625625625625625632579942582582582582582582583925925925925925925925925992602602602603261261261261261261261261261399339932622622623263263263263263263263992642642642643399326526526526526526526526532662662662662662662662669933992672672672672672672673392682682682682682682682682692692692699339270270270923992327127127199239923927227227227227227227227292399239273273273273273273273922742742742742752752752752752753992276276276276276276276276276399239912772772772773991399127827827827839903990327927927927927927927999928028029281281281281281281281281992999299282283929992284284284284284284284999299928528528528528529928628628628628628628682998299828728728728728728728728728728828828828828828928928928928929982902902902902992912912918299829229229229229229229229229929329382929429429429429492952952952952952952962962962962962962962962972972972972972972972978292982982982989729929929929929973003003002997301301301301301230230230230299303303303303303303303303303729973043043043043043043042996305305305305305299623063069963073073073073073072995299530830830830830830830929953103102995311311311311311311311311311299312312529313313313313313313931431442993153153153153153153154299323169932317317317317317317317317993299331829932319319319319319319319319319993293203203203203203203209329321321933222993232393243249229922993253253252232699327327327327327327327327327328328328328328328229329329329329329922330330330330330330330992233199229912933233333333333333333333390299334334334334334334334334334029902933590299336336336336029337337337337337337337902338338338338338338338999199339339340340340340340340919993413413413413411993423423423429199934334313443443443443443443443443449934534534534681934734734734734734798199819934834834834834834834834834881998199349349349349349349349819971350997199351351351351351351351351719352352352352352961996135335335335335335393543543549635535535535535519951993563565357357357357357135835835835835835835899535935935935935919951993603603603603603605199361361361361361361361361361519951993623623623623623623623623624199319363363363923643643643643643643641992136599213663663669921936792199236836836836836836836819911936936936936936991199370370370370370370370019901990371371371371371371371371199019903723723723721990137337337337337399013743743743743743743743749990999375099376376376376809970377377377377377377997037837837837837837837837837893793793793793793793793793799709963803803803803803803803803800996093813813813813813813813813819603823823823829963833830384384384384384384384384384996099638509960938638638638638638638696038738738738738738799509940388388388388388388388388938938938938938938938938938993903903903903903099309939130939239239293039339399309920939492099209939539539520992093963969209910993973973973973973973971099109939839839839810399399399399399991040040040040040099109914014010991099140240240240240240240240240209940300990404404404404099998405405405405405406406406406406407407407407407407407999899989408408998989840940998989894104104104104104104104104108974119412897941341341341389798979414414897984154164164164164164164164164169741741741741741741741794184184184184188941941941942042042042042042042142142142179897989642242242242242242242242242294234234234234234234238424969896425425426426426989427698942842842842842942942942942942942964304304304304304309895943143189494328433433433433433433433433434434949894354354354364364364364989494374374374374374374374374378949893438438438438438943943943943943943943989398924404404404404404404404409844144144144144144144144144144244244244244244244244244292989298443443443443443444444444444444444444444444929892984459298929446892989447447447447447447447447298914484484484484489891984494494494494494494494494499145045045098919891451451451451989145245245245298919453453453453454454454454454890455455455455455456456456456456456945745745745745745845845845845945946046046046046046046046146146146146146146146146189098909462462462462462462890984634639098909846446490989094654654654654654654654664664664664664664664668994674674678899846846846846846846846889946946946946946946946988947098899889947147188472472472472472472472472998847347347394744744744744744744744749889988475475475475475475475475475988898884769477477477477477888988894784784784784784788889788947947947947947947947978897480480480480480480480480889748148148148148148148188978894824824827483483889788948448548578896884864869648748748748748748748748788968848848848848848848848848848896889648948948948948948948948988968896849049049049089688958849149149149149194889449288948493493493493493894889484944944944944944944948948495495495495495495495894889349649649649649649649649688949749749749749738894984984984984983884994994994999388935005005005005005005005015018502502502502502502502893889350350350350388935045045045045048893889505505505505505505288928895065065065065065065062889288950750750750750750750750750718890508850950950950950950989088997510510898511511511511511511511511789875125128985135135135135135135135137898751451451451451451489775155155155155155158977897785165165165165165169778977895177789778518518518518518518967896785195199675205205205205205205208952152167852252252252252252296789675235235235235238967896752452452489578957852552595789575265265265268957852752752752752794789478528528528528937852995305305303789531531531531531531531531531375325328937893533533533533533533533533789534534534534378937892535535789278536536536536536536536536927892789537537537537537537278927538538538891539539539539540540540541541541541541541541541789178954254254254217891543543543543543543789178917544544544544544544544544891785455455455455455455459546546546546546178954754707890548548548548548548548548548789549549549549550550550550550078996895515515515515515515515519689955255255255255255255255268553553553553553554554554996899689555555555555968996855655655655655655699685575575575579868986558558558558558898689865595595595595598985605605605605605615615615615615615616898656256289868986563563895645645645645645645645645645655655655655655655658566566566566566566566566689765678976897685685685689768976895695695697689768957057057066896657157185725725725729668966857396689565745745745745745745745745748957557557557557557556576576576576576576576576576895689568577577577956578578578578578578578578895689557957957957957957957957968946858058058058058058094689465815815815815815815815815815825825825825825828958358358358358358358358346895845845845845845845845844689468585585585585585585585585936893689586586586586586586586368936895875875875875875875875875873689358858868936589589589589589589589859059059059059059059059059092659159159159159159159159159189265925928915935935936859459459459459459459459491685955955955955955955955965965965965965965969168916895975975971598598598598598598689168916599599599599896006006010689068960260260260260260260260260295860360396046046046046046046046049589956056058606606606606606995860760760760760760799589960860860860860860860860856096096096096096098995899610610610610610589856116116126126126126128961361361361375896147589758615615976166166166166165897589617758965861861861861861861861861861896589656196196196196198965896586206206206209558621956226226225894589456236236236236236238962462462462462462462445894589462562562562562558962662662662662662646276276276275862862862862862894629629629629629563089463163163163163163163163163158632935893633589358634634634634634634935893589635635635635358935863663663663663663663663692589256376378925892563863863863863863886396396396396396396406406409264164164164164164158642642642642926436436436436436436435892564464464464464464464489158915645645645645645645891564664664664664664664689158915864764764764764764764764791564864864864864864864889158915864990589058650905651651651651890652652589653653653654654654654654654065565565565565558965665665665665665665665665694896576576579465889965965965965965965965965965966066066066048994866166198466266266289846638984866466466466498486656656656659848984666666666666666666896676676676678668668668668668668668489866966966966966966966966948974896467067067089648966716716716716716714896489667267267248967364895489567448675675675675954896766766766766766765489448936776776776774893489346788934896796793489248926804892486816816816816816819246828924892683683683683683489248926846846846846846846846846856856856856856854896866866876876876876872489148688688688688688688689689689689689689914869091489148969169169169114891489692692148904890693693693693693693693693489694694694694069569548696696696696696696904697697697697697697697697890489938698698698698698993699699699699699699699699899389937007007007008997017017017017017017017017013897027037037037037037037037037039389937047047047048970570570570570570570570593706706706706706706706898389838707707707707707707983898389708838709983898710389838973711711711711711711711711897389712712712712712638967137137137137137137137137133897147147147147146389715715715715715715715715638963871671671671671671671671671671771795389537188719953895372072072089721721721721721721721721538953895722722389723723723723537247247248943894725725725725725725725725389438972672672672643894389472772772772772772738943728728728728894729729389438937307307307307307303892389731731731731731731731237327327327327327327327327328923892387337337337337337337337339138913873491389735735735735735735735173638917377377377377377377377373897387387381389137398917407407407407403741741891389037427427428907437437437437437437433874490389074574574574574574574538903897467467460747747747747747387487489074938997507507507507502899275175175175175189752752928975382898754289775575575528972756756756756756756897289757757757757757757728972897587587587587587587587289628759759759967607602896289527617617617618762762762762762762952897637637637637637637637637635289528957647647647647642876576576576595289527667668952897677677677677677677677674276876889328932876976976976993277077077089277177177177177177177177127727727727727727728927737737732892277477477477477477477477477489128912775775775775775775891289128776776776776776777777777777777777777777912891778778778778778778289128907797797797797797797792878078078078097817817817817817817817819178289818981783783783898784784784784784784784178578589718971878678678678678678678678678697189717877877877877877877877877878971897788788788788788189618789789789789789789961895179079079079079079079089518951879195187927927929417937938931893794794794794794794794794794189379579579579579518937967967967967967967967961797797797797797893189317987987988937997997997997997991800800800800800800800800800893189318018018018018018921892802802803803803803803803188048048048048048048058058058058058058058058058068068068068068069118807807807807807807807807807911898088088088088088088088088081180980989118981081081081081081001881181181181190189081281281281281281281281218990813813813899089814814814814814814814814814908990815815815815815899081681681681681681689981781781781781781781708188188188188188990898088198198198198199708960898208208208208208208206082182182189608982282282282250882382382382382382382382382395089824824824824824824824824824508950882582582582582582582582595089582682682682608958278278278278270895089408288288288288288982982982982982982982940894089483083083008983183183183183183183183183130832892833833833833089208920834834834834834883592083683683683683683683689208983783783783710890088388388388388389008908390890084089008900884184184184184184184184184199979842842842842842842842842842898438438437989798844844844844844844844844844984584584584584584579846846846897988478479798488488488488488488488488978498508508508508508509897988518518518518518519798985285285285285285285285285279797978539797979798548548548548548548548548547969798558558556978568568568568568568568568569697857857857857857857857857969796979858858858858858858858697969859859859859798608608608608608608606979597861959786286286286286286286286286294979497986386386386349794978648648648648648648648648649497939865865865865865786686686686693867867867867867867979868397929792869869979297870870870870987187187187187187187187187129792872872872872872872979298738738738738738738738737874874874874874874874918758758758758758758759791979876876876876876876876876876197877877877877877919787887887887887887891979197879879879879879879879879919798808808808808808808808801979198818817909790882882882882979883883883883883883883884884884884884884884885885885885885097909886886886886790978878878878878878878878878888888888888888899097998789089089089089089089089099878918918928929987998789389389389389389399879988948948948948947988798958958879887989689689689689689689688789789789789789789789789789798889889889889889889879887978789989989989989989989999009009009009009009009007879787979019019019019018902902796879039039039039039039039687968904904904904904904795879587905905905905905905905905958799069069069069065879590790790790787958795890890890879487948790990990990990990990990990994879910910910910910487991191148793912912879387991391391391391338793891479387991591591538793891691691691691679287928917917792879918918187918799199199199199199199199191879920920920920920187921921921921921992292292292292292292208923923923923923923790879924924924924977992592592592592592592597799779926926977997799927927927927927927927927779977999289289289289289287799779929877987793093099317793293293293293293293393393393393379934934934934934934934777993593593593577797779793693693693693777977938938938938938938938797779693993993993993977967799409409409406779419419419419419419419577957799429429425779439439439439439577957799449449449449449449445779579457957794794694679477947794794794794799489489489489489489489489484779494994994994994994977947799509509509509509509509509503779519519519519519519519519379527995395395395395395395337954954954954954955955955955955955955955955793779295695695695695695695695695677929577795895895895892779279599599599599599599599599597996096096027792779961277996296296296296227799639639639639639631779649177917796596596696696696696696691779179679679679679679679677917791968968968968779969969969969969969970970970970970177917799719719719719719710797297279077909739739739739739739749749749759759759759759759759759757799760779077977977977907790978779967979979979979979980980980980980996799698198198198198198198179898298298298298298267983983983983983983986798698479867989859859859856798698698698698698698698698698798798798798798798798798779988988988988988988988988869897986798699099099099099199199199199199199199199179767976992992992992797679669939939939939939949949949949949949949949947966796995995679667999699699699699666796997699899899899899899899899879999667966710001000956710011001100110011001946710021002946100310031003100310031003794610041004100410041004100410041004794671005100510051005100510051005100593679367100610061006910071007367910081009100910101010101010101010101010103679361011101110117936793610121012101210131013101310137936792101410141014101410141014101410141014610151015791016101610161016101610162101710171017101710171017101810181018101810181018679267101992679267102010201020102091679110211021102110211021102110211021102167910221022102210221022102210221102310231023102310231023102367916710241024102410241024102410241024102491671025906799579102610261026102610261026857910271027102710271027857985102810281028102810281028798102910295798103010301030103010301030103110315797571032103210321032103210321032971033103310331033103310331033103410341034103410341034103410345103510351035103510351035103510357975797510361036103610361036103610361037103710381038103810381038103810381038103910391039103910391039103910391039797579757104010409757971041104110411041104110415796510421042796579551043104479104555104610461046104610461046795579557104710471047104710471047955795510481048104810487955791049104910491049104910491049104910505510511051105110511051105179451052105210521052105279457910531053105310531053457945791054105410541054105410541054105410544571055105510551055931056105610565791057105710571057105710573579357105810581058105810581058105893510591059793510607935792571061106110619257925710621062106210621062106210629157106310631063106310631063106391106410641064106410641064106410641064579110651065106510651065579151066106610661066106610667915791067106710671067106710671067110681068106810685791579106910691069106910691069106910691069157915107010701070107010707905107110711071107110711071791072107210721072107210721072107210720579910731073107310734799479107410741074107410749479107510751075107594799479107610761076947994791077107710771077107710778479847107810781078107810781078107810781078984791079107910791079107910791079107984798479108010801080108110811081108110811081108174797479710821082108210824108310831083108310831083797479647108410841084108410841084910851085647961086108610861086108610864796471087108795471088108895471089108910891089108995479510901090109047910911091109110911091410921092109210921092109247109393479341094109479347910951095109510951095109510953479341096109610961096109679347924109710971097109710977924710981098109810981098109810981098109892410997924792411001100110011001100110011001100110079247924711011101110192411021102110211021102110211021102110279241103110311037914790411041104110411041105110511051105110511051105110511057110611061106110611061106904790479110711071107110711071107110711070479047911081108110811081108937110911091109110911091109993799379111011109379837111111119837973111211121112111211121112111211121112797371113111311131113111397379737911141114111411147379731115791116111611167379737911171117737963796111811181118111811183791119111911196379537951120112011203711211121112191122112211221122112251123112311231123112311231123112311233112411241124112411241124112411241124112511251125112511251125112579537112611261126112611269511271127112711271127379537951128112811281128112811281128379537112911291129112911299411303794379431131113111311131113111311131794379113211321132113211324379437941133113337911341134113411341134113411341134437933791135113511351135113533793379311361136113637933711371137113711379337933711381138113811389237923113911391139113979237911401140114011401140237114111411141114111411141114111411141923791114211421142311431143791379111441144114411441144114437911451145114511451371146114611461146114611469111471147114711471147114711471147114737913711481148114811481148913790311491149115011501150115011507115111511151115111511151115111519037992711521152115211521153115311531153992799115411541154115411541154115411542799271155115511559921156115611561156115679115711571157115792799279811581158279821159115911591159115911597982798211607982798211617116211621162116211621162982797211631163116311631163116379727972711641164116411641164116411649627116596279627116611661166962795279116742794271168116811681168116811691169116911699411702794279421171117111711171117111711171117111711172117311731173117311731173117379327932711741174117411741174911751175117511751175117511751175117522117611761176117611761176117611761176792279221177117711771177791117811782791279117911791179117912118011801180118011801180118011807912711811181118111811181118111819127902791182118211820279027118311831183118311831183118311839118411840271185118511859027911861186118611861186118611860211871187118711871187118779911881799179911891189118911891119011901190119011901191791192119211929179917981193119311931193119317981798111941194119411947981119511951195798111961196119611967911971197119781798171198119811981198119811981198119811989817981119911997971791200120012001200717961712011201120112021202120296120312031203120312031795179512041204120412041795171205120512051205951712069512071207120712071207120717951795120812081208120812081208179517120912091209121094171211121112111211121112111211121194121212121212121212121212112137941794121412141214121412141214121412141215121512151215121512151791216121712171217121712171217317931218121812181793179312191219121917931792122012201220122012201220179122112211221122121792122212221222122212221122312231223122312231223122312231223792112241224122412241224122412241224792171225122512251225122512251225921792122612261226122612261226122612261122712271227122712277921791122812281228122812281228122812281791179111229791179111230123012301230123079017912311231123112311231123112310179011232123279012331233123312331233123412341234123412341234179017912351235123512351235123512351235123590799079912361236123612361236123612361236079907981237123707980798123812380798079812391239123912391239123912391240124012401240124012401240124012400124112417980798012421242791243124312431243124412447071245124512451245124597012461246124612461246124612477970124812481248124812481248124812487970797071249124912491249124912491249124996079607912501250125012501250125060796079612511251125112511251125112511251125107950795012521252125271253125312531253125312531253125412549507125512551255125512559407125612561256125612561256940794012571257125712571257125712571257125779407941258125812581258125812581258079407125912591259125912591259125912591259940712609401261126112611261794012621262793126312631263126312631263126312631263012641264126412641264126412647930126512651265126512651265126512657931266126612660793079312671267126712671267126707930126812681268126879207912692079127012702079207912711271127112711271107912721272112731273079107910127412741274127412741274127479107911275127512751275079001276799127796127812789996912791279127912799969812801280128012809698912811281128112816989128212821282128212821282128269896981283128312839698128412841284128412849697961285128512859696969691286128612861286128612861286128661287128712871287128712879695961288951289128912891289128912891289128996951290129012901290129012901290129112919129212921292129212921292695969591293695912946959129512951295129569596912961297496912981298129812981298129812981298496949693129912991299129912999693913001300693969391301130113011301130113011301693913021302130213021302130213021302130269396929613031303130313031303130313031304921305130596929692130613061306969130713071307130713071307130729692969130819691969113099691913101310691961311131113111311919691913121312131213121312131213121312131269196131313131313909691314131413141314131409691315131513151315131513150969091316131669013171317131713171317131713179613181319131913191319131913199096998132013206998132113211322132213221322132269132313239869132498698869813251325132586988613261326981327869813281328132813288697813291329132913291329132913291329697869713301330133013301330133013308133113311331133113311331133113316961332133213321333133313331333133313331333133386968696133413341334133413341334133486968695133513351335133586958133669586913374869486941338133813381338133886948133913391339133913396948694134013408694869134113411341134113411341134213421342134213421342134213424813431343134369134413441344134513451345134513453869134613461346134638693869213471347134713471347134786928692134813481348134813488692869134913491349134913491349134913491349286918691350135013501350135018691861351135113511351135113519186918691352135213521352135213521352135218691353135318135413541354135413546913551355181356135613566908690861357135713571357997698713581358135813581359135913596913601360136013608713611361136113611361698769876136213621362136213629776971363136313637697769713641364136413641364136413641364136476136513651365977691366136613661366136613667713671367136713676971368136813681368136813681368136876977697136913691369136913691369761370137013701370137013701370967696713711371137113711371137113716967137213721372137269676961373137313731373137376967137413741374137413741374137461375137513751375967691376137613761376137613761376137667696713771377137713771377137713771377691378137813781378137857691379137913795769576138013801380138013801380957138113811381138169571382138213821382613831383138391384138413841384138413841384138457138513851385138569576913861386138613861386138613865138713871387138713871387138776947694713881388138813881388138813881388694769313891389138913891389138913897692713901390139013906927692139113917692139213921392139213927692769271393139369276921394139413941394139413947691761395139513959176913961396139613961396139617613971397139713971397917139813981398139869176907139913996901400140014001400140014001400140076914011401140114011401076140214021403907690761404140414041404140414049076996614051405140514059966140614061406140614061406140614061406996698140714071407140714071407140714071407661408140814081408986697140914091409140914096696669141014101410141014101410141061411141114111411141166966141214121412141214121412141214126966614131413966696669141414141414141414141414666961415141566966691416141614165614176951418141814181418141814181418669466941419141914191419141914191419141966946691420142014201420142046694142114211421142114216694142214221422142266142314231423142314231423936142469366936614251425142514251425914261426142614261426366914271427142714271427142714273142814281428142814281428669142914291429142914291429142914293669143014301430143014301430143026692143114316692143214321432143214321432143214326692614331433143314331433143314331433143369266926614341434143414341434143414349161435143514351435143514361436143614366906143714371437143714371437691438066906143914396906691440144006690144161442144214421442144214426995699561443144314431443995699569144414441444144414441444144414441444951445144514451445144514456144614461446144614461446985698514471447144714476975144814481448144814481448691449144975696569145014501450145065696561451145114511451145114511451955695569145255695569514531453145314535145414541454145414541454695569514551455514566914571457145714571457145714571457145755695561458145814589414591459145956945146014601460146069451461146114611461146114616945614621462146214621462146294569451463694569451464146414641464146414641464146469314651465146514651465146556935691466146614661466356925614671467146714671467915146814681468146814681468146914691469691561470147014701470147014701470915147169156905147214721472147214721472147214726914731473056147414741474147414741474147414741474901475147556905691476147605690569147714771477147714771477147714770569014781478147814781478147856991479469946991480148014801480148014801480148046914811481148114811481941482148214826984698148314831483148314831483148314841484148414844698461485148514851485148514859814861486148614861486469746148714871487148714871487148791488148814881488646964614891489148996469646914901490149014901490149014901490149064696461491149114911491149114919149214921492149214921492149264614931493149314931493149314939646149414941494954695469149514951495149514951495149514951496149614961496149614961496149651497149714971497149714974614981498149814981498149814989149914991499149914991499149914991499150015001500150015005415011501150169546150215021502150215021502150215029541503150315031503695415041504150415041504150415046951505150515051505150515054150615061506695150715071507469446941508150815084615091509150915091509150994469151015101510151015104151115114694461512151215121512151215129446934691513151315131513151315131513151334693415141514151415141514151469315151515151515151515469315161516151615161516151615161516151646934615171518151815181518151815189341519151915191519151915191519692469241520152015201520692415211521152115211521152115211521692469146152215221522152215231523152315231523152315239146914152415241524152415241524152415241524691525152515251525152515251525152514690152615264690415271527690415281528152815281528152815286904690415291529690469931530153015306915318315321532153215321532153215321532153269815331533153315331533361534153415341534153498369153583691536153615361536836153715371537153715371537153715379736971538153815381538369636153915391539153915391539963696369154015401540636963696154136963691542154215421542515431543154315433695369515441544154415441544154415441544154436943694315456943691546154615464369431547154715471547154715471547694361548154815481548943691549154915491549436931550155015501550155015501550155036155115511551155115519155215521552155215523369336915533361554155415541554155415541554155515551555155515551555155593369315561556155615561556155615561556369236915571557155715571557155715571557155723155815581558692369236155915591559155915591559155915599231560156015601560156015601560156015601561156115611561156169136901562156215621562156215621562369921563156315631563156315636982156415641564156469815651565156515651565156515651565156526982698215661566156615661566156661567156715671567156715679826982156869715692697157015701570157015701570157015702696261571962696261572157315731573157315731573157395261574157415741574157415749526915751575157515751575157515751575426915761576426942691577157715771577157715774261578157815781578157815789421579157915791579693269326158015801580158015801580158015801580932691581321582158215821582158215821582158315831583158315831583158315836932693215841584158415841584615851585158515851585158591586158615861586158622692269215871587158715871587158715871587158726922691588158815881588158815881588158815882269226158915891589158915899126901590159015901590159015901590261591159199161592159299169911593159315931593699169911594159415941594159415941594159415941595159515951595699159616159715971597991615981598159815981598991698169159915991599159915991599159981698161600981691601160116011601816981160269816916031603160316031603816916041604160416041604160416041604160471696169616051605160516160616061606160691607611608160816081608160816081608160816081609160916091609160916091609695169511610161016101610695161611951695116121612695169516131613161316131613161316131613169516941614161416141614161416141614161416916154161616161616161616161694116171617161769416941161816181618161816181618161816181618694161619161916191619161916201620162016201620162016201620162093169162116211621162116211621162131693162216221162316231623162316231623162316231623693161624162416241624162416241624931625169162616261626162616261626162631162716271627162716271627693116281628162869316916291629162916291629162916291629162931616301630163016301630163016309216163116311631163191632163216321632163216321169116911633163316341634163416341634163416341634163416351635163516351635163516351635169116911636163616361636163616361636116371637163716371637163716376911691116381638691161639163916391639901690164016401640169016164116411641164116411641164116411641916421642164216420169164301690169016441644164416441644164416441644169016901164516451645164516451645164516451645616461646916471647164716471647164716471647906990164816481648164869806980616491649916501650165016501650165016511651165180165216521652698069816531653165316531653165306165416549806916551655165516551655165516557165616561656165616561656165716571657165716571657165716571657165816581658165816581658165806970165916591659165916591659616601660166016601660166016601660970616611661166116611661166116611661166197069606916621662166260691663506950691664166450695061665166516651665166595069501666166616661666166616666950691667166716671667166716671667406930166816681668166816681668166816681669166916691669166969306930167069306916711671167116711671167116713167216720693069301673167316736930693016741674167416741674167416741674167461675167516751675167516751675167592167616761676167616761676167606920167716771677167716771677167769206167892016791679167916791679167916796921680168016801680168016801680168006920616811681168116811681168192016821682168216821682168216821682168269206168316831683168316831683168391684168516851685168516851685168516851685206910691686168616861686168616871687168716871687168716871069106916881688106168916891689916901690169016901690169010691691106910616921692169216921692169216921692910690061693900699959169416948951695169598959169616961696169616961696895989516971697169716971697169716971697989169816981698169816981698598959169916998959791700170017001700170059170117011701170117011701170117011701717021702170217021702170217029597959170317031703170317031703170371704959795971705959617061706170617061706170617061706170691707170717071707170717075969595951708170894959170949594171017109594959171117111711171117111711171141712171217121712917135949591714171417141714171449594951715171517151715171517159417169593917171717593917181718171817185939593171917191719171917191719171995917201720172017201720172029592172117211721959172217221722172217221722295917231723172317231723295919591172417241724959195172517251725172591959091726172617261726172617261726172651727172791728172809591729172917291729172917291729095917301730173009517311731173117311731173190959091732173217321732173217325901733173395909599817341734173517351735591736173617361736173617361736173698173717371737173717371737173717371737591738173817381738173817381738985988173917391739173917391739598859174017401740174017401740174017408174117421742174217421742174285988174317435988598851744174417449885988174517451745174517451745174517451745174617461746174617471747174759885978517481748174817489174917491749174978597817501750175017501750597817511751175117511751175117511751175151752175217521752175217529785968175317541754175417541754175517551755175517551755596859681756175617561756175617561756175617565968595175717571757175717571757859585175817581758948593851759175917591759175917