Skip to content

Instantly share code, notes, and snippets.

@d3x0r
Last active February 29, 2020 17:36
Show Gist options
  • Save d3x0r/924b618d4cdb81c0cc813987090395b5 to your computer and use it in GitHub Desktop.
Save d3x0r/924b618d4cdb81c0cc813987090395b5 to your computer and use it in GitHub Desktop.
Compute Some long number sums using arrays of long digits
(function(){
function multiplyWithOneDigit(a,b){
var result = new Array(a.length);
var carry = 0;
for(var i=0; i < a.length; i++) {
var op = a[i]*b+carry;
carry = (op/100000)|0;
result[i] = (op%100000);
}
if( carry ) result.push(carry);
return result;
}
function factorial(x){
var result = [1];
for(var i=2; i<=x; i++){
result = multiplyWithOneDigit(result,i);
}
var tmp = result.reverse();
var tmp2 = tmp.map( (n,i)=>{
var s = n.toString(10);
if( i ) for( var n = s.length; n < 5; n++ ) s = "0" + s;
return s } );
return tmp2.join("");
}
var now = Date.now();
console.log(factorial(process.argv[2]));
console.log( "del:", Date.now() - now );
}());
31604768738668987344584191220530913549863410869260622417247210858053402584856937058789023065222252698184719361701572155753620355245606896986601486350071557255477014709275440847659196281215186777083359889360628478379475126765585786870349830091159285204659179899847614279118928432164912845312007451390682346145808954626634866477461203823097276287158883026402615421389048567986729012926313905060546732538218784038196321339360403425939170083252048140331674103420074598346885771120594131540700998436148999896703051889375154542474228077725015335135904089906708135296675333590652579466863406130259528168676845847256381866077490532889747352931819067207131389896251988030977229681719570170145990133990714588618467769638833038432638225059605608739178925603329013557931998907177864255922408588860012266100363151940578654250117982976500002479390559717739948074856270638855458602591114757521554843586855968330582616259996274423579538109263121817184313481185318645196394632152021284782538719451279362486796168248449037309140665437775938229739971848907210497338065337562788611801078132601217438355426044185608779055560943986869488750137237428695672261657247628903666514426344719343240561414452645476151322488105591311269277984849094869992088818517741672760156964698518444257723929078818337110963324978454925318435213285620012366219954184006133936830387551691509655894660245198699713325373717299855269397660315568223729594025326614797639558521633135025087951801865128851173232622667386186448053167630124430008715132020537641827100908345050848398608893814734989702133128676435359004524352493876435198295863994648638330760030080763243669920863017056891844840126898598300340114951812527599858130810297951096558940606911193601999594193692458034027591548267084594504860955034719123724016763937663319216499819040818175252687064422882042072980604915699857953968087348767575024525298861464199941173723766561124656482217318112116904046529602787715984743956082208809409315187613765826163944741618114795842104412990914425906676883810706486235496949044314665890343085584860551189260523461820126710616738739307921075989543326335051381139425163629899999466146446902764658929129541630685874933678355453480154436082786811823273043169138256017070420677063215493341511885309006646012920124582959530323864119225870001808001653751615145948720402897123293101638332313069191309427211613790949984116268742562178535075702349686316122501604458784512644703019977164562720427600206441334291158116600239320984024380192137039332038762168543785999911897710357519860867834931323089923199399552285186342813042331721182068377926767263360729293040774260952908469583290969050754048787604256635308102720432320872632090311653098060135462237999947250959524694212810070549763298046370630201290200186060015370682911375288812741818071230532864975887184780886885512482236425053708441303642168214285184805825751798847280910308129309259868788668405477145754443116023459465441095228167325015720984801679105267408494640813656502387441013326180869623971565592481134711764814013135283446440512462044640276751771624781928542211605837452838246825336697591180654774449558843641482580729407873187318862974325676221620913234771212715278247379997643135290471250223021636247444135972353731447142171421956362611827834996445935472246420767523169460306504325694952984426024931710786918727265455002553142725447459134286462739653355581324971065420759473851097896621397094035047795970054437698382379450041809936491766677091026345487370004982089927945426166796711952014076046967377111505302434150120185052588791816301415799902400372953668328114006141082451009514726768437144676216524829865180961597511174013661254216461362734605921702807113472375041404914187860096895705007370577480399776146823076931610820923502403079478097896948742629199364848746437853845426130194193125560950774465198736623435818953369777493724127456109111114615545681210990102059674472700645643526925951748157046046719374232691593226740360796292662132345445254342880762486199564559952796978137697071880211613159144758683104335536517587231485646313167073348146508784944312351224869995301452309635872121224482042949868349227668937941444340401544482649045912558329063684781666950578436550666205632243713654961561170490110435528727611958744882107004029456621288489412532081066614684221130963423264167860190165689114362039827341520218309176424253962877876281650019980173644212144493711714232107811214362130925565594571340729359197992629443985902095341832233205625976463231129178557477435110868821810841918900065826381757081854452592240401696871493820468227947547350251754661360530603108140841771768831360171793303435842105186330387417077679394697267235195352136810148412164001766136240309386076419696965490490238347129776451656326936938307684026623895882728894192358059324154873067441219669586052588041346594135233327469893808851486204490006749244783717683020921668797802200740759514865933355279711190481182001149474705683087040059178517689684124939554275667130729695330911362644162782071111420185507479683340155595692252000687238326908535527657363485429944866545152195306508339941578305242703337664434407447714276510016729884413860832387372389770593204866713562685725790014879791715193300585904791004622337583791981139710452671735103404575188245864793133882957834544166221000783408880247649337303470972389633891365903460845487694982161455195721399219928119737131472500681844085269035099419961549986881316698241567830689083116094126604503769006337711358852231995793495457266149402491818749950759060314259860103180648446975281240056510218397649129487363496508144984557252785280858545998733844757571042486116095242775057120803100619479830763667807749398825532348170022251747157535635028816609667804499080135619283117557932139599229043979010341997671132221946668000563189270491002735815735328254524372868074804950662120280757298834394196916432442560931406255204420447736064216448801958673599161782140719618227637250980574735232021972797487548183796414799338260015920441764696635467085151609251479749848683535974926580587166153723522493913539350273583520301154476552085636577243677065231275088579557982330623478041354529380835124187178705343647215627790841374520748744280498972959091143835769217393753870595694375203951848605351953133331294460030617544909063552991219166755735831794859651394674826285844122175298675687392041332648891464788663454684586637330733069990930213960635983961532818564653664499228082605550919330598553971179625225151871163351322730532500719194077262169969178189840543131508023979794978468614542300960750211162534383378881780814934460340544934528900580053096135747811226478227217616808527212508343641922328301798319684416002598244057266604794096812813312283698258764278331479553413609660816483346382532684056445364237136922987911851897433333230171777714481369441949684828890153233011113810699819125072420011904957075099699176098314022823872181461801146779688690051478609390289800840609112915003489184610490500405739000503481420028967416614945544433135226333798409204323098007659113838201346851614936432326868843332381008208617884061827135403370372993945644482295366384726972090849469295666769044912712086029750177269374320547272038026391419529363326885687797807821778838112766573549975737197508529511699731177101544220550938422031913310144454904894511387550852329012324353204648259390261975341868949015522309298820880546101241611200375204906690276854521939490576410261744515256681757008919358783575370411878037123555602085051546208810794606773685657137101263521010618634438854876954360709820820168897824483856802766549103033776849411007952498914109465440929065854116535534113267276349267100042583182757820204850248484151802004119983347257163079749968010664388796266580480206411231921401978044283949276121056138952790268577016057123854830334808856313935741103280461225400301493933762671012781028170380652862396940729344644128204034000163028245489617745327172786580543603342394719871233746178347060421162652580457894487474186823503110762224778345943387779179276166118517434809368351400694294535253229515629155627334837405093258593700119511065619715273598070164633241584216546438417790599315003274833532425652459045479658315518136846497382585328513020552280807069655987728774519136604459505873220514858576111190846449117734077342123372099719113520795004950809592416119655837790936232109194798520059458910053799046482829024411783451859046186632405290674579464864477679635513789980071934439759959805279233962420041657996555194777615533571959506102776289492299064967863239385367187883492938900799475232359399267382429865763039645654572603344257470188089229692748956111109612602051645818674094679935280031574844922922759182655506436685765427887096285351541563127172804522623058256674734634344381054304183864130509261040928009580952265872070131214708932082001191525611241373344526947379676683656121352197950629687612559595199260989227738769895645018083321827315497926855323657996104784943327727733976012141647942759226835816373689548649948345153866602128477605797939479975120317586525801771610910908654508135752951576000247551709250793149993903871524905206136299512969050280886210255407894572403382798121316762793496331553477418566374233890024925497437359797129669924188350655460015576993267046049742648203640798569583229393120797925378181568517298903815105134781503621268408530737377959939818137295713313387212736006195794831928018447033475280312223339229168616019458796672494712883106778809487673738652367293627126668787907938316760534555358099501927893589590988936083712222908931704397917819813115723473492682866813376456913773030086707449177808710819134058711739979671314363978221250341029912740587677051238006173193155440794469072379522769386686370085316062413535301822577958583617484500586026381746421705362483229520210354059615439068696385400415934896591857382747689084015255173818826090994809620667427348872863281310801067758679535226113688852351538162730786377946624704964139884882453814936080061511518251999103079442277147520752988916550475282566879560073298203272192742407944013729325016192075813743680279651971915994447156750440063215979031387393775052675538910375705297367356922932247733410125021126078517822981413803828964361634296299353821989571474338236858232568523998064086932567550655687192896795028916018749959142643571245801523202815209030281912108193730030521893453201887041510375928215630246446040513077050809050854159504588097277437514914277114992672717366551983949214558189493399265954806135821495502254119029384202651644381170419033298540624363905254815089576167608982932437385681017290158266812448872891758401503885881689040513602806363422343343875499840653495780421059822003358493140509348197825184355818753351245174210373330991864720183421327154071223636378121820317049896774942015852686771954639037437967576985708525851601562416992667725865778952339240596883005588603115784774076919430566069257522543803382903770758707597032218451604824415648605114457630911795360609620480540796382936083889434013256744595483433375920266994102641854814914245805187696655526197907789128876079001764194197126312633077853174103299516198567326781171563774863585791643709388695599961139993586554933773008624431675554880447157565537522471939070944189351433453668180795690993803959486921310434280740948943483103992413695719873857144236925379668088701698145074889394946332827197041966602097953909038387071657336133889519684407623457331047150977502279850932170803006348182371477560952970361508076025586002558267371349825401335200771861506607803717251900816379660121091425631512331099701523499703908317648036171853745798345817010261341493192305248380642734533870289454909971282143753783843423360580499910473241817579346180936887649885750300936765725405927249954842397216722869480179947265423836372320817912278302217467852278878385472985841400033952819202946897327885718065615235086569018199068270923385273229316493465897888987578783367509284894333745503435743070045123980994002605780133231155381331098306425493760142243027159107430863964631768494135378413881200798392445250106759882457268858995708030253335344210174021210980106241120597459555253658855458417629916913365041208603736002884593664911631808438719690115117639670357926922445618344303882410006624690055484242944018092794405059643621754180676441144295473074007663238352409973283869397105249753815088514330264087071136944051716504335091887501979865153387291108919330765623509040931323134524810481997054595818061732842256725636327019124451988581265277694983101713362363891902146838603873975410669518261429852677601406670164582130516421005626989994614741942064292304690742744509097140355211741891584606505178048803240995313779344314007511603599616333521674524637197950464824548239481141570481928760093025612050671589171128046280696607472140638079070465389417130004372133458970762374441322559414247497353128740404372636227129086538398335600874290100111988439722904510323845246169504301285579261528285528990833051837555708949876581061572321217764862354993713531721881476824388841688754848413165889308831729336101501428098938338835875367407165325572221983116138021122723557849444221046905530528723211227790539758170564240960296544442393780428158321789668381201105067775620208203993277009401452331626938265464182300159276798463259998321254957810521011260959593512855709663697850560369627440041802257640812484117589822139508193776011990877016096126391026625600970389925277377206473819199751845527579022068930000302827034101428428233956388833492223812059170919004586917178817587963117287641010980063438013640928355408764317273052111783815723713805867114618901697787577251651152544236629988930751969102882736502486824792873327523191052228682475885850541843555637308813368803325901895860520080071051588265995528381912551449007031498204114729287341087339264908685740075011916646349618131235619271600489535348736609291472334241152627497479128206497124497351899623083212515647464088738309978360336788395767311449696325750557904490018355633181472252403162919459023865666616844287160680334971600763276612181422003429270969594657894967085352111767225716995839189528355664087721494835186885993215966373731272394075528350530719336370589144535062876168941370214341018818786649915967703957291741160891312119934473248666797901401757406028531512285881402261049640115853787677113192478067902507411437498201260057085229059143314027913908690456366765162834434433527715802603821143911344809952480619609599646553114140717895281514558153061924513163259209094829596032947208931682098159669674148665100118567668876231194908849564277102384798541487431702325539083549826404154173334488865944006062105606087703520898731796585495019669051468594871989457079065140994382883931358272822089150660502079244221211037730479143102536593479400842962360784559521051954283432858970572564795103276387908905869806948836581109049615184050501358384367272298129232349381579213195137929510280768490686259239240831042077074756416507798407846677686399060499440126757496334700216369703868271309976873348821612441842694861355302157297955203507868977358962106703585299464340416455769138175443911838891596638497067124993482919901265603337266528578086140205335335125663254657921441545943334293920370081624898267401665648234106584153088758942204535422671167762827513814178504749134283511178531856443908549597436960407442445053135914990639231614385643447736146711369330429437266286391531844457967853359558860192648984335276130886852027001086299354369891143705125417904894991722376662537534086392068039857394521801155310311983492311565575728243557352294639188885001468236320075612177912841413067743065090860144327088547198470994760841421773127070881526077632285831364461646567124522306889231679142539065908307341437932402996073011432133567534094562177005695556611047990505304554347026581445537878772380884104807471749079800990535809944225561623669662740373723975791830033137608657643716138507569926769626909997802002966589597396057506039153886294186897126302906594804001154617003390359546451877098100292010638828028737744723619865948790895602424234355596787089418032992909111531988224548490831534314099989214729441838381799675581675308647299088806435601046627968780932967023340548445410349915351757176618430251499841298672804396470510464371258600931219750554282310557367021082097882696600623472150331565726762464672186416259693948927413480057172117641326286145295171236670523515706277362537713434058278302091200529914251734317647630221075313373778953921591014513341440095603400251544177659252874409029551325131838400878865755756571836778512605636481965548202303831412574614456733317113545257942654743872700684290921055375666799819637261145439839047833589066413034039183861002920077438191716138619902041037504325109756173782488911354912753332927834471274690208606671507025590029802149863796239451350949122802106671920328887275939985895443421463578819871341626691796573805380148989341861193934625095958343089260401371617696683758021680420061064099190578008975319988633027270392572555700955335486510488855449853560985544009393295149065216725074420200822601219791621740007226378032204393782781435089246433094437854346374346796613890555646764723952790408735500122050540531996709522640164855809439498165021730267082349265127637890719234893107154490908363083065026060253381096262332137642333221373964616980407361513041701260519116861103717947821555259679373765843761056942859129978733985273798181940380886109645467972402971741173267614905981114256929770692412571657238288235284854539328361467460844622125212335489457543028551083052363426851683572444625537197741909556924214800867527655981435844331234706432556946906914899655878786911103752805822905650590121306025029101862923389926002167147715582946012709637257896819762584098105707758080532718356152822800686992247083138704289352426275194336235562334452242212196560692651051125616320435961236609942117069288351886475706229569438577316833832929950308739175357360153317568861470262144080537011479530374524490073221599177185252988514292799514595701410555290734711727046411329591751636830057517300685980620712262807137528479087481898870765418168367812138628001034094915298183145004280490097958052305220109594468778748878790659765484374955779544379032219905132898171774802980357440347249731407756700656906019910534992971603543322341024114383798077170249083558465302774973589202631128145563222434320962476866230935935293401245008936130396298392541239877271440090828776278417087548181138899489453704289385693516964220125743004877206036131365880423987937182124907294349489970992535016321174032935250021082156965598349466514982189075800552196442854134688308578119292219233849356990937476655346502633551198346166765413710219474607952927997795695249508714107151915694340610715588096267538305187518435385329067795540178092513646307786143381975716202971467471347491306327555193972900077027214516356798240310538376388359858500794145857344002967914959004880715610321456485644502044306758885152110946127500484964990242418906227173989717883771913977446136247819032160259828505752891031346712384098757791836978394800826780229788003127185776791229433415325137684734475180282377695586027224948167364676120084392324342600931307279640692975802739596618919552682401214643101685180661410518745060863332491834763703411908459789352996626023899979948933294044901441521590359315282060925092726879124451397319481793323253155344498061937971999325056692181443160616840117736346976140470902363517652735173340242409023141041858756973343056321097862832034752558143079614212369143889073703939531701296500750580585673228291216401847143407677378619860602985596824608922422184641085381602401485717581164418048145844613215903618661285586765391781361417899655750272624291326664217169427015761914208286173178436093010462424357212617347942002145638651994449975960797766876715876738642299692174568838944680267995885494925117641039548916160911934722681101464289070167419639092618906236377264472185596508707318130371777391229425341538056731023620704899041798240738367833018238141022134633484883182551672754043425961432481505376766405596371373282774647448191539921309592542318587980594970005276839135811887509966868768351968662844381911888844749969136446883168941144109036489086040719515131245307596971800099457282107662711654217959268020724210346449487119623597163054345076990214139033235744004913284807185974506444698600471302011113636928414547857373827388124275026870499282032711215780413410606592846616229740179283381743712898873866498508285718862304557586325315548381343671375389168085097993085526351958181690638295815164201864122441640940002181464008498904624433084716868522720216704967340572949537794189377063181602407295529041894041793484862378708130618373167510766749735602395179517393007967144782833958736434418287163704801748873893008770522809922842623115024819040751804139174950765395461836580926791619081524465006872162013089311314606867950206442109123261729976465304628673258784293660005876042487329342672190578293303825719182161316964754146393610942678921957419828644516058723963551141120220507971675324455397287823185763318257254071642097848628623459613144736914860445885121059151025350701882208499851163525216633178445923868544158210988975273555936553569240698549446164523128262270944073810866696909307733061925579479769506622782252858282791272589861929200671394816912470267726691328639177077192641692839458441801114215333663764223461560505282308460285574171412868308418543076865036745937250921396944241244267016064325662853952053410714437121514667983277212018319641037161891556878307005394961636462089371243956892962397988796437213741005451234801786204938402755297259551757742127524522762121580780443220763081262384979552916651825319735259286947581243554129192791584666565199043142065078826233575449551021827141844374227216004916463261739282515605946460175439577430358385909247591746839990033066117290130864574421534826768282943695511863502676503856871044814593233327324175076095045221356431992751314552318502781572382946452427487567948738372702402827159730788462943579631048489074629500075014532115752789808105743675811135893777166315774430347436926306806582519799030102342635244233012873352973437170320036917553954427191016144621688597899393141476780677525153976405761326673313399669615997288088235856563760976462909765615811441014177490120398991543398183033246793324722677543964403924009181532086625583863169862954830583255969853434629444907514535773881605756566541316023638939922793221337450882851665436001295714377621833341147790356157077228955199006179457470727700180853009191979655501468011943767652699762053446853484145137922555029846099449711913180675034510505848625764131456368410954928359410088204229236306640280623674745355653068867756215656219831624333981636512029912829262487194613937820384454224399107809828610167671971979891158549605076175851362850734189273454915407162885533810449596953732895426802634211065736445067507144086002541399103030929886974885332005547020226074377735831441649307031932544099361521204933453837007697031455529142325109967429316153140618344053710430041942167176957174943705021092132774222022753790704004489881796245919233139457660324126721076747722930057030395893776758491683073387544327351758081300638214639652729524762861974297098182092977068889976155634481314857204215394543697561619635795101853507311633856803105966446965542791000391991943079905497957443187419857097786171278941723823496438851766971767287739695717986714131538217225222190814238034082179513304032318271371117738363986292720332009421265086089354293008505449838834122786281905878232789804772774833628238777087238646085971445027656957556347680194172081220246047949586520264057452871309816870559087986356374034500382810999743112521076525871243483369242508373833712273154786167906659852981553042347498338685014264026034096682401772748716273564384033922122249627410624696753241418564125205955018894846335577220762881852282827698267208259382702004590922324177603863230114552182848056855730508369133198623267856068102327034661214507110398614153244432628142524365628110312011150439788904465242833881765753092675873773004132120635064856171346712643048033381914350511176852075397063655852070937552425250421224871289938956859463638795738345853006457690678510828605178283691264486585755276730456884003680476916600758576507140646870381405177414132849136099288525428883396026286730352931977718177455321121183414705538060813117209312026822131226043998503223235370510632265917034467604664677260217411202148306169794993381163475715912373751433784649451877576430058134210643553278990374890184106099498208565742984468856948520721845141541319454225684682512363854160841626480694543425884614705695037245683105093485103827836210238636147591335057956649512547640662355582623244870353853058416449611016762253755985326951661316455922794524132790516815629181506990170774700561423228438238131144675239785408055535718466483075645542893115035071503425978365518912876475927408392934395591387955481262846508188370708619206610878696134903392908120915715817216886352340335390423054232516684545127474273317109964123652082776130878226390674081367941544492313214689380344181179352568553024666500510723831921864800127877041571124230970893080320547432504277725046941677559609579934300268288597398414420004865921997124520032302190809273198327243940012316516951091393023033472795315299469440148805654292929180432635712186963106086554195976190491389241198018713679064414135217881570063978467675541148644119398423609674234536324307046284950716833568085462607794638635287069402208465321932712027017441349753534769951268395613431187312985123083878272552074566711837697848744948084187799565858722581418452528150309827319070505710853545160609984544678891092388404259339281626188152228022019593576905336805496643244055257603802106547082304305277348019186199615311534950833760865286998287149747917111226610713746622074369470308161098892757505404050338277599389510106435119951971221674625964138464192183750080227557916455956923082884391295388803589902106461940356053407091963085781863405236418797770848569887820830823545066520639804074631837294245585564188441499754901817650740143484013325201710947674918791772647520990274158084521062882506858942690695760394639777468639348266659155329548206651621087987388041755908800576556302422777833068405136003318407843458541382560815705322860540938160445808482069268687505733163445464002247376834785496564917091633731115123037354842876184597021578601786710441510628747453453513654740154519347945964647606424376170679552008374237802018858310944196462085637930536639912610723325780381094130796089906048150889759404574906618830420302876462877491363193004951149161649742802924864181454109489806263764921297763454519764078595905731349510293613509810696609390074227591165773866986594721535967528874022147272551403707223559293868278922511905800845921067864185713898679791647082499750248678115341433030108032658804348860074703613796087056947296241758477547602526397902156025579017323441652677179812253499977889275570199559176486796320848321250536624256152129384948958128494409685791450098392446319534931340401259185994321852591745016899884422007614949987962519903344555515590649654527442437281261369008100516362206901773749903651174332930194750125120602186278548941679199265895933931647061780190445129688724536252654809865571835904022174234905952794131006506939542217214228404189206198863550546767746889859380712573188872319744434945232170498022731900226284399720442314212473015029611903709042396225494309843768894133185181440076139777174862614553054008877183821376436094260873948007994365830445938347605217398532109274807549806065376460592395082942147330600059931224799682512317616041303675553820898148955671786835126358290010347498745461324846041992124124397383247094962811210090822072937952647331940313234605560962982573999970374135819772849082786278820428369908262826471773190891727372569706949983150001642213996108781559504040948933479714574257190291413560698511046745981115571828549924084456007480576905568185084797702654891419552146875661889626005914233897078468636579366592346764815535053477485206969917330238231454742908208805984717936617585879134584992777590163913426363256860833444951592158324592169732811576036063780312697149477301636010443472337374329853199527298975169458650040448090454620702713314305897380910577320731258784225080447925507990621052619238069536915652042200793544905692310326658344633500478157429143820608440268629918244319600397555557392606332003264433429031135756056401940390495815122428110148789267348676745423798204570206905992282956506002976934995656157578001709015898438585717850169023911383798835081785991159396245845049113040623903505064981449147119421140937575735240949464300346030139745574335046858380013197103230291712946477313873867759270368647597614247296504556492203856951107675250792868839509365774100194812242188587023683922353985019002348933814026377635528540113253445386148370272800265967311088582403861532551953274408251015568378721647754110500092047239259201409728407864326960954910392596979081224893098623422009004284029168273348962206563213692266435003048496905998445124719736290690594231666740098500595175987560655169136642755692372625773788410396398541054029034944926909282116622858244253690915175501473048787177170885200239501932360677128332933974739535539668509898091937283040802610992186915114352646144439489912253921096829686862701593815600804366632054048330846780570932405993186778924639910660322464536270556672545368686345257827697275442530538178531589767894545546021869503410561210073412361417223409303102853295539055996300906954319333129123400947271467395979958799043240441227732635517043958893472552400154965530435955683473945584474344493393562838699622789468052859803182049194664312838820167836500033581977329233399961034680621322218170752269921618260003423614172798121857362713560132902530397553924434941674130127584976949748915758832008759652618633690877808082692863827165731612834582677324372579369945068434571937253379462302660359573809278572881553976101671341182078256853303178551769190307406131775692661396327486459121236322264148893018843672235390029212831686970780530805328206601972332507501956283595159954574354182200223178901977609921719741877846285705806187295328857359356447461948768749653495496138575315217006269287314651591197444533909492042556993108385206497645018042126977964528020657175222604173003879354224150291514661370058758755996491708332104547854644554041384778664429317218040330556719510814257864080470547842037067864941881568451868625511851045211477797482924797037925160032733401096133688865956193230869364638470195812125789572417541504181684968147331536786183044342369133438037627945101905136273021076751320135709198902746536460794685579858616043129943571952315080496856574223249437698457742952796854279461620213099831825086166384253842513176323915441169203281585169452274804591976528342345864162703167537579863975647625428544007353178762379398456553362795256508920629773245871964974809734745036311098914046965917448937482083621907848248318863286482299442028625934386152908942592803926930204047607981427190039252849010627753528891453693968570720551098681682799955565616633956461962425975747867109234641151682169265042800359148907466773440992283786680019887566979831781238670512884161057578639258622047289539793518475336981309211588359692109478286002982014959188307522747238115007104625203916216430314335325332058813205949687808965040369875867492813033264537775106137062003007179683719036744640933808242563825145543465511843726789958136730252143209442842637692446664797696672306825369559621981560043659653080116374638790121741563297040778028659359644132739047392465678128734564332314748026334489571028250501033383384763145079146117026467069392143425085329771670004492848647170383606093871015580159218876664757315696431586417779119434508629152424733291422890659737984339016998097115831698974105909376813228308401358500896836948154664558373558269949659161892720270131866758616606502834516650229755822179955588133239497082774229269264524499026218129853087503576112383186419337304124415526464805691067475329073695869830200038015301900190221413529678713148632393373556750680668241353427787733328058989142054249435495324677989306852064297591673615859734493140331819000583916270829416572385503512643376540864347987586043531915858290557747183141637260743048262528898465536662853410442777490432566702924621108078422902868658645629022916133699218674072875290955147523277193265085196443116604459913793012986152278490923175724105050347355859112857092548475824981267158886838335311878003597252066113872513857580113970742346865865251711630482405828316544877091188505212439159706895100973607648166554361651321645353212967017463983491555831464783405472853358429841957723860737107404794464493589226815582813801623767592280804260764282518900397807102973373064625839467527994927680936620809901198856077779102047709384299805208008054086180235115405773097972515505014101290787250669692692790097533005767302135494561543460179438559410947235076944951385814810897061212713557193772512763065523783828925016873213620989727357784553454072053443747052132236104817086881882454554554302544609099164575983459196427503372315307521023443777852576938341708415519444972997303021239228467866852523334014101544585541869093632530610769827233979255416782134237671463070747193284470941675745983612939546829083939919918932973231459863700334680283186108628613428485039617619646466963321556568678114791495997881455066947324940461144797749927356983024715320299967262108913393812304200102686760872642555780664731759760858250132542667595366957993089572459578223163559642908925321942668571169188295619681493075040338398807831308218293233451112454650278476433950570758115406255215247089492472269659618868333242298377717181743534951235131477840450906509703378947588246064385182588037030722065444585995514228738655670753124504073032650821910922620672138538716034337669353927986135418950675267960912832031459174582832438322765157708237173171658297257608097444662536141975052949732140274276574832932014829515487320491169425846554549139522794848105383049511984322430722217372308659216427869143814245494040889092533153730008400386881724948004859280901252231112506806573431085139459133644527448270500758771400163525344225614749072337793513295615173536613976477098634124975939897912936516841671881191094287998968737971927406804651700133063692001527209423353363514317217112978826236438784682814155004669859165848748175446980366164285226238311991610307270154242503238716447140488076186091272150233354284203930954669196804140626476725127319297882060347588903333557105128275404902662148873722942611149254588275550377275991398317363275080611193378541236948834531660560440900363515727248871103908147293707141741374993647683545001776157171665693084215267957586558287467821117436637870575478701664874120598049679446414869033594663368556386209413420263851341268728750803801753476474226379526279660254696045969482208201073400385641623253198988997966660961399761059085316664117367637192907932091779572180557659727345696384348575214722727827263560596123663826200780510604526862706943050922816032924704934697065874269022548001256140790314031388934337485208067836110456555974706414611580874434227415821531783175709681695643993972040075420857110495606624783932542556050618638785926008519913934113742449568784726587132696614497212180518184899293991656668178568297741163766953145463979379987318751573517313270163799575234235835100731970613315232639440572153976521603457362789108734346072820280207641339998536120757878167125782755549402578665056188357860354146898014101186976432525461864908015975544400283812954682668839995849440508146889730738678920413763719612734584245705722867988240218327105053957032419551046056406551562124283653810536312853838176001340390698845152186371159204157480761364007112815304384101948510524936240174763398278546883753396519877333166335075390260853597687399879615327449802442859916137201982966021945294114378815310941730925481253351930461991613945966856745126997614370438507893735559905953578370323089136657471910628532090006833736406288853935167922237661144843980707719374823763773471149043784501709342031665158808865873679323295524120120231236741548370199746563156915859737006680058029556607143883947318984103342496725979626934730663847653484461820397444213945321918826049863004185131805885594558007861017348519564842353497647084383770493924407429036724271932924468098223282639326219485579420152892246966177161658075740188322033347502937292710542283244267125321484186453153742530734891446388082118784949068810555642880142800522671690643353572332763668784099472477406144840802280434990255975290595657227898578892373381518811108072372784590215863726642809328052499374336153378560017480605855183375452225756875172038345052528319535938302112504476862850721871021644135987160421669666242427923358936925094680933999259390043630326419964238903963359939663138573519232137457846724954707367650950709009707067875749581254409013484991427789802226442438152904461790410088877492235739870837082051298181230289719174011378291168629930341354960805107167652112957162674621519614760150769362854315369327594381286810812023944836149782618984780818998114042516055670143546919663266233686958075691382122236709752950485927515216812185431788976277203584387145331336984648308434435199784277572117005217368553984598233220748497674839378844564760331496292000075957031194093672810363664839235824011398850394455696731319320816555432070648517595205289448029191357244445300868322411723370045903949160370849963152793082148413037505426227415324668964110602403118286783952142547112106724577323793987748168269451184310284314255719554600654136447198563357627737403586757396544800255059035320453860104360760181955759171286714519288243235841016579259080819001723828996001088963434286692142521271686887974417250530176383135896740274282584640851381593979789002025901760314278266297359367435185309759630415274515496959569888067462594291436682064160234220864292447762285091678911681604272645363775467151187031043372467338717682188565366428639269656691240585262366120688812787999827295152275282851856253309152467716653172744280308682107871275502278541519704203574836767752409140265264956444109744386850527539441301710407777556270859213603671569768002928987712675219591746564415135111573171340837066671983988789532278532193088673281272488666929483402514289056426494933094333057935969119930250304421116523350110930761962860094220745961340248482180917844219181424327575995465447640253271652690130420310257861088378955430487426284022000505312470803495945005113865042838710461069355133661939331985347834006061452118790486448238267484663547438876486924247109464859610869161136739506617743859888704754790677220820419863162152794321413925846519562319619218509480236893636740886529178334901511195135955444761533040762865238246455763207103779612331666658574786530566901729810204144750081624024254630702364072259170667433111700932689973272928256855229611333483353839333135514262222273469015818238300689581391213357803078313868466881725878171994957372136888499413366514623868966306655466818602911106976275223268498279209373625386513966996201500223217913370684451120277072110189913906572554531297441517035898147357622916487481565361614721352752904143730516483186378497482573498029415326398762091829414940929119795287772930263028929110942753323688742891027400889437738788415273678728716467894279468845571679933792638457767050023809488572245419635891260424163963523787301441009835547085201164614289492285913459877655071234253451135733004640970137375758598609373487693305434719781504178188731588849991451066576044660040526053598956621148730274971960493945169509226046646323801331199678834717849651800072122025247336113720508364761468202756247649437377773461127513233715458563316953298551440390418862354240389935037957424155907290222075174269611284169635299447835609077262319953850617187842864551093164178832994856950777828157062680432117443397379323024227478070664270250638361298897417104685798857770826932753525085531456911067323194797320378773294972767750824737678875094950742014706908885445109933870317686807951792569932452627176786209660382145675397881505341727102260702419752456320289821187890157580935280908189104633093533345697377341814771025271974143677833414016026545804278724783991386645696186737131568726933585303934365391013996842057477884532764421855559969159093437738395109613891004027700781265029393773428342853985246169915479980878903054721774284545498064986155787325886586074772320040417648218872469075279269094440952518737720132175019574082732929063641798277729742271081207241249293025782380809276172425447709186141276709184463118586182200337100610853359885000090574995848617567165374387676937695866074341920949408387362024596082894236940238861605046368899305034944365055345894644836683470446767829469979130794203348610446430749304884264527541507717881343591498239021143764509490725669086196482927848019706131225696450146179925693744837498993174386281708615024845627784276422406111943846637133432459408807330626076284558627181946933305277176471033966565661216941983215408902200588837525287201797533138257201453254616059791835250443147311880586787373040452641237241465817605556016991435362838833900112876518263679546967227273096158242971221961550164460329922828612052146779057016110052764893664534142742036818382695280511852527159630177366931468990989930205212170485782719224352662814340135127084766101907915733718581758372034761605143928715108395005059557671517101404474928913362634760213493587429117446263685495975420332301579888438215311361178544537655746174697167361722489062130305893408003102720356291917190450200475468248942913017614162487550403312079128811196922466932887365966520265104455939824821149974437593167679857176426873291476979971815444750219543798742429917899685517256901323025728805663705728334354806817625719773486161010805344535258655159110286752420532311775905828732152941679235459554993750850065897266245254336609842857380170958214905802681915679651223710621851214133149998905017851660705274986951087632365955722337964109634122107569404557992445518529040821987597272091831879477833940693915891326421145380152009325810632691080972055316125010918435258241948696387847869101481399147336703283350249153700799423392848195636076326599648482192059388506162894855050130346210184636877379339665279221389201589059745127173529059272605639876035061029071873411103290783404592644719593653026620598956854744119597210373658731462146937086556043398168074279253661152853777369048741702850436383270148143723055840735740459173880664612988295610134291669335010744984557230200561022075968436858470268101669409954226347458046517569760882270207192384047513357605233383308286202859429124898850135339055056060892777087482606830987502022150333544952919730963451038986247438679130456285964630362271351592477294111269608511448388502020590852625690100374826295580953218421367527513928196412970722013095905155682038378257291630152321852781270602392928126937446877995891575309094543843347506606054446485051116434425116037981712818289286794100615245497326247640234086914838955777699346156767258708930272876172084223092947504169675902894179134455040331158964672671999013802809053717663053747151512441191831158966324759586122069752710460375351960065670897469856368226399082408643021698834272095987125029646861962974684148679696458955495229626208521187111603870942280179181168365409727720334948781470397345065674020752639836363524949581629827183926535006925048196097141962002284682771010916191545517068853613038803533882551448313137395319965637286370985072081103774875935672746325520595001899508867198857320097326579939212295843008074755358863550792548972315283046689812636698449586242501977218075713212067386835472167443169421163276410698810047751107456341880671303866129266026668495133638533566488804043774242652600634615542548072108383515538234706216316079153103379188769387718375650963647007104421978625490872025199433997749826446946939523168692965849913241711203011301004189943554275478601300311741462916170030105958621963406053839401645905950130553585772123389188180549095328400856014354449939603038825922305506888082890665601165129108736954240783109403451052797080579191462630889875948627745575256264916167230175930005113479439052865915818176855021772136814455102751414537206628051725291515956586679209476816196948345934573697731501345456841102161489597949430630055387119904520495374939445027793318863800679098852908002771365365128845110832678400648023313674129542265651197585552974051903132608289272452378205397504444027530659644653270299384326305324121368629496001576058113408790037668109515132655671361944427924880041812738008808428396483053034233474951108686258658817156426880513364691720409430532080154266352298727833417311203314184776141915603712469158159150880588399495000533474304454082921431395612365693494451762438823090475839493798061487666854054499278734938596541764757697785661732748621607041814175577254782895478569809043919321621270708329458917590175658987681251546898831958369397434486344005705917209357345028776454847113927685694005001009368484975487703476409102282695366509014018832201499607743740911846742697548043142022988535803106202057666049671226967733929325138304336067754485584106198321290673005127707322337450149530089746562282967159071852087517906926981159025795385252209032573971900730468252703873242930554281412983709254547165023164366227705565872054208254160442252528149624793450576919498821328155188817606498355460001629816672548076956885896857349794215246081078822502922974411013539497445608151120569536334368924579580832326359714603497626825221642646257327279211581635666755106719671023600708333410001797197763019259986038401728552288056229381507894827137178805012602485803649510574161667725084244504953209471175419785150368916012496286480382399962638938873545075055271259418259557330832357007183584196233181908299987242598850650447148572267307667933130008472615419653391054742633488893549238721170335755553628631560103272969175652639049814940745953511411492858328633843565787826535278918912429724906761157613691106444826316619810122207335455261432574104436663895883361681984374997730251587977987275919237330849496954449285625860762534724627457654719497364127598941575099364950103133098810219212719725758672134684190971389872608919510518561677910643193493176541689631139366976765991545725802669713852286111031299837831622402020916323379607369321630742809970980689808905568937134660334478256418820777906089726055121379934589053085410926568842443370716593418658878709795918494283303422016743880144452337333990143556932573086522614079943793244752940234564985308563352228333496172858729890036362763909728780667320539740221566214334923048599892405335399388599316736415463360165067816847896585963793460471362994798539445915432230230430674422247270041444036694130702176996654007207993342495314955234317859931299035054960069709732534650041770530328830188798546896913752279999834602536581217305080331352814283097897705586046635857750859358807341451970582001985190536081149441658138547456354840993408460665513993242422332733942188949618910249976872036507982069224856790365546943746172417585479120398416293296609718386206933414932861072362183050536395385304224725457651711901329975643294818831848287864226010374689713216696698219795132726703402981814492751519250714083132534209739660994973317769844769347287603616822256302614723208806230013996377587121590640622731029468264909031180300049793246110433097322038295768195520887295842221180216288185851242150508881307210497727024479851925545198451925973684801588389594270183237548414962594780040493628077541994940720556152040251475518786141609659016922069185055397945613089054157834153176357834315663312101376201061285915132391319264405820743060487282134545883779712115350568284239490959274418202871396995112383217219341993527392690444152740100748688534544511501719326917423058831771307497658134178836544029080984936120145364164213901904766868087961366210105965967712486512548039323547408491814510466482318974203775666708936810327897549240054326409180272715938359808022810923340150361051477663587541478317564424257865120621715215493841570858632715385784325879254266543586050354014200707209075009617286114034404138346894989291843393620557473612387816866997479779658682772377108452442049623224761117018006810997030508340775497022233394696975328819623805878791515509241566122967251808345009773813086193643851165721999285726397370210246925330596006707455005099989796422733893228733188521503396141041998095379439209591360325667651291367042986104844349575411546613901055756882832118531204454055479277100757397075830420261014396115652140471675912523317028856711079772303496759856842010263483998363035402070281382247064931811895387952756550763994753520809583548907267675162916143757414118567573464689651289282058589751476047482497758279259079497817416215222087959329541266247261406692212463227721557488342851137147813444767201756771037126666679019552683302324604264002874091112285272878892033567934947263091723825093660850233315329314793889100486230527861432194855498938846372155162684235165126507112156892336298785610344545830293479674722473412080744759788850445614887370659050792150820691918459123400501176545630667109059806956294411913853209380189754808210588780432079631878504744641469992390618727624251891663131184599902783434011589040266440060742095106947160028488751873937882023575830547875362165305103463565038339011264519834264881990856470862903366906635608634046806930842837510406840105839202344359579648804723888346796781366650629646210546329684709892315620214323685812353656409469225485916157780543761291595232610608524664407116995242138231398658814433907174625272934009546423112151512088138343769487790006152195336993704020598441924881615421179854322670255480557253230752018952475613972920512713960227946129043208974201519102037928566220054698492498526888928001374239329547209777763351892277616952489545175983846398558685441011931981709286208713342392463578844625600714833926083327475596527166642127256136556329468610630231869828228436702460293667103542258416036648982564709976161901285925265598933379403429186414254230409002398170201666397732427331036738514953493445280511172745710930632875738828318152082565908014401199519097690341470005891533557295941906417198196821353920870890509608718689795691550246792096507249403602231379525539705388199164108436180876670366572688830538682661404665562579786511827288895761486178561581322553091012382887724505779963092111433916720914712122066448385353533768816046832962080608204191000968018988468307058522321620104044082647293237486020763568824907029426223552950352301357199036861038903538615858222415310255444572746471486755703474289764465496522951346730133353571742782848153166211085580193404787956533204753080923173983402544001974230959210288034363432018631435956201692207784428299085695340183510017391663782789916350654019407249632451072122646588507464977639533548919712250452272348703482169266170939508700519334381390755994569771718825118078007094575084735938023192468490884164640545642218676346331341523074068435747962275224671137397064533239152618835809712076769700936068086755573018768231590580255928856970141146837060206069181167238418440719575721734525940371687929520343971588838923265284654656153798656422819550441106076925015546079778735568377686561676644945671037218311584934059245215154340767225951296354586289213478023708262215961430759575149314524075920931529630106806135171046473388324878539738346326078777680709535859729119358060261259330518664218654545794712287241927512356759747928115670384449510556452423127183476014493555066996992143681309824726778475590839819025273567870647985087112248160090622069002813801790023437950283485193730628673494011414476272592525732685577517452650305770992246966639354245805394834546616516122117298580748725539234080799278324474594809643795209349770701215051794723560889703272099152155114837109844195026975932456427260287084407838023047513899046003617100486346030967623956820830367696164148383526957525208864706125440126827379414119870640106553991774563345031372584717340025484202639091279426451769284094166517527511699019142050116449893485618899701337300187730450845305856750267680421468188829569581136374688163359910822237016578304328647043378181361306382887373733222473903172700283344924545771372899925884939410710106087083489953385578221035068405841170571562414171509544025422253662325415346260366253468899312689793243369093792121345641840275408089632359498658860578866346986344421282829953284345615751422154626919455336456376140613683590769504651292278291616845195965346925198759647183396686176786789189900479416464762483051663010687060634468719292276248351695045786781758160655018377533691509563492788282495991433602729162024976462855248252797625165378897833381474515200105420633252306755695659581475339240771374484735741474926263553279918697905759852327160972179645440093934516173045012100199282369923897516563356769527842671935528649759794087997423093293160252704657242051425432896103673120328711788059921950689146238110093104202521226240885463753433241158990705451674367564655050024862570705425020924275324257089857633617817535274352986602960867312559776177902314294565546740017660992931065424987483694909508517778078955658341892712970394780060146978913856131401802495181262129572164249239752869807871379664244902298701037654269216552384574889872546057729020707970556054011583808387676720597946877939490237442361857402635978879785560657741525577616299641361226250903754814460459094063814422565826606395975661361807073994136940420349738347081796971806696627428537387942077881277212714163309273131273271183424964857607821287378642215391148088433626006324702806891629620308576945277021601226727094069290900661470824692466668410370792942073291203913631976329233483181901267848546788148313867578140835961276471799554432982467102159932549112527111465671461939955007880116471948363695260485318322123890190198380666739743694048161719977100303122259525287433317597053803548155297310924575575673050116622797789356387593713035250866167333866778182647170484672373761733801108797765677248523925584507361991799339771342701587021395968933334717822165807363387284833456833321940451075600891459578115590951518729484612113988550693522740768714457635371638975988989526654917585170476603375347278447602857527319731073992563199392283554669198695786613853192079687180326809624354803925701015332328349843872552824219334287962898044823210808071512022851517418323720031300406692953063741271006554333467459989620997605410724936506264189319714884617229736858621817604730002822461576145324195273633557801827099046324513656481525847405755940269475291226959466211843554460866559063409724730036469703164898190404480289668744235069354493002822020810643880691974317361729405788953799062755720408954596101351148680506302084054117526164878588692070619632673874348714571408819111440841305850119374145914970454830476256408129373454983557710135727501437891540472123919167424820978688617087496662012612860998327214094217709465571081019979124437669278686560014975782454057276451245215370417909139761587142674009088747273400665284374976480228993782279789113627955969767763177825534289845244551158089517739900220893644947530530540616256824812665191704679979507984078623543049944397312057088889536681942321080739346507113693072799822387413343810749250839672922635488393695799168988459904326210351828915705390712146873725987988708089357064393961165032008115712411171494669542776769093920341269030906912989229258668020918787005167600300934087325341758797412625198112490402665086806899623134880271830865013241687774108766013050730071844835963151283254730058615741109546038500743056178304676740613323566433216349049069318818197816609570518938462107557980509702794635424032666052996073478962561862664432184871154007610940525473840373130780009131550775296226248845125460485916918794178418284497128222090871245561086599448829898086069564459850871364508233183721535148640026654551478965834142932436908149035659990285806086795628817821264832942602243324638036701842382895670325166194513307092638648519490477931834637132109700159162840853035209309965854503518035448919536377240529226782236642396550639738240161560728487380867926314758765060382852552974348472005344036868773132506549778025500690837357645187503990584354466919622156992651014908562178319945900173378030974650147245286393803496365610166979808760224710781935520096562465536702836376892799700839818574495906119460314625840681287693582273108741494447665211289388975640728522505575365893705985343724461572458592694325780438966202711658072967074909087481412627775091809156694829571132979237595992303088332427473471668784673063084639629436094341288318946031363326450871002472195290790887105202015300618119810109485950713139150630599367553536052232200774469232524096596837274338911893157029821794309268870454094179093394443692154981113971323048737100899201031180647789642658012822618335319568969447950726592372081481854234224389075492999885140706208809388899038590668454185568872854578707711967003660334455125771103717268678891615336712113177145142577688273168907369420342819482737693703425659703223130447077969588086054686462437916788383993478731100345275198226648573664221618452564895818921575201153412565905450893986560981197286639829566526787915389945874586045554240887418888256811609202814681154994865289451849415202981623302733971009570098748123954305480115944781436722187333707282844368429274835363375444766805003020497370631167489358369037684250211013623251259509478150772797434483116305259626703365742057249265828860530031716729283240914055842272251048760691193474760473100419922027389488209593273202980060383466216818151870521417189100356177235903725489131890227242298261338724494628553891020176035158846905202665630224443007234827656627279519811848194535152021704543276024574756465151915399199307983994789982783756072379424237318578205266544893641265096154192965496356406606730211691098399299452027849226266307580901425426294497900276251396973523425191683419960961661757017830237432076927618504155889237400488422269937163320761638371148663968576610126403398414684626156452947368316900973891689830251255405972792259058101444084133942802664024849936418603545860330710140425312910441296721767360252301478469868531846753534873261665003694609015547125574628390231626416980557447375366127891059022695373344311316960452066936482982652619553289993251539466347942477628236787889868722763069048893174063991913423968054368672759644409446779330533427024262753991385231487615704422922058344158893852067892433350381343889368264288998533046531920137780213800362028710643934951159726201431296070491018149900002621924019961591693586593468273857394454285115055413029308914913891329094482847816712945378833667989543384203877904593837881836777637014624779075599011027817892534591797949527817950337267960113404818856825486895156637298040376041068739716878727732783381216107241285511963740300910675280539732557755747341974535674327580238780112273727363159149305752880066909746514590909101081471660959492919856950641407987929392644753608602186230303105628184113307312937950302905576742821242237820076214150966062037045733838569047849160643170587614064021153484744573364428690327853341884544928919860340260670417576245712837191640636498900934452547009845015291736827424790448525654064860016073485070463408770663448690363804688132932670579685798160938712035697796968658924805947183405418585803550278710110199954826682725157993445484577110731705809399133272979593728917067840813479884008708774604798384410109194045511283752703841964970546260534696396763682097371176581698069943340922796048122164465326968734030738401748468214899545024956654223350865649916505429999580711300060935311180358262831640340855801938324208767024897639566071737077223642649635209320275449022718572604147823335068465187635416663383756953447857465232031808942368627524475039871476420017224954211962717043328461263416630303210602377649843342920845038014541750459366090430313594591050786393959533640789034546731856825963298584718204478741017539201768132100622614612847861874895134316316992971507376024311071712842738597128116240523238357258293430464018980182961047255752001619514624059542530431751433733647842794314885145959073308708399113598109617315528924672207107662542255816499783139420874160665703206144493426302448425559371736265646576707707582543824315811923789579427419153790531688400747802479412683142879967683493339517690516148224854466086349815025866453822161514026853470830765309262523460379668507842246363487967686433344827697031191850761054869389381380174841987832466365184996883783317416178201849068735665498513130479764052083609412144495664500202011701782315712511176466888140128609059313488373494771587792205012197659117952619444788424314638173999879265915964506022524720208564417156116967152297108856043210184644667289599909209152093758893001949696321911194139924894747693570339681240140320840296594005181145798468631187007134884610182478595602781002663100703505477472290921673483826014659859555762309981521217836644767633433095358444248656506404730246731985963248027498686606971230012546962211337231026799498985189120039486641025240788950219409487598946017859526378005451700276072937071540142607549489785564364840822715720264114013143695238042957830099649553302867029781089763695044913507180903007130111790429178707020330366617063909856790158557966105194956986172326016369559226839586361554534810752929779464972588016448338258098104836574830392714401631193552447943161523190586590545518049001026957296643465806172460205955442437188117140876970498956671286653126137279826232083013975160407279688025459749173973033958937136379103306101726218974136045962299423519561112356778069339993890788552495903267170954323299642802873822414424587518750302372244017445733677625545333218240483385865872396791097898996540236719235914244962078200545276346968241297836468127924152432899311502555251588159971912063188647065617215548905200123488784236089050482790685770106469190127284289566197641420308171220428785917687970861255388078875432025874208979460682165696272134036319395628991133133380366387387749756817220971629910061101678832726194214615397116930260646405549081972260574399565468024899186850363770776400655875619855286208604322531844103936405217532343491548649703246103329894719603778250007949471943385206507178493645798460125387222622018501284663718537094597713447521300602541627704520672398404093215128329671920108079691952941193140578437647964959492945669384153718591820942444656480637428533834336107458846427617185651531587490682013041657984460519315460750137042393793683613420704829329919533052726121307051532898605340496934853428220392981146791753780002700132804141470779122935405779984523687270878820379271252376724112706139653200183734828015200805875695186457858957806531143956050161153540323227333289472971671951555543117998126019313276519095293965960294826869519780566354382235864289311289234599650815700919486821276188517117564919878285312448215866759086986959307534904777465042267668812200321225323586149065596763682252663514748231613528940314299442145671040074235255318192646117388718186902004021950735629063860440017907218685009336139962603012117681292325134218397851100146890867025811299615311786920941644935071076555503169359297912502200592127490332601951183511901693645052113167057494420387825498382074038447342658849279060377682806604712901732423839427408035703450443029859166517280220127782543453760585255433329439029195207042059059142358991521418565839350184815767023219716552758013894448843603920288521496599217330296257239428339959902404689012254705088496696871315825892589048154609423928470774588475667100328147862333852370913841114524588024778511712084025777526744163514896308230967314089411984988805720968844533458905115355532470533947210637524218329781206519050232599152803410477135865979918695123322224894964158172568644219049878071877191742953453295669152302623407731132111401087184628104654269470173769527126381547069383835075932953876193537050983907622602831327149357839736218721992832134064771524662807693301872057446073877941561160082650467326806662328644614493234499165512521142813025524792973925478086897766716154100146711589528861746969007686663734606142138728784665471273469200459348938087683216501724021221458684922866015790243355616601002723589194529143002731289411796927340002137612920685844206771419002184097927243797578894554694000167631082716118377445957505063402876435692268024882012930536141479433188109396658750387326474214614735265816980079775509937752945152569636956544798707889358229605590065409952283702468535813553522340603653330415142866045344432244633531924159808883337332786736489532532678160907316293384030543199102717939327210946770464766295132519559419478928387880720843684834768495603116681847610326308972618778295778923817062994589822537299323179009233883571929870135585131418122939855171154457336492156613160657335991655681167452758296879155322508499261206810392030433748127038654434594320698987399389994283009167179809941593585874261305909578559867064063414372203747107650930101618291741294500952726031924482419472301438292507287783301022261838591394031574868102084982250197963099350610897310268084565777744335957078067547695103188096810628607677198617525752447057536363111912066476376798726438173903719348687094929330557901214445122167816690937187553096603074979407675617493380499012253717383089677075604318767478112485005835602723400455916803712590402265443957029141259444126761413299104771681773802555748727355418590613552040977890936760129778640424920330463897885528908467975160638790472320756862604931739831658900611307232531178893978207946830531862210784027891771879297510422376031122302973594914778415946548228452687119414436316262183777122146611362027010498197324395641775245500427036559670558299939114953148742750706242685545409704819891037606316910032879950874731835859633750372350628132213307391133977711649900557517221497292153696473653078531940072065656109745132179979211353438138619560697457594778415162608568566313696341403406789259176646377488795954845096288743891637403728426139032822089658077389493326037354383266477827352147278430574547412098376334692084474770598851421045903873195629959190719951272368332067915277496146463067522100905041667866756260597231133086360111740942703544044024376476465300731676678796833221175236726653237167356606502695186253672083709047404279716029492154163889504026877267326273519301799256950184172852262492061804504509527493733183249977884990610395526894602723805460242857647035919264669997360920822979264316803428298280708077362970557337779470575632111872083420752073114827230649503496374282990400456822475381641973460010530002036478176992822697534006370926361721733329341876426012419657805382524239791921068588568424342127835436116371578863072563210061498021838291808694757931174938375607378775914355110463698372990805733929727830578891757497549739357945769738312791820991834514555500278714624906736950221819551366268935284965373956989451686485052980920857829362211421267169817758389714951072663075779083756591867635460228285341137463823715639042854057664197413838038245168509280064551769019434203468170690316480576180906694285063077956573921046014710526050359075163013181378901952048040444075693278154469509102023081782039710427159827379045943800295169736709827298767168089439989892686781583312658175182462208521818783399512701371700881605102452807556466904872385415866769445072871197002844916560945443956442262142899475607880413757012843882786094200256400240024993740532337174183475248272941492396729087863861026837869845414288289817524625244012140063527232977497867057885312522753119345580469459133340217078275903024838229015365896319364844224115155766484294180474736755003976417752758862146475197576936303529649524592951977757878280582592787008937024232082984333303633149114129137941301100330158389358763803080358979095180092603278763108036199566719467332252678116503144991189820194866168952292573406064860137659531836158882474166473648686104510965579671240025809237332074563801495404657090368956641211376528921612510912464399571719647696066832340018329338361066613965053369596069491992767533529061897240930568750504618251629560916455512613491959129468558841116039329704031040080655587343611034100990048075057368599954651470213185388720210030383555091213916646960428563052300109157073450026819119151437392173389876098192223523577958045184107049541331091819821905346516239429073640263176201381121991292026538181818594066085089281533573285857149230394103750749034668350779556770153448303822211605212106623480225859083082427244385223955885677705390569739754359463184939357767716846143680404458991233130834375979519390522756162834008167763422312120871144420443207136754657760131866117493842769134427777080824311167465933029737646064687519856276074048157137760082527548135440747082075579225453927191165061736984743099875690413536955010786077705969248395993665610907127534440696861885138309708103283811046261754887953372268847186637333380481736382226482077666582243712677685043088285282807469451525013927891552175779652142945771117438415088467219851289104295769286191891078234552623083672269270820207561196216682940183013442202301932721913682084016322999572113885385673259011331948884736567575805609330586091280802946494477886056572632732013294461272284890267106928095549824734417947982330351234443197035665536675193909714734046428576629494512741674287496813149067841919157078552009421712204474702551697754279146473902139937016761793868412267597348141585634098651918616149372291879747420816804038710069300664241550542201887584466427927396725305677626313843541918471933941962453344113545873368171116672344940271402087452605090019623962911241387073251988453409621458116021271664874390636985167625495214800075780609461588684791158779629270852113490430074459934323279353963354523160012781024719851460176506211972247770937714725920086708023629485074826605234573667885615006455235063803165320620458975468454056075006087176987342331867011726823244016151872411093519890060526737775988152979868114035864620188404120945754495734087000885342710049342554823471980385760521168833980276852142242968949465174217087099864487808044022897775659540224347445698498149928420587872132661246832047579663391782187663585374724921290630953414475843058167795379196278589375863898726806798479449607442351296107313789045588754734016737691099764791181835274353325344131396146898712134035379649755661249471993144514774841081929692329072205975827026530110722563687121689347976876256751465274080629290795275474369255444407956147119472934505288708717151504366113518875850493249165862298465035492015041521508423818524274071615147822770514741682910982310596159144989272904831386646136344992712713026012142153313663925919556137617323341507351400491684605163564932578407916484122375504738455177335428751504004043613979362536988643635159301438452881984863588091577225264047598144394960704478660440026073464233507800111005135745208936183009048295626785190399244602324467939132492115488296390321918768845612274330357866584042276982943465691971666858627734287520262210364383069235824307942489693866137966059699693657845352451846680648631722403690395022827935537046390396510096172741243683275228204719055889382135536921704860713291056096342665485832694290205436311993747225525805712881692502890750743140789441206026092158157664020664929095453959872282190975682962404169179577372752846812863001646329794901431929332716687362665772739292951473228734876383588187862553193519482521364607608070514273915312643017864628792066775764503786702123259164155413066928718565410427375001157789413026265935994406776687957486841602692811971041728991431104638574436433028186032060784042831188260416389725129592906976191455001000697280862195174902657530976609373343416966766162148618565824846955312192352126070010382266410261777648906499243677512926113748650433934050354370730575140503147574309617508749300199222409586572751552543797435833499160091398061063431072289228600802662147951405635179333519453737265225643359046675317282082206398464648808435007275493195766636973735488437383048197732213241208613951384492369257221799279182929018323511452043785605775674683499231170662313174745746680217912664221590688883598317563061086880435964286472687754006466829397390024336553422316066338463063316875884863783610880422757779301383229000369113379438124692700406680285490001910695535238808506973923544963457295709772996186562557929589187944002360974534750087530112295394463615768495309877443391908325582526965549451423386991967564504725142631008256372516161978952302828132400656788671045143459764396690493906683518851430315483808006340380707003318741002774482891809257202202623177434389442597677101794198955373313417714465986527643688244394325375787262923321099821507889851374884729754761765418431472196903079346564300233875650910543583041037997581640923669011961504540895568520184848971078711506029363881765656180985776220477494703510792636518307869590575186269348206124688627470655420594237523076601202165579198759330005388720130181261229994184759177696219601556695895460910306075327320362011514207234143909283295310748083104014781150813150974704418175187523190486971984933931962860603922471537875294440666994937402806307402025844475214085206076075193283976732778824169359472958866395656876060131517888953496948436944833904128274940757950642843086579598918304575601346670251740962749492557390840076769843558972971700132321879683428720343707545126135455766637522130156401766254446013956329301059055430058388430263899308478794034049101998846797742263114340622385742602368730549825141161550501810458642239619881388633953141612259134695847254605093705201352425406328567872589613852961250657639151994229615551867198695521370516186977983488355991510694367915213232070523628380123427156726410186509567774190492649472800672017078810245762196489852443861209051842008071592044786943633561638642586530010501220646427026506626352375561996646273579918210610998830474559795688072217379390867712873499902854451233672551080922207025720060286732534136488461532573884380865121473636328504933635094120716023817243843335509978584703855251899954858780370411051038707035393742834724244087634901965774898584620333159404263770319676247423374804378102931551369881968300239473074516078195001155927573592493138425585808991389858894576793520494987019997863471308813883027955365072723910831070460461474694000249838386471721329319426876098234979657137195665455307564981773911763889950146637262737048735112429912624599916330279668472439607999762654019660992145910318649830695973687394774076779728784226833774482733956678987424106571270630561377410335001997109338831359054381133614015646628791724078262472679549921413934496299545140164807265614794536381821253626056985815218747545608984325967039008934965060262362490885124068439802793672465050101600809744201914591044794502820386752996749750687920217770792593801704277580811603028328569871331465502926891178775777110298901728267501823340202981333360026377365322035642963829777725295252512283422096809081074543810246853603404444285336825472530433171625127693946923408246371888706284442091752230665934912896990176749088189531571462424906219681231030194459759520380592052177730539727782334332364589225588585453765370249305904557975941118862820968491473762434885969527518997249104770555548697002723137487085245679566161248297317712120636105555411345825152150502728797622536936598969768676662291760872941005235361364059426753535691615774372377865694172156496414413575432187312357402050547980697580967284389627904045968600318945195695273845142498081912623681531107924697173106152899430318866952164256376361568828700661463345680188400583868565553134451780008854483064087657930932437307524261090429086360740962562234891139908073520986883382105939335318543799638383381529936213752577025464724742648752765636321850364453596938693035635362525442385230578861558064671486197098388551585643465032461531400502267235227004426267475055189634771588951745934838321389927570877653646447554465234892345720904267952265956415685432203592403713417817556040019563646702083049584775437063247489101689685574063455185562924213477814318204540559978883391850984515849410033223799985378766494638379850604111307339565932170475663470663435308149481485767518747996127719662960993103828600238778583185447273642035585612209608927474984950687744421038532938162436248150894280577385121687354839462418782386152756267550443057036037009065730584512133589073955871625713638959110235813743430283524138535821011988184399091607239905606114870140323300924416529044780481820550851157618187627881492551581977872268918300024114247065778127711829143864280105890754049781981216640246203673075466115293167344139717303132597569404251678888581107431473404451708710597693905544750808071828845369515733518623263346501860796062906606154608306568394070001361703272012630124322729842580644142591264666839740628151902274773792386354478404386961853892250917321692775954819783875911398390321441632917349107365458470422577372742082481947012756571924868444550100752120300061286131882649168285828454223686617391297409532146547471862391233066654813923929637739317829604980550100012809786064435063356001409170798004251933666058132947584303955095186329369282803684135877688080092226623889303626172591597721178576160512900868181292243345038573557530882218943445106162934961365250584832196331459867013971407711102766617309342765896968427989685428208222352802518178330978269893511730420964028002461048137900583795263800882452788861706133668092444686153722937517571955085252224201566333809589863348301776745459257345904487175017304638893592572339918882128080686971438970425058409933151272147718258851374414578334096004487733838349598119953224214592864095170637126954370778070228021512705795011311484279432324444312903682223980490000752087978289855450745060888009441862802399738878602317329527513991076496240983329573055332773931728776657080571783069071503948838582451807620305315526773728851652159138998773343401796805612372086194509506150925271701904896129980183781455925888814250255633264322526084200250083072704606364384757774407232297530447255146293725556134224644058979265735410314528840402851239111850618949578755158393283053963374980495254505527969898398045558391106827964075165834429400852411612832729018592287471535466918436941378204333526174000044855500756822519373660792235380530586064977202498122690721078990673745340911836539108340547178082441072118232354825311710706831060775463975127292167253812463038276008793756311869966101497587089193862554718395241014952567153545060657135183396782856051611070974729015960805498198583350381458430813659550686513979077632500624479193487494903938176993027735875256124640987106729407934048484668122204388177941097844451804794978684998307458084367438133887616222204001639371020942648420221203676624479271602793486221238299793185888983684253191000644166131812248939722434789013072889199839424866796428623785532017070894236735279655286929740529061882843778344096385737003354897924948085047988177455337602055103589017255407313833872992805833612228331996205557036870047635666259980354839616354569623066817896979950428413801335048608206206802109858238839089756080727056084371085498552491647331818093585352272343646939817940383156322058929258209993172207725525668442217033425125399687641388619853454600095288719437588563337387382184587989263335507846402806117223785825151685715038959569778948407323222599273763567955921855008392672666041732833106835220364894114243480855561481797888589199495544216433694651397524020430593451187347881349660968577096762648117315195426946377931075056391006033289315161827451495553234296126315048679096475250465871143126227229345432694191467258354969410439410208771783687643134162614717937076525077984598947617097290606344509967881676972277758470644107410313174025891132725158374459442911117017238343463675028710984226166000415034170863472404829574143187220673922351479578814221400393900445684967780352546694197243279945094483805989426173314123889893384187147251283667986918213864432753513004056442825797801069017023929385108774973387827111008611897279918776409275285212241761321415438213249560824045096973208116479316401261732077833248190245986390178199560160579307221266913801412219688703600333987973677767130589705727824947210390632873275407251769035963303851568731207998888948384449348497445081572465655394143950761409146092730717335908959787105451852806486626212544117983049100597186719721730858196415855021137091741680276296341815701926419124409499899577223080549890942491785777089542909910926998057880107931750831464442949238348224843779676269256265148281193715415165815124777801606307321061761442216758939181190358898433313039681136015531709055012850670179513671046716233858575680535379671767948727334414129353248214670982481319841372810504323177245290920437026091877186497969563742285023691057675738892100160034986304073872746043762389035526242711027145597099156393466365038791299515229154508647353972166916435005032952639175897742151053965446362424339365172609774447007350514086650922117379665998868515341891579956873189953682059877429993448438721939383152294074148890455836572184715899245047610232111439358742227625007538740724896912076308445567574108526932468969701752394278037058297218645474183737204761847489686519955992373455668925316381407719464059139411209069752987122699892638654906257124185365572923231532923444020482505711820855598840962111898564984783029195596944357178759272633699821736015585471582328903406806997625808910264019190886482256858861700686785297521433508074765623772974522394386471880498906510091134494177926916246828807267660231481369152050894483332120824912264753229979506722167586047590600717410795333086891845684933109760132075814008726278972655086729674799910168934777208481153580028884632696807911461307468268253998344905492117978041485075913696527004629308950850428217970472183084363133855910558074784999780497143708563899206138602735583018795813751405989294138796464944853495669479679713735586494154230339175397944671315737792428682769435432345840546562717671543924429204912326845325893945705554470042938829290298687889735859682176484543882287063258169130522073643582052966689261468697428343243491871098727019918959294469765117812775830053574463790227301923726851858809404171365954998028201032763348789438480324174735893825768825420188960985594369578435433699115080959666442896510220354065785819440313323116602139352512376954005930864675833216651110431804109675381231517568545193334217789363966610890480956114938185651177128141521978252281624890769156011001690103095022162694163089787576235325594825688604389788746617240746552045762180661374132655513972879614137713389689451444171576995383268859895305484523308825634480299282277012373708377281549870908104688817755862364197021691158070214842809677151019674252474830039044834626694184555183799278505864498289960751429400981207390097980835512179622966338176912651438530190537566617334335104662414749749586519274353483509497098707804893773523206734490595322028236942508602704933170325071606054461391556708984051728191178748607536787501841372988371791571177332671947448111810055142606416197759039686898269302538984597075375638445776216071528363662299436940741055993828998260706272261434024061163014384622678235956888950446910079566216822617667715669139159255118575568166266904920067311564396831035733839566786334952459311869453758940774059391070356909943047321351017403727410977930424049302255516570715886871639256081785399928396285013006868589545702416650344052863510264103852623174082588836580036594782244315320630610600791245012061833390119330696657326413748224467350817330974963799697611484512268574599816135782477457838174625896407335715245694441261810835426284452326535669644445519214542944274242247212860766950102896963021813011747382317569414711694826702047768678116604951667939552688265927484697736963554021401363473008328707968718785307136374165480731017990012671691184433451530995969146410909235930661614538745767393875735779380834409979954584309681579651238541604218632925762652525740859164888295568681901046499762079540252734683373228452603259145543453852907455182835404672641917525274690204190102193993936687069473597002963892771264953064447902546162414907420542744330628217036819980133077647982251923293283834939424447614717652132304189462428419176379751543437717222944726866182546330552341910067052758621173714911433087304997434493088997451485583348622401976111855795615099147682168066238797691186267242537365868700719320662702748629048349936981417134176876996354058004889180232604110100516934300763186723343695891256695009954902871394802428555059028442496824646507982885238098082425087297056006370735362074544107250674704863479390113828725453308123126649479732732706152558711342414008693934637929175114797360582502707361064381193001400122514709995962264404418343192199337793580890346777922401880985837296186924324027294049962345308121294367924563924501273656903068032428000907934953317690799499049319447070179787590051653006137910927226476743421475624055114584247081015179936417231738020718703466470511469363364259612607341328384666780069502167372845556371346796527182415912643684428437314903307399855888463708351099549111518489508991270736588310669957748615824438490982541911982830340632956575264860316897191108626344243255953329485718284964352490978341370405855248175718547227414111636402486667556336605563963100214998967620846920697051984635142773823087378857568199899741066666266087871821235268094409298544027459860174562752809554700641948561608486578031821686557468267337165714077956092576742865592680348677266509797099676737953971215379690649814190698542061753548786885656177968388134164632025313160348798832658097973858068850057915435765867856335568733409767744786524036472920644592758775231740692271227552076256848266381671166110675515138008133915074087972595280874261460620468158619833936396366099416073378932408321667582839492409791161746679307260442391993516989132976054381087525754271907877540409201762820784827416061467112549087556956577593260746381343791728677396842259134329897608926737479027008062444446488887960131770453039029955412526478867201503628892613021435610680647237761032716736670143967279834503178664003182707806393446625814048749249647424754537301062585778016523519024638746950997064662241822045428754470288795591141752589432722045696186293469937273415435079847991570252634046207623170387012217361757818241259455493776177909797196422353858849053342919983087192160612538786350717012668110016336949950140881343956886391633416824528183069150106011064571874830782274374192945437301992463505754588534154772845328840385368366028693656276018420454756914032861815244688934021233486659822606803669088366041597550631575352024579968966854340578565863274352306877326814101128250621964625147997470081410393970911571505370514826105952574561901695874092632448351538028244292748771391824234055625062571433566697234547730995463684496111386283873667162696954100945001486058717990859542257061303175831157068574602961239666625551626524843616529111415054559363337795530326917388397388617373509743769169582861686250194500191657788686321505882257411394190194911398611866935533178038888974839443295541615553686030537278144905056037132273466260683860645670950105738168513032067562093958509061541385334208538764694763401857328434733070072632838248705704249222973406476449667496830740291576906012079119146951847111532862853022783634295160605232673329083758392955996824528165716842891247215557602434289251517005574855290628734521198609223586002052691337050673957138440039770814587323298446435221528202245270254641903099866473110106446176307812615258203612735199382080232229451784612110452530906470737795522260382213708619231702689634505416186312788788658123338428642032312553986791146301216679514131147882759504344581340547008509932268648424781203967920863917436543264608966789078688621134500672260914829521287055866640339750184249767589798071735156043194335446087523739427753807245850091926707234284571624792262510055755329430006768391795573975568370138948642508725355441206211830884280896833700962153613157572472772237451385136970325732096799298056974338700622176131605362759873274903600119710646195420799302976737669609175096740042971525790542730253398059642844320932429849822361153353574301275954732530273208772617916063454355755982748373513313875917891892188843046089991758544999191030100126342616968001382974900550397300758479516665585841368484934742618053455155557530256297985452585375802832493121787805319992517758970691282292758012763595698870365254405681035218204465381477984250513552527579290102642790024520032361775064161017878220273690324507264330910844351350581844217060925145087083936674094947847043555719561436014166401090788544880040258572434303049829256387281377630196430514517795390837107501388541981207143110443065076858776891761616650178159015715567676020040775547773368773356742613585620697042795036100018632719803736593436027295348654920736268135836188808336721690693348934038576010787547241272626000739096330298984816741003695170443129750880857367788206833090509327905597154470300286056000105537708651400182360237989393627911277580422666572489833312301414414599579888487398555639047751233583821896013241845362108113415840556944922188075159562980503392095430618946181484876442835097128932796584678834922065122329186318753928932931926295457860055865948797280093061350223794244273693423978132744451663524967385377790802146126075717767949433405895811634388707641308888438193099457313824408237601271727716222649244387613836418299491021753794498571411237517424965462152248838980875926095213611905380506568201235705747373115262877690879376771609554806502629567951579523421679383589236486103791428550330945063106605922101947004361547358429378466864394947362430593463035966655994646227332744938390101905536461394047337499247190231361690477246294962285460286778547352657381505512070815632093646252653065187166915160927140135004992215882031160128937059948319896736221862504795994526282899259976362325566449544717262767130012707508686564765083335041592809889429768616183590712548311202295344257415104285220748638462675546478148741859097431511182859487829254138296282231738690244538865906688638024994594491174908144412231263888007398714691156247047696811354052476101504362673707629820144813234635429516045514709725413399986547955077669807772950873323903484673164599103648215848194565413016776076251270457696172178454632930649482298480076578244777186127166523182352938721408786935948887692095286999817691075498484242252996787613014668444520271013181503360087704937127256235950679266150445566637131726886137142262970829914818300119307775988025864442671216480061075836496438392847319811006133744065415069051789341885056563133068892762485465048063260496315751096072578382956724134770391850150914078693647142068801518426472610748874570423962815638415585888236864605458717784059500124760100477629908464761350965365356097044387041694906472868970970897418171811670653737291342922838289073084339714730436068427339433259675544810385498913642871055082281739585695603301979191281776126479860086092587324701340342767774692356776979125454473880015175113146389125581164377192716096343550340964022177455511117999251680879383005832565863256999220486660917277408614287213345246996786150010988355119054573103246907933157715085656372583077441941379499359131175347521574081388877251835410369651351320583834034975741790908514105296438610463990510388519176312061050578682464078132571252562697316366020566058097210233183437955539982999957612233940828645473413515671332925926665433791437283562593961150741775559268863279348005510907398041294023875397610685342469557020275686247451067391324566952566256786873929651256238622505558682754549451866828608141480564684153138815304814529394163576487091570488287938878767250913080946481932114916416895771963074844849797971796624344377647047258098942512919797632471956037274734736856114996582145506023981520879915179609397499406471875814045300477932801217719215739299895402138238853505074803929573334044699601951718564372475107415147492673752672368249751079939412322685172309326987731880634567911734059392819248050877621537227287805456503631030515242669864287535459488184761765243082644066396616827243038725107991224202950963190182838249506573718283552610032421105029613024525503102078496430398923439907491134623028180312525551361458270047380237608057955936640549265110333511530000275662912892060993467742087787943309953259724201214803770782048839646414473602925075768847981809900507386315671834718025924546260014025738176654732011502121559763742455588986961598312525404946422255821516401007888222718811625834512489339947525646634693929631622373925794556031476891235630753252185402760407090330124789216088681846798302175941818827133617409917735839304922623912308269718038852940880851347297491410042056435462765767894711305398822719709029617945221474177304807358435548209341410920011900151759118734313647572852751600316341445797961873134177970031292899908225787097160081394583424609514918860375530122313609695350895908379770802319053936117248320453877507748270469601184850263294479307968839474952112963220839805085650913890018860346422185442019761032533730713613540160128142996101286878048603214289562824977923331134662906363430885049185234010825711637298246259649163426556808103666262153688889630851366402121860228014225162791372804796873752124885540058003687542288210175049621844873294854451234861837309521367337480771470153976207685383456351456875798488153396081450894049066610396653662769420073622098659977799199451315251202129677350435553596086655093360019842990083833387936416633241532041336436031041490965248840708816463018609492168281073500807019293809991260688298018911252382251376593491319147236205983568303232577654216695365648283464799868980019376424292153646573043806408851189209017522432175368426252381621253728190281477096550823907102408809232633027334354928482411485667603756522963045470119633358119759480498177511256235344317837399872991648698744710584471055796122331532609377441701498842419254034101014269565158250084507362697021489006295251001447414175074440378936925321796190166620673981335391477646906623120284838968876395862520055087414386639036962365985166190092225349518875537586791627979622811965974465331400793335898810811137394486100660740107173581781186894635416086344550258765392855039790044653715901651671432246853630259257434856073891306059784860831980213605005561623997429037970133579841224355479810400088924944113817160267531899562053419292497086875228970518320059444999040003799470765690824356927188736981831956788612356984368975298917856620358239498204450816166613693481330549323864134659718305216640666032144281562544627592448863512290124336064861143335281221360830831440813891853355522857117365807402751084471084025727694052700081774667115697495897867560308326047202125655227003879204667724701709746340031006852815966742310424137801736823718591797722594469825231277867747845399344195064479687410203325578021820939952921485598906215141095866844105577705842204139763863768613239463439898061944840025766949117168886308802161989587313358765657119220913060158433668149288634590631597059742402353059816145662397610789895449522810699753850547001722190193520142372920343798648156529362339945957021068719517800197440072385238997107930331939744029459106879373339984180348528318261945436272457515703486839429792857702049829523588234486559982381734279302160644075032797400293442009917109439658907229917799860649107502991391503151641955459184692555400832633363862389312388739357821248512174226360634459846487502698419668630120219494586595253818085658015897587407116331344562045930988283498931901963256196328163653574902014893341798488734503456372940946871431601867857006280781497100220212727681042767395886326621759835611254989663001622233150336103083803690995215292692946702490395307032105170538634103014149648777261643020492006728076787659522491378185800370481025715642635988603167297609017245533311481737819423410339106585968818416340418807634566311552820663365219303925691426249483512348525556610812895851369687040921922124542466669188337025589998441815752687823635895486132499473045153384474339641578510319775540179991799085042880027462196069611537614719811553777350185961604365847489839810252118201665978860191273398362185963956343310633535202129761466796099820928749200116699840051739262589850571553913624638425293277818989865246779948294775119305632494824088962773782066072685669517368233682398889343026778348764453894613104830784517601831668569907024891147081491381035290526928251434641797097257227227157993228686731409338483478011935673082363952629384882298989467645831153065766317444447835977940976705455319051320370756797224837425686558662252955780065588698397877195998187412897220396935226429098486590448402772435859641166314713008163750000435048018012231716669833546873024317076368063334209664731691924121000692077020869884967090106511311097562542860004698769019954772903749412613765442145698358927457729439531006206400373269068436736211394443799872874206694400558368173495326352144824564380610350078245623703846547665400039837550377527823274353747648919915244249979629061313327072377584657427745619624963155330579373215456586323927554737291172517734875278987876116986387388121598465956711386447379007554263433459370590527963456107070626468353423042077732815636503969308005406177484530824719786419448443264393121899833313582676547606202690485245324095859123422001668216117244982543042939200259532740758814373777379476180434764667186882598027537809883342405274997395207050728288828564058658405895208349779469519754463415928360459052971619673359825896743887310425119454068201212612296854649589292618069825599865163722071521856694374074074045432319423003078860278300948906634914222495358690364822391298831258611872644549681880764951770296135293577232140731720422316730316863774546459037723493758436277958574445754338709238682976738939245300403659870536278163100060884741728605307822816237473718763285843691306480309562415717355552404905662443392809174762973922348718875417035592337499335678166267930706466666961441086728089656573066705568886697987965105116167576101964300153412381149519547805930603393206041104053238485270014511651157732647097694762703364908254846112088716559499113585534802973464817403726589436877803107655144768430554221146488878368037563852629054602702721768595822475058991799874264629926878219987650923002167859418005639312880959315881528017785711805060081715858299442930680190257475091240731071805746792662643210144917190745470790463118083879331844455519130325703105108089134501475258555603956253401045402278774762315585354473992813756705819764208918223516611013044504426746437753967031725552014730074514723022956518572340167084381347448167043629141961492386198991676312997776853577388792638679121930976812334448202906841491492231277278038386131375376010663258603169394806520534392006527788942034510430690156875384565577594710186750772721113781178875205810109979190356869799972179738229999202594858236950278454936257357914993661433835412290178359319292685044064241364195967850652466445836639332587148500666691742685440139391296354644850585041441714428402862664937646537557041163189179939807340122472229876334437873873397179681994108398693322734191438791220852593214907043067910062014539851118904560823602879500908274589329951431317327343724615639451176069639940592878360849723668420798014160267202411574366592530075166535999366954555429472723324185042577830317826257244773575639541642174479109767020557805802262076207067360525455738095677292359413646272656206114096591749941125752904387930369331129854164198764632955564571109233289631110189423934926746922237857938970911575087972173336431141327166849330032581619841796265342274788055116960581149870644503330560167380457776288132736572951463025152781815358453503562778349405347538862770469437124837218698465627600900098396468173682402184056147964926205028598763661772179467062654661074338930756252701929568566508968451091715115366611313180132170426690315733299178170156781015156678387293989723858778529948873765679015855920917579229597627575839757683543168707835941748910955954397503529939149691003687052179857201304801782460922953775150478589456881242734291138886243759810335474871201039539736863993804489338651449691556974857104378562509977205340811968369501287101666801292722505380025975649755459859732151819697113211314573735787247567298303390411078705310499281468981972317390486135329688227076267396416120030252911514634692069227207791401724161209435854883734560005250601590681594350310765002229569348727361523302621512968166746281044432475524354015711509709883397161781132969544799741725675943037618800590959138935851492079588038877779048111434166561624232178440065229116710669086595396148241642191742706291929494263497760611416336899586524452268043011531362064030714153932093809429499617571194928705744788805597308265770229571990347687302814833201833499532369918090999220478992779342236803363059097855416078911806555499724910461606543889924411067820081681972796134257421308826327077135190812930596114779654812001751424621781467959763221426623227025902979778382824141770709027182159274328596049237563612899737143775947408861512538820945045096485595288376152029525442855312650229878960284129568130626561443222637331392426721473996301725456451367540274346192234648157731261911827320325981089903560004988360041711228928404256432831137734931392629120883262273463264337665191864315897139842593905576947372825346082350570915346289334918516943693800326844830278325472674259466274066432679386174819916066777678259625430460226865030572818288318918749561206609189987934351507031071505977844690170100078560280580906432590360684400813955528205444537433811279418745563034970738234591153954236590128770861442886127768222151818185177515618928655915085177044767825846119274674666931890119367452411239227752327181372839734326081048252186872470877621551195891383644461132879362589769062729580700546913190407354830136253667367902196394334416601900897185933358869152393887722240408410532335984697714652836115343500222470406913923847132287246368922493257045391782496597606833589954512477399569579798290475724275407614142471052952734376131192685895381262664346946224251823865994432556016919090393602845937831286976688836556898627244526504045856390027221563900974166444458885403669162132574758103918528392079684680102045460562267904495463279659022322277604837676305836390956532029951444565251920106748355123602916037599972761509153048823236060271372054625493274555909454605139222667534963892894924558239472120855646700387032922329299031029784165929465433476521654412707400096940895536539532188230634219794889108760373019730120694706132069441418048558898292972769178205757799251276570435918580682442954225468888964484763867090859435222877788335963413889865790039907433912451312126596658285029912402312623254499361897662828224196174500981490360079560898453935154322774169921628806050718726562661594915157598286604208410541614577679902968362343118644085338121015486046347988514899973128177250207918471782267074985196187323808932594578396063328452069950110452415961387781742607186525097074260254698051565290301277523133796259201253800344995277061045845455972694008342769994684201168428950449481301572976302415746241185716799258361947574470501008368710311388326762264624447193545040984415220627473368620302480686777198895323856006066028591628868231107597442791841438837501317914446780534609950259465164828837848445385100210406882129323555130633058866480326252429896136319490896637281418584035325661034536334761360781347635667559338670485845109974989094033364647210259966604018725553597139926493653415739095595218174244061139254915934750432769181520592409983303760751723200853037050424695619085240759503887135949521321755524192512513779236052875375079530666070785616078182845206915426747061971776196841935843917826003897330206924965269809983089866939453850506401449556684783464042094604038727707417334684732415226734693059196710866315890213517238028022051688602355767655046817794406675372592207832765480015135758945089963288003149685541685544542706085260954701137577396368022674711918708664771349971108862807276426315063174716366616965788365299535789706856459195892870975475219220177807152000734961536242350326400672077480824188060125471127583866832454328247133514077822207199444725715636725484509441770233812134367689862833174378432862095805198432684054036411875300647178284222343871195771419768314689805705216125700666702893097882424296595342641258523585410498997731595122297675164399120796867100361707960991124998601695688653838538070211620161050768910086277326930215556278284104420431927347599963194191766579005197029188113278971559744541616293640532326630036320761382952027395989521459554918156020266234840902349462345967400530143048544664868586770357908486451050558394146781254719026323208905270394389961054248737318162348925706234743575760805445218087479359176802229601348509486874634424910289655358413356691076832734319733828073786165594283481432041449883043241648103434170211949357232856985563297013170409051009939987626219802067596187256190504547726508395934679448059922864995458033219881067215934833666433443345852795857191131570280422656780066287522798409434212318869652623740403406124004010279785002762750430479858698095617706615852794132112120574697409597938694330284814156117708649849771323292111517828491233055572669209333201969168844407559153677874118655856487625195055316838991787264418214370549978223236957140291805206168382964897701243899671596926450954748701693492915033786296094360684800171459260573211594872388386101255993713067347130239418505823086285114305586420643170335916674792441197609951628242882059985461734708587345187189633886218223637846474065851060920930421478482846835191154939735913645475503400189338852391777167327548286203517537943489766053391651248643036541919210179559859016774474497150112226213504997350004745033016651798723146912896430930797906273025528172900260384549364737909954222319337101961219484099734525268201001273093185748804881989449980793028638186369977566315749406203495449240007569628738553636254057734414341934929213594971659465353633078893081007410425124738320628196735913187034011114853728363906533648253299932742495548937967059429556579332611650786514063685278290173203869754175446514907710868294366729674903832483180414134282768745681533072022197736697379140738463759524064703032764886147997599532232860798763746139606510241620468491868427904581599908567234391065102234531211420432353385865194631143711550823664860965512783228530013347004564681050329687939832229093854051685153063065300037897858153319378579005411486069930529673143889935422816282096249918569063920228409421493763976334141460890700076741379864540801062096959682139667617499920029786275727077379149818809703063143746464009297093677116737996695859535512560895914549750048083927930397704776641625945479007077626090092031064958600625544023213502951388735238178453265680289363434482638528337400709952129123431789978084527178234855787067986537007834767565709161887326933534475210129677413737358233916581339959597501751109642010004907454551832529664188550527577076994547176179718572541065321914215336127623930737894707876023650043611932404457075878374248889835813464236933453437130764567023805282325499599302713644111810081969982975690226230990797904534264577688691662892727609200450289632384995193042554811615612781869807914272559861508753164168839846332116134325055523127551803860447258399941193526912769538459605094810432917973421715328074810107869945400381401202736136068854927674641152666712131317526197356680465389128364883993745755260606811643850744641333678418826452648435481337459800673851565152900980879339748196099427239798222166706860679797010420323558230793555060736897122293073643327592895053767030316631624856335315417317898359941153095872056367768058231757059320363335966651583555290559089334680976979321565636604717503283710734825256404754948098138460515070574580407499141157510252742620067212173372596144313064570248671986141078808369024381768588861345745004109570273778020284657003913484448411088347358445280926188749624521185442915967995097099064309045365863830361366523801768673677726915537058910731102212698753372339064449421449158163004539917214824125477450275667642326381023117567696222884116766182417568668036805524420849214993756651767053701356690418737725705105732897332487409745150088278495852164844883870976394660670385839689933762768162418099218342206649532616528457132968052563768678051408843698839995858697388556949545521317360537429748083051626462620641661743526211829822960497335548891041784624125970779146021499382775408644108134671335397726157473913942064398674491944646592297818576854901064151660773045111766111170767199860252060940898502335050960598761145157649310759140557460843719411345097434009929307736658164456428928510973868976687691370945632170973612433232403746499516753774876508001050940293876821678203814592943594849079099288487117948171665688342175878814723265148643407207724328152348626089100780851466089781077319529416278470267253952453728083777916511657131447034654351528817612137445359123792603330591601319169465233561696484841002280245379012235413673999248992777880611147530594623788150944709640649221124016103909269621770928343482330512601528946702389820781187253315228005870427074365472127895220739894175488647971578220660268213244588864608041054804301364219219702317280563350929390660325714522068452315918460906538304550773966102001432381443548059730574026244561090034866306467025292145593426204139996212872164680817842819645316370965820679281773748313744903422669191655598286346858873733672298392539940054541103530164620575975195138571125797031381466634270594701678536310889282947438050750853823541080408682223380173480693310460169550992039147691710270151737287556798681322691958482877813739390771507550030027009085515052933535546288151452551544218319296293039370678424091010545317598677390823670317228178543156522940187909223207365468307365830276349621346308024855843026844045938791335921662502030369892204724581839425587477405099765687674717860305283458946191399706632760527544872020064588905089535576572390779553830440318147700183140235410584937201978117042231279537853269915046255986715907069508622673847651742749471351883596959703665834403480945980229068435378743334328223680397455082573228946116418620749239780379795525632504211388464136531790806300682406245061771825785741516749161571773432247587072036932392604074710108186581691147151630007375121109528984092838738653662731257812521177517332104920484074208654000756700647745040298007794764024753598722948895679503225349629575729401600458456290350663275779433980149821610053184370981522034389081352266567948689831756069049914134626289258317510267820523352621615125896085634125240902745906721138572375523351617961585937381403724990804064028733448565857098216997246266165419568723206887027962421289477798278187495037224924683193185061843899048493308641770749557003207030000823766282801857398484174629347004120771618473385041677278954957175453704201099762554304216624878832260894724315044659084954896301520627555302001262211886409744221100574170073724587524974272465844315015218523036181664536048872284159964502770750620264200059969103515171716183831173866036999673507584382690232176562392579916074793105315098725849734599198122210670337910763485798173847446146037371202893751369479037216465269712399509650578256640825044737129133091356115789567957617997009300635980054212515911584286564808693687953653188587315919413814998342129023560713963720016830821604461896883241661601472239426240649950479079317711955072542248575676847571744423839526311723317006520320685505775324625292208826672668828896941364241363363086582094431143215807388238172834552481001641923250243386672169139692374828348331541787292308858877719230363853617972147610538632038971919589417800685855223442309362502251174360307714114885424036711727147294665326212575560574875541832828854706673378128346454623552591266456348834890818231835015900202644708635410078035587767965342625344891206746527167103892288417328367449693922812877811001570092503195527278961047259331857222514248679759924972385687284752803388266174730031060913923770629206017557258367758865686089150820302187169023959657066102347747291845393150429007390342056042112413810515730048326590250225548394266673904308122217347969730279933712882834986872205824194140792613596432955406668717487865366108171719560340482462944258000101816937923570745222980600133671548232653298839869791666534070019425920315442500524587631808797423219196459796764114812806679776138800068439778151329905816732525048617114933796927244459832555034642619806602927873086949139652188352452886075866989367247799798143283535030235246352014478382872602259715181556673088811627842813327589188218172582732979071722899120763916088442961530279776455872271197355596718622224197161997333025446360767908067544310485582451881050691595680493653272443217489740773312622282453791755456626687069552151108489871077105204765348527221861641512212123010209143653140589137820632218105134135718590035713478769010102233863878761603611380023420349291680790014885802498566277081585672719815563782166765530221014974227360324700983635114687327495240723759017538353408192236987292459768638303843461394705621977068995977436006642119975963418970584303098337963350505374652329331259665470901541524381133481605616925673147645971667668531707689378135960357621054916210279535167884460430197155929484240659464888719547845714530391102761682393738064571497811760807389907508678065265198558607013950523103272434774181179728960008383306330523819137064613201538768761558802994554935315402874929277979946786349433667463435776198437229943352389362541362042789864962319386898125255924140940761932598797246837263100805974251794517011327879396937366362376844589141751394966903038601759685844233781679139296815866390562482412588422219212473611549345230633630451170395530930318944441153226301282742812897592355156342171563929503226177158687453863761234039027064708598367520173569007309678642414293462937861342165194991814290082004179986491711581768702521875844941126770495236335107918802781789968592050868471836869900671976324171547049378095735560563307891272260473749381089987961183247408809203395047571781303614185311873315509536978137662040208089344680463482738649863155695735955062527562750349454526997898887980851039315283792832658193147093559336051797744462253140309186198375553863905018685838276199821860205104658213708886319749787391652510104918422758161154119554419986094407078091690253428834702012800579345004288139251522928627527505463133365342588013450988875497159816565102808253445328595836324550521157733571444357185785050466933920207579245865876493797654295113928982554604602156092628395595038595733978856440505939691988879675351415386426509404894058768439266870338548348566252715628319597697932219079436078500944341375927211787281343798228637479003146865049610985542817546415676204031614998271993619927246523605511311437793854086926257511148500297579793298256162846749773002702115059426832259132017267472673226819496045561624658006980411651592906208677934091996466141436722323480007235704182286427619413672346697132966091099739868309566699869532298636032134560462044711193362098159076769385987709655808154401101621561011219814526440325340249521639070112669833315843875492409470884539510123037502729866419472400478359149196751844744382586630742507926217855745054674748467977480871253468917354107387811562579646063655471073412029175155114264721297736812286364093513330429724306950177774416893552357582341990255058610630891446728466590507271190111702610066417326484252035370878443663467642020172376093954606741958192518222960085154058445494423713283092186322687304531289044617362101004077370419853361160909027835059964045637060115454705515883586493378510428996645495993328740708160586773395075390826596504610261537024276986873820755511694094149629071743600227949889651323842028188828163978592607319610236821049196320587843440392050152148620973359233132971395483238603501502534823042713972937161001694968235170833615644225130674945912980897001843244172860423206096647942477311055643868138350983703425036451450785966040013513851872684621444215960278621669711818079752140261298211638219376898885812436448553789603269552063132560242447697352713061742993668499319602833208543002082550340500699948121957800434113654455537131682504579104950878347804075846716236842718594599391023138406857418803276112146920199956340374814602280663801719032526470773809812229463581079339226142791136395396276376582612750161402994383593422087212283921952479986301562594906545131826037205507042722463812949935821175540135424770069500042166684244314109366663287454248981845062705930215527562063388804346497852866308569946558309495680843049719338330389806832635121653711001263366540375765492211898627315193828295135573201085249494190276320708630236152478147607352866313928068597335615852785037210546660807065983263476281682820024948873958520423700514369430731123761918605247513237334118518687928604431709686919275344766451091194467465545620952500608382632935025377933316414419956476711269376283293008352832727664207829449026124643099517531250934018220464400275085653433245662278669438430680715047291665189643500127555491898943395017168302886010238806505838366830029142971068906776045116054201862090587661766852929668963715698155969685463733058368119428386080167820152520430437209659069636829212661384252255863483027914621124349250599148358984230809701614948170078477123655821722170543470482683460324086356743195076322050090484057111695023577861707403956049920222503181911149485451746337570738351804495031544097752725981844937647156721986439693580795823862109585597308391679145526493683100831680771590544756433144398267394832732265713840680674677867648383528977800629038895384889730808409156309071176496412168581205332433833242274846068640205407426233501705332642888687525423845162153058998031627643430667241059305946289358977796469607171650603151352530823804479459768005101309698365388546818902700345654880818502400912242843135921167200123647242518774457402351860664397177553615951802134800365398212633178452209925680249799048171813414573754842988308666564923097105385029309958110272771902116544825905866094136563758915458056421725161094646867161289223176693537558401482153667904523346560258511664027307929919426978125423865841610859791114289081800594488646089151695173914544518862923671353569375781605232104233748096955459489811309237138410608513818761444258858031422335101163727364469430498938417873203781478629230586117896213865562077108503724579796261139982889463937271329063139569886275812802190042852703007989733070303981093144499321033615034726764967076161715521307160567970123389474133303986204247288991684516467166659574609778051951455884187964988818788184641942292670960420572829899456577854076969662499202784004738941380579306601282351193095794717509709709067584393894064521517397588173888799225724073130530332193764800928670449765250649434761680281638305646245190377686784013778563952151046045822349478773154004970957901418493349955674419985922141234936939776624114783779139602824451191745626826583457502063034133158705693933623623240058313787408875281162261403793882534876724251921968210173096394395907561055079655739963794912930635051949174578728187383932121077087274242766241951292442332874669190901804963111264434330321294362013588486287090543142933887838530700252241311463319324575980444287205072383621016919880301662318625271456533317843426061485090141118810005690215859354953051178555639807294309126536640636241083325647896563687501723399370249778328288793818706476751712217439917532257626113473318762236606911399179903759105437995517627416359288194886045169744381385194008550090732092129686992586280732244444002696411728097973351587929109752964654284588784810835108369760108909758765092187924784113420320233845474920633969748132053498346911197173262280674747830736278692751310744023350962356814309083709011146158297980697749701833435860901087573110070496052337984619813465124201960250966732605712014419346932150103013998287390196624639700983240317826175755233459228428209172734775678810778507013222992536755448534638475072482101265455998023566675149587829364394378271926416438702780156896091064331810291865231752528709385400561658518766983039213007810028135507502565399921069430292712601447649642830271508320973191798410108705889342289598267357288237868937026947438608073351389098377924163375909040728331103077354923133319708642790774136737691798170418923342449489067716178794131920558262904586654816407017679716731398629753428161357058701331272680458661913521585489081400375663986211296447222478123047092527032986594338991060932264742704070299554353667380629992622359955806024070325691865012304404227680355320206992701636150946771606507729353451630601926546693436919856661357046801813637378012699002860676075369342779401333795597153480616307424391077013767265458910749551504463088554569580195880908746894529943322591943235648763578358370446594200660900693723680485814730084695222476716592420167470448000223400534017655054015184319513662505770219183231425705227822041567000267715623142848348910801712158535732619366669913056849744812557868356449279244401209013816530423299109402663957845572297405664370023323852835683254928356715190873178382021820415053724348401493005182168144258834097424655764833288724635225018675974023620736302577031809962869847787167858273783535270904008255264620918487254452881526227937981738676567381426721471879162858378774172086101819901347127425353648610234056373264807630162207809602048600067205286528103255137572607259899718129286719917626637190489253161407638369952530466742014994427825746756297908367802593714528388559409041932986850606113818445710085350539403092580209797973359224298456622039626407530316728470039381212370149287421668361376881642289132296520136689531067911437371653304390980553021840978336077817208632730861571292129728883015168625988091126464952246413186347994806010658291793557609374230822969404624780690802144040046977568404831876069692616053335922775415120358391754757269399404688749590083764845002739373191557197069533042053699473165368066672333883738525971182023629357962575502638323328219214866023645712252533286355201209846415436551227937610198444203812049346794885059888033298285363961861268873825661274367803309639111015387877313591404754432616635417277690462296189477289668240447507964920992259538718645011218870923391767659231848671159171238529572394585526535923713324706514535721807783311467350849090003969291416399076213198521593824256347751961507259226808920978638412944708030136743937177556444504436300514210337800570740390000704298098207936682085739281504464304838992477231406978155081623525538679870201673377924271293543595631021170647766039402832315286784242678905573600382952350879118760648289603791655161576257796086683287974115090592509871646640041496582101921791691102786255703034860889013154069710396812106055549935311663847889244879027212764545967488302279273817710908318641797948686300296942294312772464641802823154650002218348087548506187187558904248372378492629161505087337781958430989004846728457820417308969464706884911386992214179924338430984509377665449959744706210926753748858586706589901806001033109332348192904629298111119612847190829040203024579309036879911219078500955947137850446029841917933587072028486486193449320130418266792258830908729407124841168170422530144797418511823869547862523551734412421616130807918855709769277518487561484460219015985245623330996055799730416726569665677478867555674183846780162512366680677432454285725079150924672810878839365757654180786494545811935493991236157940631336221968685971896617388554559546893976419013448472033525985366918914033481968675352901194742120144562276864292665017221716061975842218489275648333434166124496174765096806689269332342170675923277585309244902975564660476574682110354905497939666358802109662321838240345813338346210547266283563663537022980205908842439440150839759428645673232490689065138076729812520996727666040180424128607451751316279914456388807615924498164153689232309425666082724047178644343117815928972775928456001507293774740336681739258257415709467917323080547951706697944948568531291679032337302815356538402101221703656004799104682346819247620082064543752135996455492910322141729685926493327384046179264023517430988631176330957007484870629608928212430863543341376295053047698563540743434538597455105482972614131543310392272240103399476527321979990851140820070289799505350190778946924773326475921080783383017004316089763078392503004912246720308286823765899201281154156687183867837520366042675501709794784468384252855015995750789412426807542685476028081502658084611967538211564433626285925092667490079658072687395429022170366334503964669944062625114812158764611425465800485246916182605949232847686672756625502439660364057240076939192297397892624331143570383588372104268464941483357740988721540426052614905182863191074763415839894116217543694466894496457042158759549059068052949123573188252473379797314656488548636783397560319726686729254510518197838218198060700741895297735606148590265705299995359006559934677415461569188397900150290541199242577139240769319520800117405202714165192976471258146428120848635616780151038181090849746489405854477884926670902918502904680643934441397476450170300312724310873421955942854358233999962070852035521403280056668708232740867907219084869566935739612777754222930530842378776503941048644315442400650556913409382288754383004924398390962231206931991905787835133312920686763361883185559449739187108720805731964875008581608589667576517833415961302900038878682291928482893480930341543301258775187966866273693028135348999792164226381258750898870586864218246961083066982296341799416328335040687468040584736151186773992104450920266872896415975122081745872086921561056445323999785195721092112153631842220554055423052529025072442948961600907542304837074023540052652235301605495339965485073995511013725081687357455291285800296998841438686052952897368767924590057567516314269082572527020716389198173474448723642713144450711540192619225565740199973659422452797645329137125216227196085366079920332038738768428276566741685845518950904217692220808825383295779132058893354223457448880822686380426912929580053926610756012974623418414326159954100083745524549194099155708915125212415456585961823977546923358439540365943017658186145062908968381384568611266060070063129195978070938142084049846807877586784906493572371931137062864080372326677863793883200649162813900320369143153625355357995565847051922879216289419574804435161190066970019048514940488498741679929834211234465604087697326573745181277142100487980010200890395670120535668454603857055704430364730623415248766360171113819221950147510203254061815256099786062293107918923168079132075697089817868460305326706719697513080515300969510346275578773845046525730126850765333242029514173579177889986141469143958235374866788236244339775128282571384644240989355052875618985504342520729166914809499409541636092717793402298402844557367280721876766573294761695755665874970857735069381741226463597664059724743162725581789427859091687769788647089841285800531403332409878614356234586229495548799974632096749824821133811954730198340399959116664990939004748060746055869856582378821881503976111530799342886689638533980554717551579093393572205352460103529476416924473633681157136786763718454923137619152499255655257186129924011860331154872801788797243542447276751407082925239420596576145976831970959918347202446758658776650108851488152052446028662424455797053741256684471644009182022638858077965457270062087460470125240717638612902670646470980717349630654310429265443117551926078398681412015159315789830032314096028258997586174041529597402040686529342921702554687382126848517436317216135012484495648914934626125722257380011969032444693568037996210264216654787455464622745056220009404962200018724079318736025854314955801199097449403584926459055431256835270018923860096426378581783155673154701580579306964038062916692758897504002553874216186030821687587766819338065540331849333000692288493613531225511149494572734564370532628455430809140620747888145367926968908525757952933047324897945857003508624883240298624108956869504931216165248173628771273186632395843971078567714617534461333905467490856549068486256766127989393823547524405580488447797446012621717043461243054912767041439576137915403256975271640857459459717158485542947638355464105436345261480842589562541255477541073461413947727454561522353651035253687554286490341064107679386885315206773881190196431317634830793238253886170628027772698624186762805061889657382393999975077271360968193339500333299258389111834547513812850193351912293296600931313337666298674566641733855019153414225575610014466615971874101358137500082832146906259695034826945215586301343639968541861773976148849812352519408658392012745180282840918818591608670214739365059051798803915992504560697265421197553947302332136741379163895048090738984681980559800753748036687978771146387691390300904542875897272149167843850971855856333635572449136749945567041544690351848688836859311613569499670574272274030840980702613806342868159030772018035126514472609649804799466611737599911477138677460302052318623166828580152122538811482843529373545877261052495563942647508237000035287897981802282961238363125169679922554869427260551311802918962212008194357609897766165588504955623539386873953432723290201762746309573071759491937950403350673209585997435872977747090881416501459060392085082456133825504409931705155634496315991961818915866798047295242394874038927229123649916495182435722210295231325000646320180848992856709025434110702589232827361431987433348195222152631642758612920048090214081649783876729534035054201620943751331462249555706857590569211893720689557987072163311870061675066219511973219492634082863088977547950101806551933802980963190786528864066447524083330696282320580904113282495443001506390385029619711623992877478189559074167941399589929037083925722607775754702231966599002986128653598989831645824632621286872897365302523276923101410851287955021207813199980206645877608726104408190584515382804882086472993625949989872801294216054060682315401215596435478587343310335221228736458809966448960372793057334890807377652811879625441962876469748656952645842885988214123035038957412222034981199170167269148113605263665627447110588709109962011081692351591315686034192710904695613183204290045855570156648438379247210908362900199250213914516735892777621955745604943797934194142635980195662416439534433567759083262780791247824633833833127960714321422691838757797045106031797631156573926877330089615176418933257031197763195146177836153746029258751127953962008722187892283731001230128221513364293254708484575397461486157738376379917145218357407414619810059275433553096999247025626928450190322275024025075501740320875668544965973765302577933693940897073352447293933240523835767379429190675614593537145002910071496098416478388452269165630473479609392853012846117117081626527397370822333296705337687830549430511053890004331211439617070975361265506936858232658248939702047130019067142547496135369095424672007504204268929353045873951591654390821001282196834245577780411492982309164853099192819959089785688550593170423047002423561912303076397971175581533199867819647862414539976607427731292068749152261524378850591137837829180812402147830108595591092525104177300077243415376532086697361439828332268960686716786573639307434555459620210733278781707718097874554579493938502687415458338439661301546700816625539097567954497128536231178395934993183461858675421686384253148398589855894227145004999648411182157380651190065707618152856592844096345867661943159401143885038646188257486171713903966831576937804501360694967253911562740327924302922114276370714381648412848974658528797131017217670261676509004226776990036466904016203879390391769205335001397115988238559698445327377587964086292636339786277160609237302550101914272399555069339313073059381870400072347134377088647725017247016976449694821898077901472648875503372854398248515271573616103799259594193382510867726698769792850491557425318706073662931387727573736978173878779207023746040582168382673860762361407039269254121401116083953108529621196036283855696432471306985135768616411097799394146807483568111517063012569667216717468522722581703826721102714235016436997650898978486166736537919611323288378565881173306582759610463407528351346648364473923312050705878542112631412946105623697675603079137896003279564443888818973545030026606549401798735764670748235771114089147039811583092633874675804332909353174902852842102480835849103332082683147965574421587740623775846302988190322941442624786281734324113030216854580441385558181968556586491377412226645290705132048990296304633750170263710468019377737140084529104314539124770886463329479164020526042824553653100232645632763618606399199483301665125936655407299361026383452448596447278152487524821739252913748070901208744408591858085911708759068207927755165231066395336413958527485315909083055621735608953601064423021596139851679883495334879853997307583019407534235011838198334131605499978872121136767609853619808570781507372373720878038203297284227296663916496521465451030133209129774836163415715815824849136002802944440337931300444620186077121123878759135178464959980979394748071412377881667602572533632654258102646161299727285466122934274549289862218133633137932431811679966708935623174633724576866481667950191696442011486601798179540448316210701838445667842576442012971121432355016502154642312003016138358313772488274175736163684850071462975450715795528004673235737424540271930262519997803962182424313680755234486041054496692546438244723297209758024325049090150142771112371033840157475834539988795163553377450233791044845996074834815133371789264949947329034018380185043256614354618423183747196420447673489020072080078216615016244414010067865613480045437312999040447573881245777304092923371326767273149618778744108615058616361321724918963966128999471056556453760321636596146198753515125365639938701790993735232145305213557724112537363176352402020043086308981792991709432470803228298497880053367954321434664481863654193945692602568565580847751481527744434432317803588816497372533744360318932018844616944570249668059865510411138259495084190171244150462481201959997795898078119957263938020261542822189812222111730325863635272881082730526668509845575773175406432005544862542390320324322539029722048086307290829350602900617446952099187681341307325721141615268870195409669362981827514541277810259554976177389148858479237832188598934256797264078079640497390097302475965519452812762325877552423803489915727008947879005828096725256581096169670330030320568562475607231053819996977841836920692414979289290964249863563474468610585867316010316770651199773210100382242599629476207067929414216475580098289467441785478144616796482454941899498526152027354203858891568312295544592205733362809717995604998877919082760017756925539852164826880297583267258836491636058472402112238259207027472369947887867153568799702937651829578065020093783933740819489482855589195009016626958550367429409671337566277640520608811305559675362671812999696002872302520649111756790873409718935587262939167322948179944144862436767141932461453436024337991444394183135705169888503759507543864277332904788540226210400458474053201331847325525475966623985896128640618801005434847109225059626459974123420140430328045655160854642903031790230472601701176929464095323806962091408918475995396061653179800796893572080675300474984971695864356556272895982004138982530951635850657097707241076813716539031408566303698244461769519089735427430860985863727313177105219926481602298451017605916346030966751064056479336140815531144471001383230779604741515696241407124763088370350799932476006693598128348848133002990249063183387508670048255990064567789332150057816066940856742643490361661844561074914570697966576340128512525267119613005242953350002187671791281168993589107820341603579885264335446241880477241438908823594272113178158284826809944814831885185909181286583492521133452915423891483180193009065446880834097403918070805433090754799754008164430413011099842237440637743186298036111676723063625220368087359406381026517310176891674961050223822115976537249028343969629305292487285594505159564984240080098152166550185035771955609805396857914321323938647532894627499721412706624680780737573939315143633368449684006604016069685568276356712668138944792803851221420102746911933557837739222151454316570485508296844390619444925072650393794056734382070543639474421034204362092862124316602630423068349353140627406899129853095526947985284676138426783557452818269284069610321449517776908204695696151611866823681661073266260241531967525098020995943372792291604576356098879892970901485231024064444260006813544764438565845071793633032702774084784181454697949455799051817953888249271172265989862619505210953899267513710530099476622222375366420172341226612585183678993265070038808158263243270968120008708593035628099149470589020067366315126518422293078126684110701669282198322437319001973317139822046407863857382580413433021578858572843791306670112486739768742522445516944368814002944310199249071128105979755373757447807799563342544668122895870900212279036410990008283020378766683508540633020217074627829241349313449326276897061489238372450169168549986921151876812825005963194816928101221280475797961101989084009263179047283167046298378394923317570680609597026566310640696699591233536745867321166405572561891617307605925821281583516562245839750680577638921571116908226030608862422492705653094155743009532039579700818041915431108623606832670802967270089785333004811064984787901444783298856814795728483007645103986626389994474588150768554259512155271508938134771798422827201936301711755017819229777212569010161524632362413270162250320961117826700698979174769036395940975414951122129755298172494182113568966672255619153271760835577136602969334204238170495361752977164768906335077520429867843455219173821018204137946362408417478734779677086712960940652601986985478886017241068710993118211986291765507423842653815051348096593380205436436656588646268187061025695280971313844155945655270103007819535280470758006801396462935677290251316035880138513637749415535666242140552353408227082893686573519864272690290304301866517618467621360697783915106691754055631085678535566472161867482573433467395421617086175610016666155085140935394134484042436967256552735983545542632316804744467230972575446019225486395453085406958221829828483493352820853834293705572505358111941138594223704023470760025415355501627368797958583601934024261051010047681398032635236508886511363607366698075163655421673759052232552507210552542108524142816085883455221324790951226990408392467301574895050629172157855643016290071280778624498462714860445828093768337383384559151891852738121339503632983996487498930237660510089265566476315274357018118269961351429718805535261514578371245953207151124912038461093467151181361904557782634031606192568986915578546655911131132259185879050070348246010431238076642663789598397285868463360163033151795756649144358590731492662760204555412508694165401333989739829320810054408546698716487024166696581207256807600607282595959874400092073711887410800714510294578144505708456558116954484874217734880793663079965620611330253228154066868274248602024914154694289169777413048195465188477499020808458839346696993662868021882971362703149216527042184703962504532772307772640270591289754998691008056941218287851946703932032806752055543873401812167677439121862097464244331412078610476796627711230231014678581702150378658480712378566096311204801859622026247568430002970379001575579793477501219057208011806134775651208198182958208459422391620688649188256932122690007292473828970399907088697707787579434611502224549968156837349059083844421628531493396678298038873347311940865408124925288234988343574782083883391625821177286590630766873007245078773110988886958420460069536347206128175189116691448765703089201226156718530005817853372663600924551855235972906226146695719432697571210567930559153708157311312489038708359324627389649753692520811871730783509757073634119332883424763813323112755710773344310165760623657735438929818435673098715027085618959999030796352602717610421513854701045973342522255709163690432276610760854691472188031601186979580013305292077148632327558029482394479045654967721135670524038291683915617580697957986949360272503554657607161505186192672640755194700401203539268924760983864539625835801165788609369797184970370234038606547045489259449112520782486822029806940755100057227759052142671033416260015493615015080735966204031970756684468850202265006644219477634350513451842403933949252641604136005979294769082600572247865740807366668357951791186219563679933526672553414494203585041060773463656899085260335238932723756815199987973295638508051584365894809372193499570165179160138839283936806426719454889186603670348119988975432518909995357072522517874116690573674606224684388593835697357262155276873985966157826982980194233604866837317978187705492228025591409015727584901883419761903897421277691368286939609643065952957617197179043316075119489493688519258825354613934080318046115647282455617412966300135939279438474714531399098447508664593827239444218517706769807949838805970191212335435321039825486548683734151789526686334530691399097414936829550987004191511870882929077844873525060080662498758402732642627440679784627807027697980492388611715952768269463731268067517359146964592450285826950711416439025427046213322999874916257579356386365987191275687103472681772604617845028978304941568130902602080999099030545241864615760726824776411368052784630527133295835522741968255258424573192734857898085414427617654415152621931763310052389181797664480175412680794417164816105336067487510279422102340279338308601299871542216578872412612731116614746574807810350337764400168530951927888420591702649621797935383910873712622197349709068514904372150003458381874052118778473563791625971658453854483166290778928995297473180704833336913923165427815593596171497130215194017314302954926048104464130693100571382230335037249661056801453777007229894037513937004779729915653220517972300941000060276660215786054405566982106117943458838128790942408330579573840377670825483993736705542087926751885281563113240874617989715156213078393767298575637676428078983981075508475581269007907065801428748222263684271154043845312258882252046707397253173409837482658372930952760073428302529027899462744264963619658405584615107401148120296297232823732924549672461630686975129868034882087817015876273679698090184032462221500822569677085146547414806504492096966614708171965604554107032823474857596314731522982053806125194652280135576527233088331999180365931808787238531973252290426187962094434309162113715589378693838117129579195008406760373274946766296442111907326303210668120228046625319438354997761922301945803325814003932633465905759947651683140393312802250620113034761144202438794565374951166257244475666977942932380081327017321858993320615288299669216261610602811860341346705788586118733080522527328771106627270163215262585279624713901278959660070362493354008529549531893610352742956966801909674119170275928741267364433028076792494847827329532314261366936773672667776459461301466059269742069909367565767936206673438114951324742746773442331444041460713360187294562013917917581341099439927807623817854320345381729698611527301275148944400459268492964747852140501987830202091547776921285473909013470311801524658025155960153355801209605293828017492347970229090662989327412808974396957264348195386774255860681397912555381867157090238984153671222409561483458277693877179742527585118616977563746223886875097269863022781589177237362967058688713447166084210182866877898765127822638892709432206533874965994303619980344420410556554047705869721076093773183574190382548840069436259339320893195808818670436678198712701165412116163107869759322329305016714088104927025862414804494388495614766490692372390954754024212862420619831750066255322561236822647759394414399489354639729955748354521545227213943007296338642095012941123972773947706863494425842339103540310975727797937596168674938921349994677754684831772459084971119471870742268701270476021123240645909621286826691733222553024331238559630853391958409267094195856557206798408328381058899964635088230081161590712619321549067604304959066662623438168662266695702339577848569866986839391992742210014177620921804661915606839914018276735397353075523614031406318035620506127826886235128354017111930742514051426081468960889478813099012865516917550843586767303886897089195285693733446165815161945032591872163453746381310655878396596144223945683517245413053518943064998633352167183953833984433828120346807982500777634517039440536523957381033875854180670089734584433436850290643540330590885698949741424007336290939827265465701879434025890642010357202179959454716630744650252670647337686182799895011724968666584962664959504134559865938877247746466363607460042118758774131173916260603660967459630304966483502665518864271553439975959326658046962256257160310339960902034072805952632402205492753286583504872498725946207603804300369126464399178909652050216025294725362634502528557389381684947175376513701678894911299590926307647486571029270393923870299725473542976557627890914342571270431622967204626500802013024921431182442239276463797785961204882348655606435153618811443024375444399658030701533904625622957810876770751628402185035584022078572906907926916625554052317114053678367930051944065887635570056270762344703996864524791638108816256844990738242800642022189981371123798923688218014316982853816108239434523476357889843045519587160528271678528201915176168648723859682874604029189001466796360159332161186714411366745400255985156277463211564360380993636071468608044248698954447741664312983254914964943616760132784639312215774863430972618353196144998928135273821574663959034053969546957006673593667685849380158857945746182527125338719408144285438392725146284040792941200335314452142109479130535491280187610714966171605949137328934238123977179499085004162579908735458443394787454717167978590274265239052030720209273374378726730017971637510430108430349856489250061456192113590113275928289826802219666799601730964725316613738775947811160032557346450570338589057803776838447486058321516649833075038562138739468991691450648287098952765144087565371431814250221285966139081203443963690207328147628771273594686247318498757174551623792392238719958183597918007222900825467309483177991270243379376221502594159751099168040513623896056486628217083374256126702108007952389765746361446308314798563179481860313383071010159894447670939921338865304848174667605484238664251981270085498035895939375638899010368834166373850093825956770936709333105162169584880765072305841812168124358003329334759339492308631659154213253297400501236253120869916268367438387405617773902016570514260272401112535192535847727383121990545844992502741183948380025861271712775113663279289903186594341793856891982809399768205360060323115711826637634290837759072877974390616930689961743703785332868253252766739847321249586792399359578310875713707188592627632009269771254103334378023143260684252686571984036410138204943661855966440777010530223013849783225974791448760812244580737959397626089467699369391236550715741493392561123992526842309032653979768313921122986539080709522571657513992290851398281826400817411848712021634748433040833254199685225945252463636429831489234244217760953640840359461914876644685484925974958223953795406889957930459662816448563515631412296104627767842657724425035319827066600209623789006853701495169906592659227047482787645965724556868834312792766847739081755412717301347347923089470411106316080849454695628311714208434184858024727590510596978506365687464668799183580962941330523400430350386099290394338739086394651966499148541606541688821328552879829573853966063220851163629736061728365086640510232644285756068219680266475225547715767611341642770908321754982464187180327958610121319960514112874341352745859818580520912406866459509775048669832774397959378950837240609540346501109302037382626873148676490242129632165746279151346400275609342028363677563545028760478898799664015019415508260501579886488358326407319459316609170422435665132989196600384263891526119045362981508261861107329768539810241299642548186037746899781179188413657445162014912816316033729459644929317324911751193543932319403521234138482081153337029657124831973266557851717591080610441207512480019594875392273765291451201255984162988849571228843810103033933251634058641778008510096293039238529703423611538028955254149061859595164137529642982888234851545375390700574254902543150821067258150990976211911992860029032982684932049367700452509833002492849904987673772349892259679993109778377355434515532995665492079525681610191209110382239687601828057380006472126926839525216594550860196098546199559198867803348485786985024999179658681340526141918885188495059673427079431208385069946599436213075366561850653952917078644016116643803309816748244237652514075247613210372883614341327706405522697158468340514980749949967448224700972516304874090437316446778587935844416503215913449521117591873273615419045804460136210609768195794708090942310087872378245167683281845636614262458123421048338507208265753613389918527757214125363383417079923910659720444002616418922382361807361163881131599827854358109993642665887588471388797831291157444082718961345672431994570146980787366871175082478201483880006208688939635608844377269707087709517475819757106553144662153701041048631067988033567571688091924345435679249024425168062125311272878733819800590391086143814977831563980255776842800513940271789741519808870228281606730832213064464030940563515223903862056088758665978036792724193518166543695889279568950740862111144041981187768146530387155261890532671629826242533601538875681785372590915857291343995237372954020091238836408542352467562530602587263628704459599697983917954443814424626685866890705540772196243590812348241170014983296562256478035632002114680799701428988528610164938574229512990933892877288126561723201671070866182243303541252114761000449736531755675483834532761735034037537580439337272433765937343783394559777614051732236264222734210638276836884311647703582017023103960571858648810864291998187253219738910459139929794168722990070982622662790606106736350470358934728767619683047429937136587938706381180504321442046556919146701326267071667933613713650700154510164927045886511577800064655874133687498118781123503000630154535586685553217571282400049703713472695983416704908515400234632997144917062108197311011633900670039856639963720146147617880489353917947590318623495480969776796642063375197872464906182840537509862152998044284686459629493471584512013943388684704790966284903729174102129055320774207906332695537488000733011702679202593377465101795331859669847341212392325898224104034154318895073048411150512165742819726949167146620177157232549453452993236636928141677929191478269527204867492522911199029868382258943223087071702552082059466535595219204413814660416836341996044618863247069721189526785659934070128851697726463898418758541372218329004573576829951690804422931846424194176653757992893307766139402272801860100215434884736313881266114646860112515652748246252941837535007520883366605616040678050635868302313582747445697641435359192853860010583334533973605534988316543086117417041309067420944130073919495619954681684696035098635843276201766096329412930172925069416871157978500525556283746958398137395907888570776358698932755018777003519116120277954103676703161877847515907559604867817586165928775118154139636239820533096182639787036904668372732259908650114557542172981301801065977276389655109745447597517759757823176708298780391840781804318421438064201028886896383677053676959686912117457806139657845988869847642840808946049597290323201660754836357342485302285493321604390681975139040731929790930093363248929457895685461382469599053730158722376728375469952009442462694187892166719528272304047437650980168429621035351249449048809131513665357751906721567368933012984212308382160963164052095021848341916170626390438240611331598838610496124725733776315674798348454050719933611103028587719324412135316272151342481442526232041615732077237614539306340652974222311492849207564086984169693353284777162181296798663644083669929401251478604408393486748944038277176409034457611428482236328795640903605359192129929560535231376393725683568351658083080273335899988615173801765445365247344138431636938771899068044701257099734838390773728938070200341596838201203776789569510248743150184275921272224544251081938095483956105375446492171189388060721130458473021948543902953621996859701188276239001824896486703020794584229483212615805623725886741228282881708374402533018258143790061202189148995474805753984606341686936914050168945901423716298338142916499087030491817239218599512209423976978097393878354078605499455343275204094661431368606544797364222311141036593675639759292877507354675315014466179402100894373579255133613863921055961712422921335462827646135893342247770930024267331286009861242910033153647608993650422926519256112782606019558817507754962832503035262491694833230419105638132420828804871763513466741588278619222259290319193451309371299894755489828095873862962410582315885178537800847683532868705925907556531450394934092247599605243848672890679369871427062901154972690139858767252719932891532530356323829408405256674191167553478628837227731423494149837562900660795580159786129542434176527138386864917463128233790989853753622838188500202417812013732949343852844928671176702792846425561371959443524329947658800282378160618861694172628724328937281076448058618903773854255034243783640922371521771175585545510769205438458805052659913757382181164795424123023302968144326765659783492803798203896614304768672094630331600330305106795091481218163255230603839351729994405816672083412869463212206225266276834372822550881418499315631753217881969852702077618215165810824500521875324472353714578671386289673314351624446408772504906368315680154584777613091345538102673171916642944565634215519445365070752262973397074968860686508944231150034162215247869996092804637856891826803606103408065168866188774583401890034211277353458030433469068212377029901550901917311375102303911780333860740464932357937918310138977998392355609851051909183234020201629448418096872008015341048919466922302194937265482813720667422540811486549336237183328603662580573027114690337995322315826630195263009054526115968748528752140319442590060550045876531784995270534844624722705237972330991321679549058333972640000196657212288955754978785646178672844306395163952590930737878674150887756808673353878203755279643300227640537504211082686600878109227228148268430858237073349087343100143758381187681107318789658193696238362694425283982672384001132510140013252548147139769562922911257367920347671709860963407362136937503408047250740975223921367086232451818553658105496100236661351123129595193175068434771935950893631276256786916143248846010262695399862190834220648405362714488343036248258124877609982614165962684196808587124113935575048542729309746689796951426491085392568164681002368098737743773106919861267206268040950852189533471979968604981136958940081821429507313368552856398013676969444681205299597333199280247256991638436192172341332624349681496715336688038433345522556448457031287884351223768024029148710642452390409621176758204503930498372053175847370334539188996122590545935228853330411856581893307432448834081910112674586316899950183482440878796413221930662392517472815721239310400763217143349186963644980384641477638147759882960621270918618773395578644253668322217322207648446752592881197551627987530809933663594029381784900872893960987925944030896062493504083927138264747416382121659360614642676500848688013783172766706461980960670668424945019665877841960596831718973443678439794798216599429986833569726211985349210994798916851407973376783986780290074127201189734312876781557633723518206658251044687678772089274732725008337092978338801311111908223840403486026002589552594021815356079856433417328821842239129851207931961711025508851836565314565461475496287507468032845245712462153137125830994496682753052370988224610191928951984868872840416205587586509136049605122250142609772263921185127563655472427122816771804220262932870496705403957047646359795363644424295672082943269001228834170344197453529393891288438788161290985598262151759958194640627165197826937960473906835522413843597793914734206529376960279939838539675989330134004687012881341680863011690969631577405932445769323183898577794357784608239908753227864242540038499638194466556366273502106256355818823651423965818001016898629675630708333325397804366791878223447462733689452457426235450750818740050694908685974901026685483820129340436401379201826613603091675466134952046674571634988803353555417709199563666419667088965959090737686812872559120682525841237609745485196679818031191418974865866283915526518241429837940866871092604303840921776777282483511438398504055501309612636871342101828000633014246419171099344707394037454402541593453507526786932264240168686350132721611150425524580014707241323101230702271947469541976652279331477441288026936027069140653884872854127940999606232664795924876523770852640747238517817156838168380856952382635700113840735846672310253163749030332179357275505355040136841357027562593872717137948157186952420219604352851700111264620939746156833132494704540699153950749817696290935291785134193983719275144258044454666950304023383236342556870977143561908671467711755055130967468676396100648550628520198471536859735498623677588220064329431566922011498899355288980601275178106064808071882840252782382057488475324094967053356848726867764361766402376541121928748653121936367625567024551452741577223614360898409702340596021603519228990493140504402991642398030784197438828857956544219803678298478528604750479075531424466798587440827003582011837589673875784396220989820342914384590054100898128893155187975641566590602029674815482164287311206072574232802067028267805252909325403970110629018388652773449660625017889311866484021175684787780061484185745848261605511347826847943304150120845400005209078916065883178971087783967069917153372549094696734478827945934453274840750819614483768324414283969623374793506643295303528748846532686490829126387581365128881474018464205761587373683880070716600899899135436877117179714758593935409453692148877901703218902322067527960115649119818890305696054250850828144667522279879616024347173839654613218961585588413168827759364311406601075901110909802983422899997382607145551774506864182955680166755067925010060687824544619116193991845651035771148953037665995002512038295201133113929721074452954557967091516609517498050442222132473740848819138988941795043043605898885051389661340877318113652166455120752324063858005318307188832764599615714368683554351176724667196654597539521854393163869234622087389849039200748698399105343714264736440157035046105188349241954929733433359612067080385714296423795877473308481268438140465081018538475487809850063194727771461580957773824949876256778228238232383959205283911331585035039504799823633652350516021473277013985160252919090188426045153214160677000628483547810320940932618288576218411295719711947662470525167665885796397001884748516759866481390013608353665645406275920533437365578807854650662573311069548453289343984002320892353929193025293610816333592987359130756144848057625641887565951222945961791130791331307769187440342438615440193342939337697513897232425156569379197356745975342728282099207469377528384804275013616062690967729247386813862626846511040354947833925521822469755687084429593150622420622430535734606323574529088425598319484493059598718791608606728883080828318127314133215724362173381305637320135659636790542704885318977380623229957326696197035834278557214407356268358084681357180762246568551074856229470137675797410454227788117745086671195158916998973980707570901253046385817573036198483842885538674577534651795931660699792083270949564462635918748637188651658537665146430454049918616481360283544625569598426441387349734199681997977219856507481622063750841708112844688340318324551015688154669640611414318843240549323186625787583170915613744749514607330220013395326159556009456000112361430840336302462546160893815117894383043194488126576866867224841780728789557222332760128582891712496309730471818321522835942459566498785160250580951778085454548495090595382808097104543299024451964187063338920300590997737214155058830118202886637288749985338844474782572973712878648203310142969260439402860728496402383182570640133231177708288249671888346369263159279982388389706986447248639517921024862688931232214268577167478209750508094536333958622548249180285612433899903297397902419634253804916906841728148720970467798193494001922232791096770376541397568725962558362256337116222033219940003545497017648976400034927673410484871347586014370106614146247364614369573385522325422098438910117408386144505825819940523329405238392161898918944300918742060779466000429514280049948169682880599296306455523991692011280567727225358867421331570281952408881881246914847990082162311334276320602289393667940424505494723084401294306931148874351394989423807883308506437252942429928954968497695133615521478102159668356989096561019580291657678883891427119608798176973618650253292595041055239553117139403369475617865478010708080320983562110476053603038366392325114211725584035591131540349548803938736447820701375924203689213583482751911082987076635938032605178052263685452157582632067782330365169037761618646668707956271071115358808556801028588760590172591247200214036054966263073099428728429574877215773034645624790692581490033472890528126785293735777718192856822706666520321584282993595946989478849739637404303910252695962934216132276403619055819110956541583428001934431461542788437258397902137033524932290558967894726782292461513498441478919901672330800454445063356554462768237540372744827971151969268896591507933444772984308303383341814444838604452752754968788203862691429148673127693363798069159315324145845205713632884744105457574684449547337594177043172239157607996204708182757194649917722172856121214997864065881092931937675729543066026640752977248057913378544968825820387482246433914090513194361870591850359313327617274661852890508615516907387924589291059610207446674049027493624848655354752524148276870203656771190095699652564756557032570043273751269890886510992403471192189778487243687964688114450759344200000205708341142339836194249078548394735460923691437902167701484137767859662150734035430821571983882590887029039853506009568858002730103537638228640792892439756419832818591802771800526996363591482206997820233873620694122680919329836015597738921348478732740230823226522589537279694732302564183713902145377881987804606160838038329719345063448020442956111166237887185384214021859749813757977698776703046850407710058715011732985104303630280261509538717567151629418800627508891707767505799340457265438739491109241045715375476656460995255642512632376584269514144990546157147376885521637496238132230484608982052028745861563578587594183230445636291026809048001768850824976316522269381483407374965505991669147659007987220664004929845528891656092865622942038283260583950724805010703812486967746794473057351663087683951003591913206763313386532083538252021776303537917876461620136494338968158454277066136057173135335986037905483288673237204223767496240837460510985751348193989863865801001486311332205387519326905460578468700586946281306712446769699269738873095625724999099909926026835166776068879520735519344910636107828322590786501309481046290322783077088903468943158256601075515865302767572982069714647820831201621799668899993449645251078538959287869156574254790567537341927257584710838468731463384217250741263389089993771256771909930947548671104142677942537660396156526573643178103721898144991233513602681052445309866842226693838114563069680189085337849658922063151821098679034326437334420332288060883208543726951415494845350042515179157637537265648267594839255590400865872625574715257080880667508379340313288756066699683907092171863434784441496716973378433539959498777367796291651896493194274040140276543707237695974044573784667957852428233788426342085712004475041434086710833121092373247095080010441533949110361593873705641161358694311676485360979125063686648677837247591690124547530722644783664414833855981505002985701160348959557271495017625344459771873218000698859057133515671518817786471348344433030524716930799493674020346037213036533553355163968318556978169721077983791819278594976021149753789539880023454601283393839018609365137113475743625159283924446108858772835305339227691944490418181988953312168883342940771228190485311734514332456839291471981304923288455783087178514407670878987487379958401783700012033877596575122518837371118636511967755542932531500405610116404449267007092977174528281227329188573477637444719205753648528065635877143710253092520224224950281722601600400443243896731060087889735369938634859738721130380958097824444970571390329075569056286365599608406075450618103408579824973403628969973580343820810472741555351356743656263518794741164064973675849607611997438982707004291077851712680136696045236316062535164229301563247701816109157817424900151923641828155645916224786179155323466201999232194316427783581110970083428904713374053850203576537361589231088246030191626683689111525591285581448927254344409172452966861814630704385107466006450082678993468842631183305384884003261203493172963621059355864875824899188221735079387897816291665913923586771086680591678336383937663041888559222402653776069286193845061378323403547769187663890910125794428590261233895915513523055915289273305943435094901044403001727090371292642174209855783936617951681716555085701127755023151834124498495021502696813524962951005641679276821314236605047175860333397923089921498989216729606285128914742008426297277791656937439341114283006651623607948696589320535457144835503022849812227041486754545541998423178206701847327153739982449742887119614671574008871632693413189521292551660021969608285818279451679430337133801621636679566278310565788293911623575428875466917746588472286590498045057765643113144729922682744759723785128390420623873007516569596984928196431792828344641975022302315942533311376897386742255475108718075353201798304122486293791713513649996643450171131885336113196463650675510579913994247691954815167659173059016606630689592564072413150154531197261761953977362831766367594496802680690429457276410543587424838820840584691482249447005554158286770342404596498229913769986302580523594674249901711531142854588912244086107264146633305572006893089894502985096561666124450951006750550862007779981182640430631301379802168295746383850738412730110954962119055235411236474656321802119209206093105212278581990904070145989275996767353852701758282281579782485281042595506906778593236798104906592299153982253134249502630428981622465131448354335325177309513062354503551302799782578920685925134595897756607798131709822313406413124765503638234167374949105755017391339730254604091589646633680552373524914002710086873491351987203699576453381992760902633933736139265763059702920591967543509384257304783436953212343805575801143964009933560820244505994473394656786317706625935853727924302502917004768659494493212978897065096464388176065316520051783148737436726630602992971256170213522146665538242253877457764354328454010949457587293369148266794100373779465516014428535395281007246894012175161442036022682821154950540551237878357957093011370638882687281193476253009704400009770317817274477844782443496822761099414503730640677225113450968824704122332373967731569783538443224455613366066365607915471744459847385245702364875547170490237332845192123714387851472646331478771308088538510345935282110366152764345603221304551097852889024417382976027069149511048819071812122972491603667526064872237597958078498773723985648607505687789838058113716333770455464315945439369710498826314795301780356840207792042097931351863828164762805174691002269748081625920286282616748585653243901194835025381248294761763785236029286038485015701038502320662277061000909678432418604799044847720583477126688943355931125816675107408114770264193636095744603535005725349897431804465250638075330588915134768099625546545628291558480077765100004990322903264704872762598612719785079002641660401650049564453736568297665759188534398220212400251168120397566035442399090280570658215971593632220890689325922260557595823328428494259826108131271166190434925237509023938683560555467797178354340649783284576497404881236424568445232807791930291183246616377914513228966200936438733924177313796540856173245448345324905320637216653138232965578701262070206008293195055450838195939628918513516275670222694635071975711124863710029242398020594825296593775801827641828612927512543491951040745698582762372784709215509112557395060016827139341388314278074689629016168737301880382966192008513251964804138627588584822133839868456809240026147832394743599720786359085512802463098337017300586541660156317434006498083111522972335132517853962238476458375011990610014178227131941850407625468269984988851198187825282538379118708641430191397438836185106626944580617226040411921227647281934571626534819563315879245006728907356796800217951778923012521898122358955298072667844598986605050178751361118204406303997185640889540275732756317151630779884768961947337278965250212613520620930603014688086512766124364359383241397328866377047193017560523556306849057622263276359804189611817160666546519821168907679504672818523113365488226044550740389519111742726388597077021890795443315924172260459301829167504707196241468719422775181715366539385594290772712565808021842437209951305054676030049403751584752469583278969270213000555709617584582317840356533834164013961225122652387486761867662436990753209078934012922492830468605364785454969400022138575151702646426313527349483521087921047253569364764867389275249017893022082113521700984649461122448059338519005899951003936308400363429184505132155445893710865460871214527950447188524308843451186485659005695390702616678198219218585707831523111805401505206477463771561878479429765042646875610765055073955197316312257005903075322439042059527329695431069335925197100890314901460332063755158443549501140305611119190722567051601396479946701544442230777655701913786737540283641408876051630969056816056189555093312899450732390494928438750745036918591774284379062432831072304829053611529313822305397429044704267283704249978263021253048729467629704308116494069909270853512947000753213272417348601367260442137246103266865456567405813796706995874150542385493554961294673702399969308306365582372160389040611384076081504397522526862952804251167502048768813456654817291958770706414124948255564996884345038916035860905782120317646777581489245927196525833144491502522758781650941538561380832821636312459598225639259716306052768247322969555986678790784183515079542074082564954728803710500490114804977289003021550342335714405566228436180526436972190546007409614629791587817774313482656334469576692219197229696181029165385563127637641548077046292378292455092965148705842443846740958695788262938437232826911805364381084020929698096682104072449874155549345960795122292526280258188480316558005043440418323325620246793024879404788694384537556363897792717242605775825681634908885777187676452503438508542942996865308533738338171054077145400019930436823701693920878488423442541632032751610969026448193967844796522764107891911780714686669947799351372443642530685552049967162999957963605308214690890895342326328699278812120459053398343929453803148469934375708493682905100512508685913040262686078654058893810799950480102347773062928533632941766396324313638796081233626620583666210088690278334752572839768739662149364683088962739052692827690562227855680165177685586223583578711302762653565646930711673909683004062787884838204675333520682442493379223636753329880767102433393686689011366544981307078752128503083064919259596794215013779589513105808247166287277953083076062249229289058192789346965353479039982022146130647080862614817187853471190849122027005129208899536568040141183395155073546152219227795618326743221302089330942792690672799817890620991409281876340421800737071856623175933451101381612662420255283276501848446975669479397208962016624644875908771939288618267226012438990306776008698100756483740342932313044430149052456256361403961283917650479499087326969657414864575259578761881649827793406026612238799518545598290056889258340373792428349719164301771875339908629243188475821945698009645288617568445867857648548218637844863344204660807831169522038374997732456491514763415946896076316493414710850648498741043750180263523818883663139178633142194624314802161270335050124060811799623780766635048202763585358724669420318580283010377472409457487351726692783013334994370816299899593067349368467330647706666504487856270850944566099665022970605136199052748695275126012658753569681601294460756822505595113990428342908492842919170930705769355610290853569304097765029265105221995177710356333852724425366393778608799773916339925676138684084156770000900468924278761185765797446982565371169729651668658634968239230544935907612337597513556031115859471257754356627325386322474204649956958373157592334695851350458539229247892272602375323835478026866096499446776910526397055751581179492333640915810118200533833342897233211792079151463434711819464775107511337205901938896957506263951173923142243817232189126037236276687516308763013688902656961082147195385889356689215002665178939774965422050849177739857763241784104204515380949683461528497827116537529587090117983389299282298231502403865442163436841554606980069080963311896019096979889433546540636612396799547978994577455094035011916304200371539131443040732118207885613802257557126579277356059715501835151341560600731415328238319972392463604422862209786518666028156310756675303058657462732776192842906116573053454041159000890123538337580429234971827833134446832829132532899492282849983109207207728677103030668889549548353843525773781216400118302957616674807824938330604655777212586841015947658520662636869076671879960714086429422057626558570990180803984337149959097116204265312395476695385103615727456578039006601358758740889016390477007343628804761212540335878303812471164118353610028391489265604800456613877461715696231619077044818888539030870421275472612075823561486693146730034258025307585944932214989479097438527811593078246406930090122835352873569015284037841240239442676982999660210701774741077908010567683805754248071915526084527720035186923793259863942906695014242441148870952352925220342001846575790952148815439289218870884250989285687427157921574898979339298969467029097448439831264941886565081387044407578251935144622381357655329939827913954106625959215471609666864355236726794048288135883179585552632823299831874205855961882108063913535339337520918276101003410566194271455052263619959389844397064324335969026475796913981849968419049149504746620675140476496824316283258288390137594148225683219142547000345784100150448217562624124113102924497365057715189616467539209586204383953443031355814691800152832102933421315903877738564352371487150895784239586526125696958984326384814508981483696127258541600927192838388448022792127406228421041022553196001966373438895817299611852879715842366003149424493477483276367507645375265459832597417347473111155988948256324129448747579300686557372719326996952182710895539896711854221847278795551271391353318033742987829044370999850264294545459827146588179095409182686635846437491063714150718445284509937504022643422886343478270301092091579260959688939375353794201709528926266066242340401954586684697812567545871391986734378447150686991124678741613876523161276973571503432678999824112796763748363468026694776195011065677210627952948250096418734842678464515677934488298910602270034352979642926854544034058932710995117977995429794611865261336446445237003996454401669761777267243030674819821240149022938387864379253927184102053559469065479893280357775776857413960992011551427380010031011048613107730916775660375253281359371893894306437637054283092984612543117050980329340475066711642782998888602058570786119864001456353261128784035277683051631198713458781823345809642283708021766687705273088794247950900087541882734405015690065720938622428921444801480921283597926933474836755913491901448052912548191586632130821099670222256101555494481238120925139283753939335663553191083098374102527001698025156785826467502828956569612080874288394707871111515943716444081243567689433377708358386248523303602507372078813286829524884718833052434718822089929628463423776767301351375231703515733574838209932816840058262420395053564437751634596353185651851751048074900100035158307129737169994443210517747763608732210904654987504130045074430335176622482211968602285298732719204218401397862580873324390004879030374230910833015625905199726188480975691960976048735190815142560165634573505279204553945583784408395705725353500935618184601625381991956926126176278973549373539999884365481350722614426760375864905773266121810438342434924961621638938332032435743681729504837958425212723996960997479585946298024201586586090038172188486317147961486229926382282617483978324017543873562637745203216022117656282768287368839879145834545625328562365078240891227304740838786230100522317980628392287014452770673787603361235576671094285163848625664748513911594701687693721680960497017254451119813640331108858006778446992419707977321270162645772974844225469801521484646664637748634699687726929561925849871649215698914784767551895358409209359899401870358774378314936124377495904602828525695352762428152490882004837221849666966254889480426800423799655820409337616971696816234766571479378758602134513007684722304139028165538711031494130282731540023749414293627001120196009581416642048460410472943359824000376639573663888832467543366517646412267391867368217025046793153480423191139148686786886535799727827628229106439161603853342796198388661776108073234706750262165785119610195842636523011356861083027379205600603685387498233614964312895151579655995819115583448089590990659161973346320251625216415600483240068925722557712105374209216076128242186389828720511046208232609745031590041472380246967676034778423486243867038969570881622190264549383343448636868747758307054667206119247720072475798449225236262867722147949324644592650121897182654636624469647755242739270914382748277178973277103532962197252507368548964950993668055082324763774154137334113790439845451973080084560457535399857998617170243457223164330164672671802865104826393987789496746558365730133140693172041365875823303430425348101900167088742367387974203673886577120886203097978602875398411880162719728779296784248818616180305446914502116012778131739962122187667366668377965958970090146921728163203538292556944220183488080944157371505477881574050584931588447913538764711966681273145650708652217618353717258953236555017000313070665870527147429436250308143129967493796755473949057453230255646143095661359746962282395335539096290389100132107495832603540981356329383752918383892338293129730567706960253080111164783279883911333305562924605392507446042489937641134629827393118971677000614993267464396760581376045163446047924718912945203404626072453151242816162739306680149465406259538261468988283329867758616165655008433794522321085307095688897232789027039110551413854931797844563885752244201339279267256038677889352783790038721103339672513727502785282071113269354868953391573218443790969912472257124265638410597367789221106756463485514658581177028656628721336381595182034201287085250494124762158219470843328270136832300759546634424069505547414789437896380452346609611982239151806275889538423721026012546643826391614770049842664493372873319533893464374395555986990781937564106905498500362742683590494573382410926553252694535432018218824965758925571094517632547046722544183791899452665356976414561425242384302941461768693282534076350601623784926688742528780586989697424339653353482076921347140090294936231335171560376293120201198880607544759657231451218190465489863904943375834313604002451047804771693557048303278883954412107257077013770098307715424023571762473110654233486347377844151679774052325451598362777516686203973082647113280144365978355272235222802630471313057343169948740650612202867529758153792836143616605864165193148212881940408882027720195572896280207665449296112769256819607323394178021706601241673956028544521860502482605737281942053925808890908522739167779442259790490601398388430588588017660747859848837850984642905260099043916886485721811826482359394329444467660642086320072717448794984790231592688508954812703120914597665017077537780343079129316600738353353495920674716114531820073766650360201389542746864844161035433936331236268305599908541053138241281302766635133855895345865249189166038460982060341644658484503997444928841468192635829895506713064206344603371008273620868865824738726292168217024212606817820906176694474161979391076708191768272235697982554812611680994527403499871834692871325169011884510609665542718368284724759988696954193685230314207975602019766828459615953044952684125837238866648640781965332907330486054317087033562733091146189734502947128704063456292226699876155844355971609960738210069278599793255498262807979847809155873730046303644004061090231404166852999573688440560667430547983658884342147451515687359096257998323040083935726431798720058963576741988692735523615553947873607729826906972706234901309581031767687869293048924831837106564508203825583827812780668011404660637577087241744976430712817102252908563624197635962243413173263685364510714707569127466518862489174018236228794421128520843597044500077489068415730191431344888670334872809814060032337404362424200560495147654133023120859631949603004341502466030914898991630855548845958910097026257251440418150117414890553263225589090273886541245102551736946906048669188513455971010742768831667644518992774937650929455485021328845652946774566951697938422886199520388595676371823996218263412875639346442314025232677284630590406179804926989719816658536476454048623239525875951505447624336449003416255243113079728540145304260623309792960124175641206465339166480170092232396676087739918206714974187880266535589747567635600864379422957113296605304157124609732332815876154484094997167719497411550870833190317452758658307094169911453375159974389810401132097420732417735753302207023335863073592580374231177055814518559752372203185909429532392128731006538087451889383678325360038092527833682026903668387635301704522762585310476020734988309362430985943577671878516886281914226318415944590907846176692778061697821485035775931972750701060237357704596156624133179280566683276256235839787700512646992229672505645855711991237439987204360370834200273033982928845522033372495139653504035153660307020441117559903730063223973816667478963805698230064492004097507148033822833393005674031248539718212827444370102435380329787105882654505331085062265902482095714317731048201727196043691515481485724288923313641029717972540819005142976929201852244673303331605581038544506950941310887150412129273211641611231951924796747412148638692805153880467966840985565844213750903648642699553908282273589926803490460838603858622421353162828168759760364490286687865021875216989947468331589306669594252819690903574718080477956375601271249337029932279866344480565892633687867846347857245309547115108335432750512849369377350794760251983285112052150441115598904963423380008356572077559741023638981887984263735433122243194914444116047555922243623390349463505134349082826475240567335982127246554644882161099821741416965913412086811184433764316655709448860221444069400891726840044303291555467726788427029763960702107462844148894266311927622686499680819394362894858707571865018436900412887183895880612091672546205963828313405994049074490253450571875079926011652221626016472864055299189417793024216315439532177460861388424043274705697535877522391952999531470197765431503137480443503206032043184664593450224602909328883811688308524868390752493845941186167997689147446444743922160191167414365848036808882334370628244844865383040453222974376278612890550406663614550374568853829207801484362502706169406252666333665206775581002638597101306367563725408952265475077885207844967161991884404136594558087341950935982710345682538372523131969371253059001768279799010654145475187082891785976225067790159421668779118028296424839814532337367075541486522713281264745284686896530775688618188841728359573092797361736668424438716719152564834283754420092609006585540310640063679734032960023361071569015902690602121515977428563788957454514094014446918971916168478888116887809002615431453496998428005738491794671176976256347885042038644381245327391731365441364276092981547055032594098712246218099099888405317503316237236457000492640181578223751163458224980428264190046986886071964655551142182033407809336007244029352419102706280101086975695124585555275683018331060924624066665107249183853015200894611637799331181630695364867838065993321610460699304188688768770042629143331877936787907388738019007890714200775468795992903052667224188576247963243748270888621799252620322161187802074895096191601751218596808302083751750050857954832913014835292457994481341396059009444401556906901925386350136212504266530100473471978207541057339061896070841814329214795985466471038056568950125132951425335032755123141981309400266709952928149058259215140886913681445101565137048534209304229586812867728272017520198381462107672718271464778880310884727154161334120571041927136653905643362315637257717090925855164525376734623457849274706524947016896151757806412183769108051174926814482450082395989119153857107639803481265037220878058721435429314511977284797395926765392561958108818861820167873278647143172241534797050135653315466643054977673413547201501289228157379197828471761857846459174774204459894122213834994061303974194461648850163062820695227739973303817635659252554241898524693006177784508909490899299199961225449966926143682385970534155104051009295976083535924792465453842596477291720129801131288621264736616912244940598441609437365446271423150252230215861226877703911439855896219033943370017818943910791655186247813129399371303955043681076311342612340889828882042921135211604420948448008168508225304857554444331366844694123255093056308873963454730197253298536515015812766030940799663852725479447107937005315186145974377689294675750668221039559775265736336580808234422293869217047569453227187986086143947048528689427071570976932892823369260524499695090614514928824615945852629987134852434078133465228881264506642482401570066369803352782946895711570380619039424227140373540513855644841182717447325454806879206575515259499519036990476444023707805736927445929719660288217546362547219022342071304221365102479903152980226049886560566985549666798030188644436865026186601942663261630832362237270268059135502690798686521012165896747945568789547993125927775247962807522684328874013857075804554534020152502846636587996372682159442486906860929193318565884740536649610536278492381917634136954194603073529012436590258697194272342103551348907777869575977235099931689612181862618200872023230646887621567016667312974149315756840066629954550947655855516336902296059077259638313564249729918181911645977528004827910973727208531997496149620175013982564340671052886185557083456052887635756890832999851097731951850585905702782915100862168974644023626094288282569562169287909293758992025838814398563383648090207026751127549000987370793620959974310058485976475729970042226270028809296152443691014894391708663190243485310628897093311135229449136180699138966186518523689444285435997943213403420278267472930315176114305699638959832171520804084415295191711936519955946435347003374009198202526716598433004593192636959544334357466403070132717444520255315615532689484545217138023738986950634411407509958636647224121530672860224738236986594289040921211505372220026461515826607525137055738553191391541536979682899367389445701219489958870252025417203763493050960402628340554353396771712924692785986292930150591509844008317484780581648805353607350917100561757046842106037629912354705791611870966675311821382073960276634721405366845024707000048191041512917458399594926473515145491382879186894514473734069295072630943451976676609696550517628282636557073076139107900667175226845821118681144930917927886805785445815930840628055906690996355987470013165391751442176429121894395724726747807504815809518933274161742769626863118047039515274355745431449830335220886283313507177904792201434371504709050272913001166560874341793379411634066775719492789958650692452043442595000189818741983340057791506721000495477274850182471564971644853953769156829087666510484763544856739963916298725487879799522703064245021523761029594594333843656836831918089840139192850151316447166152135008472687068970694115013305806334898484315607577917098962014087154425687641316047026317557190615954868101392129885398697175775380340606424571676398271593228292515074704052868377835887710734432651975345862728634534250476462010240486983454864951338818688227183416420896784128059542549625363424512024025370067622752978298223441086798507193626842759660764926683096640063196585124116529747534529701105604279849822549662215933159261236082085848814280468059383682398314712204916635750210816902121767883356042493336698006973389327587402362100642605429540205366858337954082165161387262284393560072657382724694061996735980542438396464120563207122027929481896252229892404021438673954919140160688897107221077926459919709688563131742997057469390636513717721334706108280183740706575429759801156875320171162131688607279705672706404777292352845117890341862276273964993486148917448963041204674353273374539310259726954011610702095495708010997480446236091339139387913408331901945317762283266070318014943776305786990158731847678068988506820971022369202249095941143032447161063181835923525165030535092563198089914052639915670411249461267523524809423147727709978587946973066527349513506369430916822854882064561180201647156912671482416408965342465931339319356832069477458733399009809903236480208035958913770766134325353214266608602811118558252740702073336049136799435237003914058247622541011022312937878600847202565036405184482057218742203490140261904080105895271135844955629452947226588810022496648843282962799801212947757807403146064423379516047052796640952738151415161955614919107959410301412428344125934498451126835706764898022770405197106267128131917206424278169202861234091345207460134980935455429236607862010773063349049461260977767460256805490882073316225494110626829623404750903213206686273570749966434359423464563221920028961119445049859380685332443920641923168060116888652614313511995456070712044405792411430181294912962704721750632314001608004523213948361884818767953591519912435122994321806702459647899468639983793050530693646431145011849224796309907934398459360984777575919787170888045040848483181611576457983136545433821067084338686684181621448743617147732293104454620151437733505512572459810473658783828030463262656911125244308411502000897928254702331175557906980937313753556989356940300435695925773121280215012638043524460952332451723835528376004189125883927687090323663698648208538158645994265985120004260580201061498746134373775363999445538165651727782799677790758978732208602500545354230670994267481245059727508172794368958086616071195132156194409478785460897445668906493437991644281411743382218090242404264301274409245705706629462826349886546449814082792810356737870500983505507801472812127293533055497084877852622511601847326283212940580844065299602638870090040623499262470098156039302864580360663775078385887646958934189617674169810998069488926611174199526454139530759859309463440582184140766972132888243701659251494628743805737136097018949775671499442932681396517604617130419978620739468761580974185055393766340619505283034878134283826687110538528014118805719162368863615778070090885273547538351953040897560666497034425007046711864868879127776718459644674702393062032100842128837441440028825471589373492060546411059604085845983973718374999233828912592470952600128234701755104926142597069552891823521336324882666529063059338325176136683544534819077308600197433365030546036561888138605117544078036156946242432326962936638327342198617884215046597340061679301711128368412150455695178110564430129504661333977633741605608542845297483642644232500868238843928529123620454183456340409769770409462940392382322008732240449097242636870982872059901917857273522144717610130813066817218340812019240932856740388132247552101630432402403297467113807721453264625537194773398009858589074363646874768720061897234310585955583446351382332060952841454219790064984597420725712331916333861729075931201102451875877991352656483663075047459352353659428902428599461432537778209857409977354586271499368775333291448209532909129020760495124100670593727243226298201189142555222565715222308988276143905460371196338516694597852783595717156995141028364707738847889538632729154930396565208579713406147920697004656574352566887883824588661929254343221780395314734327533811976570414324329526473865429645740134263335618601134154257672118422696041581269492808242328102448657024312672351236962911860344279532593586542882800658096637653462031143195572821113040331078523819269303118577750344269504005084883137485701114734973315531637813992673057798087792758138253013733977138191428190944779944856561494118639445101234297795179568018570220396232353865083441494640896933741594282820188054468243239106351292907635362678371910955636716653190917883671157288143725830608399753196401110720877386740468974867294627107534879562391859009365658247608658900840466576123130738689244463100208484703274617166066054213079150701923528577044433309338806151619823598392292095702809993988654054164223048295578194472200035341797793948050567021481336918509601409531506677560171880707410031144105339556912437976771028870207616803131285271859186955062893446565021333150371528923961205573062512229335945360022292149557655030013831800678087477515812473622576616214540217391353088168412839909463431108455312366207856418398483245231460452460647454027256707033120465994177569027836635017750702337056285396897997777107341524657459403101728368399589393027969074824149187196094194449203880287789604520781530576974181148692840703804329267618534303320697134615529570359647243686891238323181355345261039033562472300576884404949110962789262531862348672902764287906793658984246666112535053009431134230019132773050386790645601959698920684550196217255834760909087599306527998634367912864566351865642738455016812213984222960187928609672085274689533182545860443096429179733257712759827780886901395405916945131664296505190779389228199404285152362655530223579228652203451882351919025814272133182138929828105389980156990740671496822999673294030731304898425919802139255266691114227886541205019454391756621888821979060662179025766133756354515534230186092229014778651842612777583983075922229911421056227814990084076597174643295375079359344012962357751646827822801154228185118258098593999891731747869045424840410763987390982119670501045813162582517065286547290005385221772814474013886176397357107587234151418411798976653648349350689560248925510028663792774063892991250397254898098091418863770521607083996521038747134918265085707752768862491376359368066356484023588489108958489482527949920555689353079361376980706838428501178031191796117536766577391316111883365445851010973258137070790414163742599817510371094173020614118681510295959090329386087260354409523727275756913447045054897074559810288197095844537077926225701947655735866254766170015316348528370345335371713172412378416255701513946333137687627783540221650778602376317242612932306788809769104941481295702473223603389527899189696603206706993005292648626906224006134927073850224040658593481435624100514417577372790582905017940940230612711104451220485618489483160250024488095775737739326173846529108630099697391939475663614559066477229464793397709758715372525374849329025632285292883251791400163882827236509721020430774585752926107304407455115623270558972758021736720570493980502938857423248761746088021046501984323340442755784319841949576054806162400591098098244145421432409594785702922080248931326479446820206375575946811140987152273108754508398926736623795075557323376442899890440610485543783496627381494741506922300923747488021649502566250621098902989251946621778243331134307053237988921617624594290181259227701457930981666077078746221732886929445788091055863939189825158911935838775044491807812476794371065523162803580648896043694872985948434501376425290461541189476070460002596971773649844517722311015662957975072552473041884919671003611753648807377739672051031214231074868460954586782790736185206506683179128892234195906465948023702266787377366200824248471038929107166114202302410500343674819899292035309122679015487080259471891695609773530676414311258965926427598460361618770283765069982055654088349019112518575860523145581487139077061317359065974493138919455172773256222654304867199536967252554878738986811705291589703324451933578685064071911763703080373361995589699231353428350625594368138186941704247587301548117194146906174433479680191584066577852069122096652881750405086611773661203391678778488159744956851513235482845268913168490646637204506733729431430456215974347323810891050619411328299454290053560897223517801623202709446229046436318512525317184865602288951007626446972241558471040275263343613669102955069647937920151849203500029194836926220704522879532597081317072969701331966354237160006914993056083203465193212652024595735744124878717332210089018288947188422271775679160085117369670093660891797503418739952513083305907854517863949628387078244165834342535455068831305825528423730742999642667835427214578538860435966241509217291030312794840436606879874414546249170694785058062268570942297637597029660601899976112951476815240844777852997570105193801372894730614395843053221060164650352887986324880165893544739217304977632659586561614430101659933297456340472921040755889021043614089079971377824258845642835883097440010715602475501572796304557668673917379626539756415017507129695612344838783372464194131165779182356149674593304593145411758806594352062177165707410090723882924085600359992977198864225221288356833554153010694644996251075451434698907882599412976526605555283734555719289667408618960885130786305885498853045325209585797925989124382277306034967200134380152755508042428324137069669124647403744751798500782602193736609520907542225523979941047296515764137220288050451964267712823379954875603092167366029669165299463943722318965702180224413620285639109305029607410010126287579670040175439454216627036815881856337678317304012575103439845851519106884507559368373328265379494089446415088391293887812135061413726711039935147833980435932895976134704811032133456824546453547615038643712285555759786035928967047385829714634832222868918835203291948970623925601213121599276605087621738032326829039162981892015881576473130634965435243781870238647806719564793314376330368219267591596507759220176821076105265322942917190767827175172712656050800127093485031487961601488024889615097318466550476924244461579802486409088724401397718474188377318784580956562093766571966061231037971964203915179270137366814424525509601666630642911959127040119638990548288603617457239706931815379168575101202339956327254584677892158689512458322248762205613119394608480873199397925386815753857977903682278585814723152474542120985635573390977318004122006231071483543366895052572724507023577244706802869870277712785340923524339641246533950994833658296401439230902768804363571368119553074167931101980301257172878429432509513409507540104313459851241897878551807980898738026170588395629372631118798312557819040533086651874209743567761066860006189390298176629950139881961767568285493563074088683865969787383171322843534935070566975050770856676864706379169027932241336757315913041800466413019686021862342585016248285081057682601282706494366096762229484053401869633437582444394123205691229152465515044992866772825493331325715913523433465296930799985796520788805272839719853451723626904605372827291670638581094359514817670240621469192308224073884318342860440525264086606843755524568112344812020074282004712854754642668214147976548044508586208337027869581171056377754971716602914529381546629608951933233551729862863995518183596037776119330583693043162504578612746252895766885596155075199013545962266074675949432552138751651657649178030918275210503921491526242128264535700882240042061588908585059759203165444667007983667611108667817001040338948743143009014452084573116598475563612792270725737466233345147764341471605748139181176985826386092545770590659989078891509998462386396205050208170612192684597484710382661930614524805009592248300154980401083852528523180636826771797497146217271079267235566253662396070730639101631614149206668095571050256682397532946349763558443558460597032350664879728846089907817027508114425425474853460610031691160022182962106468972814814882648534280687341855478872159239929532205845150972285674429548109698108416051947545343928662407253663639216360805900000412861323231784120015076659461678873404326504590521175708010744436342434481479196226236956253400509453693243314499440125939251793220786867216818834709114342863069478183830978470227123700817422372467966277289440562141654988165781729502157011161910994355507598936872674503252551798508672232481082294568865518533071380181177968096250674106928147873959361444114248977688125999876166329177359992676462420829022556609006906678727201547508763215693418830620188022417132038572981345004707581548415705973257295501978669499381057041207337980828688288948731810926023703585129469991334909505349075500456472592454451718304611583044863633104920200077446707588256574820798904060580993258101164403832020584234684505845775367803221368579806592912679487821162864776473549050888954855906050900855699678570394018603800029120970193483358262269847161862512909471115660635837679229214594441618911548844734406939100865670994912234657251339050376049875723477723244854423942899087961554394844985567683735586791844333150774612870964409692574129598236530517023535272420136761257961277692480036968823503960598787024546749046306635812698817496897742921001527255574382711133684724812939853396415985282737693421901366416422759313943974590130602499293743700717541847852514079395101728731361677798796459180466422929185629993186058191953367813513360283748982571899249456108251297825912901433982769033393396580873970915143217700652443285477728985225803664975493089603475608696400167217495733688772595717912840444812740840023482832777749287981726626976759242205702722798920193238985127594658115381262549369101023535246017876869803212686940818367949176505305685720734579287936807391759320387534947249640230028927063187077289961146290855327322740037449641036916722296329115222753618512823059683947728947462474632850561526023290315262799226576245783964809191170141467352019418364925933277138910845915971028362667185487945663588862494760761052626736094240365828517125596163253435467980085251331811306263469997315449745852472273920176946249087460825471063815539738532783429721560198566118870078597568017394511149608038290519297870467052334130058410221747318413334535680857686943451379620443374702973570426437934205061602748380178010175136154548073385215177480569558278163898753819734393591636679985767173202164481177906977128057312292878987917710793701295866404723653015861124521600916408653640010370207210636700671827177930404466570233925058404358727602978944643161053246005439185544989038166551351100312167837865460834775373099127456725601954028604259073257919492318226268738994241049980158326673283069415666395414085974398725057504882753340737595156423967480473312772888487005841440236214618574669085634542830156095202310504105931073391516221900964785350866527561588502345969582230744943109918906665695939051421167479622249245335853174284446305665492674473689075169266575604588208374034897769384238747680688630119087672831188334503821258809118190266065198149697336694527323499874597039455070636805605586949816080338219838766755689302737400752557201783454483240747775017003942151458469929713753285732094425697189293806757745838465968903495325205631067528486577942344802040494566412148093000329378185609411351819419691183860667864005171536111819339858279804966447729790910725878955050155891499671995180602583662237472378929565024688878962366432385713083980299459688707740095263012302102898870629953428359860520093308394446624066956367667405488732386654169200634389183731106817989998260069172151429870031129794510546132034988729118132550242304994212890396882947293428953164583450300443754764155108428656177818107406447149888290541492847937323352570153201697523361682561342167503918513362782227719917439758318914007318327762087780041598994838015847857439589790627797707257551101256706474155842672852663966635336301330604466039962843735906230149098976945854474857885202356911979409811113034000395294587978827447321086765388187347509644509102082561020278232838596292245197370152686175651761043936199514033544261373061022852880641666054313247395699384758290480437804619067428936719895089270310254374076248613573030954330347397580261066863020285742506423554127961106567003905853187585274087528422590380365080271623334236400895293861441605222373004247683599528610572359962856853459548016035220796269184230385558589618121310726729665859934199614793224335961768269233329473505919131247786504441875773018485340075603496184755973308988521373523092955122863949377680610638160760090593455297665022947359173015479262046065604377220825609111959819514328472365088400183404749601755536003853247411571138626526420430350536758091449767114406023782710057424807842716437325069827626588505254283493304827208650503973117591733804042418962505310462700934303753518149881597895633555187085828769960837769364643346965789419230536659923922945955820984222744221964154462332262604258469837966398798942034578485062028288800611339597833704852293687511641549174679278140145788116537482970717767073286338909901914143691816932644205900952328066994353033805810080897216718202761307075354505787395415967235328602633270967115071214291692263798937550432319053149102585499328923379438536341133412919844155061603493762301124985817693901007497524182180951673329694442902106968233892826419335021748529823851659670537720516757472052281194857801397284905645885485400993630020157111315602409255923659659720051932484332721893986339185077671722866094122302112611220710976230487950274512991999783440293901587749173767888664012590199042836401608020319224744281566714979588103005978946633448373290604977956121699031419582126759804285619563144787405135521458568033794142895805841752539512780545633885657653373800188332514381078611895942846532483217769823563906712150492634939291220440299658917545459914511899629882727714380025409337663893280614242136647541167825282979999816284912794026078653861138777566265386090214119918320096849484207540916566027326085812088065712188147520230287158393073345386738326521338544722334255012260235564984392952276465582504793493911509077906960904426106239600379134044974848866411298092345849426002271649985294257032114924264513996430483234513685625054014401958404985120337817941560635630374970142861635204188765000903335413839643478858595347289068207989455945262175810604828739235452932762722461276703457131049017022322275269117642906551007776160909657271525113890791294639672546233933916229487248963383946205828139729903708493482957166470657192488826865993614268744642305888095190646103828375838266013053461859698078080283504861275131690145125125747289808953681986724214266588794914174127997976946189911137153455159523005001397960800878179157790950854465095822236776399953561179164110370847534180763382295695108831817547775076426181887502099959811713019390109941028244219294308855054485784726368289004760546836102100270287866409384400608252364595694554454449966340703190405600427278348820472968288386744616846219519680403519666997303250094091371997323849393492192232614336657460732937863473612467459718785782898626033232443332855210827567799646169900754575914526850732988679024933416440002945425288435002653878807820350899219784847597609336510878737730725238494570851759885869322142905084475500461616845423613171523374446678114294273562601246513132433230219674599362047431917028341780481089764810425385536368454875784507092590098973270573786789862388717012211415508357377244789824412046347653871612282344777459189541100183839489533797011559684189148193622433943676323938594588710481609980251615347677536179408177699957529806370482126716491981976035670034774687264383467167121297911152087079086287066125456219325603415631784072273722493786701590269598357236549706309295895081873722903528669544118409757974392662203498317825074352341787916018271270988588478260733666173353958881604684964008061328456721515073567835820562800998109454608923926623053595914500095286808373825778091444238383731941219866687538371129764661474254620130774006517995021266509393624226015556997361655227196829160701125895715318797673818314287350344604337914796854248657621503842337860129034864680516115233618679483201621655628228432774897228698547921478974341632719930533245066691701005639007882985123806232188235051122106419517311070914436186932415661370867383191360150265245726684361781753223177504480246264236518145022753113327005670659277000495673839002518063169177410670127551103020051842425417823442094498569450216267871499290869485055327508948075885224067239375316116484595701907501169190832256377018547121861587651328385608281523747861247034084557469984069803931121731818639487296738766812030149734976886678052945890989993644198755123574881540335070268587138670172252487534350258027943188886016796269381830160385478113646266046526438745647943332427830612881315921187968142544201015748588966005748642815275511023429321790313642719958838688306226122621980908067375630066215638983328655599176493556294452650649511393459616089461578449813330453556710264100580535142277359244926937501n
(function(){
function fibinocci(x){
var result = 1n;
var result2 = 1n;
var result3 = 1n;
var results = [result,result2,result3];
var rid = 0;
var i;
for(i=1; i<x; i++){
results[(rid+2)%3] = results[rid] + results[(rid+1)%3];
if( i > ( x-3 ) )
console.log( "Step: %d %s %s", i+1, results[rid], results[(rid+1)%3], (results[(rid+2)%3]) )
rid++; if( rid > 2 ) rid = 0;
//result = multiplyWithOneDigit(result,i);
}
//console.log( "Step: %d %s %s", i, results[(rid+2)%3], results[(rid)%3], results[(rid+1)%3] );
return results[(rid+1)%3].toString();
}
var now = Date.now();
console.log(fibinocci(process.argv[2]));
console.log( "del:", Date.now() - now );
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment