#pragma GCC optimize("Ofast") #pragma GCC target("avx") #include <bits/stdc++.h> #include <experimental/vector> typedef std::experimental::pmr::vector<int> vi; size_t COUNTER = 0; const bool HOWMUCH = true; namespace { template<int n, typename T> void mult(const T *__restrict a, const T *__restrict b, T *__restrict res) { if (n <= 64) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { HOWMUCH && (COUNTER++); res[i + j] += a[i] * b[j]; } } } else { const int mid = n / 2; alignas(64) T btmp[n]; auto atmp = btmp + mid; for (int i = 0; i < mid; i++) { HOWMUCH && (COUNTER+=2); atmp[i] = a[i] + a[i + mid]; btmp[i] = b[i] + b[i + mid]; } alignas(64) T E[n] = {}; mult<mid>(atmp, btmp, E); mult<mid>(a + 0, b + 0, res); mult<mid>(a + mid, b + mid, res + n); for (int i = 0; i < mid; i++) { HOWMUCH && (COUNTER += 6); const auto tmp = res[i + mid]; res[i + mid] += E[i] - res[i] - res[i + 2 * mid]; res[i + 2 * mid] += E[i + mid] - res[i + 3 * mid] - tmp; } } } } vi mulInt(const vi& a, const vi& b) { const int NMAX = 1 << 20; assert((int)a.size() < NMAX); assert((int)b.size() < NMAX); int pow = 1; while (pow < (int)std::max(a.size(), b.size())) pow *= 2; assert(1 <= pow && pow <= NMAX); alignas(64) int lhs[NMAX] = {}, rhs[NMAX] = {}, dst[2*NMAX] = {}; std::memcpy(lhs, &a[0], a.size() * sizeof(int)); std::memcpy(rhs, &b[0], b.size() * sizeof(int)); switch (pow) { case 1: mult< 1>(lhs,rhs,dst); break; case 2: mult< 2>(lhs,rhs,dst); break; case 4: mult< 4>(lhs,rhs,dst); break; case 8: mult< 8>(lhs,rhs,dst); break; case 16: mult< 16>(lhs,rhs,dst); break; case 32: mult< 32>(lhs,rhs,dst); break; case 64: mult< 64>(lhs,rhs,dst); break; case 128: mult< 128>(lhs,rhs,dst); break; case 256: mult< 256>(lhs,rhs,dst); break; case 512: mult< 512>(lhs,rhs,dst); break; case 1024: mult< 1024>(lhs,rhs,dst); break; case 2048: mult< 2048>(lhs,rhs,dst); break; case 4096: mult< 4096>(lhs,rhs,dst); break; case 8192: mult< 8192>(lhs,rhs,dst); break; case 16384: mult< 16384>(lhs,rhs,dst); break; case 32768: mult< 32768>(lhs,rhs,dst); break; case 65536: mult< 65536>(lhs,rhs,dst); break; case 131072: mult< 131072>(lhs,rhs,dst); break; case 262144: mult< 262144>(lhs,rhs,dst); break; case 524288: mult< 524288>(lhs,rhs,dst); break; case 1048576: mult<1048576>(lhs,rhs,dst); break; default: printf("shit!shit!shit!"); assert(false); }; vi c; for (int i = 0; dst[i] > 0 && i + 1 < NMAX; i++) { const auto div = dst[i] / 100; c.push_back(dst[i] - 100 * div); dst[i+1] += div; } if (c.empty()) c.push_back(0); return c; } vi addInt(const vi& a, const vi& b) { vi c; for (int i = 0, carry = 0; carry || i < (int)a.size() || i < (int)b.size(); i++) { carry += (i < (int)a.size() ? a[i] : 0) + (i < (int)b.size() ? b[i] : 0); const auto div = carry / 100; c.push_back(carry - div * 100); carry = div; } return c; } struct Mat { vi v00, v01, v10, v11; Mat(int a00 = 0, int a01 = 0, int a10 = 0, int a11 = 0) : v00(1, a00), v01(1, a01), v10(1, a10), v11(1, a11) {} Mat(vi a00, vi a01, vi a10, vi a11) : v00(a00), v01(a01), v10(a10), v11(a11) {} Mat operator*(Mat rhs) const { return Mat( addInt(mulInt(v00,rhs.v00), mulInt(v01,rhs.v10)), addInt(mulInt(v00,rhs.v01), mulInt(v01,rhs.v11)), addInt(mulInt(v10,rhs.v00), mulInt(v11,rhs.v10)), addInt(mulInt(v10,rhs.v01), mulInt(v11,rhs.v11))); } }; Mat pow(Mat a, int n) { Mat r(1,0,0,1); while (n > 0) { if (n & 1) { r = r * a; } a = a * a; n >>= 1; } return r; } void printInt(vi a) { assert(a.size() == 1 || a.back() > 0); printf("%d", a.back()); for (int i = (int)a.size() - 2; i >= 0; i--) { printf("%02d", a[i]); } } int main() { // Fibonacci: 1 1 2 3 5 8 ... // Fib(6) = 8 int n; scanf("%d", &n); assert(1 <= n && n <= 2000000); Mat A(1,1,1,0); auto B = pow(A, n); HOWMUCH && (fprintf(stderr, "counter = %llu\n", (unsigned long long)(COUNTER))); printInt(B.v01); return 0; }
1000000
1953282128707757731632014947596256332443542996591873396953405194571625257887015694766641987634150146128879524335220236084625510912019560233744015438115196636156919962125642894303370113827800638002767411527927466669865578379318822832061271497583230334854893489572599230722912901928209264331627521730861460017912582042699659936020959339202005184862028402447343139811367418720203868480175318538621112878108240617741383293554561687606454065125954718029126547942894036981659206361019359291352135410376799082940320155702716115395031975973247782162957631629653356694777663285062345245593460647575025935813443457816767646258788590113727299073729478511448089572456191503507025589529116868550008802013233458747217794781447546792016090170642585629359747546532757575740077432034913428785189795354304734560307765078938767286539166799232817449361991523768149557632085371047859706188438731530582395627560879063107819004975169594709736713891745704555202135123350794403360712030504144685221041565037321067932275625864751191461141736034968121738023422478608029202109319249649040983239706683247054441763512526732455275419501683845206023007394959854279298297831204382115757645787692495583351402522152720662441809003259380753628491796680952971185071913798336788737704599136393339558142120369902616179721132509184002305532760710431647819097430043464779336328760146999612802392582947155731668894333945542929287187748774789204296166356536610796023919702109728472966709427334586344798048633944635211654971507261342768205479320931750798880101304160279825063541823440345587422367012826663569346112946131231283890600365473276602456931515185001832848315064548002997893598516123707404615822935444070174833951457586954749175026454212636426222472060048855462589961190475892101224280542898621594646662478564373572217775549876087685912030118551635668902010344639983977326638889036507841618070915452529927597352139574154777291460087943143391560604458251078235116627189263792331301464388059787946844487906057678629746098962742666356968247429338674020743655942605794479071193052258931590719386545525880429139747140181849169733838138446154843063123649290835584278078456131936457559117221369463381803116003078962116686528959537784364644023825163624497181973854441495631317140028503389282227413460301809422483721632185471727045281382407842563874736524914111808078386650633994537623920670051339187333107136069698189628284763245423299306272870457991293245741167533902274499963096566680922262516468582544557851349824144127261240158157538180984666671450069888391785518008943701890257219924852087429155602619177522812466062899678716652967848726848490504132849729771268801163997837643428020245225155010224035416988518537501584673881194047619720619603126534496759917893244478170702904446589571950228809157793897642423751814020998999581612314779022957811001686701867386198617971381398546662819695485537407073562286161655394280764184080921204793281668300598450478792940635631809747975515203509468276591874161090763750690276529436756153980326138890194485941004529227541880945735620795421899662963441346396955980991375010053760259440113617219176881147264713549808756023398475901193275473892575308479804907335837236726817033732665046629357765465568695644613723720600727297037475675178160438011413184468787091159497993877778112826432679827905157083417389547113303140937243680388090656659576678707551401874371976882787437146873085035927166554972119678413041265038397356729644107267553486758335040514273824599870741468531789783850252649665632542683350716994019918967611778476502878867933450663917042267377324685763362119097117544591621973544061280999416255937684347888783565752777401972791851399383065900018304033370131936894596722887286073304345913658301133823320413075361823445008766145707252376869457962973646841107629728977320278508282819550754463084684847561438117573695014515061356879019554017004594786112602714165855107108834583252908251244110558337589786370474805986045347251500257620959108413730211327408446202268366321335377576637894631388327469117232059029540024956318046396290428251186182306963160641380576856666988717582573318377262686670035226467545345109867017615892072456468146637904048253978140892591317589249664687348670563188319381754582592871196904229602059312226131283230839738032069747578232692605308980311770033917562283307963602287807482899093644968407916560752112418512135701149410631460405738804169475671002231646090053711470210784382439011983517900139825749029644505028152512725089213024086252269303816862027341471821615654512373706434911343088388985022963817317575314650410638386173372984318819533933533642298635991688903620411786854382679871298668305262112391387872571180835432013208128346286045618890089960185768106776406004120689222873305000726870381201762912262517414860220909158701927854118500711011094807303215627050927515638394976482611757971916206009351595441212938912242384383652138590707693874781859864896141013246370067545771997078180240193805176334368081665639037830100557360650640241158370308336752160254803292085612867732313373362379424922294864676925567558251008254273169779639917302332096986653591184361218099298416546162123145604470470985197048898219575412240848443043149194702091429384884700501409135147716375046503987936513912232297535667968868660730993644871001182702434670151529391444331308252502713127396984416680670317092936754370540350299990607478106771793012391638018034798194085592402311849488127680371405162433411926178141979603021186895512327740124378547066213324583016607503798862163692656132680292115654479573005858991240890398707367868160247433690154827850868869400057220682616450021098959890770030609041005062058815019699745916836280823110861852942970061608210328075891407632398976037049089758364621611794295586855678965506040503320129464965916297209893507248742658354718355489383436238268302726139145980468344782057874531778483300293761830902892062733581927636335300096094433420601331879098335472391194147544124773291564614856084243951260050796050097638400697364239912487922498550165073697059669962073746916272301140785251213413640426436120545921748182265977547588787157644997388904522719953056708841343934164045926476547137741046732575851155535160704798957047005103194770481118528369985948356317514237815195793935902146476922976930534299571204620994853553580917819231984626859763926664234813419244308825233634521519689643325451204143353164193407923285623499294739875720737058242605693582622260477031568525856021988142708124779867508941030548033778738122257079042153155708562448355644289391526762729234390208715007159956452814650354115944768979626091086849030604686704741535959175352644995059239197150065731515213694220428340424197603380521272939051334630743096406920493778259795422229282204695326737334163366685888464570799663958425502076102393311198140557172683334954852962678694901760541301175084700900975086727859684343829763182023192441879945452213400986220010413697021434633428300173748026660536162405420766907387041723004780874591443000841637439745662790079580759926454338713839454363440083434648264172074352660422841098563618102023267765148394789420336596136927452074205760207344974764497601729437196756021653678947387218277722167506326113360487919296357509078968390509625683302922884005631642169135352972646413604206390452757832741107195981321620642203958822648695176383223532923480116108813112611062712676850350872838547640266609344329693480998967166783675952437452144198444817581720234920825506779148920751583687515719259611243729831470564983623102485228781928699596759469982012918581221889338414080525465572215516207420065649486617076810634032855208096273699560486747741686383616055265184028191426663320701778441023236644926020816372328993276884908689708745590124705036671019180162528581331286559739840814696722557832223722100836982372481080170150255241465912388878271927101524149423814209733618378016061552707989975524225387782357483863372238967512610048197950365639000196692122529882505370746357772140996334524930690279714263735572978669610318192406492901487985982369825121094124360497742408131191974714682008997204478466235448309807291972713424835974200014121079051227260754579356974711936974002570263964485288664689766846904772208537379535048417032773581424221560802495159202532811748368129100577167287182340420093227989220315429335466576398667888423664025346047808137725328967994156608912606616066505967676968980942286141471995146085301233519701760857174560302179393547749667790943145537582633324079471297896372628469685686781278536744445858292865049283130332827386959748429639888729169801063553594838418070952685427728295165292536436648908500618932909022707093200767279713139711851617254365329184453859429301295075767826517033138101386446189895026379294335066910534338127550518447184827233921808819447915057689806745551318178144274730952517167571223487331239812619234854524211751308315920082700622157663791342436156534323493361745812383407932042477523783942125347437258385441786002659977901639044655514236480985353677785675810877410247810113115884575316520705828484062218494024990149498817474834715600879320300791264619947453840159845838648075556397967566496569856568834842829161249518549283584492818732751493831823497237572544557281405380369061231405682554280328754643240279414661288964239540713259454001603392204878267427931450874814718846465531744524045529373059487876236297730199722531976073465608703647770223950682371919095172261075623057520126031437682192624274375675764891540662426766549611865368305788363712155244270811247389349779758150086874185839823464690194915450483873957963769895845747820922420250565092334609733695528058863666543212607314699731589623383441713671422647879757597477833757128491593314059982959055360542779490742479580759782570894285716200197582994627380409303181120758171232576286855265067441056717250545158769185580524757235475016068893932435669676538981127174473915230240962742599294475414763579332027576781734302384303908154711419918307768598707540837321416147078799780378515617613754003137790623042529689591708240181951597772911158160078379969257136851268750075969005202305674157129447149999201379930150512317618687434715223408404607029553295005849120491139554847224244617803871998814109852189941487259979035005338078157515671262524359108713850444072867276714611356528458063837332068317124880091479855606300081488195169389441276717654489308629084778729732003990440142604803243310583142606507100294090839642300791946094468835673776959336162324095731741268179952623658563675250610236448552755149072891909818173687508562154371395856946257963551137316614473358105037242379095601273088898812624109234586723177618756896455955949369341917437721698547501337810293698734311311165017417398016329836475052127349877903239517705048915739737220058307495979293611284197307279260855869669663191165278423737168011604134161027542103004841269501943529841790319017231897264242863796716990903063553257295169677696377405094098653586666326057983537966017763805021837990841809540435425932825686954342588963638524931990362008218653390271688147237885853990156227499736705049321722219806373417193691904189900579513805716744086941934541408070120472609448002422275538836958572028182729934683277174237926049689900388119190009498699717439414858862826224865385048000427589657155738860078795807531410269031485680882763208423705421343547988695825738237245929658047510926435856779330986156941986730235566624797311190416068116991363756654352688341597896758561371236099290799917982877843577325706790938727392544460375529021492889171945996973716293239640822490438619222328217815283469478911973221714792705472579305168777940576518039881854385805885921750338104652258706073637393359217756088491526062211897308888815506835088989709660563296359233625311910508314503164178334154037037091279376699635312402604336565282200226141946761322333320466183050481655699468877732266368225763195847045636979246522001694882965855511362851564376515356498227243750551699819297298989115855105904714761632266248246118951693489867397940759691697962495482380638779033800283372505328899380051690978234233126241249933582234564046834955066136898741282768002978340582525683596774392874833583069172870399856263546334082810068908470397620641482181740873694719910587471973891814430177959074333829609054642310987151862378512918036996654716806198235572873204944053596729051085208834663992997785761942148210195033540441424193967576804565246970746654379270246429248180981038495260158042513889602178711866725186711332169207805760988644221802129946785470465138627800542500185470880978011656735973093561668981478445634609147576570421028796996010821983624352173536537957978417661419597410433545987073751544620248506004002425649946384176727478901374602358047428091124842868977701042703023784257296721564094707959401729312173959949004716536468304375094895010494497007244223662448793343837081890064829601938673058099681489649042674393548427564615767139256452402184236780396880367940017901130495950851068567960543193070973890634569368091527919350958224774145040089248382515400695048650632962906321549661289973589855615322910090406844524938857714344791925521752473146143691073938508617595841964921910516874179928277472636624092106477968926404897531392328269591362115903763303054151531771792073821752294275348808152714800511283596882392453767769142800487084212737827747786748408177049706674470309958750985983594900742143198560189220657245060758141243106048585674183875416571183379108362956984686259546941573676259348914023597488987002699831549788909047557861033171320826510501975579118940190410179533600934295697180788050907449187063042121368563044686162648988443331063999324174984101037560347283580382578416987025811969117475553726386438492000980183367963651779437204139646590942813768088964202954365178095081961187145563834645406352371147059399065769907960227325183728993317176561996480028690016053591497769277217285407787803121079413655188849961025023597445458399778844982803462182089547325100609251177248784584214519021009411241750599056960135571816668861531620034480207258157703047440730222598549335038118926666335350215358954172565949338310908921948960905692027236398907056227002385859126341096548294383687448303391868829878084189500094713386199574394179502211925448464253718163328414020222833935584522683694190691674162018590717254015111946978909445352995848540144578350066968226229308698353048515940813318670867437837024770085740622327068581386563401283343927218525544745328230275113200216090491311513872660397870377639798485201964726834015008895172638075916656681116982658279924839145087277795324207697133962885729446850246279914632250580475885667747315899643969698577338970302169102191397942011275471650355843522839483620249279684803575550776539235416327035265054401460551246734994869382811099990168659246078216133844868257990417898295686344244718230911682699047225862476765090805290562770055298462805042192029574724125154583321370744864517996406973972459352865755045202514572024261900479885159212844349738632435388524628345867887019926584347926980959432184455176519284250974696101907563537996161695398560120303496549195030954334134612592914457417580883282784033445169561139894071671566642023323728216100387826200608163668072050509144391555617898692853299256296610630440963456955466872054383452794719377271217855468443092197063396294285257820065475826291373946589670156018150263542228272511512680411374634988393096912869060933545890095705082912727841279635972479031731539999856731746088525444471529558563439679792900441078842075293027070884707875358520001921261644035026917757393608376761491347514083547159678441455071546188466256936313950602106110025977891447686270675163126576964827941176808227055660977674094216022516227173263549810491930037187681936780993779470720643121297007857508173077613703160374022502321342480857596043169450761202522843793206176734187107622743275573599686514743924077700269832483512207987175902282124506152474203893444649802498787666003468192984051580088812976569789283991268603661098406533604225916136100785066724852486982332449961282204226825799698147150302084396878397678289939800742847352579878156413168622030062601645004794342521052381214015532319268967577745858736643900347400860823281391067355910092592090812170422718258181738274448049951760632259085927679108524099673073038135633737155686761622666683733807432960005161485982153004786028091933597319495542958670886780395859675046313658242490528915261202690848127946291682111234474741045773027351884423426722987772895233111925787115559576481394696766939019134423233619053023619774189453192036256596320271046559270479814421203239719235736408229792483765973190752650525294027677493531829730665286998140460415805231309489199135088455829085820030044665258506607514157944106349152674001272218149344460719118389206951786702256565324772218380032296118068405757819676386394369713803818112776978067646928829763548895158416102720611747471622721460211024789772179623869833661612372384359875675811552311757661219286017935944822683336495458715230399677256574264302501994153172559753661995218905027639078021136830556098369961659065471591970845193012365285988785995300574127191106884684847645160785515334042340216805825825138569333367566977933906640660328036006135880098064959354307167804342377416762307593921139201208033722291203628161920577358737174260077847884341770500386495154157220793789917503823950470650137703554213841165263374743780121680459900324106990798288097250859093970487364661942276035032147796829391754448207026032667874359437926760577852285857705354104075494692254782740422713578112064878786096765427090167677303631872042722694159745166568996992879119075978903719663145721534125431137147151205180922465014669874274141369942010669791255925890920932509661251232879426286806069245596011765706476239793600602162968467269427142875467676307754815256316363489981730272813385193968384681009912305267733779669485607531216477125421694647237208010281702300129296337499646958771198235178384367465342749580989346789699509934792381666558145009467449393168764559093468152386163808336149866968882096037815939760820612182647055002716574964630780430370389304219660496655920255707373854731237428425154965565520173865395037570663291869731844865404823781623144161428887674059549255438128075008156147955434040739363396751727170622085526891251425307818962181601876078570501220355639807912554300163646777345992291453766164887413654050471076934290411036303479037752059288235598339838424745727191502945362928416868645716795832799620201283870870566103904850884377679251691701618282187282858721789151857520526803130616558762688868948315095153473569767658749871021123288360440647563556052253210470004410839608050192528699297369373272378339814502459837462536152477914191705761551939978674386013579441487827493177089696257949647607640362229113054384451950241913825491004176389782992838922769634265031815322470315521713043564155436150606902263400751031773689528255742299873650485030381447894857626399516802997012360599916414077786950854747606010695884733455490037321293351028375503862120367950838150225104808902737833879482271081684821905151716059376312317378177935327578078833254272727376645727983130045505554377830767888366905682079241712569591744245674604285332397062618402819077762755707958908076835888071030467513661952838281302342234190018364369156550593530064134042667557715807035726450646607212558940751568750360624339944096868459796813519477904765398013527384379419786227721318067499042056004018757561898227318127104386582341755161523384725833696500394412831832899284250768893956501672421496363925242582202618730217251236138476953482785080471310181631479800820274684197942611212871705354217804273071140482744210294458771244204765699229625233453900757445531438374078764804880909430369817186588666288567497986516589137090919989117317528488195835996794535477162788958651272986734469695052048777867885819418775172414010174095113805595372684617232868580131619435783121719777284507916639109697324089907142879972820632358167415873632082580333166422679963823827260031068886462569887889151345238692626814528544871018087282072050634606253607021783773475262756635877473406910835704782270871365531573840719441377792356877066127163679820544452320998081232690971037319978179780896056920936757459263128129553646240893470295470336344444968881482734589343333431130266748401344517118574726171577218881158890166458318989622265335464943302374596406653967358501130230343096063928146600190482001552053271209311988264650591780139836469059039128915815940143378224106102752687193938251120395262572448063808661129918563162034552228961854024623493300392377244475524741898542151712674129382330222073014704537779876329999302117519322934882683792478282219941858018926971005542843752469783944022549543968405896647831977688588214250288288868722497759836452293319205782087431594655398169939054258138524562870867384479674040262323220150196749509302640896829176920093192414867124219652737166466885042387130196985154880274444620095654050301100837185689689909332507901097271506611812445779207793025371818266019618894988535178578227053694687453727356220618975482222162448199502923519798642559285879364714165423767463871730393591210592081110713448202602181462373644617085749820273442215548911952371525475099914515768521903251059276840293756663573969982777339088141453275965473555989464547872975508648078108943618100617236046380899812089637883205706862432603689077009239810063759881171251826590595881360535384723068970253588337518311173232504588613589942141180906963541412541236578272140825691704362342874456313506041690689670129257720155590354824429223762540625257786086746822824177307087004835713638427614543859570940040134587588242721556002759088100801534944002878474286785366710589557646073381279251745860699777241744422436604724120754493385179932046327154849790266045872013355265307268836328032429155301734708083794596849827075281605672367195635831292163167967724743081927415605457463369722791866501980728172906985694732561055638817238755295053814802289000786146815049786789669079980781674308594888665568506366899256811884358673642027579991970666708091656496716025433360946783471253042927085084775459827927024608312114157676010501333922308247767264316305632775791182934152949812206960853331743666638658512434438388595078005055131915559966169821649066924813244067145822715142188880369331469470840087495751427535103999686680043288410144372049748388152693399166821111840222530159827377555954137439205510523994187811323957270677296123633709095199281258164545979674441128854020992461918205095147296208649921488016402898002001154889187986332003425745942284034741430026273320889763905229000900607787417259502162237862393818381039291148920267491678317299501358916386393276429854773811495891320307442616124610701533465558644960082796620535547611057244076541021896701135185043184552556125039297579703949050728701623559333547224935480599711448821547781986557613078328642039349901307497645966866825236427114665438668792623150668236966029150053843076830068771463584159299963539570072465300460312619674481300031636672788981779816251984044253547632466145650261798767025132929677515837742977699447426254020521321179296314575336466802879147411698881188765335292096063736114444243831664160991090241403884417803589131252621725376602993673917258470737188758855329965293299680571530188969311966196648080401172765291287964134242807759906571517569488925742758891712004955752041101542523041793534312255519753099635696538606068942740145319868697896963550289953680947510919059795520659553471823965098833287989364935321754126721852733640240984392530520185931872037644732239565064527752973587343295025188863485514202976218388466096676965234424862779672057234156927567992665133187467910992025190704478821081155655302016661064232756114629088573774692443907552854596804710243930992782820061354832014972766896159734377042432001182388228777038700506493408250484861053297638561024052654000998539585497190119330181499064475973000393782129324055269187553033336479482147009375996720088514668568399580016293542679071313958074473970830321243075615034622080381517735097908108242554553833267888802586398644216151020276605083798756810262148048900037678991017715559267664476105756463238293670242919567976616366839305013776304792204209398784361823381454216139859035370968966451505219658505972271875880298898989508613504703572803026147413333972288667280149439137854149811787937999848425999949694489369927383816647979485660592091560928688930546129121374474907280446685955042939891216937281158384632411557284511067165861511905972415838621191520400121816856197548196953835343532643530273475654869838054105220073357335802624153016217289683560751955258642777114731867289649297528570857477132818811353214823959495024676578085174663229060826075979276969817724099286623597998481511989165345593857408185274734928758594105964084113679875605718155219011812586483818496635073190245790606133517441745370539732173330804749732950569750169304285708999679543580117684631384981772366149186265407374098604779076682896614049369684176325676617108223986558406783569912571231472624956349973544478236726009757430894949360604158117357190564142826484617169037490651575920171884201654728925867417176638416134242001453504309427357114313725628212322206629822680680745683780529055908566793764472543850705709780517962514326829749187654676870473406208174996222107022776264754498897795222458445199314523152485589741347532888470632917831088103062029896373777715054794905507860876679630384094842849371415370359286815273718577275184044564070752356069944785102421124653275250842277799757964442021194193927042952375897312145765767917945867457916202663548037248646660787420066694307969557114787749688067666058518892960944469994265522702685440565777684582210838331281057062938276640783267130933493397178857896768982891659439173174717562756985237078873350818812892819600090079404379281992345259894399261088683884734439419527860752148979299838311322617166377126565112904287730947772661932841644134165841190720493147433026202110041661567502881704726887475030997863592752261878708260831608542387273442067154690279468035855467303315414855592265077741304138914885215657616900314328227952645020316027029359945135602055054085030056736233859419883324467501096807427762832416615034603776445230195068552359443005903436668246859996753572778640918671316241568882704313795087844838448507439352549136349419924642357151946396917889694730304481539452201481681918758838726421049613083441463704024649450502344713026110208960593827165545279413619721948491579704175982381516901906075038200942112866174175032871738581478746165038701528533096426438736395541774304407523660230032570597021142710438941393577849839034227245877658448318735634986082187312086153822991511533955760480633992570048651615570189422052123932084453832356621030877279873993004205417541824300907448266666509862535794049615305556924306386955748112513289145388669531073164326032955173541325652606009630879458214397122585017431830349363972304567010364889854590752773591921077207802995305844762522814978795576727649235220955203620523910299778259966737968797481777682400898849198184213873197163672845344480636483139668020042315322412348273162538596022302687547277828317922784497782413469752416617917704463496216342416630024617085949659430146755705589647358273977311434273084947666398437091396393405855587797690273057648376250793665109572164665340985456713455147549009174645234806557848540041917028204724291433040644849343558174115688709318937445185782438360331215609543801012214524632050639956934935439550429251346056381399074803679214978551859462378080732610052016593337475683113761981207450280071679308865722323276162211345572011023682479083694056954969546837773009435924248160676509339910354161128653963168120232076020034162145885391868177822088898046755663442065211867271149982944677050045422779702315354714839087217462547873082591629324556300992015309873613357293140819587403498427735868774741625298148533495478021033039893981151771693204578827687212252573235313417934929893740189381580149938881259864358272739762781607289699678110765658648186224005527094730167553670337151125018404067897286640474320429424344656172960721404069751448447798819674164823514023204769139920048665369124667659650732144277852140210899355249732359912432872960630943590001985530796357789066387195077645940537108048145785695881667545631857437037341710213782514524051046332325012877240559191095034675518473003431638409800967496091538284642114664266531589445788236517616413114943181380379789945572379298462819351592732213621857328653018327285430345651869076371206820875913224489375870104175151989328029656905764331746005432246497432832395168095512685931099648513087573042253616033949223609070926974378664763572522158555324718878435126562194390255318356965709104184693598524466186054370478246782047479800182969821488398805799391137497677160469672317056975032168686058421729756168879347727424214404259053593880806224866111374544285704613572756572441666915183904777661950341721308509872523918324473196208804770379829906832117918190672980729121331248853378121157770122318350509734375408540909193239826623671288800278264703240421700637060692737889256198071370544289461844795229804401079662409692239809603254830395384817047229156476042388677728910377551794759364724989934184277308889029941833066781063348609410654398033879092917727134454280127569366149783073697016678358931152589938898142332958128443668035484611725997076523650310957190719848827311161861937784389648133137133250446133536267291303834773179267081071276267927144842587667238559188992621425465548917952872530190124039609814805773505165611640094322763404554679223060385523472828680097499329376619026578392297076810669608135624620568754696243190767454684476167626600208236217062809003680915686637608956090131871275694409206112515586456124082114528008415012095840287475293540435424967226817983626699159051809362658725659587375251545418718868007480063295270438229528691136669187829384253982853335686299493052043906267668191332845360139346633846581499308592242539926393090180765436402656066465644697841418112313159050153811641165919880417997820527582964219069042630148025529130598931220565014941250801230096057221731325945023734637657018185242649239551107682411578921984966506727870614468109415436868019381635057150299345387062410523620212912335807098827068879200680971155946221081728446801275166783974429728323056007483981228435893252539162438076246438016874088245374125292403329482298786443011482160337794290197788543519939258330418585121953003887505138143144601474626807115695801852411985750747197932811362701383482919521883896140465645425988838651425419714910923260938972321555477239110085655943548771491106092947945563750508436139586040178955311871291259390167401578932823870689267872953604022387033964542792361223455911492820848315394622541468684792731805765357520411697702054259660286363553599388920188478948111732818673277547111369231408661701863430411043739102144478808082640027460402284461596876434267334077805039165072834242635836882100370304478110260927983779832661506421371680155668091181361138213478795303573963313620325878151582875378759447307484901368095142613929811403146759701965814990670222060844432226165803419808710464080477825240732533345200976410742021366086366584624523022235210835348160367903253515771619670474626845084969244901681205585413264396855514153558410872766321690380155738560915646547248324980679616715804799062474199427450386668640275164391651822968639906910681870459076846792225628854452654082852259040671650509181922219780055497836342620642908561041781966985621080761678276062821849658527607179487324077363955628196017854997984639846088789549640838020791164128515604563869059057635904371254616697798782911360408282093189388451583054806027365189419444590428836534751323699374627011250898437619553125905739158259243918366553369771846719538141072063135621265268034092888757700411883734632212540945865906539691256151005604544447945776589265821514065111629256983155083525626246008661630354775685989493149737704939672044331608296168266550537596729787966514882328337518135550101187327305973417157609090832423282869339383223626630112165667944130292034734906389423928800472585840574517643431846907990797076721208990712730158492906034105829956939359973473061800950727666387532666649028574135194239925896698015537724517122694062847242462602917582314064185928275451062412834171371011966531872904998912418434418589855808078182403159464969892321453531563637368570046559208723699660899251402433818642371623433508864432805261421337579730416652495373989880926538159281750482610170193582571075672963850221776483251306952762732217475435503918615849306648009202336011815252564511054607265393830903610862970377551645502391569831699040450911534210192580598452360678315490790080571174895271600959320677663474071876428096879859303435219202020160565757762921207844814159685639635047613610828881108530832832205897960820064871079745887265660437018979200402856867933033026243499393837768399441231214025298671169370538244184531211283995961095020458514681374996431499230569324567378949111579293827080180475666199789235858805698444709793512953534986845467325410576261042201061084140232408197411000975066279415526974684115588382352430050849569442256329062012808672630601864683580282222893762589567592027664694834584408307708513642923384817369915189782273728295255138789971146544862085866279422951170215374667312806833380533329110260781361345934137574914911169002958701361413106356832374839897438705114846135074033137030880292058972563249082096183586810224723816501432232828857750796370383958437466880251491229109267286167520582437944145521437561885128775904009360976809547029881316439565929179749653632999248953032005382408927001138565257524082280018230968714323740887134333104429829084730258962714575591461822990293455986261001839551259604336288292572079923749319734888584749305360910803350066753258537630383482310675585122358513181055777738999153535062603129293211379203612941364920956193529314919590317974460744757653333235824252679786927945659568953986925753550263325541457273549810252890576146396672637410253888619756079546348026543437086894708517779006565858413152133087088686039635478265802927813089278647647850749538694390051806163318572847673362951619123232039854215847511597936570401319967144905118028161065917970682914173124986300928445728572570357323979877534885064694052295880012671737459034278297414005411245816610161378202444862766523352572900938397195077489348283775399662360625236560108674412956396276161927080236253560969703326959166138512997510460710448135230102409644162306239176089123331927328376528636468387575506775829154168673101845858314564861065364048704938943911079686221871512324293130322060630747819720618937711557851444282166805628128966264113260575148776868457610099921946081626916896298662845946622231092335051480294617747790782416784835423297419058446601450320074350152060678744793761014724552034597117267374540360632045682014985182234621177871952220880387648363257341622573338437672353982693982057606187609960740409495986513824141240252783519559829280600287948045538637420217733855190197818467795824801362972104543622195064685845141735673391646074069468040064389151363260773872975575223316080510487497149757118267574999271988882458098162897019263641697656572640088502401131909001031512997926454953436076050175812204071860758942058630988280146983431731782891415619226476104849741456096050041228030413192982215797276540066891126123050842696268126629335364468864128794567287951418231010912899460437627408842237314805355140457835000116918848394696241653175853488277342523545660108091505069276515843601578616063486364362405812181872476845067536295853068410381206496613420983607891704864043202760207901900936568045237773477905086343833256942446713214700874532580461292106951890694855376494823511904010933755452279945991782644852591433709642501272554158518159409318504448036781762111639597918765244024877010768428048402218151951303687685820403691832557839301816178590849604744436578292580027662117885533806440227184557266691455012171044723387705721718800370703445715965453740455488212255773095689307779350738622730342801221281070680030658824717728339769200486782608244181749936035830392880704332681698955884155827811720588408167275060952596145358891874478925511604913075097450664476606765657757257667177838289005182723305734853385470606654439209951988087476946188437729392429373940201451769590992144216118351383905263652660938740054936624479006845670044724978270548238953355614060708575588802933213890136496959747110672878339417114746690745665339837897967226638612607533053606724568303898733190550266825162888684568341439208475018303918964189941616161881114234823482991100830915287336895735785966750206032769209049760579022035988462093606369742634809832283164362880868318466857788178116929747278896372446662311001727544860283047450300139694453467889813604766418536302333119900747092680858937335376792324925788058598749602021213210451981856973646779754463494509983845816506758084438188120652289515871868000142088063945659300927641448972659752351233997909845634376223155074063821374649298281657516783826139162660555245077712245575558429276823215600370113792800736334384934630916757395218643328615103515840466088088982554748984607946314969634140900215695809116332792033284318862157455137253393913229983776043969628653537944572180455778831533310385351960263412576583260873334833936528383166430148740430815273241987645580458932879062166618837533073332344254405717539561157278056214268319770943258493937941631564224079237580651059562262902002836033789443136617598884388227334238710425706828139978020704969734094490792494959729802796612096842628774453169045041013873869000310250351856668497136612080312215395953328821780194619599172989665671191620021358860126924723558636245518258654872411118752099653461866843566301960692316411163879874182306385522403998526358990935799826554909577514332815302429222434294274184708492504788339832149259970434887170113003808763205713649615548460576409729215284990217535622612678364587028844824726773767640722403690518177506576515218105388707591378887809401124274930043377458304990861508195084484864830289570056527249589468087490504774230566569599364008700863600767732710800135356896548423084887336839033240430526645979289129605783272824422678751111724700843624623133435581549594907258611406359079916223703517108447515888407573912859039439876720169653609692334363519405144907707167601812211966450670631584655217673285070773705867039508685276402579094529318347278477226167367624714106519733925655994088811321018972870785897425512127264050964396368413101154219843605296645627710310834284122223066634725476764824909668124209642138201700247883778683195676803835004842454488321270746197243977938228397872293141705745089924321892264241365244542050458529848805894661415641785428829143712685116104777925324851034941638650831713193394230898029479817499850697318437413688468090192472555529798016773859719056807335002127836496437191778289671368204768499655881192233981152309866916622218794377350847838088067865404630927441488651955615391899620460099580205464077832563160511062416521441851028518571393318960810134664700795440689882821803070196864093421981804296980378136377872983452051513503122554993798357578843654609798810252947983110071446725334131565785285522361557097772623207417073015569027150508532187292848153493415069655217593402957882762541740383689395233526142579132368705878758052725634944705301483303943133168387403591200641753029168839048121603015630926725800797333496781917314634134995829840741328435871853943844994501083071571267954296101728946483472885995614960565218574614042590503732172637391734320219456182084484730333056424123260420829429523852798733520519700635040186291690605191809853933896882891870716116043755525699577237354901093110333360933326995915741711917013803945556474509678614588595834029308274211567644646533351269592128023866163393199975382524573630654707421001295304380372602342042611029269077768121795589690445533080225480152700411935606604701752045270910750392752536375827782133230402891277225282068583841798411806755472886818057606174507804419855159237742204554330380959996653546608865774049363680726485752731547214194173879286875638937323640372233284635735089311605676199173395264272159446245635389584644855640259075949280823926654755797239808008800229280804520789948731428045333765357606534319375404455202443145810122195886719182527074639890837501490123961129953244207237828517336051265547738295661076841950109042610000476443117243417571640690689480306353732663885735000759333973094862560698823023494091185531573402938914929349561103331378105056147350920553812092344522496781826279461618009833300323031373278155788349131283153209111017369924339443441826221622082877632539190785732964442141754516238071259742405293482643980411497199871234894152873020066715320241162684734065272576530431933766886635879747407006453961692140259157248140269584306826850666430018209376626216313179704873044443634251788084803446014093567961744989410449349647870092448569731435459831399106466345985742503752895726801530633212433367782182388176512675240053912597460200190511811055379773758166492064433405191618903796063190459981703849483740180270637611957671643274448737906793119594228292205825764194879214505116887291044972107886755989247723211847488717174507110773106911669979617648128553675270972321450631114029650785669781577340466720337262627646990313901498590297084436561349183711862438092172613743926197239573021873923247981439680889045557818028350125603152590424277309089842017478399291880567561124423990755391592243357275578169787707478748660544354687381229456645217197646880859446137435178349804780050997774289456980546484929756802389258245275747072644683090989396793255135251763117199512103245470099731204715645047502468346956584417264672594466118603482230014445684389063183526610962007533284905690604440062818385973674373863360650262685956804072149292814900258272223190269150808247028773611319318642014745927678692248845296227887102543360750956509913878220812331286274870966813597617395392230546055632812408331453990568017158994032958900928207860950605439097436096710178395318725709926085121897675731910846223510810244417483906788224349871891551960908148283860931751246762640909782200605643866425075311496994653816438076822573224688683113130705560811671999111708393138300994514712770532303207966417533803466656270455660203134053874996286770860366602650697982199943035869995473523093868153620787091004908057726320447939656709994361292251919391917059786416521204380459959779473190687460080397283715548207121839967843195975365300382382429791009452650022048428209855645846149949853625772325077337226739180344793690489327026588459827398548737933744384756007677283298913913201496255735816860467291022402571292471602284801475889805161561862309046761840906742532882907035900259198610626747172498653970703807655782850063866135962845440173975376823504681363559945531217197774956701109843336039695609572881137687251133079900249118983013477476604078330078207245494349840574014631001196486136676138894708782065926200318083509235093071415993271086093198338214362801562813465766187978993885004603800054153989283702015508154170682823523194310374037759400319627704977952731927390911900110751615346312866307133582048604299630966171020998225531584479611520437503596461069238660264548807830029786995252472711860344756493447798686242599937264936320126928845769360076018673029346092777279066572366380264912477904241421452768821510130291850937854111370531727509248174132866945019420433675574111788604557832721485017952790784402953449173185513308560158983640882161430078236838007895193461150596527734510799572475507171277043280330034128896833284961489915068557845808965158854616355616989399665213183924661097668367381998774745219533484456525163999400745948061329115323393463657720488542308929795000008676967771262962147434151969298650903883835108731739985357404313798968117718195313122559824832820225021592024253267927144346214195441717961286663311271991026596561785486897362430703877641116686761551052148925496572892277078625622393154067910106805552299647877047655684143164465107217267005860768056363534125158480326346682535238376951893520428323047748663667450660046989991612255804046730777299539110772136957049955291346765783512149758637292835723373518777479712643688543747536918105694023055309702761233102607085592593589022261363608829155910460518290721279630823111231031856746445673315977428592476650917889851127138189108517723318444611223753638771584886197754737628973225499493221649304957037932209759796079736072281403961689523441751080274504036361023958984903672929012933025788810629637606227518035808648663555274989965008650079889741823606296146912219174408486541960763030599750018002159882808918152713779890110968117448203132328136687754301009154262414020762446144148982697851653876254495350965255425825291317597784881709521081647291490175175427268196035450929071671352898884603945752811616089006627339846847674533095631402675226046539777037056397134273585504569048266269938129296218997762836388327284818928063318769445313838905610279026721507386686698390291692128651313488826703247072178520735744844130972750635093134551830777817524129433975056552684997533388924356790149064633563436751349979162848624171153266505435219741049753359188212848261893175902382491506857858251596509867558007339906074291200299557576856879283221094944220846426604146850440837621566464824985724838873557113200365855098765024292351301339006486590297630190824820995033873387389022912272030110651864034456115727293109892606337109839259216589992409416523744208442434913720437415317975668611521196111245939868166982767160766826183738851927611515604857987586794061121922878371134923135599253132306270571288756841940161548516835033000035298772273232252876694240273739321590630074055845670175438075369491131875344397395437880406527350841234758254136825879466945371803525583223486046680946799617735851659723218331889080086538960582030835655544244377904018588715049981141279498498038244254483206448453964947320226481703360795464549608695923044568194579609993485463230032348756395659454004617678669430498995455778018085361786539217945055563814430651422510708090555299518412172478395285189773086382208034758105923455997778092770878635845312784267835474089899677917450048402977310819636982233160994715191775222195607265582000365552478213052185450868249599216696108288065126481830502661314658513278804643823270244763629650398933690935880827738147511140215478095629362682835718966351005627113016531912948661153191946566718128816405800810188685587020271831090904793909703787050095893616655570897308705972114189130444004847363110841337134464442852772912545374810702816672392558520206265538807319797977256360305774164784715729689802160939280585275773789555373788546269619008258932162627321595088241889221148689500897361863700627169891198687815576974912629047629508953585377866294009679920696384779965480672034702015313056308238386203126327738529608458192938604959714798963926233902174799686225657205030220018505136840590908163038028285629187514307574735616068942131399598507938937444730627465584521677807087749427217980285749811213005933571664924628008378466866326277770689434536568503551239695901238287512913426674581286248412022373569676710013193906945846283383215852359847714268701000807632823915409416312173934560986592381639579718795134585423591991812013075904502979940059915651172651966292640154702832601237631198851295318925471478068421540602209633485882671357527066927350879063522037610886313406823664723458113568490724554144453927102250404934684080083217775902646343706224213793981096603795469049458302042668372163230868365357776262959935310453356984592115646676163043263854578633905012978399600982594822142543978332634972527739892608248818144018560458474539372303994565215950666061755700251241945226634638938276761219642786107500836372959680425087602141998021003488433963094423498025613176315658813863527354880471804995081395222576434929881339830741225440243132830235049930210662136712720880744868287914361897236356456540016279594259978169071733108008228374090951362384186696493139877477881464184736511550347163304527752979194534339715265685216545374168519571893590335321488780217395048260544886456190087377850983593859105950836452993380219390995003818085498941814166688105531880112551855417932151279750188756439317644772436454037222841860907069414507707276640855805819343052775720572978596182380725734554532034703857846196955493642862055200700741559987908300741214031294075904643185590910554280152899854850617460489900367317089557090731760313901981407665788503582388414019565876423531836880743265018125074648469918504794924341012548921053100022777558838859821422879464147553385738242143113170346940635563204474178068825580338244815804072334529234665326120495307735513796117197418664347176318594497768265319552190994878668545072457425590233648391637607012287368986108139761257989670510680298472502013157334883091258227033705932138965276263640796772904286459476075982574227222263952061170840095640485586854069954201088549264743478332819273584725261024400974360503947708574216439766945576540541953458827236158609408572773821335570104961291518566512693601774038159708224896684777584738926736055301655133216964850259257123066296227756397801627415985030433379903613366963790186445071858549158232421358508975440915732365415248228955667080023488900062790354926805018445523968962130648242565935590609033307194732281207332179743455783448151598148739661330589854475314802822973602865135221696022982913310892973603869022026916382645053700197815955202313455881268922554758216282625519899569494336675242681225070378228841083618421374782991792280831725924276076664665345357488932916001930900837730014051137934456747383068394358661175932814560876672250047306575225911581573486543104842879164146102793024975504457879307939177220703286087859485599589375154224778015350108462381856902361207535150987965520087251929473525476963995589606134283094204507543322940334851591531376187941136618356966411190077720110298226843412943401291487104471344035316181256234309627969434269892677784214696494398013492258367398593729310705882288071104030674359636162995863155484151998125634047147434483057818063695061882780881408862216105575306242630947696715895616558730854873116043153141828175534237650609682872861447345783161196059428080261272937872707972043572632320575627102835508455702828866898857869856316672021585301816349418767751590837032568122578887838362849462253650732519180553361813300583103376356818043414947620609096440521160660282227450287054536942540930308313421252975010980973066484255560365989011588478236210931655387175385853633096262329780328730825899987900179665023928475277199646137122905448365161429411526432869632321164348996723183743719168060876787605830022152996568440984809759058247332601013896441549875267965812759646253205346758325917874247025573442321432200078332581729136461792802077452677296662017853830962371953570597437935366282347645628274481482367329036924825215132851082887769703489027165715963270117050393532473107930509480606475415992086188349278269482986213311081164026954205792811415792352594695258520282160521353315123564306777461878908504216560155399137071331182968251972272687669704896645167878429810720159382612940110826538867621322822009941726431009634628939828283003549967868206422741650989034660130801529895048626618024562668833215225026943039099630373818478064633975152999222370037310518568241878397985173803627737851421872993463626502595488484518997207914152995199906877510367671491936417268013929630903830074151503346337685758383818955424566266393310349900882106663460314778490564687911597452733183482584288587513321522438208155199070041910916056025734668954165552990921854758543258488748587394095606271514674910852021792799597277054359724521222413736006743565723837225943933656416597187323642287356305301689438632626904205879381018851954930505442968423392583154543468832418936325638916331264687743410984935208506025139618255490316063113604482730921933641968898265464787129052591648793890461158012392979124544214276857978415511289957326826950373965972437805553515878183294670693197497476133753740921618494623881451891294177344848982281678170693169498574197125203237903171771475007573963696597435567820236167682768738023000934491201021282265483796789197333849263670867633747483863398281803087717335808072208969822111210213446565132043069720315019351005805740071046149580355495931971426574867978641616269069171937197703200815922708659246958678366979917883535111469722496150518368188960652641621130577529654044640731239183198419814626491124116146778917867032070609942201432774227785766039914643781564709469704275733343470450646923249719191348630198945991883189556983228444222094515326218431001408821670546152680494335497543006702272748572837266187147928602292895450497001136019360387172851309083109944301919136387912079237760655734860560003139276529208758307959313218332663635782289477676130123356266959617205111790647315958556289451295953678350120128419549502823321193263122962833159332722477510348235793101107260131255135142577223263488930980838400955285749539212137035174896812578771519091824787243513994435107274463224092932775013608318265542082714189413525401961456797773071479768337273346026884758413953124502969091509058499727471682785780168405069790532368938281534631762737541017162882950915882472970637309368237267781561574449822262777320871415322037611032244496958860180447408150753620394667723351272111689679877904729443135011160501301673424091883408162985728690794823155557661110801888014186759839575192813972260488730159289472214308067489015958124089840465150750824499919021070141987359342303957546621409660434423179238875643571689249780817314842774227295229085538547865051638929921546032746486429555704337655395303318213834989117415560730922171097737667328169560678618109853021089092153763388334139025314570237698588512733556893539438077299664839006956925515677588044784597632913004909079809188768518618401511834001811248154918123904679625533701070312816330753643428871522836535264249521437259900885108494661018804709592751350543098284356067131841124064265705607310185560100305503842885685132033862294381997426067453591442066671067892129045715845602502651785892138861054907594678753130122751019544031533958520788726085144718375614987273647062696390333347530567973518272226321750971762252338707022971538821037760272986907526911540841578981691828493775152280684270977000621221476094250360328305510300871117639950962025764768961995552330114843650246837444003971885704365721337932141713826444061586598327306027695743038120798611018593310919876689438381322554561697655950902146626706274499873558458032772360002349399459293001529669678920579295564435343691529461481174864624944556050309587603182036068283287016368196695284936256659955901691957254346884994919617306569289762965419287007487709506342639733132314852777038944902659297209029033003454634559932941463675290321457226859364124167231124542958304739114656502092596365605855085716757056156977140890050153658250131294208845680183521463102183751869156758572457179624662978942786616877135847711480766528005183004701420492036631908801020380820563578643320313332461172308295438041907576161644361947458632066937186043537196302673637823767162888227448517539640694189773644954398633901058403732250783716913663511199890833264313055144873738683230433225970588385844313617043803555353018638446596727137599887648198473166831557269459316920484441141917059046384172180047111839997267832023062252572164815079717850010710644410875464527367095225655444432130132022940245604157887989699207314499462399108912211615740569378804046709684413642508651169790847422161794221228539115177320082089561559470693479242064177421505233799091968790736524478224118750136346357136397996891942835015509132699914349264629018154489975591335999173058270447396349666977891416480299851324277267952815797308201486736165495467462975558499607970293382045356801645592078478820100575364092286436849468650335968023365129195287761520969252324655077115872262947820622300570630000246028996803698241995182223180631640129503645730626734563766726113440455147926642693901730744990433841111345812358274537299563150116293500035804257862215680178092612211301042016246784316403596001136696313105129901152743099206369444901890770805928271019256745961918292201746229789848257315841415529705730691656676987654414610595185228078301720997291196231074001853143606627651427974847400898286331019191137853296649548025361065254107115271592202659337810808335589536033765146233552377001513951542679561224761308494315490138896226887509435399039014138945073089456375830728239830059676099887552879017833372535322230002647888189684274237024903857178834847402668505518844680148474637474481618749213115408586924386478081334727870795191093009288760981709820241432568384376962213847138596755454493631268460944315174829930135704588908623292177528765964263907004836175019823546753674123733436257544622156958777976182670522646775988902169591580431066351041560961765630573506056277864716930345443911404493027088105158045110887663555593324322846455131238286674197222989873902763203854108170083059930253746014709006483924021501329168901086117128011166123335314163766003460238630242272558059991262447870171604126716452715181122106121023447999938246308520825135881297511921942929460968108770288035617169352275323369677630876970707157390160607113289781500881631719695366836032168045851807808519519568016964955540999180545266175693525628484938182519325491124931892395072357974106387382767870504002103803808955869579655421813250627644079398710807862136460025761945038975220246995223654515677853273943773823061861313326804461145205999736285247750413641193486693846200436400521555466902260326985384967157453260697987883728021441159589573768389283461186346051419312663292978625651413786889068908266218276713757664796739004256562836091746630690767825062990832063244125011604589608187062611188850131694809917155365194751981336045618993358003486881549142377609311123565020197622076396898547368159716565666241489575418225949047869027909944365501774539584209316262830500129625948617284265513042388901936902919765128741865524135327684084898711406132829603474127405325148613893198558894510040460035476565274172568571396360929050868580624958488524798583682957131103669168483715914951127249216648856294955534439853145865658371596903445214646319960977162577565363181061175327370027387369382556165999822391120179293621041290343427514098289347827660251011581448755774485490462899940301471029688940034083148749249486398689960490369928646271172030170417729571642317582517490631313429411895356105935599691747253095583864795479554205431004943563462275125733747261992016769360425799143488910061432397932179799049201921487045233607454349619745864529715931216962652682841726118253661579664617332322647647139539121291850992923937101484210840155425193937348844710311289481902523414834227555095725757462646514323053081315852574702458903606603102475694860930905519753121558764363110276474120072326702326340373108080079369376120727970688658592567447797553441882500982664732169475797492534484372290385955133941682595015192770246332103906255854168601888466712328092603223184847888916925154070748210663782601004133794841969554968220154036781264718650589717246382730878449644879241252092626926267013373262386281578484019094417518061583951853179050546536049859575128526234953967307162316140638026498787763558118505741156699357998046365921162680647432662156951770884415072223192618608160258147904573886607410857732562513900018187083267697674058675579815685160408406506159473859060101950285865569275843932460001017418881375998317124238790723160652299531489243040212284376427249210843336019880312366340989796524565366109071448568740943789356763972722254694607773314559765400524705554716754816173716985091549660010994077727883520087259402742071866720367452670524833948387025392908743916177101074502749018662067041824766272752099295968556682035668536960946144104529861943236972622377867566772359946102245447065666076845170597367802674339452934254027128449158637996044807989006068777621428461656415698741497944501148928720091288059652940731165321394553108110878414499080854136318006625714018143844443034998987872473019927944290236956790309002452850071520945237332693468992771548318545432171402518612368124097346917304767331775483330832536096030740034976235943601878907727856277616459776028021579858607987090305543761339602827841915199956711834989589978060526311130474972450033779160493463828985802503100461276502599563088770486130636936395140542387300845052303099693327523065558286405444050279268816122491834841832969603080421486584800702490502873797053737809625545823602881298089900942729898094038358807924374327951851878609518963962833067241501689840409234214160599732475440427583808174610621168672556586085661020340482590970740501974717896085018691777116328889605009916191861854947635106126393359458799868149656467722352591410991688373686875947902836939814194034384824296298588908381273483234639656621416534865667101660853381721629391737510020436681824845575603850736398268934690597151262302475290181736022729178623980289416398790796052421370187534773683219624838918083538736084568807299089881310681282714006050316999587973808792874662247386882272631422879997137372109509985161163606865267092647579939840602423718656716801981889075232008996010045816837977403197969265239867855366655716493915896021573162694298692719898768094541304216873294834840922261951153836186847530321714331415292468137553469540533566503615198679940865347158032185898044571190993868005978126406834223395551961133725100645195486823127295813151172498970832713037934127793012251946063114026181930089825956062364821302303779514674489923654761143339566210880542548398278809537986127703050824835327339000849788185102247754618258291327329942605233555775046492678023832096892089079846528310676946543241430368150644271663748934604981555892621067289403065402545566995376274796744748966421920627194199185141831660829020093585034555885810166454820056946511652421518257299964205980803412656957352059605894933974271383648533212057467733469704343416261204806740761804818040070007748535338587869695780150936563773561810201130099160327999114789630368301140846802410670160548063208453418344572650980035372761787783092771499704217907697497048668451077029618099373593718397793176457936296902056541243616858268690183606617921976378066662631537189158043850645446162464832499079376073205985385519325183830473884253169519310211356854504362412464966529601057852654532705283424081439751295647043634194878360386973822497633479678907359319164991672445513834613401207186602496910703400506175763221083401145258624917773748121008298727204793916842547370001765487450879891540853755705752783369167119236773520162517054235750530187462054652638846220415784145586686505949435380496849707643845173204222861689606201637919104487017660802365244284827775552494450320755452133364584106827574580161220122861464265211150791900641369266980141222332062351138656735645629357499940817834465526472886209295470643634945378610178561969054195809948141391422430845181927393577843669096377229812822008552961487906066875884345433399465129520232004458101651625871650525741946506411095161861005788095939108717060708677516079141066207454727230003515673410059538105548588039077403400192605509253848703094988389851336979578734531582078821203188513146268565949685361032674017843784786141681927878277446355312324801412120557484080059244477590253093701837397933474128848587746645639878899155915871011251540215430489523554820522589823494097864593197330391105871744899318586741921233884162752471765304117821907571774258230132935931324515894630234764851424566094380654829414215541647611518656239679733112129126592787739965368151443666032153083744587743547299693658708252146211178777763200190943665780546559492708728569309370276234168834794436417848460781524367347812521233135323781285453417406872008491809883306045333965952206199223865637414520891952602183124986380450504499760477016633562475525973465344787492601509110312257061699797120906406121813312360862944012134037687130455374655065772132302319442807666937899774732220904359340652224638349743111976291351824433345171950485453604064661502180977657810855651365328208428800709994602323083394020197427540473826358410422673758240195375979960146400343162837208829633012168246948062461342399256035914651114492672386824334619678374633758802528052011049268432116772995519826047183879949574643273788512764311403013589640229408256950831517850879801280499519302949684614251755235461235673223443355579866240116194683634178277957439016684931503923481928063160229824282149003105655756139311167051690652510651323441965041188837115477212289767228425432537741978729464318335175551126341597543265933748953782883205388398137635910861732852345766557367712168634509436208281678759887008232492829686666717497975473222991602908061261296535253114758534875030955020184740048089391485753545228670322435555433972336045604953552869837103653088918076877156013252570449916803630209588532996063191783410281121677984698817252626249842728770507829543624406463846328164293270149743272156322449465152450507765549845439608965806157924209457613537256135241915707742998868199975372896469987519235908015711685223435226454038716843159067862848940443151580128259473484214753498572780044054046259177129806794481894322613218360623641913503752765718743854229439542982175931312807535851865453367157388301290664211558564922495169555911497564326534520439341861610698363341647656848306688462377184844996870978606349931401740251935190703405165884955872443031368688908817030613540249019837069082630529713590447292199776499380763458643646624479220023290511273237766958796684329009433511516303973212464417004714235107930596588718982787737886998226052664
counter = 6482640064