# Solution to Fireshell CTF challenge biggar

biggar

crypto

500 (variable)

#### Writeup

We got a challenge with three numbers, `e = 65537`, `N = <large number>` and `C = <large number>` and based on this we presumed that this was a RSA challenge.

The public key N was a really large number. It was 175366 characters long or 582553 bits and that is quite unusual for RSA. Normally we use public key of length 2048 or 4096 bits.

Since we only had the crypto-text, a public key and the exponent, we started to try to factor the public key and after trying a couple of different attacks we dropped into sage and did:

``````sage: factor(N)
***   Warning: increasing stack size to 2000000.
***   Warning: increasing stack size to 4000000.
3^1545 * 7^1626 * 11^1569 * 13^1552 * 17^1519 * 19^1673 * 23^1498 * 29^1667 *
31^1604 * 37^1542 * 41^1622 * 43^1525 * 53^1606 * 59^1531 * 61^1484 * 67^1631 *
71^1596 * 73^1495 * 79^1656 * 83^1658 * 89^1581 * 97^1592 * 101^1656 * 103^1487 *
107^1488 * 109^1577 * 113^1500 * 127^1514 * 131^1660 * 137^1610 * 139^1677 *
149^1637 * 151^1596 * 157^1656 * 163^1534 * 167^1627 * 173^1580 * 179^1646 *
181^1511 * 191^1651 * 193^1591 * 197^1562 * 199^1661 * 211^1539 * 223^1620 *
227^1492 * 229^1665 * 233^1654 * 239^1679 * 241^1620 * 251^1566 * 257^1622 *
263^1677 * 269^1551 * 271^1563 * 277^1507
``````

This is a public key with 88948 factors and all of them repeating a large number of times.

This actually violates the rules of RSA. By the definition of RSA per PKCS#1 after PKCS #1 v2.0 Amendment 1 of July 2000, RSA only requires that all the factors of n are distinct odd primes pj, and that `e⋅d≡1(modλ(n))`. The flag that was encrypted must have been chosen so that it wouldn’t hit any of the numbers that are `broken` by the repetition of primes.

Now that we have factored the public key `N` we can calculate the private key `d` from it.

In normal RSA it’s done like this (`p` and `q` are the two primes that form `n`):

``````phi = (p - 1)(q - 1)
d = inverse_mod(e, phi)
``````

and phi is Euler’s totient function, or the number of positive integers that are relatively prime to `n`, when all the primes that `n` factors into are distinct we can simply subtract one from each and multiply them. When we have repeating primes in `n` that strategy breaks down.

For example `euler_phi(27) = 18` but `(3-1)(3-1)(3-1) = 8`.

We spent some far too long time trying to solve that before we discovered that sage could do it for us.

Sage is really your best friend while solving crypto challenges in a CTF.

The code that decrypted the flag looked like this:

``````from Crypto.Util.number import long_to_bytes

e = 65537
N = 6390741255703716012739584024292184168393392203049690884439170668463096406706884680481315118776793203061484425908996750664788574427701522510037445324123858107194450666888416521092839674505100321427433641471632082867986522076512438717743857226746792350109955282617238949971560842633351711796425747049297679145850550656885702023307960695957734370752388231928185621260182781312796421082323274799253917133463201131053855548309043425184100747108607341675244816387802757006377231210362912131232063125232550611572677493157213551405808503098498872188758442592020147960292449776520321665000223099988488565068440589427881557463808717427509363963640908606600765840972956642216360566137198451942967459635825342997431084091761662128144338648994617758420089924414386226599133068954886499684445410313222922245549271197523742711142334130875968916361588081171026646878982893064052530725294829607473957561835364276855017907413497939632363955073967304444787727178368254101673110420438904821822284566233621359802627405486067626428173589482260603098737266985400085020132487707126152830621149312238835824042725314389554966028374780189579981019530563564558665645009693713628002576189145789459268734778712429303432343377356225699435580074336834626904580978651134895634963224539945788057390764578882418483781361135438298995256709436756173145658024987954673074218827360635988822307773633180246418478287591886967340078611825512279694220897619539299918657482819597802884348015532051392704116898524770137559941557498621782476633028504816302347938272650035544070617734128612064961605942488796185452612949579049558553079555933518015971356557084074687592279580659012829223341711629003170488263480969463027684714088995194241242412379954439379111733001382140014639191272155329259909971269768896455953652928701703487782890378064201351190157175041229726147922708898699933979029272723843396137704261064061212504471182526721303316837037957966150211139161353310424185051859203407040558460506900970915139044721901389095154498263010429091154424062558308838306928730567992821517362114569416759246538756462957516518112232307584904156327271944495050718519868848193439122738454970081099494476971276383819399799007623901636410685720854456681377788369650002374268177323874248599852060903303768268595132517702837480555150567753503552904489646993851474852440442568501922519580326788516124886862962865443262628024801694036291959727334555622621105220372695047339201770909437224559973745119944509403789221875933272107374192017697039084081897168900359647611578685866578610207950079647374119084679413405335260258486653382830199887341600055866605072118267136659953214955355853538039591829850583926592521934825001476580987944706396536008210502400817956063323663174596636403308918766456810850204587742313652367356435465483828247556013818077112877265530718870599667595290621574434916644883031302378911812470525353568969081594535461489799433475153300224903272298645877946798365028718425693926389362074923157305883857061448952272699068648488233286034469030582461772510759331763226930664315403332841458671882778869106838139372086121054414205305179811796569366517245814700991559099643817210931058511103393014612038083342231852212350856132498117900604078289612923782511848122806541142974194384871305950618317641289654592222471464343990147342384972753121399594596607985673410471589473203704132346326742509649208647711835585901349375736649571997574388620218661006237554326174454509153415676584893488954307808138605962291130536723027633071986264349323721639902973251533801316182118830116887677772580103028437862069354137045440504496952443105994202469545798879194067937955899327757299149145991124867506137615276739226127122195506588582388427978460705289251137276602193397411064402998721158018487633315538659898200121060725564512786810398085183217132826078880866731850867893545901263641185259944538749884607427036396889304525164547192731776445339846186342787530544000752653188676132602311559848236746655203167006767675213267277071402128747447039820987866074504119473052924503119141291577374518589233029940222096237650314518884566272114637016110749182660383087637410279610973763666897832481769023217980536392465699703165914917353975382341249883340695231145253808175421334852635996403520739226064722709852076746741975921628086601338994277710698753045654774546034942562829518188784620595091897727254057916852550760101855252337329338702071384341262919579616381462551158665871135113720214110628148268395211616070411111696095013046986290556103746317583011845902947163642983887913480854688215724838115628259492151651425778332235299375640640406437156185674233966243799206387778389489343344687280885848133139396636573539732212583042493955624241502852605279422025909510802855088416675736389654206206213981388055272918599223394438818058388608246058816329081207875618260241312638333930878301881947042513375008276897740620618175550070237099725259620543612825470445451531078283778352035614817664964506898192652024614537535537983900880701124156922700538112746664855705480813181969682781811934911833186790363907331203672743278940066636125102534280950532008261192421212756196097593214048477685120862446754447207015461137925749127062680675280532382301431620690443486397105066088161736206213984689982889423166637196045167440362487382381724469503863034963081846932229953808189798025614964824447276966824142658404228718306918693602354496179117344107949122609179177672362234828845848202000112843511639896346972918582056991776485810359707323499324218858446915217948283298428298256768260623647644210506796584853187613295182506534717220044511667297441697304001803465832359991469510571356554321212409819850803274159126815991821393138816399015419799762922714897287279457118796405784321271716132874195762344772060106140888137310497370144970568434187882123360289636505995964340012755321988347920288610405008368189233605021137341412754656708618731360759975659288231271913995353599964268992283507316111272942141886936290807860224310869781940194865524830162087780582970262707307375700663670236972410810555375349716629443275784449808193461184458516593417193009126571669340616077134567422144422930141290710311197648943568734183035271792684500849695121310460707829255409681820325049977950326144663014256823715246779948909882555963831212450495904883108646030173067672211737359409887597756510369863673625564778013630517378018658091560545405523855843970971986680859748821003824281064322775347871267935262826461431903710622864625958118717033269952526765175948587825084275872955221373762116781330579931258115050902250099159985692338265818558698460348464167134889024775658299976452977507270473013167151501135684940667698624068055343422575272491416019525657866421513676389561654441134644552887684812500706443563194547999355760336511061779760819268993473272168099502196361845597026178467508383644441799021939397823458775011004930742538915245698760229644690821328096588788907812263210805658557166979906948532880639549738806726163024399299748115533495877946524695024390873764419011749652827366249916901997239615257563614320133465170498095223026981509347423050300844335716013007943821655315067515942954492360885220042805052569234556957387697538810882456502675080049088503457394987017215405763906398589848065872622078749319879717120296288478620241771567916060075917764345658990917599626196189917425742052942587022265327368972102339773029787326383063261295411964410070972488272164603901387716005862235297719649371116359387477789260471735639171272074379819798193697200498603970246934483740011048869145542354496018036874901809147149635776183860527713588602474018016875889232841630024215986174616390311931842807025756849004605764087520462587735985176392965005233806494248683168416155056813961512575076878311123803207014897087814983838152658649575658701882719712272738787196676755783832804471322670603802871598248027682784210776272327831030892910721744173083146857985657048812273532393398469487803309263494635097281588399097677873030475394613629245969609854932310332500493690736015268240954861690381870437014042276953390251874905462494362276165778350554505255379444407535917688681521034833389355965073850955631202689616069113176111782382069329623552137552447635426846031190194470911023876536964051634531893768868211556403376619776217408115685006943618385205355024155197364567906946783803631095411140887874378056808575462045819497843659741050154824175384082808297270215011200697961736510999729603995517880728590831281493100279392426275663290810390082406462101782854239156583701294711467695965536639876680863534317058430393249748698475293124513797190915641790546717156263034084362370235440789444581923509515812768806388024693711766415310481577844070948419471072079309938605055471350982236228466691184371090158778386540260402964104930396844100390940213420154510825959407095074700978816707176872733618346449296980905571322981332453435173384894566893198341589220086325973275791488915766346432664830343336780652612885724821943779802200017341210423592631817220581009641687419580799182619637733189086442372691036769574346569754236422536878947316755879371566740901443302277528750728516716685531119508642848260821529217385285306314911060402233730463736060967996022368546786882301485126557906586972272450594449006947234590702717107786772074404154315816313311802809564247947395619792935025776980882851898260330104779872869491264062243978422465519533058388547079544652239320902750117843654004077276468288226701658768654781866611366686326386205774077786576160272139099053057622593401488819672581114106668426667953381162345237542435577379297438030319363496898548500644945582308956277174640157207727671441481780023889790189088749177598887497385727966799250976439977681001272380501603270064639390561694598773675535142551715989199534903334771574051770244841727460303486412675507194443532383861377782238690474915777145289916459861325596130766855472617735921975109795042150522752505453517977441283000168749112950931704048583435025128395898227495745168160039974304188147116112051235596985484020516060899912521112187951018710795835607178312685622761328698914061447065744345497688161892938809941560192415125814845960087859640518862498077948566406774211097812888478092072650934100625488741592504331958507516364787103865822297075681403204637375446110670289338257319725594689344009362474255077664158781990861896536304557048867993673800308451817637594198696140742972464571041088762369943759325669516737962767137272894207714512861314630805886588719514805667623396243863713341119044405247444505218878727740110355199493168237730006721436542094595724257436805180647848525495830848085112041746612892090934547695525769428086679087820292059203516112568241172578544580366896243440726360679071656052064136740182876573883256475475870942969390764945023848790871545165894910270241001065954104259756433087507799355852353539244664358902560001468983343080428949974219555225465785010877934695268617455903366262011984431958864290838183006931173463912184435256425580418844049081480215134999962205875345864893016427421570154072106928476509653091221890816426039855585236784481583782347178505904883727129050669774603332260000494985086014676279969372392597652173907641254439305594816542938510044794763690980857630001745928217495894602295014490078443140748276843826082370320731674087959903896062346815895916934238498322092796191334005519849800580631247620619360198273645910264911303549771184443924771800572755451270460806355502922247481280483423520150730327776255991320415088702642132652158756163902122111833323288978183176557225943266255954521739978046312112960052335307416685079041396087215507440376093736834869630394695472356624482474272486886598878346405131004038909235737393387205486328763644958527178892428806805969786682990016925808222794498917104785877831708090547606200917474334840339722834635887505906311845487292919008777736010725839559814289257316928336703842645015652511257078030317676943816264749266655786868574240156820252855184544428349015366388298861554717135650473653717136920260875923004322685250149561947386575983021211426867283922614189685038119177565388738904500771331622758424779228220712341467591261406909703978447202922299761682155392329643644367084115624125919316998616976337109749746133801136049880452192260875864490108302995711253695931249182470428935935324066314426879067054506649310899981830879129885384773795110242186317687705270704692597814367185600881083917651304005818670461364414441289853937055230116046896645427349802937570374125366466631847915182592811079384105163413403195280409001667975454655044883648112363213888749190661536988724307846972646791122349779531167690243581909385618773750196932988840772329476607549841898065078432930361341458489632100485106896271077956151723614033175719794281678960684289260970697258198797660593468278037820107679356955718312501606719318936934795261917230712328672939986897861253829513063050403941032042290520134703537859866519674017349183005722710271303431821461395802590270574632452666750498874918239927925592455789978317841207500187093373097742617244698312065580542137564701018413667240176439444712130682699465264596656266075821357405210187219875535259219847579084472974622133894157440017059658565370997025279568432832314977122997912654754089323617480175606099438452417331871034050997926034468795370444324450053523889921248848156350825141916304271985814872721071778935493211101013927083790875740337369148170609324246720858499365081355049662952781926919422466723511296945785142885419008430223508295611522520256299875402279392078587870675200246781128341349886465215764353032908814197146033533959417427309963337861019112098245584736533817708887533434940719929417504171767617332514748548330089933304719335972557997006008786996227632528165061165489483842205573205614822820149919027847048287240633419288298464776508410523808666554629441921080043143652374241545657686438580461827083574681075533627415054265769193096029946800705367218897878286693326026613394168763692292559096381840615551172655016145890630511512398929553989560868536765819026714747715529314943237867968216271721344199089024126778504801520339578746879595176886708543554508400346537215173083018200909485148453149771617696105834225048750712907227992094604248192537109348910893671286899550077588171248007710762214602610559429893229861221861218557710856661989371627145203354839465739824609737477176136894621040898931834653540847741391391845979106778584090952566577070725065904788224387020260672953563931683588325572630534887305124797110326688714910840798387676637029311497913952499983673637320673354095701061206606628643422885909633144713072909721641106262833975133896894254084951821587885934745157476389772555252831088108070384522842396480225228999114386663748719033129202495000080101453102484684595651014141771485437685125165393768131071260107288335824760866328988421998149832915345428460938109464973459951672842250493956113168667890914110701185284230068634784461514658392160550266730107792235025575116380713551399915370853016262655807320458892796995715001181771657861320610453393876051713727545150005787300368804348740306957800140052361536453677864886967195007929377329543136691987342503119212830816044007682175959758473936566259538336847662428042781041356282235066476450450639782039819595743247429929306519690296658768709705667668710619827297939426583382349358561116767818998278800499327320445738595457645248481478809661577990717853987557719772992047328879864120440732091823403605071439611997771922437231240599535809616250629913543455372859878482599223852900206207174002448792228520498780072889375128925314749373992634067524188925910048372766960257613631179892278810729843458529176284631306573246031380120377775298795657455526510393618972231611157578107370461963795617586849187510834150262870223409322286988982247013711308667959599552388651663543265470592990728990582210091685794425306706615714357176648682520295676547327579068261846584286265433841016587474502426697393308481477796017235378152061516995820424707347937214275714627898326391277435658974130075948197248929808245197244715266883074703132928873417670151953398838018654057098249194226678647417721957250558836560526736829624091058005822050387619282397829330579966927039195970379661268390016277579579223559727881382836638460787627901059970549655481226017979144278858797314561300540675839420841910395042635282120040671746804803018418316577027373918093889885216447508175128540513429810062951005686757348671128520354386575851381312116915669133238279537686299242160612432862714767346456679936153944866611012426491062042767924143627881758645474780440112550501945556479506350630527749408246790204176713609292352716987906324088858107871198292682731570926183426890042574329449572779771944278691667097463140071804869351204545798350893324303245123645966361250995780925251404313074994287158273043146210990851618845179749051566136516990277544325028389421099771063166583688239392111907960170505120602843614303917477237192099397963841465665804241046346337531162370826573566651693925546650317904889486981778822808771708581694774873170894492789229115347686720592924232638213516708216317933487576243867632066068881892930849923726317265098159042908665060175880485602056713950358313760986882975876599277244174783815415042896077034476267323191221902506290443453706219596427691333620360244837782314659872534456755185634332554644836571033083174623519284336541953749959375119808317662097141950471745226691029124572052257084972970701534010885420059551605435772924399586630516375851091215107351029553813004037460819938036537715462701443090104830058568781729581221226664933712116769219991663979625322914651165314952449281827254760970989973294934199267104986160517905680009324447804899220259795262863858402278285947526479306648288387541280419248470488796220020846701567620406237498147807735898097141334332842141422014631665635756956583828432251208338827751247727785975539857366950727502735819827610941861369815012888919812981958914061223830299295982165574732611297077204120351845433702692558165482106307569547654554363176907713531535612141687145118645259989011162336781336926358863648069660194557760374119993820923118293254352193465862560705166195055078057305914829684879883342719766629976467040251967618367428638385245279519187928123707336091478689274604388154546613714251611833336315431177530697342834377713756341128026893994803424135341390411656682727525064420544530364834899027122471406322755110846566365111106989108110388165484035624546308614564810477778313300693045561399084705511714526725748925377368137237577826805300890926231383879025588197905525486581485714223186613169422370539742060560628258714268088702108528891274492565926368512290437771192651604476164569915077961509347954527778747437022433050621882324123033755640707729119241213907815778105186730216837980395006564432357035808472471879910081899523379057665625443120404107638011307506487565167842670908281186824357441720057524476579906214581131625756820679704148227865079295416686879882086007246340315469625187735317315301373794017421460024142000644739820094098275614829057632042083400660413983537563769986626939227774352941976739890481679210455015958422728190551769956215653257990572091684883675328718233013309456921509532418314159245726090502369555215501340883348476936516691286699917650657404316800076066596398197100883563666950301736066952698355009037280093834862466630599112973379021280551866405261808774334416484404655434232347401407080689758246418751624915994477216869344000213391894430121311224745806281559929875722265257537854070564582534339383792327710079013639995370446769981531376742083700388549600425577550759245219247863723540339791920066902540684127374106656926326274008024138117744597411107353300590368656461591647337505787773244419632193397655860075870280911577087255037795532393560228398234711988052879360100304174114302092899959607544084078394426216674749960398770122660130586697849687284373809861876206408199501133122568897596278821349154414451541758082536450514790732438720328487754429688984370473357605109396734987224080019098600103875922789094110078896346174638527064477343099271660124468545605165442025012279706595367579265346644181478412959128470372531334891383567447075914429219798570798136515511231883889057100193427740635299732732711396636666936363231854743741331963948668817083174630998691749689519215351545470771942250537313104830974278524454800180412590762530253115035724120456837022979656466315281174736840141089297313874400389032876896210074654262775867332395746672494602076472805693961629695201049949258286034042170654647463737107986696649450583086172640413085632651109849213897477360798094437876986986956414028159718836659009876443152393811052969663469113574125752135213788621651215490041579847920492008888585340059132592033659576143405867700714369132995959863860539076948014338164935752599985322895893269058927168842033767636794334072811892392701600236471706621463427576628695376854230597640467861055268769575648650980998322754690893563348991243853779418279290062702497001809296323658049445258724081742482614642169031261362226217822224755756207141075725436440230262900935510164999396322600781469194854543642543794941040767935848341915611132093463651292721787455983373488554785542775183937709736601034927080259021159280306709161349799143058844244721679807770883310184271184357760022650722648666727210789356800301164983614409585929357009154650946784952328375409237913792795412220821465746091364140099394917557287087608058140078728718000611716179148060186259708124806907163659148575346568584775154536564215422217249125625049202596040250843116409867390525302713712400884207463674673766758252696846547237343612066396726271672913717338476971329747214636674451393392497320665696251261957830492334101247752483279181109930039242002005156987223697533334570161566754591395777716965383262496463272344040200175046815161875973637672289677703990209260909421421404515804396890135846461819316858106571365449848099228826421296198792467385345396171777813220325447379998782982220701261984175278050315778267109568568522756585782828069198102117899466102528753151090072415496085778367956762611020460523377870986899569594715513500837697673254937295890118395189018346257944769380783671118684294933694727307868470526135700647817963549844124599699686302646138449143475738910607480852438654751954536894138480566064402093741596208435879033662776038937160579004831940958960180841872706968312072403840708605065876460246903999042160887464096402122681683795283526385279138043694694143100202986255059614927497751466091532382387945666577846508470598545324834438102591157053372638608529662693525996310417321961105571682410229938501500708618644435583458661476889335589419814347212935922309344972596146040726132795762130076823515027224838600861892324265429156733797950954902095695497031549964752278491028371883309695684610010098136435174224088523528042054831735769847060968156276362175431265148300198403536136196750446300042295515840924512636230984448889452052987053316024036018924677402053413829633171316275255118297208836540335345031711059746463510960507414040058030117239956041875982035492674936501069630571265051719154349626462748671209053760144877851695047673715160481643921790191858927460545905507970328676509226177288301704647509403998423479367276232781432555167318347181823162709522741911695972556691130404458994313122830701178185482782892922296304696429743617798167047764521061727327505174572626520742157143078717123737025205256585454372314072649797981845519566359298061277796297569684657526615891081193456804587410154955042955706177302379700902901243022614996180882285682954649530642141261343900505154016443907641208487381265370398640621501752661481693306659348005307002698826543727040714188185105330471392203712634770698805071548889394880182069047667237149320233782622525414871526049201823542266444665504285459661715889435693256610962968135464476783161572348446085636763022038221347124648439885232807765670286127368278072926059430344718526522024811073921098507614733510756435299326916117498973841760193298281632439284302009137683623146867440284589059519639787800766265007110130201233632200335395072341907791569475209457747901384799295936960378555594576335932362010348298934438951911257513700396957774002166315016722115719481652252311976402023520391428551944936287589361910550008563614513261850261860952986528040069849205771217294980906164157935264099354862008309885967225701230402237324886816004366960266588229137675522121215217656913386403401321447455157435279162756793819304449519287489619422876169511077967230063954146227461364656900307994779576443545403818379292113563943215092549569806962758339634537153247782062281155526668395901401252105747131167884895856092201579884056286478086629019731131074224993980842387500983099233577148503938119860712099091951664646057011238207508544960502193182137204391812878261320290366886626738902934458520330954648973647356935899747720787274294801654359099556924919314460188354387547052393112518413982342302623734619999117828158972730000833816583994642650645147223962877381061685812299144535507709417418976298296717593278657613405403301217784083512524630739066400131034176730200635396867070333891011880267897954806909302441579096413108425505639007380829450688283909116264603071722122150528678435518467261059857189028014114591339578217369922857046382270392356152814850901623980616954736514941734057727512528339374739725499323027766308904634262784826548113150400853937198011962348508545715678378233193511357619133522162480176101024194280148486631582650806242974845263666586170744422907063088604464139556224601518052216694015494369714957496186730291486991476242326555438151791372690242842635044214947941842348003720295476204776465390455557251907219803241112458117612977272510650862855586485225874853306102243571772470604167658616540133482726932510796041115613869795475848850641008556384495917771288401014175047011110770025674824962255728339099514397536262551660249133024565794160755370200103503576399495898528384705247323276281738522459635380238527453864467779562327637672190970048691072154338091365187479499665582125486261774364192277213182275130676338211094381028991348835301148958471271240343696950480225277915026022261033378497739293958576333093403843263518231932427923403019539551674401474097082913713280516779188305495133706808585512609674873659684589040257304747759965541642712125200262437589038848963425125185003010160018887670720697376956759385604769209056102239256970847172906874611830858767350847715895343078090506443919199601391826104866105154481406189854878993504995123121279469917771216817854203802768401304060192917732868617720445073430712934334144905124025033651319127695415844925800327211596090345580352977142687164143861947978961385924714141291456325973043217409266402166999263420063062611733462767570988465063470631229295207512060183792448645860405042200067310837874971281044080422022268050360646847435458625774858219698743603658588008892859144311474693322170490914623303823021972154584800627727284896210651254106979789293006849907618617980177526509750598396427373466647781684097086083473227421479426220540148726511740517751972348196362877917691735132092741735676052197339161420067538489799658888471023231287293109262683616090956410428542410087447601953901522016062091268573568347750327257816186017278986725843509344423447370371022326617699211789053719421041130128860833032638355988100101012825627822811933945065667664635127202733852640336539950931827979315108231617749563992121906382072395827667387413835446274186904264362432465533435413346073464922807305929170263018581560946117381428687104342937313060142105624539012589548264664032024154657266027407906475321798793456271976925103522255026416868861164785502383456279476954106092265738578795822482591774256021987547534967504207903870926582289247311492973518048777672507856943769710805440440852754542331585788387323982463823280660906059175675009714121734733390757698561536368276258145068124212141968486130924907474841048431012029999547995203900471071233487976333969954904047907885052506071685689552225819214449319478536750253530987923655348226796556631983756369148975651368305605365754170787564067701875245027475872860137454973701675813804789720359486770206456646127952906815370278153899263225067742975373825879506197933618649829626836507343923355556025454253157659295251109832547815617232711183678094570184418242396463051041453207882834027840689573060682781206833853829723389331153100167511648578460363053582666842358485615563664024024729622777794960882507027210908366143833982058947402960192509492283331484008212793400043638277459484645894834220783428121674944161727368853568633312491271451117186438418470939723828908415771925599300695598115856584715671925083716650168522290158148044496192833896968777766766585554526099006108806743886116239106692967707601219533292001708186999231597186026452536715654562236618218702740660042589907428139200909336245932501840160078456359524811395514278869240060298709848183198416257786689790201322005240589777478531303517801610442344764766607146047142997147260169431887501301392976848080200957956091109273068655848493720870298149047276698798750815093202417516060027317062952506297834220389175216175645640782308287939152761459790284007507831689396733513893881391942366174541219897887293735749912073758290725832979574508169243743825667577009661698410100636094858926226373983066567603088056071780178285111242043794309201257267687778552686499693270930525698624229339812235768448463310277856117183575143382429910360984770973939872075966611484991030975630618509397773711988723674070750715344464411470419175041924676336697913929286191858205159655356099433220716055313863132422666283827165340613310938553698630899250721256303309430238960076819755188691642902817617178290505920862858194566956101147161951524510438100319677160088434763552827900346288781875544895254985964955242325522958924684894858573574795936596190569654823774353870908159425552549152824751654744025049070026778176314981851169665699949001895420019222874322491730292425212996487551413982368438243283676001896488531257070352221660258566588349582344099752515564907454909253720166882041509437356278377273348031322753098201466072745603720747838200160171769819985178146462389180420213294594246231639866901356532715319598088916451220675123359991086521122983342525461509261282389278768200308303769187184515838538803691511512591974189785409325880704093841409540741089625523814563879889943521255694589958541952246853667185682256833046865620134335943682009470196241644557733425523523870059974842823884341270957984627094962317627446663287659321162931247033209076481611673660713239115419805431942356158114867676212813275374572174610430030571771725125142304118357068178164562046952357178814756738759813804097718692507018894732708669416917093413998495148313119529434830401190664306869173927331922341878518270362603538223510563210859095407105546699579512662149551456199285472380815014581140224798847436374654613451601193959208499652589295510438624739384666722153008168688561892160394321691614334291049723466911381099158042389382527183951833876150192528270070942772970323728538617763006563439069218877594617795300983265077915325020191428815795317576091232534028708704435270311918412210626772285629842186111975909630405042202053310653210661700713706404383095335213160429944131558245252377697095058265780195343896814754352053891241575801787050257734532091130974145627921552536791315320560516692131911500290627102257571719240247717905969879459504843897973068893266341787079596875291120340892642936812053390491570832708121839284220424539499148228490535771080560445145760579966484399193892135447631998040050109997141362679778115196258164455161993544476535408931253219870041222104267534900789108092435343321339331109602439078372435302944581218326253009767819841089791295762890792746324884067162280828608181110914814663152519444470151578464592250187107044603194512625810215356162670297841249924800759702297025435857426660494934386397545339171933969897466444716824180873168052645032023468646076815082135440095914610754064024838241424181148918827130942466349936555443829252882773963466232331649495458576695338243074288806665462386230093243732251002972659645373778163712643839841520652001895216906644387492433621255814153075990381208809205697527889455330824891711418302203719961191994258546093033749331353512890506688437368144342283822486847121611977174972803172621641773821839129222189742076526294013149768298114933426197492598911464087283322742657677168396443631723507736918698697427605242743107662517428715460395670933366002170864600432296841631201853502260009980179011789082988323125932405329326571435886583701888324523486690010562199823915266221894735009083432772854199434859450708689847308347481677885523137704460967935608711077181603953675342072617478806999597947218014746747645211225306186946718663563767239863522180294852690793229104863825993683011580350109683522200761629208057665581691760304884043157537560196579978662046509762841365668510628238033371431962481717449224041624482745757718328649612423982045034986215065713173341572163475850236089482139648471445748083440694537266418746200306872051137957888708127325192285025953278577823057388660523231625620133149907914807966565458879880061704334725068341383145146377203820676601686321545395355552655561675327714425221523846166872228803427354661491902454570000736562916686659689982770282686320492119911097493740995877902671932033197028125034095451303589375588227894310387999709030104065199717213264832919546715800030952760290949194465113225192594740166613294957443833126247942477695683045406930525952507686374600206698444393190399922546378667706763859480505246499375487956519369080270652689895792857668750147729397914632061270073963065310456670603076331448188462101122292708808458457758150658349732635468200483873479808486740417063988919357510754205760911743369094332470774075946366166051690932381760680928534618701603079940530267633990131284693907115428712725732758334220265496027211270690470802227419341832111493323065367085517169075011520745400161026990402574742303212144411184348000358740136959991956557866742815245406838189533576976890108315519534733876757681565748125202919203016263082282194387413929837622507563951778483745140258096616799441851403113902693564349323545372062424885054965376143177701508740133329641738563674006456314454010643608412899666390781864353395351675080728887764747430336667321049783285156313094436929914490527807804018883262068478402879098699486869360727269156240952767555202163342934680113304097072026441131126320847476282840485540471559856606575246742045204169758534628389155984580802634705018629470040753089363003243322044974948101483700791428047756452613342497165142941544561891238137447012241304482597243323200527653657711471488504907102661017095633619798242292601588918123134869923336891558789611043286277892878298132532963020254123004039280743764954125233438482330945823977823217482983057656863343949752313106616253582047417875956927374394664978927778201960493908334677459277161199488703621541092249935936832827596733589014229656131882144016093927679457191363775144819202852976952556141526050542045583439580147598934105511154416702610010436094601611384515619199342706549187768644319890106547737468915370139042865442173165482488159351439188832875513643916222237919464632502085431208967402926151467949398074688440069549295875771149680310131948759978126808937803551856101697670660200811090881761623307982511697143230075311887099222557519624634232839209576957976376344917257358375143334548503302794008520858388562443476502852388414651012652247613602026057954289169641400981170254031360466001077856126216567193302209670488105711776909541500239692804377329127338494045252882195684515661593768890550580342486046446670970461778293577022093968605657772380028564953024647382384051653650898882232143659044060303927234652777328232946171847602981617814010090202051159409459904369359339543978751050648299552310730012599823685169473486383127864973836132169184063616627696622998265818023723710955839923335642794178350412656786995069609661783664977913291133560232610553622763911259440433738531016070817455691254226052440134172054158404300139939487080264371156621011443405340617059653478293277690484678117793328724629973815164079468529995716781387958653690946724379941445250283939591480680293495662515106213885385357827756171413008750995071899704954478590011675066460361148378179252838190593158108261024230357906829578357426979283427191200357983423588873613132978573576447052543663668854824344661618482632190897333326437078512389599699570221602597746428620298890730727954009017423024693556147556124320553033925648134143928179647117886918408658302664917944372506112042493873487641630745433238867671714629918054833188386308603212876519340653444944463958242451986487250708317851904439648234902661661147475005650382619264288831738391532835369330413743873570301806331544901951532023323621258333378537291293068588706366898318323581563103639062104589238298524679266522007525635713855269595869319936987219758787048360745149125722310991609911919899664043549020776402273838960462533125918067993067401008107404476521163535155388609563057082314737031845723322294717913630969338916880912138173832159583622753729826925836813586361366246172263965951364449190350618393325659063435520221204459436714946533196446059730163943558650626042159064178981430751196710936108631913757048123970415805729024544332421421829562808149731270002775060949039065503941629698707967752151615390713548965054143614278627670540870559112988358941519573454825396346729015923118738544067819088077023082566616206009355853053370282691542195871778293668786335840430419426286974626105360881105330341783317377004373878534806165907702680791159296198522537883979580163533994703382145366022115456405194693567537767172316582258326120570263490200939134179616025622887167454477686903122374634028325314399773057941244623785245635148409685927224437184689533582029653799980194648033933639794433049823001756880365108009826195277455821137301751794542585228078071954954711118928164518094919912992235833316790328244305655408916443255612749978056516584573978048102369130983383167309386491047123623826761626920625880706644515053829952404896086611099901247820540879441515719612404403390412904173999975155640787186407735898954579793614366184792633169954823210319109167643240604375048312929573030459506001063578160010395193831507497639306248638699181357235833442785253760721360145405036862718829848970724749910576023394996005537580643721994728315046670686742793895590344831010837205547036773294181950585739602040961936290342223569298454154366025258344880501596669536345308403933736468250120520425026041293248975685830523246721986189555772958065471332748587757505776518536068972288255855659352611119963625382315129263137151989495451894117638366882160338357644705878811168280599149252918415212648277649423572862022841118135103667658999691251270452669991078290044730911066483200435666804529882683845613222246710794471532703953699324449023641915842283614991556170591519246110810048346568939923232929986193806306559488294806463457429924508106756121163536989604770986645777698022033294083162415865592541447056852786497745888991303897481095492608066718829294068196301722414042973414781486837360287897646367748378701731807840129796507772638774781832245059774793619855276764179967064068163454800078828913217053888976826406721977445543388429938207184118178618985615703381134166276350919258491678723041939264987577218000051990275073636230931691630989945460187569868021642881504448314623077709259666555169547889858991648433029415188926889256993993767992219535787377202864290089013890516620086100023236254419888890319142605974924547640032066562878635256786096405643230733356092666287395438678978716878083885930630002690632565824998689367668031042753534188704188456942218537366197849063830256982917676730339856521378522145288511276604147363808420556435945216842019756244099057800363963303567248438401962014694573248831162498872341769873266847367938952418690131187294841087249366167389028455594649868355891588030069459448792393636627249742567195107653316466664045778540035437409170771769924202700063455705465002903494623328343568370863867741581201680886233909198321310861700999966311831789758251659126405380821850700399335325552764214779610337785834802090472420066640885809418056213715227938602076234446460986390004101377965475805084465439962373896968953587864426920162697897805483389472595394320590086687210373273448908346352479753221856411014546621123172848973569166293589152286235882127358943180848485538799600505482312742008032063906159218384952018913542109388363360968522190643096090480795302844624981092091486876751041868158321439399860763840853134939537744681001557846294264700270279889330267770490015709978195469577168625012588619543734070517903608895468733616185105290275504465628108985123041943118448315909908756667100246832634794726171536444165182264550606810595792316863580889342486842100608434878856806784562883463726844960739268334830038836105622062090364361414170394967994830437879988764791886135736780744582722868088266041772119104466513338396982836688509340350121019807361639682261621316601007450090656621269864585365632488754585336897726462681797895516856926262779366710483169773466190680089956843375866585071784599586583704963839933055023048586306527893001815584421783080603496472698017515670238656263398356282620715426508635300364463032620445211111477844708017193188166026702542332631285037255963441493363435333880063315711994196986331130851041522460792119047415102866296365264494020053688581668313988093229875763251767072989159161378618636716395756842540145427125885022965696537069961324337874180270235282441778870708328897444628338917171065460181572899249247798436813779656610008556719209975658155451603636365813581043176600043271208596400340893834725554415031180460242566685624304810327359267292866538688002866972296381168117922353089322379481452112419920877236170129798668961418558041049264932736148983186966347177499876503987341205064381979327191659551712485404503223377790515015483350320726607340868824338140135828522059899300285984869436196691818171447155743583782157213598552251311657169463444897718739051989345073823786798337793045849504571775046758750350255713598090772562079556188955644196274279507557766647872730198089765918534120584639045973588930101497990165084828413090922190627705254287931823482110565717087427516922597028439103415002257933611561048136091002667702358741866180649014546840165848021439411096259391283457119574576601730319056110429238643408435805809213598279382486465556856334430978161144025696716952129445362667404779793363950631328250203795655826234677640042498583347187328097895243217371460402348730786093589174476886725087543179337279994109236003900634817286979017661442373228923807132113759590363575978756763320795215421017464401611727801742769786561243455080786043813019936273828045770320878676883268488162459936465218477210933525369979053592961400193299840438938956390179243725729649600235116270412650091560005938188403572898276992731074138468943479241976119492515765134244586946777404192101570127833455367784156695599501828065944686796695159908243374584315652074666795744121168404530272106531240207532193645230465841323444485574210799897038624633150228470036454862901479101063300003194168603222804680474052870447160584466683824174248196581112178222768127427091159783276137209035077748868921271911597085335593516706915149202786433881308408029549853298444709848049490676295498844730942656695275993122029862431476754440616598868695577267233830763688900257682479123886018408768163112184405354382814712742669914587760616764174357502624622909970220699695929494942243227880084764664606832850706807952272513449322983562873148392307023487982334741629074925136565003574440986417360474843943749817202573331279402982728669797457959707048275080183618639347873604157435435305120262982545473606970119611893252376641150765817764143868800882781290028777808437165776152713965322350910766161290517148076903541102372562046720395861886425295751438896556706542686581131528550919780260645888442498463109373062339416111060392889367129661693621079114207648364472639250010241599485544157955615814387328188728574342361389969026753691370711807419969936206990263810425705954539008824936120426480697824957182152699621665505145720504362759689466086841151100992216939354543277878754262482776759852201853420862918468286725184779019941754397950578243920870037811432415323673984997373272934914370096824724195405668541784584213202056744262571519551628161582681204223415987283909954171571512838970639868039118296198896634251224982020209870393924638894783439983385173031766067946304112666550683706370557792165767543327141792031357724210241725720997643952622893013188900380080809039897497724250139857834904698323323278257701105506390789460844157406258796121429841913676378185257699047920575227157201623821726759571553536108503066199207308517876697339054376505785521812964927072455013211023268853398057142041771869665249285020768518085228279592616358151113714556205875624062239731606323889179858042442650140912486746944354171647936415214861220851103943331022061072472377795142752408746086102728283369986201189603072660082473972437818759476673581003964607730577274605116053556373751498279366565392414090017348368446315243011197272210139355848317684232044460680417374173718048551080507455852296158532987791137245691293724168285292974132377955559733349047069881695015419666107506916637176829385931005497044337053681629663127454184288944020226561794432805221590867837588305663357284815875553662861744111671157414820716305148867702194004162345822331407492004093508305355940639362291174966478525975603538932712555628385027451611394928266025058600786072262110237493342253494696600526485869448954493162872339862505318562177025739298321855569253476060981712673454826868670168843000861264747223570024837172027643186842895468032154537290872335024368525370077672430642852566085979545453160278049012699700799212196336574979863215207849848651374250152755832116751338966146945000100687622724311736078748889316147538239387504525083556422063791593579115742530439671762679446698517003364024413639557706961489032124118946209797284307772214036842219861707459860845241674395375799005291443407067320367607756647228055994709065585549164714681643985615981838074899855930919481533799608751664388938434691831362728118961632570286455910488416283400735876702359318745822987498403784570144232916721061729397191629927103792787428907734555317426191347386331990161452742836335182183695237605317338750404048451702736638661011512304557880449006265870798039555928426344188737094596236340610088174732115876688109139978344282949587243988387083827603535118955906063762806921304003549162027722416910134915045829582519658969408944081637817194418153089856755936546577482288184095470152276538448263039276373546949872393133807234090052500126324381765131401402617400054485056912596198944974992474307662271623909019208164942500682695676367749628100318343336723055210886553265263339930403287185530283757376922980437533174594792135753977370309150849719620368245204992015437479239122838519090253041637469138343828260484601396309745938437475277748881448217456574104011915209594304903566969222959447488175101542146412924868370527689644989704901597115135450893790571493519344055366686225356422548897344300141295534345677963618576612789105338566405067227589498333660255633026158099280155809418102241127105994866515880630210460282553408993747724706088524429746536662741382824382417938021214792899715353781732232008350163071836362683829502180770712364632227653771022931606877193325940951002142927104839125962916195394587477092033117917428652003569299758241435923287307317202726099802245271968170722337056685202393299344205144014286286970429063639100080808055609778004570906923085305411780202319114023107498142196813836091873688623452279698207183968272395041260458221066709079193199156135883642390120002042885195802910791994111793483168870612405858073776861784345835040153525127160148245523004212665894409414631618971382954008026097849587723223021042096927011211343451154269970797268986296205156416174610212066204779146716224454154049250771260491284506283948408112496602624885455876552788655892655239464224654071505938903262132038492502701797358158741760900918402205677726296923167550267538690327235692507562905842163905383074412556275089669907256288241968116720791937303250233249672712917327875900887268464918626839146550687402892773519906321489820747585559142124160631647071539058358684784154850454569243428099287132507825250845385798320720558235708185999226110135524844729390067706712265895711029810807554167974639405051884357494465117636591163975835064299619468869213970744197944914615980635469981240993097791484522569044198575409376624923334902509968394502910818925454510876797128295892997170694468666805986373898585738812962860973149790862099128192886172606851615134820657186637201775451128053167296145332588645947315858729669727515000319517744765077117032856793187406754089555263158402795904907727898690744358590434410639312495085803455294056839085295477279865025755386497721831994944238525205804751050685205964420297586545073650491182589191414244267123418208617350289213356820020219730117347144553581333035432468869604588347909636205491630323778494136148924089737283553716203981899253866978339228761000687621489013347935178252643528170699973339966964275619927259945436858644046609980794809643515209926420594314795419298436036024373189861376247492809786435585501028265991872859793706185189467129214031312094213724270437736391490425619261363668368855911907827585106573366772575626833234808230625722712321444223042256301580085769537442015397609186981850321030237199113589685342435020594663005871794180631427408295530310520509780368153855465970802989897054273995333196025140532864009680786389509867334621164094564214828799627044819540038091374220674552388185207048771088509202585756863000046231932656727119040994808956664221083606062007532590147486380811754634215922725519788028239052204005817139770624304169087196280813434495385926545871381634990186972243226806836135065316726597889921752383103856123404018556475107108470992545531854763671728582025390898117143890475193920975777419058026198611947117942140123757102806551435155630002957474490897642643617000828704779459579875584921593643580566423321178248658670273473447498703366851566245004194184787222258617777575606816784672583195691886021923603338792427306350520000580325671209875115445467034286267933909741371599948620528818253731162958622652116623290317756480463706706942725795571917781634836892540634718655245377378980160700138503071038975155957533111292175119161743863423545054728673743666959136618587005936247445506119135826010643574644060811182611879131670419715232470907284019977156670123891317485110137020168053204675684004517726306337645392815086530742186642805810669950293734521077994620015655874326412886014650015428517335872954993867596249964236315853334071754290987013082577748031587721234752437287826777743149991824559113163352424512817423052729258884038659867903229434604227988018379083452455331380903382667858860001105961430682516047083153961752826481853974190901254593264412244415849172464620736351825619015601890756291264885638192438098964666093767174732217744342898589410814734547368982098604085393765531340900120174357157117455690417883609539075072179596657484416720641632236204720193150464960605653447279850358960703314102828432251606288641753832234866016719970990988699544711606998008571170516555847026427924166777802380824159125707502543006652678207472585053874588908937795374706770044885370732082266360695838011834400519890497923869101323200453516881346917108887292962020442320768038371155117166010406403209096416908537688536031795404688221177337559234940103461097596012378919060485643578245016123324576712234675244460376994762387198840817376343573822773921136989929376854990951310798485046235887814483860733218511717787636835507646874057175450430677125425416943529926486144550070668662061237525303725241423857458016112155477560012968297940697815430567869863164464524315091884312462278133694216187538911945293458251504763423577599629163734267697344528611452238698736619247820441087629372216011271314444003072509004611662087185967794004926097031144193211848010884192822093507567763153749035365231134617274580661933820996042592650469301018250303800054541962097548965592460432926744955821306560353117263224712346443411330726998938181724981366165564473512284606038094097539783061410119495370939993512893012344652459087492856728448498247023388074924058156345254498535962820855659011733298570583553529635309184753215311572125442852347991628093469697744765854629366723100365644815995177102216003292923637640661573654137003580387456120995423988551565552712080589037430430985101147542434584227506814931135266064747073321539151023690281648881836934871647615366042196856802739550062088496689008944990567742386010792537867720120670894820733182215297399083671986746392603057062264030870931529639200629676027602202819941181564803101386953834014310003342943112953186667041503303613763020562180450530646966564910230515317885523540927136403954394596698406117842660880960501364016768654242684785915237877249234488744452990459495964465864054122934020609749992220447972871086653507159105104046647502359573317661148449388863344258187457244915358401556174933467587440453247814962253504032523651072959813405903248350372554006132692404633867691255303569279206879994641660160829938124929422175638942710945154830239720642707546970069303839262541339663001939274222024163242111041864600528875534894031963996829872734139417465671699157494761481787314925379569327443927997332277276860629089809997090167355549700639899260024359177834112794021132177617620146489081342511832372395654039109083096582462393366484731673466219798018161058217934493297734251999875227088765937207459689866021808036916953304241655135560553880260219539379352232796540165496168291763609272086318771604195420352486442652652447205474427362709012063879750132174369482405742917387542575087564657065256415662828826567282021753212837329852900967607265795822607380190816138134991056516790150435939617587319704567371855633296635985267415277813359625777260344142621230765202096610898466402525943316076490903831985369905520510664749486101974641002598035235491715100171507596932422170439619194563796392195965851205151887422167175138492241252460602676884547217997262110458629685784941574539753020975582328708778955466018448718671967837725765137096229282682139190214993139973519445480972558427384471122665480711750131942287588962206254294709042694580308079146292996627078246608425693202289455054307665026183862491919832182276525495788698404785016041173059542655579939387458519961942791852758630584065447990122240309520840637273071316308684589185222677825720792410093295922776839320375568483203566919086384869760759293785247288373366786813752701564738512982895629165871947519966199073952340200220355400601641012520671767135356905312208112621558846082106392858347127159672445795222434770471281996328540191667674232702803720339526357244903829684089304201298333865461873664631612333188047890105557674132645934674820701084579243069476740013195934813811043015915591248152857800988511677508177665779275676644644588674353203837844358197913981228566124651224235115507700097782475591649402272055183642748959478012868194116295500720613272963958649046579806516485144333601684688367901463943344555308317443035073472838717304239221062398987522915822919631234755919099795308639064455225741471221932754584236296305072971390912645351635424167411743696521645831133217022116988085830578910094037710511434811240888065141222296305916943145659634969722036345234338704141662398598963956771970858307454370211792772991038966011419848769940164504960810568813521922239600576882974085693066471860311997507798350720362320191800332204157811357212405245677165314191587568577449627362858008958509912053469536702388701607573783326226857362298840339645856190670808788469066797779933598459949268751542874958325770461513773063008823516175444058250490638848644503729192134326580055524902851482840128024799126380013610307095337910611336922903396229393246481526313207317245294712055743743853298272166745680995528776546922792093221973041284193101572976284436689694871044880758060341933785311576123711333087230445916820146726550560637093361340655487893877644220296637970168506992526645629607670985482923931356118189836155017753851843003094919289436491171817863506598601142403078461250037357049130910571366683251908406709993229249530031714150484831545117144576576110640275663295620482015830165267365492729664248084097148373650268105219211689745133101924619947508003880222453124575920921725151437058051150897561389308774140154182336453818001298106113018630777136017246259792145806382052501308947671735554575507181427788537795042854145398789416373965117578667760194775609405391049203483829076293879329356300941489095789441201068804599892873579466068783309592497186653830592748427757381050632041499145149683613235857207096245867161749944436820787113914491371542479209325133615701111352092687032755397613875752216107781939021723226286065869683932210327561612607583959510693145896601667030698525078056110844708057032205183578383759120144356745979405844995346050788324570392960880636766846736470157365044197347652584950680052375641414552536342221319103095705485419187457900459592900158986836869008886912492741790828018473764828515492103609464924308569859278925572340798090882343763287620286006277393526787213092911949976931716201890113340507101919465417442926892576267507482576638703616232753064615906073760173773782554749271869675999359655546347758285782417674803293135109005837038346432451085922508294718297784365007864938555376767768341194679703064946022381953280019203957364589420859535867926649146415090233350233128503279851459776643309696701816361368041776185340111088898857343687186504702043482024119332212207517752503088072167418019113263981874888926276424934331291957329530593100004616612214028551604111759795664919952880694109330365376724372518459054402221354269558972018006836435584401804479478086147886076104762458119549503691147040260058820454839259715880135898721159812763924857126207729707741323891086204559818156880288860680001890142532346995332358351187760459154212379825150557933996746856561059132468823969460013921900029891986996852384022684120228768227582961641630292355043158525193742614788992382357774090487613971995342137177026167816345646951653609072461151542327969535037257176798872491236629740112731377004570112066736215246515892210240507401252232648191805863280160061255219886711442808065852941118911515112484067419624854404726475611404861120358640073176508630225020171446488810632229471852386707318782406863216019951432072551750996126400520445522940019529470842505414870904109710960978441046758399785801005827361541640483525726869713539462085144754490758033496036785814337574742842098232398713556457057409453940624098450015477345164379880309886739783354015214028431605487673380921644539269168891781394290764942684688137194012449478703285592892916785629854228026063559274364480992578702740933900411328338683937283727089427862498333203393147807148814133476014650625686949496093384800662953155091048129618462966321368936950337456620964144753007011997408370991021374212724850203440521237795871062405297216468611163832173130559166222146940694361936444195939989475044500188896792570142138663442298114809950738955576442108705348069061513112167203762316807056956038365252203381665299471106967621655123921113507117305683404384182729323401408473350482412603545534752278391328037379359761570202152673030700870483864839624148947145407094535113546452051059025618559015772062494405552209727219835024518697321697026619797191419289370527013911832928493827016126660968789934680027702080912544546865343573502233953575084534931634706320517593824127817857047869143293664182335455894751715428718526592004074855397907214209637653680197319500183282872970792888089049213557139977649726108044356598009197525232637310650492491257008875529888927199254219693841267547344325641446334640358870204083403692319308101564848549464970993474716252625493698655244257870017113117603607880393692922952994288554178918432420790673486815311297141757392467945381472008183910364961791001201531549907100121075577892282450830749819620216286014020134171690933287701034674948320499858046843039740177118886105290314721646129140342627536178924905941256874204050894724761620651701514769973508240528120780763284587085786748792732697380287185123417207226972773453332646207478124708621129801154262177878714299813596430890093023720154800996170655557004489704691419466387168976120377720865466440800510829424880855092822889853079477688282880089052569501810761914545875630890286942961485645832159227118522875198480754328878437300777506047020891431929539345650113856717757054028270747388768165035256184852128719476760298188189239728075602436495432345667245555900871576989006299113616096097034632846352394838826003874001796012926224118039754026532417340605758857178485199837790794234711835498904320759750911921294719433997662183571278734621334510678835505274152670020899778345605890874789553353287485099200921675045785882386098557877097477885742737510808266331427751913479175094180789397102383947729320553134592386672319855707901200700260294802976925944273275380949075381933687834183318163656960802495281605918181400622573804989924674699595998056900122149775487419307064076147012538944348357525131665710175342262861105444487351598497698879011686904507954218628266263545035830781181695683333247909316240876407826159922849979449013090717278976796087161732036214940885036427722069106500111789033075357798719740265539571813636273884776720208014859432242971408616641252237979078570140075193151518503868182113251033803217897809963675979349113506106545260210605009513153639142624071335297095301929235001778018472663795194531233576580351007453984466496055475030856187395631837334480961791235423402665584533716114670275236567703081810620608128803420060432412322849525624458697798409861306680950603048624671067582910514870879392024526646148724016300369653383398227688933239809587282160599020280586505471375709974752941466237774028941658543032329540512518244986838014749138774503011225029395643878503375951298713348977552444849378304835406669969044404989849723777820684421857082050390233351604154156764235379785292526880054768619425971003478722687810330577654371679328077569518222631657720644885179328572213315801315154711321950904039118897244234011329117292272690793618710818429733815851335440489825568781493735159462180235444193727308509144868218511426438258916287876960351582713642929937856176326299374308872405571818021294534972203300873594236435217664667207839957014576523064915367786301329671856579173631475495545789430938514068792843876505764844439639795912016495656249713162596887124784135328976539257911222414032330120736627431558690868589961456172832785752835256837642809916177687025681329420357288288503480436604145543674796254134817061195349519194238234161994989946998139918592114182159171111303601066702614591987635308282632987261246919470264323283569537939142094456844966292532597861829810270913746632657156759497516766646222336281721325240818830219646191430622884853865816203165541880140775410024020288738099951624631558084357676624266515378030731164038177047751139662741741220282082711073026440215567877979407090177913918313872869224040517655126378092015154214278367777919000680480749806470048905062769097395098809224587557285616828867683846149038623476259995437984986086573341966437568395869365025391635462311291847285980774515768418570378267361877875681238580981585907887492429507074164527173611034726853781780332983703859193483146046492101401195065931434147031395140473644410688993558603902224750031633675763601007909409747405526716164186678597894874641726203198798457277596339206757702355097719316250789878661063118795670669305689240671138532872363488745249860796853634947990313583836224033103244772966391413075533465055761508771672357630850073686866151066541225013267213241205943618180718427081778357704080036470980151339924651244038514748583971054686836370616942359480069043795912511535141998927643991536580503185408020049087057544121694992278476762759818574124521882048431615091497674894652240931735812275529953986832673553917976456185068839709193966735253275083321844190586871075059400282530366023802885871589474685269605988848374044936163794290688539360524287642813281518681680933743876363115197591296026846967753664666540009752770745048701638967416254170167213175336265854645933461938490752829448902552467212060288654492674112107893140257638147217659912846940678911668096335213397042503002491584045009922732398885832794884218485698590174571698316214423311136448054782976385108849161860588288246025704769601479528576531572291524459416094897599567710278204582254967507551602485480132082213154897968307248747361792635000557839446670094689084900325411233633481283469271419464727448425351279543736979619892595630873814758014167468589552842346727173470934057005581468543031892747777457373223709718166763093346934560079902783812828303363169349492589193754106978277584543638471329763863985712261762613844171695843493115539780860909068002959050639199149842798093189077249375679860754262015806481148458379079414957431695188237619639948740131824128991939332300092052143798825139361515332384654286081293383954721786769251251680009312190270660641380463558335865193339659787094182453470871405356199206743033925209789204376521097620039291627307937704101523311264587935307511133784503029429243336720505407210704611445393948889480228243332891867900225694137587336391799326639462916685637985987803985800911487278436110422640539773044759479382393288906191567848412122652416783981182516076930481733241272539296483831731334031406323311240348403562843992459836323525434815382937094798951433594047681081693112219576504530972434937051532130488038913391234525353366871353012594131461796656092887712714476459933376369981440079261783854181787438168451564705728444175955054640581564183698005290616527325306713505884438857434214405999302310554387502447141818743942823322537575631174841584704325109423569573312222075746036938750425519212675024644851178675815222083737604898415196380016384694691581795414761506705198425171831519164245787817338393729970045187040360183483105903115312062491806215984569709336958057234892056798486200171116678622140150278703296087663607116638846396289424691030020440782888420326133174138022041418541895492872410278568773326237510125107051736256079131511915495751442596768915030727249046066521310658345259262822146574478734198132774737467169047330073766012746590665928771129021177935306401787283092328246264038097426640684157702705739791959302713548877130567091760247228785136865645546373114078894788081183319890872001651822396409424876520517040161657535391751929970162887060407720034381628228693173811323940545822319395620966275310172764941137503737680343364151187290636232446774959172210123497615661014955069074628503990539198186907357640258080443227533528199361998964642959601455506284604415908380076503900745158290350221374603615537684512037899034701114790313635065593292061873582145805421040120522793278585432414480789654674944308189883994836968065856887452715502196038996361187708148570685608424041944851468801994501374140392938498685053148671574922486680571851795759317510370944084334582927003807743797448492736651687850055348682795098089290232316872785640796114402024100661818934319213484845316037633998307836849545920457936760506511411506082831807066935729723999851384552162571815979269762973190796214825488310294541755545528547843868418190300082933712969844083374857933069214667131915373855252548039100883681522721831662085790470538535669488569647641713263739832530560500333747011761125527341609531828680426478512820660544411683175033112252451416114362559763707894191621785638862315783324964970980366059604192556517106325964088756500563193041520552718470458191094402817670587634909939985462849315739050323924080653096086956766464069683015451654403975391688767700643310138476281587502525397283051830302080140162825464950112640479104377723013465941409247357430295873088758573834305792359659139713115942417154103477480706262544417380554787074645385554046140779825268604236840711460894474811569246661742801437148973046082320818184536449640540873677000300299064833486210172392252486205834127395857373923835927362313602977001321708290313032300005797663567110637464424242825226764574830839513551829577762309330998744434416099409207042832465951354520367435343709617211954693817377551277659914734926918484050212354835975951041422406852433611190125470810211945195600872424795574859198136917776772152259496969401661656004539204962572940337665595647288033214101976201252488389005584157383213412581746742151282283500005431389017844609131757967892185394286828699641654179450996589908814304142569399573788971180332876302676662099211301723378086524540030520254370287211440515637891469391164817838370866722754251765329383341525759063102392646984115614201314892244381425326572734216164287056291488488477549837577840541545914399657291796369726347078855522510402923760264871367351269714033003866587861785697084825066245349944171449650373718267212903448480822577787026482066919431668637568410557214929692559088135627557998083609874349557059948622114315697258167415668609692188211901056336140415602045015347990495533993255930680252597242604738931470450653958309430852384591635807590697089261444792318483049600002263619909649000619029943601419772401075884582570982698627825839856591277986398298225832127247160773576325386183173937366142867334694894741359133479045066712948495006284435117438550386739509628039225687092770417554886065811617502451460992582847360019682959048673103578311103169265012154301972726045777322791406669289124009134079608047037670787224141588379742253099393696317542694991457967654137634426919822460206540013600910325768596030148289490905865310651720418426327950566182098848297374546422931920986236808237972916209805801409626133441131146641774199846256727169049028612640442198389986856155542575867261932437802705633600209593706013546246151546682647370436921131406483059143395637633999886350776552048548149900957230159721748148470287225487721048472649568597219326987213740104781075420499440137372697533038444424855961772753711980783594557408025530883410177071891216321375781472242879107060686414586111805045045123373691646818958913449701336871028292824503890869947845211329412499071849025612789223652945970258274890720134723193363566099038605476854957340936877375556174495941045563427526066231432424175341711355780124211459581857459613282488350460089671137568551708274365329144034359909250721263094108636400415999120988488914878111137493139350345378669013381071977379706604290017424166260140246427389714651858319741171472455466309702604193685272084092174419727586562904416395053826077881572445900786577452081308650033836203726044749500193917059331346628647405817388874402488777563219680835486973579580602326306972328906557408002283077446876848396860104438531747938690795921689323858879194942911047589690771324539379404144050364337583381601678657350796179114627800175636503603580425694245136970805319438913590715577281944621611002889210072248407193041760716290537944427140786403169613452678767809865727600836681922329754397100496276125510472161873816652033647251394956714746750975091724138958758772595808162378136393779523790832548504294513114663329128539119528043294792449318499574954294463603948361858496575393062573258624433003375082631680558724383686280663191387948920838905674402620975777883638772085592879306241706827582945198373866668671441533174740239342993366074390698356094590783152335222438121121022156189555225191562826415764393638390732830167200026248541482280879769537030219669877625164174520009321735377521188834652538278656063354423700966387054299358278791115751568243624302703626720944652669479125940952680675695105483128601270623605548590378263789644071493497337997038266088273648720626785612310128751200217466311033055741405807834835025669320836818822955572221729840360615519320961911718843902883109101619674267469886032733983085085617108533180911124903477261706203630587765568446036458078734773951415654051220112235574351871723857565859797358600703354232517368583957445930474957968893625585703044732304452480774007979765295439695942414672194984778322298864783166390421810254927295169538740888344327593303580289954894706513103731405612312155148936602007948002723821441302845753269203279382319792202328170227242427870320161087725344265279104962457819458903416989582945712854431333404755886770828572350813714904897376824560085722931759717971149596875619243490216832035669985754188435158813239110546529808791874337738930393674764171435033842675614547028323171848614868546694501893179387109769525559000225261662769403594587286959336577439202692731792003806952624875060773664184880107010240169929424904634335645158408809816905578253229438798531139684196468010086693051410238341445024597441314581971684427020437898312873228427777980490535232822811973321709589448405397149014334177910351428208871766804985358047217247023871486780556426955243384135380807473901769637623150843087124093199745577515834490317359684628318984236232969863167481403891068891029162250109143211678762368375933319294482488146230364647419770285323952484921480512067433735549061398931731751912246475035774411986153626381187510734152394007366537389498252574020458524348448449646402568698973704959913942110461409590825429601999912035171577289576743703793800205971293931769243651519887814066776022213777770626523330766384010962297013140885256267200467555022625081717023449496764116621770911391263657004957066873010478194672224241176954664689166362824847673983000719197970869568778072700326105709650625078790465050875452867118430584621272962692649222078982882688044452633293382570361361245634934548085703337152296910960385914904522879362726979874425985224948300108065474270374510850667977743330073346075804794327297755561922127455353476337847292262104200120384528404125868706705826304089822384178417264367536551639772464080354622254069125462570511818116990878555276992022733896149730026639375882010080680704567693200855684270303225264895173105050291993046614711010162178828810255359836671002510541336295650949488149088960802150388541101722737076998820022953865692387695720163332465607291629528891335658235958759922044885068368614200830220764886095415016634943158744400518539031634421288058334589534660855210375978681143537887856835290983328831956964262893891990233675905887738780841910929824502595849411044720624309318842250067527799923582202764189411155745525573605852284583714058309876164498593627688918837797849674251863706889693632824111636392808383435245118627662156792517940780176973923768943736233378117924007994482235018067843452414611055915524566535991148558869276648023765249687674320742746950009220553511063250277640571041154394004846099489879774780798945025293510827833057534027761598807719148304027090486080632132720756131984785090727813798252337609844393968407556906923155557813873459690463409076957819400937257401028246207680240380188361047933227561155961417879777953556183973904515645481199747308878466969489429541994801488287155862758214853142311505113680701459385373647009162030661260262040697977159762947282570317652586334584438310506078439297477159930424423982210405898135661911856982364718164172570548580181161133492725091911407016655332013171376870003574737498443572335992617462374577572437554027990029638824954211532336402719983623732954448885676787810788070671405973896687346708247672454997169040507454106823018407140140977121565009779136337871939492498687074548415878926602184099032999295173032612100068808203013655565082981288999712768691542007184450206855541224630770645970334685240020793156980871914055730919840640351959658798909426260959077277434577644317694955645301847873721964522094775517607673556798142778604247830169947332465819016343110394872191043949649845604475107386208623406190659862025142704914652623474598298841656953939243393198032554038214600475023230937681016674879191261167451617716209035524287232830694418048834443306228684692745430627451591637950960100700291806738385588024226388800336435122601643330891686143255760853828501035314179105733547048868915506220490011838427016335810915528289993470405151233854897373388660870573923692213545652444703769017022932187461214289008829576308893230215105791191517248945172920053432669424703936406081689028377103150784924572183541667485288938183836650892416263805370803109565151429150342552325797559073369880245488446638088008355651320409447879377355418449785136853549916141298477970814985664764411534422232427307938156167286486704980200827543317437421163652067927602681309189647736650301106222756638757799649564508642866886005139131212235341429817583102401463974091142186408213382224585388201620718143743252115836423218189355407029455416561278263176038501421701098157326247590153795036215770175253190768286530795739241501670410293035731072779527131787499612935354699558333026355870035714780851931645744264701449878654589034500713008435494320414078061919108194505286407576956111779316950694667431082209479260963826894957837352123713027543397782591800617343916821589293588989098711391572324868494571476616547172663222178025079982119033003911665374625427888009548270756597355569009998878232973679695180925341290504415993228194225324535448061054495932356708464884089321406102177783135184663501900795210604576860701223215005163876466955198981821952792188164477355770268810976414238445817510401488266928325011169431483595753632491109604046202034060680238551903404462046909688672000504445303328830900855845851796685133237124666177250760621922974203369223805669121726502721370910835827138422747589707784220069864476084979158353232039213271464604443641542313471228219107629327154594773958106617401398269454549050355115361484662185316794887916308514131386436584082815901963257966286449316213572578622853165299445658091591106750495075526171998780956625184339217474476603338045230359608298795241049801489058036631934203274292074027907457956443499351304945480506012157573462080249714092179533711227576131522789833274850236146243988445059489653603537039249891389427183687462371115289653486706970900713102340623244830419183533780380709960155538842808189436600126738618009967016338526791841112235000831947460195581432689909623850752486234685147775813721755409380647241285474151494973096040741979329058935130777464167730717527736420983960883123271655669721192637963069895030058528746712627401973649073165761522709616771958504868743222920608225833067576999832551730064296272736166214639941865007384147816085517616791287153732897409011926857637702061889716608765194652180271249142175695760808254510780858395503361749930580961279684911855018796562192506529248851222692801755843474693708079802264299444056533846208941698688546457541343498650144450335991781454260170650236187061279516118595019309297547657703733091498338048628142064463619391063565265960478105814140844549861503009012191409656255760799680836276047964672048743896012778296243459368043026793436344842180090455079675824620424188657231038328842787521907355467681023595716605494265491287475720609378665775729024763135105993186444888141545358724268700956651539024691560979494891266747628002102713817106960941661295933325800385827507307832411446888145960537119108069253191428338195053096688914059610247184177203585484684730617111248110259671952504600139612135040744715651408820951852234096525471884885470423707337497901717210035256000257678563664891101730896696756383968985057945258719258736272267708250029377358374014379003095553469928898349141273683004234641825849074585040909969624378950909758226513764647414585250227568863835256006561777983891647909702735759290498192793660717093077401248310587085099790337612541062546322371054017629630132876416161350480397362746189498068644974171096499955632485139325455519218726428011363041277388323589558021810680905129243139301145480979592749452500747113786557912950296745120404825435500442636909399434624685224094004658012728914629401452228370740011755104882318433278407423168638610937121534655920027299226702283611822502908616800077172802825103629363479030753258038585257981101008937438558636847283258454520010100887670510717617373705738084850848790906677383563214843871153866459200005563229535059555404278289333641263308823097282829005357663763707714908183678568565758280710935289885883595724245510708776146561650985350975134429264536129103928414946920073673020246757575437363411695074551279779839719217499104100246399306250222127319323094948070092807565545897306488011854146925761387850673896040831004186930006901062218156506347147669362269897050320645875672830943632169212704748402724713474379756762105602262283072472467463459850154301164328185130343372537556575426171776940759466560711750653165233293794988441160091167450365116907119611773082834447063070635172362325041468418467205446242060247682269506199941352164720643807578653515600607684022728190428275181188056999704694382448382722301086876457823450913119514683733909150059924750798682091263122993406618442963245136069820994335548898927466951221119115457616319703490801485100316253229985010390938950999571548278591030835746908489036081620224928981262517797640920651967639418459417327777603702437737273613173623126784740346780308054425490922498148109835535540526614279657147121945495640837177863452376172146314747153574704910734602922528267223059562555814668477416457601445212773750111882315812487919164546655255194574590571628565089871195830374484598441957763714051575916883736974347814907833294907155769351877887980772110691720920678429046662132574744910306795146426164452824434143822233599089089280816031070250828136520080676909016375044060623354635064022768895582469272333017187145318184753046603647968117895744856504657919697263195938511990406822199072382575337496859576480957531205638489226584810865239201384908545267675293034767826066693943625930703697330970251029818279171971305204833779397941863613120207226788884698437205571299214414319482154295787691990588200530806075805507259199391959647701841681884876915631433089356446746960484733156248446095400305122134958166068028286121226681426395698709990613523215486604452181879665132522388828683150686564894275416887807176639030972936860980338251096122384519853542745849298490513625008141422049272298197469110937032768887933871078601604653828907331607980280183720375953751210510117358161325383117977990741059211169525701430239674477546089588923769925009568188587648587294856268604007272227487549589359157352783785519276379050088753875027358365552530017109900466722646501553875501421680182662300916742646260812045371743399796869096827307553163173144452801024699690262917948617410545698569636253182548672986464160450731807793992230483626193011943716677638770873685803671052383265399518245235297254665386764339207097210959530573444516694944635118274279128610039686526677655842483997540671540349059374976219235214109630547796992307009965411028756709861955710453389646180084457178867379614955797389808272805978223579384274867060458909871686689389101833050298546191729006982684161337063568430363412981771773218815891645044616964517754620139599033788255690582555652547982037528995269053728962277459644742675420471497766599640713107213921100355951700145611925045351950852692348635714573960465975680875624221499269975984510948378746536914777381984381029898871684317750143293322561873354286512788154918317275640705515430547225577298986692318589054809513441762671219785981549156925763974784656635166617206112145193129943371661884430995017381396502700295827647258588080916735866271041839496896450364024705763904528633247316407753390569819599068781218886549061237926891273923029586953227635025867495670152089446926948286160274289759192078861813430011530596872757842540232779077626889630805626388793677191761307860994044865270137337074182714086075181710553709941402600595419247875897789609642270058140617078185088001913404241395531445106933632881808337022059680230780150134327957013291145392768509203414098750222847344252047855466098081253987783876152185060289209603013094885509136411750756809187900886743895273839387063367529039834972260677549859174253070637981872660055055589525609269009276390341001014664510957620557847615710197140777313952565036577430512085001798882084710162563981850497642356473517375713993957979490646003294138098490533606159557690308645479698077582734843679225781914920540318325182064066997482379243590710404834713379001933640598193424588123827723135591011974818074694509868109977492688459409281992260815757698709063371312115161878725048086157241425084089790324281317251279222406788438249811599408520682798647451510226483208754115552523312450206096149148530451915503283825820863144335015270088745884868732796190917410020982430991347276416274274397660774539465783119398151785637253653866805758959040233417699732133338480943810825375272325228579517505064845088605854423062709331261149196960230621213477499996212420827899512627261597033130059468386723867995369467130208545013158168575659903095161187525825616304439496494884467829393657354845927622068131730566161822047955125560631902646016008426338048605839567862712386063159610510404845245641520940948846356772811477619909489257492633494014477572061986296556528725830464498889842505529174809938249839007605859526607132050882435273460333970484777582675373311101977348480391549637786521489455218761076277849629287752536613913610237739555791945517632854188512815323357872376754458739136845559218460200246909066239825394846028766754920299943200576932677828359353857734403965621369422203362169790365962928656904356268338840219384181569834474142573043848081750393980982297468344189091427750878430408848700364063488244172769587784191307151637474562005695853545196333701547578036697382195853416649330496513613367212100596803986979790937071860035509366143551373896089333611882666072806183349568659076536517209038459380485721383795885950817148178139475191786414892359031994887566191093820124784281402172002712659854652088489003036285044258288505003432482854303671128712649996969973553058041883643382485845553329165974414657068525931798755316945578620517077194029185724568419918190972764868274900583541764682434523945916849107763190616460228661270030292519224127247554516364504897698071924510757627669741073348371561095372214163521517418711262364106446415147771872945549591611333007679686282534027752801514249605755569987929731808884795411040702502542372239064567050295713375823086369827362252205774244484120207563305830082357973874412658931206935357370166632000211827979017193226135566607132380887007809885897858277461139340636598606156309320107879033980143205225054739017441920008433833734230302707557678449022325582233662083713142575119275453735286002427547252608168864321554319476661484135504131613848998646232230763641001363436950191393006500103858636384877369983195532977615601126865936349195109717488167773358810317222220204278805209097109481045196804248218729712159922048467341013957964412253267890843260004452317649395122399419726202888992463492698406178583163167286824291128983211984770548800426719381197974183794381178197532865325664560562374203110081817760945813747786369794443431766487200533670526814148241225508578260986950012748716637051529548885492817066282692553856718551623170528371000299969584405538550705064270038321718138306626082641093216865614374218926021508558177995338062317373062190854817434407157306136520151119575177201968785920347935789692643228751208334257983696238058551365393856301573432318795689915263337974989768210894433763526370789647796398625108292327915348736234258995841009884090161661379877245493095897603814588236307434352705677730598317082802878200824286531513726315033190845150109652815850189571578268566208349745173107913045674421612300182341051927895697933858301983911879438238575739939936146497666597124939548369945850102771964344716712334685456265184201197050938388236846987406255410245670691526709316799516073017224676745768926265930745378767364003140826097691894542263655935433436366056083257494392948017136155783448862359415519993336337120207574818242494161138147790661465555385023631931736821201510064555336737523003678525522922517699707722340384454907446736546633262544444298645405534590127131656088206793148087539779813229585646464645857196727780803739866037677955851843606487592496139909812468745491402176376877091938969242947751313974810291639923010017699410125367364200874142081151714164762291016867485355790922529624680231812727088805892921555035137080057547111594859558724376508113371860287043074391237323460450428892072375365329507786573611481325544854016984458511798596529054095074098453938194373286449491157441842304826999636423146867986400870735406441781555277500343955843920000268821331872174146087365455053012220542294960305951680821869099229187579882611099737308348603135947560065285676395314452805295702823851963638086981158101117131336447914587236555858287110255368774940666582052503737746686808386429259016086649588565596372506906045458543861925622091530123629821693111801586928176502258098006389409407088297142068232363902474032902886548220573456034481774517210759278929388350236780735932113252586806267205600362019916310070882585901965387838522438466086240373820379807135561725672455856189708305535495067594725863243545404875105891732208627183896933002284882286885506073204970547398088920559452381220442969141882148978170323279456972279698586492514630664134354141485270222795570827189705958068692835750763936132078196688118246698694984054309113583953938937389666397434254618902790050957567437538849837127557751164342424623285734767414599265872504057466402940013484855421445359464707026124590711222656082104161212717543308797397097320781568940829423250237358943713928484179538906442147310758838901085524131039509825869334094481936509076175701356755915211625826750369245765140569051671300718980814330739534173952264958176907349765814507978779687494518793069001787234737348908987147326109199246495380976587416131429830695715880858864147820311706350455443307685989792686416009856141216627749548479746396613417885274979513698387866218866817162902300626514535069528005435267984330959908791860202311495085811519548728473653118483466536822216604411856929186324381221186252396623336515710339438168814412047152991902075922618991108215789992877149978635839981548109923165868169297155775543809550782863913354869785171781429640868838279056123729696232456535024378311652569917420921184713102850824461954559475267392791941715069635211935681675884217127321997722830731711699709990347704277391331382036715171574646977006464313653832880350259426558703726717183677730991784240217542406976147866041188283451604448712464871272095164807434087840854859194215069032418202302264801951963189574882311120263021999809934405729277986999165517250580014982916203596632530153978094148702449973652133166853120570017124164877988767879059310493599978480160361836446632391925795906615163960734318247737418328894119992123764345860796757225407635245197430340332492852033612128043540963850984854952000921865588590886993475883516009667532713634862602514141894875575472748902076382372959868134661086426024039373987280713803506153173906336149052337465750388223039318700386110209123151068315759484583970594716313763164000980852367597572699780171927785704763383326588524196867266436745395254855434312232851308650092337123137485441487148600068538469480014309070901471484026054664128862730875100070566631702395051571596956062251365112257191760885949795216466020878576942826582378485134865889416790972827232639663323216522739553059013190346141007159750430990673024848705588009300678672902926406879826203138453764383752539636082975560795741507997099471468459633703333480470385990577934615282308830358147877066391960840539382492524556663816077973167916148289699212015265066012528859137026788743012419531578831507488145989560844096366220461129715103748967601987313606824883102749707445417532097146377564939724988137895713487749884174424079003781049465566663445116697825258638324950302357209609910400503444065071601914173988168023073136435093562351885800841087769777720128756401465186710808415169804251651870692623616317471810883897808549933250651450914663230176936380323377429959910768906264352979767713531132476769293887044944568773847523441252453755518924923578149286718935544850066139655383220490170290046547283880149001504680486791941874968064247684146323391966515328642500497623599833749431344166333878471958545832362196812101703210192131511105472757672870538629652317383300478504718153654186567495456226353578321437834517012940143391625103764156205672686298070760095132836510135596726962137220607593864094551826077476703636927537391114515967592406021584596038857736727620672931661158069143019386887188244784578196890930670641093514370563168770287088511027095070957837822108341320032750973853724813972797761422798062976812446386178075197044268119013831363880510336793925773988599639910478470582258335736738331845272521279705658623899925740629843045157351861771846396193492584901228807345254252005715374419076150084789657817098384889649445096143373643957702658154360696846559295611392093534701958980995963305581597026466594299264549275910406223624932153744630788763127018421850944669344521492676414250680827659326752298338909125754721563748592026755340713087564383027953994969973995915108866427991543399558488119204423216184921090500216347026509889626927820083761861866143036905368532048535561574232155083508384629416849714044359250209446652168070218505808240904399104805617299917023721712204308079029306373803489638444717494628501038210130278048398977751500690522308908174260953993912553532843475794895633633845681796602673108158868167117101810740111228076381140082076508987733352560118630035297129819176841554713591454466823916878709547739372104720173752235087430507957005397860978194475388003718929404433351927705995878230140622156200738515138837092594141752163691175125627150386186670087444378608731268652630053082207059261316211054679333156332750961660933224277394894178424185502622802487837681650236558269867694793571903390480775576510181322031640710855368521412688711111409404997548603127839626990262597784284287224655101490633983683989182291799673064014937365844629721973447199134867803236690984445331363323997975499771872801557138310158810088383850432789070905375727999027713713292912504046870135773810614065644705090073747424065757218649049003713355213263050025924039390926104792276487289484603847792239865993821736704091913534183574812048364793863296923107119644231119193935103362446376276804915400019758661957859206926374925693609816454406067238641759601897768295083385290306748886818244655434429290931618021829712753853096317862784042718803893111932955142666831548765270105725809269285367810130676580213514337530724469569492964280322536463493535580209063446821740034956980998040654099051998796283567898350193005746356490124637602361126469510700272561597690419660734063312245657140066710873124781264126110186852704120653730121708818715017352649231176845858259342433027685958821500963676493970621503013920875223257022107283980994471489495780088034217054118748837672058448818935605482389340736158529018709348322368431491610008552988539322735029175640709592909922577157757227856903520245681885962132791732887364311265548299030840564946821231597080151393345517135328740639469584217019409360069425961799008756003533175117113617942474543565892651299614027185299590357767519740920811365532704652945476868251514079801684848307023587827479536327859147195979024303357751810069886771659608210489540698901863935677995191207929325697656337048037043906111681568551619667332561238106527840254001627555508655186804244879068952303235639331154887716793419619703560782961307936903418834425065254917114784797179898455966369182188015784306218799929795996639126536165104350905495340813991458264453492543847211629241375586547325893318000086920805299370905102803535470068584056737745148623191395608292477169580027907207464337255443158315705943776109506970182909621026149935195155471948521943473474575109584366998069541187872973122994423395306255904252181927634666612501667545852490956793366439937741159449192100918298652991966806958550059745298527994456796453202033358091962401877891426106152285197829130554291494776735011423914118327420903688640714355161002965917861281833980145154081240362317150445306522928717434622368958919233369867699905760113572652673764028905678007739384149635252944637747146588462681779701300155669284723424854471660613439252204379586709436617542007968746828032328292136755992721301088648536398508833328909735537014608917928470899167110650411389357885692678515765773928554593525170592540264038692114886576969944215805547682319002708420483448610415808082395930084765081227820558008089081759538063531289712827282097779939476661227672686338059577282618999811397806887711306236046950644703166030118386226475106035011041933555491159364970806599999854027892955783382244086925351558892639618085445331643880752206100979310823442036628373595645050626043929588639516648123334904780633043055528387890445283331507509944284537010694474061559968022804478929015580849554897052679292147986040268653785929100847644866908213332617962004920939318376779557311981205486734222352547860465034685968823537778775186151505062710403339987749715363194498588879338979995116195744932319433748041866544822399819325797283883643208277430474835389598274369857250051613980062897102243763301153108746813043794778219222854069577293798422911866808873802410229126014901985918751177179879053108015621271641159286761128038884771376642195839530482492519911632545499165113749704865447698498533642567147537519858443421736341784345980750415812672455685023234392258461296826228646714779498690474507662043834599268947674689830904065707475353678464713313857251414866759285824478520560966634750342628814694959042910468073582096050166480834127567684786226530860172542587990384078280750757429503093429653556223829687506969526279348228373742514319231323062016780287840695636825297302157516763448676213878974259026817926155914047500002949131634174195930401272169406579804033435637205578343992622359565167069709041889240627722120529783179775804885476281579670619465494770776179635118797934272691803245352055085977587000245925780159610822428273729328762403709630428962431815398294901297120674473294929499525085313907922574908902563803664119485109206705750390894848904602485130099338108784633218986514612811123788135704857624816585461297348087722110371691014566660400344421196677274211194302575678434186461996678328876709257931504863921246445895087809270454729367719604474029613705826683659293086409946134003655061262205244042716399136477501208653168833860437022699996353917085662673590109629958664724213763172679590710064119938516076272383687801619808334831600419925773969346118039532806771119270571834093388914916523832657922843036542520210791673127636327918759451154485065230394596757146019409236481190345947397946491785682064481903391065754190242841740593485928291447717621397261733118371904859907243089505202190563499616580605083086746325089669269654091362622748788596034493338866672282463197635412768130937700243903412174416776812794892890034637383862332132985706907634752293587513986778900401029441653714626449361971817997227814462180985309589836426402861276135967485784478613491225189694062736156510524018168681468178042419752464067304400635595339062033806759080940266940120281724457834385721462561290386038958247334754001214111412956815033181455550630800909733588889897174018808132560783285226963991869352914235217423292180519637602848883971050447124542206224083706236658142334268019132565047419307129791204741128034128710654291642153608627883312052285229269523759695788016473282313186226258397783045090833205823391084444349738785378493934460446017202644308154703858444877376361253691112054070674018257692723949151650167981212003555232972954675058751381764569041221121894604240431588647042672600142240202945966213371917975609437643951373648639779165230114699954018261067820228612804270762059425912721968451247922282416301150198166732872989718293537072804387976800559483926917193349524573617329595536909163955500008397627987848551738165996259598425600502956366214677701671106626865937443127583004008865107375481714399896596339986269379934121468868403328849538135109223305989002336325849051365886749796321002667878667323844040722358302389366356151901257903724696042083168961143341032565520283635309539789072390156323041400845790928802329507252233076174795887100247886039412671977254286803123866317700907056880866423477400996973928336329432237471932818552221230444919407157979364511645993466145458508418007830225195630405474462072781688544245003831357134977843043602876587970551164664945049118130533653869709717687517340123042838625548990106261577266552927105868906079579159743125962914313172637171312696256189467939093835880346918418830802977495351535687845119010689996977810734943436597166296090631848053345940657231480957238027938406868703100244606661456769550006287301577736532313286451188293310817094759715417801018857384533348990347400843860296821280580280097954855449687431438166715274163683601370247699281819434380075321770715098119403518843326017651202168238290738014395377194430954411239582977188185970692576138007927941904488874767559426356561721816039687283734341272826200229362351531570467365439319826249664564507428122027123589635166149239032811947958063112164745534728101697605658525881904645107927309476508632774319563272250542802007053520791122800338680506546756166452440848551747455271589310542269495067384193302397587494304854689252600946346586677401291724480822334388861419363089706483426966220920987778410087859344810865137694708530971848474399609349988357316595402766487519733450382416083362331146896596555447826856195711915418885869763473778951713280244882623905398709756939743771802667632293811323312204024287607458193112845170618012802397283819395989345858743517025266259985145795650312924678609824507955089773099572745629923379992210120015205325935136565954970197042667180077014899095949907330880815983387123697045090310173809836176521498042776165209225586401594272233136516560973455234485199852873098462323321577772056408693868177684344773769049263019450878180079996582458920787048093224886875275594843510080885531649902316955245886512119996605652181647571265638623356096451136743403628119918488922031521614039740327312853952413118513861091708301074137822287321874690552901869068240561177678625314514753078263528830663730506488199320619886890152209481686266137007026783480052476306551860856774781578532236774382201181411608537037783078366934406559083469150406600833164878801161185392239551827147203512863385402841651597715630233808661135119738422956057142599594646501331916365286146489858192920072429090797834933199616037426050802737489446541782279188800902240072485245990190839553908718404940827914645539321028824109814890660349236423778929031342977590631465982297784233512317362125568542408222033980634243406700245137626069807979300558803518659094300197980712057424266991781500078309879775700286049358832998238664108408262794579453374024963823765974579621801621683163628713994020255603350226612198745221517740317850037241313794727278765210353766602228351770133899294399496218077499676244425776786289521431048669676196732568337143647949429207978186483746219113135452367338571437495520403334050394280001512967471488947489823438303975787891670612614651669829386413508846538980814153840364240797707855813207652723054331196016566671116682187052744993943394363524876432046173833801126107204367799516426103618716660515895442161962426806682498016165065159219138233299073445797370319868731302227097299096048964786311007125848112400356893424835877945394259739554302635781482272231572614331694109965396210264503883571810919929117275453795346868659993032100397092498181968393020153472883682089739670186038747660597404413687453128435939320539480777078443505166228778274210024166047595689506609650918916750837163491622222177934790986613297176967172058327263872026658539815360686534909064152746775645637341035848418475486202183285397460024536400883123169567288722422506114894113873069273895169776371357956978912820959470387649994022699059220709941201216888178069037553033717761374143590994495951578973498027449688239311917640430306126829169007490715185986933105968887154320259113077644174720219820401748673952706823365939745202154421259084996594005829330896722424125595919990641562883588670351277978055412880270916569715843889092506318523807465987842465747392500084771540687752628189592426179150725875955621338221088309102911265155511047559193566547216490386844834575617181023829862648689672886579043085406959870048080580678540971962486482420571501958997733102481755676308032661673955812652684437599664532869028982297268537070860477371498272530638916714882789120155058274608089503034357492773917336293715797856804601433572940731932783373140206713341700366923490180923860832454112333606403568878700771961905450687527206716024505832991429584313790536545724927948615237492961501063830298675183626123330011345957537577619042238190780826888084641087063614662738373633012236590102543994287623414173063995725019386116469976019521504176536038009484135006706630988236633394489119440047466720237068260993446063357741263512593641047561233020582383007355214704475690371718094567115871360640214209627212198829458292464675658129347904164885808206378604924018155753832493075465272657169677986382604751870169221789251792362296481359923638605761015506633201511529584693146848464631272982338300629651165783781675123788893323478752491144708311902703488049449973646019897875413003661218120186506879670610423566825080666685986889933012772752225726222619938881652824454408128962965394629767414107600431133982525913441136087651170053239982843218377579966477605757654529376880573959991403207895217411947799062975235847456369785579485099812748012020134356690386682105442232277141342901998380242468284118722476877282080616857428963442318388047149875011902326636557552551483541252205147975015748680949497853212079481462062882594544788335274602686550647997886452997148653615123624373962453871144756091140450276533150674950515638855880179205456388708187101696409848551646611721605745495354609682853789521090908992433953768491381836032699871984778323083507099047031714170270718281250510838300299827925859278320025257990672367288212302238164823023832612814147498925504575851705689973101632649584225660882004357742567155673361332348734965172501690657054697036496637585831911043484325783104986534872999380229201796802179369170945893676387733891924965976096707873222211386106324202737087367977718932015962305175486547328796043885162795576421594991309916869405404084712628934372689727537464052153745017194670273935673602186011939270663521180852895573310271470275633183965387815272524793820336634172015115423355310056126242272238849440654315148814876944234132554613953190956355412861429657868880950123786339978456307296131876008936488531765144969076702155983480103366182491485777066691502383848921013523634416482531841710930404848183433584369723372175053418490992316447574336890651693853055748217853402009619168881745974000180764827635678710196195329479036406981576816809908525217422640369042932834562931358616093121733551907181842288842307694019823176129691509523712969081961805301936784358985583042303011191557009532328916227430037774849537661316104419639796823735514616662332054880633890327704626731473475857258863367614462106343717975987648763390683083274330545798291668795910504149588858638838450722674702635458778960945492559920018969103757508997168190195629182744835362868635215798827655887280655267710235375875740855142606379835181120899216615876209508349261360165023456167296525597799507847717044687032588565024631500502635151659944820690196857952467976365760534103557304635594360248674659863334461116186833650679415866004433562712697056101964797835557857140832502071431535612319646279694477170025605846423062272627305883975984406676911530704988808760494440066978111972974154132429789299786379720649071639166737835568487184211499263640141806608497128492832608426329398985174861494168385504325570920963164779780752602851305742911298361071000417447607645117131918459872473166205560560965962281962364289663775297213599012189937100487568103563903280979575305922653394611478841119910500606674133149210342313947611694957307864821749419943317877352613401118733052361063508640351792615647440103438943904148547548798636778315308604981893334723193283220266165182101691744655120265243829288227696584824299054349748167008273879813953582219929477814916413575962813293730386900118406695027273131744729573302706507475545196400292681361659232025495142265998235738315400032894575173041300683604083594176009480386718231913704114175223816624572579048120993293745926143315631573124993324035498724574675320666900351731501508768320048672512402763101419777248077827985070880542469618561275921735385864020904195010120492037423136648328190930131644923420942226016767857126321948404127127520538253403807368991307550537665398712714609893989305212933599889696717396909353197861702356795616649839836417536740979593614048631675067572528588635682937317908893371812331261541117458373651071174543749075448459557136115290477279477865522914771746816785760142634525829124591042433222116342754585684740900780814968910996346125246575581896453007471481097030292729519163593975265126179569491280776549132327760070317595121798177450176519030153951487161415003322874854318012548067733282320837978477839236659028771492769021282463734774661842219579108032749776971414772378745813171233047101852833375716528648837007063183322193639567438907051917743566206783614880995884326380028435157806887353161450885009494660939375209598267822703974627326468630256814538605928730828151438512514900526468934369931434674533966811536934627394318668419556827633296068849099183768982465209224979026204002289320864180261132852109796515754041025235514060307621437359296524312137325015284880212521590106192935183025805347668914292766901764008434915788718397761256678395109853125884064015118687305155008965157231694628486168108741314883445044510005621392172989745575554533250382387777763927429997797818102159691391622569831215647581097113321692028114651705780215254026629993679870912216398515034628404782058802098678464882873327191521056815741922151416736891724574544682355929301860080897494060652601021013680429515611534824845020325120166771847084204787609890429808761696250819418261290752190357903667818093268142572046960071695354708510450865316042402015726886660571413959652643303416658291148554761973758530931055437016825947126157943622424289208603529791998957113832146544285989698432434942788981407509821396705269067745670939957761557920824714771067761075626561735929164785905045392711156637513450181442596358568488123744026335724863432704132538631209526951215859831111187764122751427838258356181446154913662136446568350849839980068074123932393019886084447188797136026909161541015653919331120756121215336807108267759663685741010527559609393998490998814463175496043974654498043908840701733728585373758931797067284669278832244544201843454921617026435242666947679615147001344768274885155310083878481244194583297820456533841719329953121226942896092872354814164278735007976469421048380033416259369370692336108256803978772014795053259079351250846763648547035834973852683395147659498035984311801107878174838685729694941689417704126403738516066555207194133664243110646440473767909715353929623998303797214462884528362490564434960341587071056114758125191693614508052985044099200887526824284167442601475472933418274819461079700330311958980068402915734520143790632880253584077531667890040693943398230669022258759218739125876923391981491390485128876784529550042140343423799085755332003878525172480123276846718004686535862775364230123150546173772646654800921066593776020638419021689358316887836264357215302463911231762871570849121548502135627640691714900780399003924937739339834832924422593929123798451839493858924372334310168787501722134557411442593356567012455217728593271727137194283172238809871467187234290602600052828096942495778483371826848581164962908573890005265642206273864115043316483557758549832015072511666198757387527768800358464517093051831447397527740603406536290809049737956216607574550595372806796487825747433556280661077781000478785456133027913697185202023970511132969652026676477425496084430392973538815282377463193297101728971817596605993641173187727317736463230930057143936625284516963952075147396008078121427239761702134343863927705942433010664904679768813458107888171572060435469826580829741128390312510973089848056517083269523900339364868257452805889682328735034170746740712536208768101330356640842968987965979318581768599072820405104447084579851385425774018343855433645231883387214952497248649760874157870560081278110718506462027312295757306368008315982534783748874516444392515792029162561359800300561100746166548711380238773202799186190994405206179918553005670068391675963687720712108241442350268835249129184857469350828788500475555312488596549849770048783816212778118833791046877242430615290414730391445192322191028411845591336493880811261325201881980124350321476233205378405748999481640624810069358844368564066021492978887744699571622513903328915867798728828236222493035039925283155399765897446520856385798429841349471758800089168687100295921987793724606547351902380539423873988975738719212859841760433056479339055323153789395280882397847081415671853158016318952032975921763156149496682002691820864353035240271201140082601106433741546439522188750948626740253543762117568436614964115978242563566873702229092455916809565712568748931617765980531701485548385818556567961666368787251225310652319163176900396601824101283965640147166472841624916406686569312463622829411334820386172912745919496292529255463327158459235489861751278415423962835487541037793691873520291263857025994695996588227932199644658737612597615478922266887778459630890403191104560502819341719368935978567000239797383500305628971973752095616323930903509448296050373079421471123097534970392023768966245148683425758699519640918985428514297582796087913014694182187315784034365439574913829898627663622184658817111375679253425533864091374810303745220126636246485906087224740630198140228640892585448681258490978973120519480144160148212343003171241932501155640717549009857172607397254239014932405165714493021573690076877376750269870984909147503539261985635165606017398496512545915316728350015300197032223564529649497642334184422879220893090280568818101701228229937901585372753533208063253796570675762879587795505416515747818289754585097257354780628913138121303762742769096449391042785273103377234233885391294515736199375271292557669027536266727775253878136918312633808193742858385234161902018963992515758336143468670826272935894284855065338259318011472259220291003158843153660973800497783554973021357804151154579923226835994344707307493549062056139863981091960429084525616730870496974336280403304318659787297164281187182082873293319170074924125535392245330282353932566912070504369611834349796444220461293142917577688931618054048892164652734490722139405195419272254538302780764826952002499037955089877562894425784333627667210104047772187665776808760298451283418780744674113305883533060575234794519848470892051190296566349091904227924416226460373383806147263254641566311693725449674462702678214666740247190360533705778580407589545992896243365487697110967561330245230017890565182864487215735387715310184421068083321255189306740737468848086518808804739522962336375380366889293197760605328310224133842438238899491023939341500106929293002267910957486387365566803828088005333843141181394399876646498576096408847536431726643133633465885506979411166475561810604407191731688046064268466140891845441129210706717235113995513692645016081000347058688037589706226587030092705166241049390657226145383527988539438264687358505690149379933402471596224401900827561542000406736009048731416265828675430897400750507117669285652012772266133685372488686676429441280676814087236184743008207234885309492584302992885966522218527164287765471167859414686470749243872648156271798582295568007382990144874135221629721810027194568727110728371311321486540229627735710786123648600779029264237707571761773785075672270942764703332497775846236240866785709555394146799022343424098785048702375458188798882236218948985669969499116019547562026988734730425859718835425387976996358954887900065572895815761425883596752859318275490899420208454392682794023302559503371667807694269867068742284012411160253396526648627039658983398240697215580328182564991304974781996109925634719419060406948778501706769498058083778248762264054435363788618938341470003835546836387822046125019306011750989515824960509488069301970192036161329977528716613826801029131511582738405849603024209121936040046427691682991225964710520207473536941699683854897016561014822320782148446533118270034943672136052309491590403424515086398022363042721229735024097491975236953591271856872013486377161240879749184167454100911677855927945255995517483473876573752386105582861020014404729984462363761239073525770874108325784903438638804822312177858177143118944313092048350521612435136388651046308092876426345993135586506443414853129801873451199547255190269953364823941128798898035157348775149559545387469142790648080398488727133367984155282991732651657905530011396322447185937328226183377146121019955935709410516340224479769916226905943854594848478763304211953641206350781339435782138478872431489102699651919462883298594029412658320998524983696805385089866121374320612914704113274500760299824908254044901460655632108154353617662591785333690562926274164076726770810719507590103137008050840896437157403421363369474326045099583970844868367099039258032162205181625951206971370751457892104939335937356481189427197050102166833569919611051270755169169669295687344559843729537053988917644437357774065496836909908332547083157558593696873802365790186622574782591273332415973044529221386158504687210181176495111841206431146372251120218941213328485579668968810648259956103296968742333786967238042679590598432257772813976052126288666293145279459195413850600384397869302596845276537138407801532673707690618150817270803004386364843372562061313104462681460664497000855897094815748420797947149455437469355369458600112782403776790659062229302574337976555417374090003747134788157098458225890558008177138597520841803902832958030214216539439960214410897294023917285851325518305623160665482911792982471688794130490780937567161834920971091311522528788298858174796336248111389845312466478939899989038344105777102885361720769409879221586651269734040819479800334235058641173077703875493190870947796159622799431508756006385562768373262145000050561386976433183825909667985756298334432737844104103690810965938302673360869167610354795544659201010613937420365023769565665190295211481232161206044483495812545290909263648501757729440371348251816205128743341057235757625985036791201600016496950922961564735794133632100989226999966012909074148811764192089979656590597172126030296073775706155361139909428459628240262478681707307255056978618034119135430556981950641584158035496995083566028301199642873866330088047183023438197350602005976997547372119044183191029495817670127882421300799427194346071301111132992130493885090842767148345140289452876872146199497478840698941763671054481522302178976106601011244594007757401238749149839032875907167008125908173801817194607621546849851556590585064533305353530574640025995741098699605698424568765608752081072250544982492587288178416347263812941227130552604971837462377143519583558169391005641324230525031145299265317288117381555154575344378065899216298168961659745433426618845125553784714214870480548170243914787963167524341519439878095154243335043770857027360921125520752875381872952792999734545187389252759171354683166739831626740272597578418170793729823505056405676834786265608849289724106780376314579792788672333467084590330572614705424334345177506148859525526754586057411579987830105199912074248452478181978336699371235719504255980545338652877537433954079307572961629017322605912212791284301053890351994999037021071454418316643513444050806954387654158356701955958060412187818257767252844098264325208679338497467592766752444285464681530460756462855035692034611027369036563313720480572313314910621008725025294429740486216727020475083395383998859985945032256187455607961269043314512398727866439772665117439182925518922912139692640596818313211159947411820418124656269545066523257255144452065418835461885073543560866667907365188433182722760280262148375476465169278118337353959236785329935747884902021344225954384905846348764359595212900611815117888969442403851374170231742355991986998484732091030758726864057314584549396101257087534751928589588913814777747758527545429261394949358336208425941695861498442036215139936711731944805633218302344436878214792363476172661839185821446472188112490219680343733138712239283693949749060907651299210626768117662572025225213760719386800063320418175531876659429697083584747212168602529762920120048201096140864050252588659579802045975752230309565604579780484613128424937033726798349908406759931487238490894740710665255683694500701289937921829059626847536458645461426753780992954100686814022029592494072425629598747142908272802667094904243942336335666123504933358747497010403846277026920958479981496667959458456835668431752449454248703581935794058877855802242076136493236295033242938378416868314038121360571198876615987363919767952565161694284852271070265620266018606081153166578074684705427048072242010408162205525522049301515345249505299997208278690693106311039035927941855850891819127746717101900877660664930044263279495838739382797108265142550352798729761349572035484646639822098720538664288806262666513035715726154467762283042963433916986053432068886453192235656373144104040384342107877751484381338249425101998893161048616648940749942040591988599378905883474570326363455103190161807806997434648727215759285892569906589710923572996534461322253100957922963822857604127402173470077849349499391715193082451072315213084852742681355676699383638301082761210136169828643697147975516985279712808024194176074067192859708692537002421798950233013406869482429854517089636190771282138924442382293155980564285853701413828783889901290575044843061337994804204713510016738079494415506786586536487667729955232950197356376229001527307845875150803816868920656954895294212728812893706875425053340237626961195477661784683916022370502610265332742772938444013869442892947705463875288450761603257676692523030460338591471445885355806980333662011851093229701164871631669685349541795668037343477235939690795766418578988497948889222426634418058653434275338601506226473868301939074086597884716056582869319216278960656692729495891211778625500483164779699393133986610649975670878185574412855707449370038947032514032588479933070196225500156353526252744677256265132782054588930862792270076426386799232211555527444270293638914390278119048961704923012632962423028978004823920696573664196296091138998793703935709321927863958895843053970067229710419583026607430849844747723962605779155696234035253466844620505966090108743265611193165946868945820026967373771625548505847210115427372918580875625576431048418526748023788907433499050154365380656005598132395204953464914269857926145427689405218908856505036590938312480026998497370966296796680301040183214528546028348512177800304720721562030072791041494284491014617334467303527298057350723878687449701042647558761537461560004530389324980656821516870881126154669762774041325596329807260069359008607731280337124725250628192833762855776723275390780196618108672039775913484366325215597870339459196497773054556602889167724335666392642889742242445528093016273282485896468542244839755307685122498101715858501358105942444778866091555089488236824874643895035289609239237881459685096433566020312481034360999721954358989947569650519687123943537358661203629246777658632475546885217712286064540879490205912991558551939903554623574132363757471418443140472109051100027782408877588367977834193718507511672926880913266765096346823468687214386905097475982545318350672046036064212384096866166243598359178493549787732651474771097865714103720693158266337248016616100976934292627477724104713200229898530791102989849762731544041453903360597409880965267038658961089439591064452515029834198581591087783315048598712343915590098240998355933847648080754948877268041770491863809847724517977839042220441397271261713142323099365066012822895910523713532978871867359675480409985425576111969578014275321345874484852227347567739186095439645549315622101338612859456514571954078548291437632269032520844144438399318941744157023645778499956423417991129918208249387932550762114005840200869449358406217527567094078832676030151185115381478869030230534642374492905348287827564219357783056464742588689055705908326353114491689104452690250612357317302162564894628837315637798337757562662910021178669709429511335523683405107940599857240337875179865611317660560595335873086191572970282799061407304875803719487704673999256745241428025529647094565075651090540528793927411932456421297349662201318595824688801568302450489427553717916205322799291271652440141686326837735700560292792451880460988983974767195859618988370762763713390000393155219589919982259611808378066428568708121622198170604757014365254439481648474577678547037476142021631789556697449077653563435303690677583480863928504644019318421675455259992348678216660952492985063637791228083637909309091231743937139417204152013941806087254278301826198771791295843615137956749166603741341809431890163890092517598626825365105319719187155169571947022819636621476364403054765369861165765685847703857530347123640029399660647346545616727287849478479634503380993631731406838480837242821811136559010629393823538833117789670897085619993990948621708179855967864519610090285185306244648974240568761154860360234874799154670873181975379528727589822603580983169927450468302955194074469160104238230398130376328987968323940987567266005957377437800607294982362116827296514432996382146572267794875681800909971935435573064350180846881503092381887978624854988399705663984365673266378448433669950997660498060865421115245344483078089112953430624051419488478102916227171340639593916846760764455250139342192444592285747949991919097591596314931911871345380234138391998882641695896641844424058305463127044822043212280460694295260990123382476195923000877882214562321632627236972973154526925828784531198172423695100923402612917586248945914448323164379361641164682726807757061434177852014214014274863667922485726317008449255453146133216997953133303705861985535707037263727073050694111245981615339796802813221334883469423092105076269228084246714118879758382013073011225389570984507137385407410204202189742535578086188301437613112187250749788812404688104148721977508874936245850673972674174814617765492599086478409344890404993248166002592786670865797217105161188801685287013418618969340292819749119063707424677982645784680934381704747415995608761782311837407640791008396051223766545629954134017074219014506557403653504269586719099918519790486428756270430662676163936110374737820187405566771233490822546058113364256406154683170858528117368810281208528841186953384467654230606655088916663920097569094771072812430492485201769879697559057791970049545324521568196351670999735949568820136263285573879364589355206484929323400724642873961089272794986886807544361397592379179914806803005750630490175303348762682132560450856337027318153936652820366035698575099908709613407363483254830754049766931911509597300807687534422292338788274828328353662554529081652326624422720751121820185454900404293340733537245589786797946407658975547029906145044612835939970586249330240413455915835229414163538595922992147216021690838718079703090912911272901387579888235042905112854064229421351713132380981941294858503429046402706368635162323901154996721690154052357848986879726097711325810311705154399290181814402791266816296897156655471821461547274514651294441254319402977742298404049980142725150561214211661419754634446964127032095949639058780449859547338789044563075398741866559302445719758541528096330241930009892129851506711681015390665961474139444523058127203686691491431758384455956805673332851796765315647038869757093678452983749679072156104756237993554353158513777407222199919644011158723651028516079797510934282068754327942715099744819578071039463072375166318530526455742846997316228472771798513199343711728283191587178169764474713525119150356301300072613364152727441636307729031007390918137508649759665706393480480208456717737591763561400674905667136206786662662402412716966766014463112402532417824563304365073549672934699354943275443762272116189368644752856503694244955101363917678932766212307187261778043832090347545385164082651539526255520735600631682162678224303791128793395010669298425936542261783390828617839020835457508980357879539279394432985963718710646444860225630724132959843695784376183354530600638215743410155888552933893238799507060069287853283315272559264117729376638772303287987087995058242358915400434290573602610185853850198805399649928688610783593970129760654750042223105110184221343698115836589690721518792716607775867951381651936016727697266359554985689314705649868304584602771072866796295191151580624938316198223972034771107546018905706607244404555397806639355905315198120617023534786348572616692041991586509255177176827504941928283886009782893264354339710644568182326688398660301477984250841341025164118754380360267370476108810567134972914147689499604307436636681626931581921473685425456363598397677883939254502288282152979540391320979382554168441762905308176744432063644466239049649595223752758201294784116132041524282285190294200145667748589812799897607260653161660369709091050740473183821477542701860138881883045891366743933754832758695265610942662916761462037339380158966335367954457953862658805985826303681971844543956494951944790203152491344480496770208760769406723146503466813313964293890794453002280894114618978730324267710674650289828413276752368782511487731327904314719428946058372061140246056691043133072183089523189359047092607187683962671799236566129070960746800744072297436172753908706792601124576516970261922437633072601711150642178208283355300193184347376092044321246405676359124884293982151072299942767413969319148996513064006192855133743156255706440625775247007734754038465893575589943859888531036587923181448104779841354303937179871949129232632440623248796326981949424060573891086244849831031357802902209014487215095754965517467175205510637306127531387998303168442136541066915171536778022681472507451833943040542971525726297634954853462553886227287163829313064452633506924451621052492565998519667840017123232993350248679585456739010527743058028113523512408462593489000695462401663695759022721922469861958613366974419931473700076481339404534881531827995691673864955645409561304782617980129255434847439673899283293830254141777139238838605463452461245081507588575233860963988740599134599536876911452025814791597218585445686952687165381567781166772872162986073271297986172132678865338792139416707617742835224413221825155296326506174860403192361171652016457302320442507937937512384355096835535988878162784188145346328093096320309039965451187937509620822145916170499534471053979405421220243897583401515962948254614567086306124906863067511603079537738789716816773647496780732910362327407055100319908986575262243335664496632708517617845227670406118741627282203291809146520631927833328488075972009007344729621226139051707750168816060857951681698467802405771426047359598018485875638559851691195491201267466085784744330085846541807634994342303075373019139812784687409043908526696009823113980774607221942840617261543393920340352624452833347464706896982527632033704519385250173196711673175143815445807563378356373257354467230376542770379422373676846275114721415270583022752718877699738688013573552419763674949467695427388766589278699622951661087837246210136969454583729019504298232614976560132417766053202715410043957478089756674971251660688121497299355612540625992018585469638432931230415703389337965843180920805018914789416445451320892389703372865075623526795826247942329974797795380339589797131013174330414448755337423285034574985238841561396179521954093968503705965650631235755632060686499631668564679991144873706850268385529184612822478677150913794589082835807685277994120400682306274583552107288258851799794684781368208880170068010831329609766960783791203088552721573247108148078636690073321535363642871858010719614981019859698148269519040026878939008153541002302414868544601624120524749764844030058627176955905893380754759600069299562353695941511723688637832653392287256275263472462288807389928064105078462277809577185418994450484766180133183714761594829258758050001606063548184602409630208575540977425729184999132868228050427640319685335223120460199225231404622906693840429456086077179386962295529455922148168180156605123442550326001036270154579860449028478523822893138816967474391474306678261245455393107966656910859996425023166926058493386584096904142494300602011064767112373776679251151838435129168000530599510367985312704264982923233474488076733716803330804426343766740362387638093933107167072113181466227376582264754363434679493836901649076571974113469355026128578119494430468192826434992838526731216213190223116743457813802644355022851370659762694405256014546604437894251366496765940809212745636943271205249299728744143064686221866330436515454331753389055341269879543568771901818601876638922467520005172673530770390738743398076104600391709339447515723809084979921789543101767966940878180569100523020833465540854150304725273129553891753574283672432149835688336872689247933176906875657610834683650336628970884582598910885031652385895979811082829802846950168870063037531621259902358548774431367954009684687847943720976196739414788416646169211058331291368851625527615181980050112423945808090243062670595147275631668240013472923832251959017984110307404775369488955371572928722684811312197163102340427038710739702898479200897472413324442790064303115936024458853759722812455571942986228286121400779779367800480688265596222594986983340059619447043426013535900977201766101860013875705836829303083627287169182478471678626451310716596124377536598265776854814683525109227036680589856223100917192308688107539981551276025218344214146201824824127290785087865029793432225158479118540811459481195562256822943517389279408637773242692757325425680061764948749805040090840251599476758223978882089927897458505216777030167215800131092102736473510468286241179231699693831130727514038548080045742119277844823294848396510545013839078683349824718146617759312111488691863667291508661186020972303288434246765325769659451462194964798472930188471451704777245580589643258431776431746314012262446604332917934552814838044257090443223792274624068685048089328915129738276210369969827398226916450022423213566326830701565280986943265875508062434363554164987129653024356107354554568687396337484900494865101526756005068171742418465906393266026621832163683747830186292977494119645030977424374807337158863489271717373281766323638919330644347960627630743152522179834826159681636408942308337770495164761580521734020333340315581137319885103409288672897411514614654169338157858214240774865089312904211637458517874087914865602754110478226364148202271015120425181048547843577929251051715946303460828842255129781629604222943135147551257884298996062611694482099867455014184445182321648206819472829231482974245966508645734575839605144751699651167225197990165105489896996985655586946989218720733347128151356292987307334358274395159015574798439461142132602768754458903528133717103425545114274349243930847277651598699809212219173351798824666750367277952705478550312219927859086523560567718281409985428890269304613818453791169778890894429886434358289270104833123004458427593888874468726319415991698537268799306677048983115579113215609378849775448060349152231790566551326122989115944495182037539686773465369159776615872680353616455777462921678409211771137773732063359188627291599824856694449018923650970962370741954817564906195279618466945304520527201474098629967816189758511124641817607834278053474514618526841977881795324023545833750116963646465964750634757549706858100864013339228456336175251824050061987022217050312947651713141067082322662160411470760031749152255331912138422406581449268092978815452071177880010922852364522428894047097846189880138996290757100062323298567883204265099735960303450442925969974739886058437074203753518509459863667748966562939232220070300615993364592268374974803642368850316360342056675531938554815288178525199264813978490318391279892027989995939485137376544664638676806927972009588839101926184660063355291907571578619971667799524114593973803409366062972060772291329981686714240717504746064417729367855895422750165337969739473361086685538138864385408973358443340382798968159081502844443909832612402544053974560089974339524642851918803421833018440989547559083224618669731412430016884646366412508331679723493595945410658410828957394768062213868736209547140923394698542137737830360767201881819268199008574566124283209142007040414836161130686457868813021249584963852800838859535911111133135900471034691228829979605545783953178418522202118107851835134922495264741645130404464978651215408136592678396384537699513479749663485790626402033411714914564823655025859247276078251175378223451339794278902361241869475977251175358601784993350629313892817363788161697460266178796307567422525236741106841250003162851554197238943311094016247647253849213353287051377122493467328717424864047320902726714419140429882470069897299400358829381139043498742085429262363459442398904876139257127377842590875699775777768361271838928933001590045451861756750723154696795881510617388630290151577716928137870156046210977105386317109865293361482433234663777818870496574052784880918601879964738628129183497803376035083201684594644393475179506811759592140096815871971433111243822604433023071182820950257411411691429165710346927266076527582448691168398227459594181431907220296708971002506020420781482281441677807390266234015617829824899402962068431514601533060246899017768541194242791344068402595293356378702683977337740503113004208692721166975283161731217989022743739644147808838900235418569677054338402143532796794433672761884068956572346989050747356726479860054202478307979600204946895793177484947552524891986802846647871627700949366312415964901515822867523051041247391356509684751129554496776706137358422836035219032521118772678128837204329439176846503901028268742967752329367074731856220990905096708832631016451318783110162720354792300872002270690518706962424488092991948810787380492447547494486555384907123393297389527548602542795044826570846004212598957652321935823983084407543630856542244029816801947665667679869554795266454584383968212905623864117086495235784051674354167831184126811035560091960647004168479185348419214668505371957127233846188802739673279309260862316254493968906811845952713178266036203509807405803516057753434570566229676325975213827635479694582969509153863281094846067825245917353843605738176240881649418513683027947702176116086369699128277994306299111237480054966192799094959546427503097833680943813661376133223984931773578861404356289562922295907445413000041272982434643271028640242277617448600568023805285804022954042813021373051829900050769816229754919350442417470991135678060591229427106613082953489842420826156651247428603664783175713270065732831503725834315528941448297382479119233956372765705394970900942184085594339701270352610038657253474103339722329136752082667332690310284462556300750607475104387245982633897210396704398478935471278882182190413432194618071262165699520207813510810092912380306232365570504785841077227957741516137504678675987231204813703037504878043617446776517818075852426096041398312542512905529674300745004792659449706411326404768522038484650119730550869899466896799176327198579576263805231878088461914300712784794837029362409453661158368000372261192167540248741448991933602236566412915312754638861991163803165158303256001270911624757377619094784419628865658859745661955674998682944436550026361490996263969794390450250265157827931542286285942970811953294196135942084407762952124055500338331711669067409503681211319697777351551834257163661057817700194442932305257501089439079073888929621374431596174741935857977320125038365370780129934332493972391367728992080454409137435148984932242157205919583546532016246530045806101445135792418529145655857593110491792985120172254513347272822152161530245524496986832432921814936545124197416667431322038158077970136721299488506771112736877766400324175210720616926290405688806335483257559783017685360737803598870933898708024730855932757167525534624286911394952153803379721015192570382473283746351149964021949629073247361118622148175538043297500425706020334814271674231315029629933705656469810584778164230188058375872678658051237435814446265017941522828277453402597330850224200806518334853545873084327285591165121764224354603153661694134712561701100653516927410759962451220691362443293021342289455470582385492260606576087496668312267738772322414038298271328683669153293553460487886616770739117634746766977321331750629218844989287162859398596473116330266838714230968091234824388795058845896502597024108648768241016934319158450621372117406392325754022313725643781267253590239791791243197926098651421950281112345190411043679708751984688517237490344361988783941690813590547699494203410377807165580874728323032684389370932342071294642672169412150424702447416305396870365706751230536463783099320176249822777899689477720275280056234834460123347499402603577257892095297818006627230088312566486541257546007682268931190762212799900886153541589602724037430397189043413032984629516352292954820370308736161138695146666639089698177393252085292071740737041478553102430131762477205723169554039043659001117331278854921046322117867109288963210828532734700332264841362326493491763911004980279040745009205496593750978188074225062161018487658422042401062137819608977822765511604640210627445323228305890892308727854293733355564226565918806418300883329544253516066096080352848564133611104942365689380752625358083932876571621410409942543736367663311618460271851798301910692979900978140059603489391573721207034824997103792610562582259546233933340912331229404607168345847446297347394839966577788785146405022734355664709432737381385467477113400768621745002329215460212836725934603050533825195168677142456961479657278211605840432280865842234224770100213512877590415928032877083711182974408184578259637051560902826573498724881704971707410482749095015141087825796341463992679773753482534985402071947401188445123638467869946659824895147390585077577740058453127432598257979609394712881474300882625803637818796848075983635564928978852651023890685208882687693984893556633528085366705753942866886525245249741299881554490085815990151666736291116008121349814483038639571132113176278049280408444127820451506351925352665039537057607991263299361769393875438322301980742675212859817809357911097927607119458145149646055730459583177446614158999311636820815711543824169653413123235985351206281532280586696025805364674573248769433605291257776866275376249239988120265979697425023893724472485149574519096133479034970535636161435617057543012186547292087119916485398154321761747858022455769881080351598692655945565240569110814091561733102588146110056541217854848438943878309857073446559957563461516185839862497645351694370327253016989866658005392915127256941040627150514009700522034948641757954393283542846333339673404839231084208857409944625705968856683785374862370126697980989851057902818900196470735695765167211127037836512862134202590033499072547898450146922792907566546473711535585752880156435645863957635061235782723751242983745505356288325015519799158130904357824935643839371922324759327680083434037071950777255036403406413590962659226140641547607068885807809411277679856819255369587410833593096013069182119794421977314272591543160482170976397565701130621207265410376966427277355579287818633092051080639168063493120410257425300182777834990727563386896929940029491340380836638816327566596021708107068330518210530961189175469300958525941868501020026150455876829419749401300612516181624700748781704375535525643005276233345694140433756233744024102918971660689259267580749126135074193725284509025844404913810552216393805710924745572260483116871250699867085393826160469128105294279232434196194269666448678239702019979308288085170668816392079192073997565402762629638454144464597059807557236755807550181564154043773444015765826209073192975036809693794192141474745604114159465739865102582208324800337802393466779497799256428640855769222370297863066723975304854522738498536522337086619008356394955244802646887010711385036658945430762359459311351083101833244040465096336629146377492666046185092295828806840932740489075725847889064787502452191392034810159096502519865454249775899279182434446207201968495881581574676267870439829370599851251878733961335595485762727803998342491277790380774127586681594940714795609131354116562947219873917317564721286218285441959089398994625906061105717952107344264179197130926612198438885498520647645463373292498170908543178415194867153188282811914537701846418950378180029179702761615050947492064928444030924931391067368301166298170791271719145517673202550109169990481507481408604102235779877704234317854346510633564889167727368197693333667097073521825670848719530275545412257473612438060874756683313114520470417014233190553341255273666305955689784081312207496157206438676757006179071621940889610834468201225152834810546665616547470640427711717736209670693052713257440959965230483541706333944105213222403974668531544175662709786407242999331816592177756760303535099849577318232531228808570128276602824269063913481768337209772562423693003096166976706817270714793350689037068172999794422270218125275844043612790962232067728004589927667021929329335635686724848222050835795464098832675516540892783347817977942290270959288554240819419658654052108771060535354120307385266860698512079550253980851067668833421863742434099513712745212638998296967814115775788536624229365780944640823396089157316780827480608271984813746069262407808219630254350297079482670651441169731910291757914882447305877496215925958571144996748409989030490135485130291177409861825051511195491839806535876661453236541339718412345358146592324348328835167432306089880752750553340683596854829346092442534441954594388591317929347952634840946338882721437550534900671593707348909504068854498339072616058649026376312976394721959734272617496435574225208814658116294762924649829698051751948587620661501992645736305719302145682436053500321355567726422922356889009713329434096162241470345099278084041269494550198828559969788897816383304719412069053387311050511995259635078530204348105757488460515737509233842581461254050613452752832161067796404206960601006622365638238234913488417244955473004782461819689197930000290835829642144205262673648902494885818555765599808876358541582039590874233692274602335071659060585673225787790919775852536259241465735309713511330995593167917930125524125503419260195479989776531999085747937783746189469066376380046406306280324812968193108383240052401289506716417705010437055427315964355827162173052835053669837001106220845513445497341213645512754870065585806282529953319292026195214841532041610257300980245032106534244040024400795917698018354531956999283698679069446997036933830116718349345469137240889306912585573213018025272556121907033073663170062925076986339688403809705789264546715856058624312744408886175868087238643035753553887932294122119758132715471128213521529296208264773170478359774785955177372722341196276830791683273033135468948621106755372007407690824500552586657110180238067166457910926154092293071781153591417571119735016868080387385214502813284556853453303060896977449222505438668478219462132717967685365368802963102266225830560940067852855544862482535563445150739361648460263566204888665792440582982749330458588455212124250610373374966476126012140547713540557035863379230017957569178572571651043901328176251318106353024969782876199713720842172540514331810562473326139806098660342940861716724666864746199814621102901060965730496977304754499344407916145760219303473757548019380412540333636643052518126426760215431635509887093836589286495608253151227423261904890449419093246709843932271371615873241735128066927754748137873719290921157017628797504246344566593833381774409421893825795748195322518213721158554417307303598021194645538983543026848860930664352104506366741390302372701383789995459190105884546346934765214602002071849541830822842994858883852444291224205270538628246774637410228648177012172710313378713517565178072609055552394767511860258135021328927424251674830925349365087895492532054276555429711865415931009921201170778090317637770958582180521468392447749696906153117281259528053716718251589494687674758387809596682404921389185028794947806879077357854340785528233088900643035036278059696808473794105835901681162328540411210842426216152260561226153731966038080238498678545655543698081099890571875255885931174016245777118501040543072047944307506992936541730917586760819239158425585727920654303894887900347307080062397016911110448503577188196548642980953497975693809724039384084202840798566845662221756258407235104305869246750149694775977418608333955338661713954316002648850314811606558304127885952363462164202445493684889240548148561314057381601135185970035658806153924736411931533615586720622944585532170918422244987286985660078852252897764150576815236747792737474891020168212679418174737551378354328703788631418963690953508494053865914033122785700465303079094262326033921923306794820411239341402313489574036477411753227908358051813173046759708366516807810981606779618154600951234004119766094532253581067031589540618548571926925102263218701519332832715392223944837059685909706510002093211935176047610251022827145809085130623346279645195847978847734978118519935152381591782788123665637590590704166971883068649743980125719484217659110856528945519980087009496596593315744662053166266323088195016487492044032304978416235836215293503270682690498819773381297204551827911278232293110817545806597136605949588156775103299741107872762118205888999908296811949491892021290503966601354025814419888797988255578263412157360439818143165254654282764490884218346205918527968393727209734049743069229081081729037153785823511464099586769023706652293380352805665191038644599982466320232441515045425852940499665727214936330530208892173487656635192090337454910181279369300475917830680408640864633145814305152704102318390557487195969737367229755993109593557505680118729682086143359488250110129745474618837853841265126290275087933413450773086809563393392204511774031579434600316698632782622890516634016301235298305083793199899034845572953197843525985030078997631142822211759339913044104002345228446208164965952439297112879087215124076055763357555181658895350732098124994081981175981346795597479545792794416036383732222301565864583788502532166338011567966251004689144240986623057863762806511074075794628970138080752558476952783909064752811144516683686484274658954097414920537406115272100056196241171381365056135714674554832579255983535963674236419551185454526335011305568705927564122658485064788833503457903490271234583556576029915724346932563069701347040830671736062455730599094473730927554819241929927614452639923237680378906604324955843938389622492851701814316511669811738957230763162273226709821242744175984236936977277772552465103192745681365228823237605563257653007739724832335572111440618497241105259036544391481195291425424824340356561067352900990562654397667775068166362106491013828341810142544947227750833352767029475680400356418231121422119649959007143530956915404300827706977627134899174256424421594648111380256123751525849469923853000218347652778430700398641190908649170598363591483961361864594660268108662578834070632303722010924849581284411085028477976641588566132249248012942269178849473779307928212245948792995405344095156309403388555823312627630588009657480742799450980530527580561430579029992200417212666013630492018416574124947363037126194413202620828545201292113515560930531174844043995995986940157065194378530035492432536459076831355017531116943570722386673175768594938430302796819712330826686989642491721379405579453059732587311116580971549533900416178922581666520071389799186791330646758503432341051898889457989824616055422767101486542465744186540223810714138102135496182840581922932674723384648436965024431128629012785729094524474815735390995633457276410670798157435335954141806553728001806822056178623589383613665658442248052615259887863208560998104945018836364871305223524588492739433934300792510289809908393336463190180811063872219177388176897461824248074018198915682431220079289445276171986314388935395285512244050840998139628150828053058639957545223493820814696827467130058303909649576786552279683900876953743251047079195917071692962111225205922947678670181161828041755969906168083401112077947285898865020448926904982872120184205311141246967581070873009589360737675020358118454292318255116134941992694869440706453678761617541514512287226168486491429013794217840888465726912740739397108439013853499946020240122230630977265698196137765453588716408060439395521549813271012929073104418208095792625291951190217718977784704258961381282728591949197985242991152071266646203651364631610671475821112554350227095975198127201213676644531744938148097473816391009538622930237634740186577254812211846684737952664707055959330576991045047678613682558740299711183351704642173812401749383284077142777890187177411194262798076863959710053618349673884995264081263924998921583129960051477524300229004000816832767539718818910804962418088472124835382558268093177137946617302671226516708066843781972522789519958846235413194379661778345605496967342220207789291801494019140295194772251324469517914931604268900086053145172405150067822971348989985330674495384382001577668660645910100522679867787933720545219165217795629060759569530773141670259490061542715206324042186273238015335794281519321558122014198791957348307391546682003492538742540664564730035244834292402049842563851315031413927586761902608583556154191395806145637088569124489181027841833504687801207864255171429358386710129813768797149491404080925289940553515971986220302965638410900016043194104690191582275876849768799282240793302352340516191134610685278551584357188858204880038646010397685913486622135455395179120734415118303552670783565377114177192728992253188342848297354396908223664635372168581665268050338781662375948804245180886777544650535689065635998758451658750354841967784440788063829347813496623716781362170435838595092580337132900904030737712314394235839866842127909165298660070777750148868960903199204511893265997420993969352989903002046510162461903986246425048260740623163463080912519490427640652918845457101011357417867112735833806379649209496342986251287476818768705572860219100399093185718210306492766917232882902224536748504303639710665773130972894733948061616831836047622222278808689447050847442322052622204821180559264357629844106768071157071620198082990571005158678785059115102963187361085770083161745076374002335906123286635459109837737606662134617065247778350821540224559909418611085931746903331969014171083755630640325431018756077672352466798847500689194865938311197228201559959788509361329807055080172033188045640844592891965950243077400333231695123138083044953369943544909849911462730018647940680268152472727281117514191842339942031704518476967742054920461591950490850955861531705064124165828668870607505640370324263838753853598322117021737870889171995836257175712174380879244246835845312684830935381402179145834998816538473327228498784458483849755005604395430921065527786865883119876492489574489871816150135587238873169175594128509803653274662508044473553774905811565956239867073624147480195030117887181723645489766484169327569038498231227347039967061740032225725386081752887261625093817978194987190692291376148756159665687929003190769747122175473375389460909207939871590805632134581321921793799727914158930045846874659663717809204195078964264998418312104967173831273350017067533545592442245926024350218826951333520266218548445133980385148094250931230441474270305126370305555698327485645615600122023881313991602992081130788595948350161897710376742730805446216545851914567877459475926220893392266963984922814411393758180836156728417678525641803624340930947202093688834723124645626387666506472252585853176758478152203542757848630777555393603253539522901342615779012371532769004731943521979067921070807391300366919112098074412109978176424381380238090054562271517561123244456825231877902867531204276436177779158070279345047415284106619141650432372742737267880247776482389779398894047118310471270591393277713226294409230680479872245765506563555694203722060560663808932410875140326867966140117676485953196517879715337468005016854294800503968791336495103128210862813588080473188664627543819878687279498365336099426277914743979277402053269638260812576917220409333838080406190902451967942297435311259500760633491871649131540644646955837957233154793678148498301602349064997896788415482447648691463894533902076361697270601706564757601072823000172216318520036379383190140089014966300610711577014095829831056854807096806340525078953205438576687480837332470934275169144964747441952762970979865366938741138491643075167372342205491059009753369537845485625446115077781633488103040550063326992157907542849047803011647107827411183447514107739225222044551988691705730778190979696212473524802924230307053718448228685542822464591379904361219891021868102823108924661694854008322188371911507901072126783822314196549053241776882882956246200626055773827149044144093743482444041388096686313587910231882333204577574831865858595630710669462960028748035773896884608620185087123879012413022790002282826383358870899873340767522023741882565429495294459793716286553254586029888782397765014208826092775958171761384860615476126868850633517877839267763743580580578861423958200962775141358404680352327350138821867465903445755928365356160557920741553341575837379099286252345333786484723463952102821427780500386949768699998656287292604202246648538271188329684650378763722578523936862228101627469821418800348368905940930713244183012672519663798420612953635949746466002853297215238991200497666365413300403735574245686104152999590481016658144181994272239302223151420316557638198469489259690699073298938029608178773016317162013864415003606406951141300221191588160710021780093154378855200774998023363076989781810812715381712610297257300450696376336929383585721392550031009864199960899472722210867348170104535972971142629341416466604375858087619772250109110313091943625461247542306759121041347620713097831116979205352164987300607406962263359430327389562899689552227610489269629635028818027377819723210689115074566297849720821289664666367854784407935443350216252416837787612328379705141467405860883946498526140541849900878481550887348802626199624701944510163317206155159646135550306289680921291732887647400933793401940612684207919411710320235983099073104909773730666038446981873584160566566223065176721388934254800519664161543874414753265355655696901043500612361418989389437525610095917005821003401597937368722463853925928412327168493557926926535855220352552011515885417437113782460463159445454685494462273568696306871264417206143754319092215640997217137969328865189005869778629175268528352222871029473728187942254623464952335333862531618473163427325165514484265685342909690651276611333814520281574666420222024346502167321570756801571424328739257582128591955327477802780419108523083437324345295629487660620264324967448743576207273699766617653062593667489057854942990226983414916571982011248300787331135458077544748015980626636529586026520774443008757349778988414126389950499932660289950946633976736642141323147107400716178659224168436695600381172637325484359739049165203575706424424432056254234033558641934566256934916208949938183081011862290178999248316846488345153977841735836840963139375967477652520985800218237000783522967358692772566764147097390662695814407621685722994210609248029196578028917771349564554346334043391307746559904757989907499237505452358076102774812888073517612299069377309620609902156494547477774767429272355324931386691237415335717241485582585855461110667988075367617849880116581650985013963355196871194383141072936778693782094283905477609467308221028089407995218799156386190849537714114650245567727727610295548066474818071467418491529136177793154068742461468766632421767017351401820734374663517580628997568287288329973832150254598559877303155358940613314884067754987006691997963100128046861454637626440457767683235055103323780453265036024659493938611562225371695366446021716739317333618556462414968111275590431039170563138515478992646138910688713401991822945073473823655995889653816901079565792802541886663078403938193952058213482388786117360415981130211233614805631461714980328697602231939673467069950478630483178570866493570297221849340834014228138042030688757651608799931250845869159471977041084972960656724962708816401816168781401575224707869405134789536583295278396177244815063700974009373067905702270149110659105639195399169024897813659362619063424436969902482286239312343068983290316767561608063442326449297252518247112265103223264269759539905000384622704493793796379966081390977121479972138222943798771477692576643123207561940315747373303949920062391926187459455392406617128906520758586480480909121262888520373180593780000100332585697775686779003491505112997252952420615070583351758227776197522111329573597617192318539095539439987225858754581880303240433505158604992726107459534204271240222054733504032552417265688253202587040488104613720571223771684651299651990485991309336886393202701522305716644551216484337923792744040157922943992820616727464937348630740789246822856750084206478894852014033669335617844336394595021574131383096058245784202706974077820311636505922488191129009261716607741027444006618078291755139026897560409640941947925986794316813150080891610166952901885995091143567000095357151442237408167203064819021212162429085741895476289904422578655332819822941617344681671486037146631264826438987335417464754405201352405962041124831214247571641550829423392055725951232395908465025166223734768366649660720483420762432230042754105375035143100060101542457044516169591814765476670477251240602368860127592881014042406046548043437179643772988309838675892395983541464657664316691034417226900203224949690667141457785241196512536661114401281834435371744436281130307874810012127986536423404097525463792019328687834299509509493139740335804689746993842143381442415974906736095319876333453986171946448747192181571459107125788408433508344075977090034015039683037848754555515325831403264162701606795253667171133234238901645556674008760861459795950030000962226507499449913223045615348391239637835526532779376783644477729523652390919406476219189769371580808565110256186445949318772169587194268705264345034414233209300346202493207500869364865112421509096864166960877964310151897439670909032338660148693496165524002567903460242275480299952325433411546346625570605632685118712401812761598865181337483969865549222324129880417698638167809710207454498706335870204984899770248834682406156036798658591670160047331472125413605892489864169263639427428310673759307157205603285934261750125160922375371356490775625393909196134525493633922395298384026137083866000783825662833442356737321453005483468009945253125879798228691937056421786289201921955447502750046155530133060731051832806374736903279498018485916980289734221207234207807872720018755516358007413763556748252591419545676955908168502479881470222301782659595099479959582060066920674914101545051274824603407528995089822279968350670581375835410968809688410979928034001769512270691488821179121514359357542824792840993580557133532327251304621005273635520066113950334263325578212090655229900690693938948612269023807523660971263846705629883516521832953543275282013844262967340650037913164278635812400242418930071096508825168210422496122135858293879693431729336881715477119133051948120137358739489771052826374779611518959117258263452448077622620030244581709469611094993868766027777243363655395609197278312968737577985867316462670893257189542181420542725880050903661047232395637764790183616330586117530629772669362362330363462848604095282379344744154186719873666851143705338629651367170852350642949785901870734490239559790740034485284789984744257393386874947406395214712127371281661754996981774191466148966003461825653667694598659020168102268430519914841111389011534402995158701227427129222589031337211340955423323138215036122863004854962622232592018681659934161617799812043888264832024836768046031018980747985496869618554286342982365565926285722046990472206005428468886929446495345473867405897228642770799065018838240107546088258756679594950587692854874393415748316812783133778779503202448062651535475075508969004370051534653580665782236138832253289222680565110654552191915781349472163811677635224570214729152333668993542103065798801965565326220146103412198756451232470440980631027292984804264117683004845563167330996230634785873048192620936036169564331682805695055795860540350322742104322460548158349375185563785380485127993631326751623668347638840240990984699118176108091432507722989077161771097620964093842432290033970410227734861761295270508426127967363762538185513276013288403132715539462946482672019638536256850355764203308616962847620906859582683649617557552077469965061963556807847669571271938884369669711169790104196901318114228742560178786175439503693626416146202006096268651875516029108201073074981889203835646847363119817608860288514261764036518603320981029850779517963644019870144044248409738583435871143829364381816028807704570417366572539401496255346793166747607671541564595440032619792060977276957086473017841811947494494199729330822620966073693147131449618584223957119338845201650151678201487526495739263722277368204838264918703237001241504361587570567506405437687829069743425796392438305205986007823309392696795232336184249999125012061142796421036347802545489283708710711502312165218271405792413566869000616203274709283482944889620410182416729889847501370177342959684503102309729161884835340885854898156123198199792221289951294125658727405225479630739485605304520159312100241364275804978281864521787292744083175451570068156258776601542794210799731014657143189502832246340305865447940865588985864665462075990336497052961240258653902201690951520744333312233416993385564973270178180798040743002398229737774091237548354861623337174446734207807853038080707037771005791143838908760257849626372894433206538319770325041084801929716715700470706477968363126762655562594653018329223923073924207753708300178781179621774855498434790363440016303053687209824209065136712427775976412659249685328508010860375615710421538242319424140446825895028187747465541648330460841981805656847313074280685524174871460133359951266506177100182191129866924993859033818881391423810302458369274867665385443354245748508313895090456028786841230258766708312842885773742694447357187140905715394032943268564946369059529210652847011696004609330287345862749801165827075262829327088075919778054499306249668179453503869337625086726596970030959514013616286498810742865897885571244057179110570840997470030195737320960271253343608931701658689690937279671981899574985326070601888457452293902634116961109229624135515566948504505331532831857150869333233796557113054512914003728136855797754990050598700287746215557592622139460329315794203091672724758255124371000016805853134559463899130789791113962324991009932058055020953367665645383116095160974203552218098689794951933699557115856954718613668018485619437601393530360694882812703289382814399782108455562502034686363191157745632868429648462423376560445326466138409649622165465746454794796717261751532994597025885750398097045208054980018670110672121531092610842408459355463371252032971181160298230584196772310117168827686686991021954995054485407655900645424602779662954802721416338557416070018267946656831950820254731887839989506203233855207617626830484973623268166609421587116356548534082582999738979909486684110187342219363845773595428085251169775927662789859209221453285114609447493051844572721464328295811885351558546924806289989634155898917948055407249724671501578089161617551684420789050474016064448536223981095527567571804570803060044062482208571475852482596564154177880882181595428418805121199367301189076835468072198972621504134993012246765253232422927088719793093394799893124714116154220710212865725075187607148030269832455184435310859588419333456083602160652833231292904461410158464740489445143423345113893486734658508780337102592751952867477032808231120487200348451988108410067229556957193593330749792515124638560193344088109386091077895750688774516668773700123351205548923203691196825249129083293890467518603503878373044380829384322709675159487160326237085333607414463733805675627006874492816866797408898737707910753357607597618223025042489503924594004336941304336173143378320306595002961892784588228385691638211391923119055705772949457682614164794744202167671445804619078480008769981940574694692493695555314471027800096416258098881100620660154074263552788620364310768484228847872795069691354504726656500102281179034430088691604780631244404090208560071144878979290947344470361749399984951740516435354854991825258646256991179128127818320707188658232675624195214065757423599663214829715451328665656080991846342060213962035722650617566066754217321909931300131433120553482182417852744516614120026975561159281097620309938548396458567422415905172957131628858893819189015782929296880880004384398426829694556159810056033136188266672378467579567155323656994810548432319283478336969837201225837805361107813876799793750085115245627287123448439886303851895118858273087351365307504965010699106738205456050670231164739830050916363935801890245817944619411033619015968881331823178827107173141891697576775942093099730003792152813807651858164039261238567992404431021921969488530629560995541890862611528090670711179795355456099926296259116682976037277440949807852001118189843351323111308644891686397724440414730296815454927028364861601618547387210721031530019748590381907561650061768319808665164887846666628293067802404875859104554991587027348026829639684786032751341545123050239342555309315931745855922596921761752150630828920435149986477308915785644450691868490725874303342617935405819563874693488630862388006185051034409032475965247044160734161026248569438293399784981691348529688403870963033736743086946902960464705030626066490562014914977007783872233519898650510340436624333077590889896704972925957477592093930737539302382545064650134507458554245533436576140902799790464204812623710597629701677095146140495024680638555402723269607186996010292803557033077434419795187255489438445237560338095496142222739787428592906281619085473564626802364368891318139974525176880723484018655077111040258828564393850790168726837621650532109116002889139623229204023606509595727688434594787631178443667585957460805444084888437165388165021382089248742163446418885071989230825177085459450110203218567398486060754154242651316188653263504781563943282151207385054178376353523140009317787080497550045283510358306276024462266135851505689400627113678874173234335430354792995612368170803169418250896385045986853816823189880903969169322946599908604165934263051314899703248814377811611301236199590751136722135033350646427390709814614629265310983571116213122669552797588727301435757475079166775527310507159789323367933721497049333851557470318084655583684497937203723557830492653914767036359990339878814586668761712119803459102137333200396711816429403820610126519416347068712014992494950047553752685245363247534684722737519828623473404689966150588620545964270236622525368944581010638285038363886690615748723126539654540479299551495446973152946628532473662893356011736073371889896737560230857296492136768345660045363331953166138799380011657609294679843938927596778306470278160183841465527347714427992318372277523232025936130658084165437350125553903885060112225469456762291436117221602721518455544668540627062115388475582979041116941093718645768569306755286888900291006865589754663136299888335937007552374585683664865328710957298311235288596022442631109422472251678840807547610822260278069552505852117254974973202581785721532347606375675474748729659069157805302619361859551637707400280453124231719186622542634873955484180909712932198524680604654855626304509182632095643878984409555808694719378813948423521916730038757820774508382945178375872831954213282621381639614388766260751441914111213231007878296054367901056345348755519978273130782732216773034585094580168833400533652855384016776094297550451197909400184875729815406147589863220737352963861853969943660871300372025157881752194152695829305867003798079968844203346007958776820948034612076051947603857620564649593810467254627088152546381667777876985094955312642175226309063176797873334593037550147552127529018921790488996542207277254509089123248030050196104439940196072017991301464736531915336266197872330228862532973527612690424037646114873946897149090095385601295281374711085854242985852860390443068985564615956291427607109720387465710135027281479562537826677161150822910345635276631547379752452401720748943305173339720154591775907999827395521685224682124863480272763359313541199341509947323910684395663081452280697360138486142544737050480526010123240585097960924134790477663163899034517380575060676798022959799343751517894319648877468404192434793967594034023437511055418276310891426662968745484394617128475401144484096366347034715934373877253112758528778293890106195641555242082783317651696320098600658884145309408492111867035222839854721330443978761344128135651795204133801987625514901044244826844702586443926118411889309182091627897123918537434329547587147337890200632367124406131180656464243542276040757618094416399324349795335356949056507981751077451087433140877356895839624395627773063966685308450807507799744608475822777338796340138156843128979295386148162614638850584164370664669415332809926618172904538501863159793848455766057253320660189457873341349246591780651649009910094443337470875444536234628564169916012891365938459213685301037753505360336825726746557743696341969878162000442989294634727562329027759079414305534478795898150868591117680639964861134585041255088265400071320374707700540211993909395603998452875272771944442937440851092748420943516018310609461666288142911576055179238798480187424625318092544565554893834483626888606589884352886968924929513626893534932023909867925220500806803942476434367770577319207084961756157308978835236143404238588012483656994336976067907132569870250878453741371953980838431440399549921657740548908194332382498479832564325388980512592972751053635921934791463689136857355757511328753202743763781057339569667048479820953965920453649452770119556271701307805577118363173763214405775557759990811567194179305049214004206565465282273766197938766455746767810026221074720088719770121669664204217902103370514235030162809327526631580673884939853554561757921172070678982653256684572884371461973783514279931908617315267477942074691553098827150200861162092496920154647399968966608656941544551457557036150528470457645674022098355927433305220420848453379723725426225182373375405153054170758665160047697758148701543665287638769683706250411179607314453661179860107390306228993901928643788319121787706761727969589386882765390839121511890289846478327959502905671687101772977658647203881014250102700109902386959534184939002920125778906554228618461883933525202719824451663271399741629493967995821132711251091665089747608759844762788249309535230046341083507541068166369360208373597964629790740788154208108784950334799757939193953949413890791778611663988472198788551067854162306895818661272018549785893816654187500520000300414836941655590660680638706414461361638821796934283320918634983825296975987264954110828028597604383798597349948104071007531
C = 1100031313928737648811976346615661357475665767676700169338114436126480051112979721531455208025316405138137263047801946457434834817937926741337217919695892782465976820288722893200498906546933547552264637771342633715876330445593072526145043984353481135482510787341038067045114621723595013156997409742128698625055704363107537112066150434677708841109975517625117336314621297950379199353513420832136673689075302044830176552491939373814812578255170573315575397856988101700851004005328479861800883036538130559959458452564431828017539212580193495091775076320268103489233213736836860329532127399928518139224805381136263807984260720834366068430174498926354968905323409650939862066913398592183570974013868667208738153037162386833828907131898293073516936218569117770900522269144580419014968093341123594437837162325861687126968470309390615157772180533614575752350853328794061198003701267527159109649662970889803643711736139598725940819445412264590630760323319386182905416124261347651859223184810623204120424998121508414951366872518201286949805898933490769505000240848746332800568842165576467692170218624872372902026412283394717060381111814098900808274230255928559887036659070822082691125945074845182881533735571617251128840233118449363781562236068252895924551044986667058777437144116608221699281015774324218853605271849656873988158748452892644475727124886951251211297639925130459941287726992319378735528528575245897506333861950112548485768846886987565979805788566672217288688094494669870014732822211427262621300739857524873724328004874961811889270778970076521994674625561760295244576905079296377660665967358229162231205192140919872813658211972333890703378723958097465177662479516035836086103305769267676439168793921988820462512552542235432141015412633289907055581527850261486769993365614331322349568137314386572367016554185295014049828141478392332430082097292698449041735562663377673944906299145576778901220699868453724968853476773942213405069213809947670759265265334807815608935727899852373145732435683341337859262457271422515201384043806197987942076855433653685828603303326446980627168325697282197386158499650188778364820028642360708216377098655162128355414455070847478430558392072231483200244316335470904116459017774760027355305959060336111188602834517233682316704479963173858680334677614750980661676393792130614831833055192351792052503485387375323429347482007305991128412618081487760909498451135162536308591127874277399487391451826116725363641805157191967616782213569582986340958669746230532342520614016580429040834944096465397064709528473960916266276202526141695783934994973112570998079900645588423841615256817847227407259282525443653198354157449032246484285351233621125843221367246053149112335294824755989371698434519076027832258328857707841142624089491986427488341509881720566102933999112207073938169751669286876797338527600091401451606515626258775467892450961836951843605684126667957241944466907441792996760557723048048353233680625791229396536194579838044087190037249940768623246848653014040603010161468804983169036652404191477256085265572732842686337519747702173521435294622135474667620330131359302416982749599849222896997638341695236010021220913275509769662726182915754274576741480436783123151305458594537794703939678218919488898362436205068576956529529264240750902115854245597163006400262588564579458456126137536390485041291405829313961886626928820434232613288047632451011968182974969896723523813672687294273681658153347587302391912654563207627229157499168805885368626344186691813510192634046363905677347180661169919385058227894236694886492016284807145922294217694509871149560621158762420260645851393483494877533947748894190089861387507993204288557382182005043057927535670898648562360006600890035887398574172641011367663925575197503789889503499056318371174616529391249710660564462586618439567510885228945968052161982994184911992456230923914737013334231733499158534555533480672266944434378275091014758371530340901641382580405560135266804277823271370619693288364239892397148397515902654738953463618762053922593514843201094518767331592430928757179620519221135052578137277637326953189877851142055674769985813052157258301352489133398110272246484427277493620466985036159211227353403493556579404381263033709383290006177912926294798095946029035625456234821094946714671634848034822439881422178443938161650017138933057081550370711997674385495593178814244150259901292859473731970419954337901475493439620179070199664013053540269782926005551624480090286596268321765426294304683186885488145406626850543411026701630060969888347140943336245692450769507749408711134280050368993618645053494691852142570724484415846818262957151759341806205561062799369670299710816177433780945283087960780084825929152178427012361332608718656832771270181153636067744931660288356290516495550352140326611923578745488474789861741794029986710568955244937302289378148004513020715580973951224817599049507463392243385691281210985698541510962487895984518537386690036797580652491280044980603985323890352403770477093088454380030211412697797353271479667423747476054726216480577247899895892806634501891160034182984739806878152588957254213572172749684595116984298594176349576285931431171352169843863876984105386823935619718482338515319897670693544073383886037869945139096294997675450373366660908567839220501539590170936437040615421665918939383672208731793244129147705937020336143656426923073752425810053969655284448732066018033990768325738200612747572793205049878631646008687592812153473606114624389366688914946552739938004429671790766929209299454804024683657196474187168753721225438258149854760692391594725328424597797926133853277236745987378265438682703290441020817620015079427187722961700409986374891254986882442672452983134602487468348131754181216308103628551740410071531349379309935283912195652419794852857844617196279166486586295078223090550754888037436788335293320260936010324596309118962967746272052650717019221652378735803531295545346578453631798363920819005753871205444889734848044412871015069504519936481390679052541937552630813127935393701891571022142179629012833750418947321304381782334565164114868241528278653889580700337484418122132471323453693937212265695821875144390234862803209040172868126876795407330930336973336746377295598041102170930263064765571457660344019738960862750250919262996367614531661483496210354613686278890382901653543216161819483693791063928867572640507272602897299231512174562573269034094951093141795124374931170104402899763718012680900521038688413258091049198498288898549536195666828424545908982577990385974270027745297302242144203060668153910786282298068417207280682002683227047772395442803042350871654604434209574229434358848397295065305011667026935824348903070988812473089439939439955035091457453067794555295307508808475321516272714257273087222606317121113626951310059000916061573374607717579510195336621800007255803921222740902371007035365711765639857374958388671891222942262007638449831405034752434615840234587707446055776170323520820713562966049454043329920896418325771483959722967000448253989550730859530429722396715417211477467586719786439622965488949033894207226729975655160082294244521344128812324492162123373388017307229323744857213724633857724457822200837794040409622861663267438668345129444194244401768418172067733895599039635265212063645862158355890363269126539806651161419770626557770764621603643588539070126512231784548259398857031816275211459264471319800847489166181898566986285213640186100872596511727808676885009111717348329323167044736338325190825369043223583159423929768985840873422255859881018350981120206832518815387264608511587270203310666455923029043873567604191306648260773140699372112000261433428832768494050418554022072478639447600068882262217808456914524915810930689107558560426168765591455282966170844261899968715742055163671184392373213601897526744275111261347437544739605951854601202139054194388224409891072947675809515616485502307942303688345599442298720320815958846191013936073642501051039081289057339604811434894604458854357386794582317677615725662960864962258870773924994651722544612004924931527900544600221784070217338095271144961704606255531605728750955428747741911041530951955966779922172423007592590706653831450946044762545975208426834573761780229482337386264730425017262769295010688080268771599729389402513354201472895063974150438916204206352033088055447942026340513798881901196989686522457827599591977277527236364037157939117088737185426140525724543538744310220711170722221185074848870583233767354098571359654445446911543570806784208272279641605487723338878210591870003943087593741235841362984605832799956466738110740660374216408510359236499671269938995106127217816332345123119483959089267754132451208485073850647717855000767641941277712731754108512713686322962392080726114569797207164592732009656179198112338537000952277561905906263055841057233026516273388420698906058043364410735635448129160014935233663218371294118511963029902515728686549899185113213217677234702568129834917818080230223862877502658803360093783585981023099701213666407449410223791323299860341098168255127374962060647792320064482982856280072700135413164999410246865653038614931767430674268768524402585132699800504418677150964024153356270503206682305471894975867806471979578344440642757033317107659486920091002658519472509120856931069461740893777574414941998921756631810117592783176995125366582034929805850330831807016569701873519368128389050329078444015641086563935203819372503771233977777790728725191745360389488881704359779500987265290408123584090285548868246911355101968241946011090853777445791828323870467864244293131202476622006213104953561726898492558153358626871343735716213002092583409076774366805631894828092897530899073773858492736221011983473698474082546259939458838525274293290372047252344316594023536084747797518225697241665847639742282077292614886483418686044292339938181351442964273268655884741549308674524902550551225066139542421142737057265763582956867260463028861512444039138104155350310694258877940873993818737601099535979086178342449839053683602412261618611270651895397230426441572252311982002108692338078182843721163949345535208435467143110109640003946922880705878420407813454044172162221487870812769912810362147325677652172830966559025992642405953757016188929826953774211040596572568913237781041553123746587454121960892506721799659074483712151665837176898553997698037264235263542698149408673872794173035416711481332816271784780015086426221942441231791081937437484509071793817396691142417598038065124818413117116795514831903023378123594003838970778618374754553747089244406461682637520810677066111611036795829372771937668409257749715942908884276931531070051481486535623068451211262060624132079471542081403301924599940625876554158195465496924196148124349863296057197527022247016227434842443673584524214391269417697146595100354426931255961716167315840256699885888530466563072677937497069239897253629841969877614751667106484282120421571083597762947988358727409840185901209100029800660883563227177502523208213173508749620988238725156347582685238835198228768814746623610513553461860725059856578078458857985802121220194417193588865936515949927575178777897862694369039124417243438981523346560107563719175177464518677229935674881566926317699034329827023267864779630654234215961123997073376607387125722740180406238758489633577636079376622196750734527975658883292692147683944671749412016940699268854225872659509001072373754151085829335168792166114715569015037840195857738176153251712254740534621409146197197095957498886217665560981516254877085643881372448826433938632168923806792646173333143458095793424556992381296593972643205029240524820810001586797837343834911761473807228075298733047347867135809370689367065314605678125508863377605886290175558082637274954377350830784647855310189098169547413906531294129699011787577882528474806300721995988972861919665105829284182045690979839021372524880102890331864331700762470052244396497347773726958445695890806290683213555456079964576819210399936515399871467040124394447784709313593691883170189446298693945654554380517507358655190758448728709751956907035393486708554357254636842213406347798679232631045542828368047893553126314573696660074920248301127608575124846464496092716248897875537408984909868818422437857636891675819428134009659209225988493791345164385096122339153548931653544193660333505053256137713208177381393283139877071801827224740339176515737656751137492329442410264731809195432428107946379069271446735241041929553737843178443431441303571121616242296908443684196690672842987920881230460726072347710943302762014341596637500993766469902143090767904924887054391544040351242252511944164255178004321507903430475551932537185812351898809110790349103370137274272720887086806206820967201206544420592925862013475765800679123821855947062215283862935888812547078980727198155701444798339309656269028566420092645644657470133544244314572731106643792720846258127326512744973787212437119057033628231369137506629905209247492564045644976092948290039762285881936719637803819625970877554659055836583391381848511421662498456378648265468931019061661757672511054309991853291463054222243913687870215651748654060052758033643168649599697504753626759126089255435486086508690075331655989593808431418130845705540474531412905187195139099047915592061321879492812877979451279503069523559517287950078961488533622825028406608073459124359213484529368972255247109912700748345979556000863397947140285244305838696061244836078174039467710604083629490829464558448768896649096907569192258151798763685470030882599653359203958214527397827609318660124045606489042154592906617902535010936562008302077463641880086933447537201198647503564697251417309243327051788415129938931382142848513597108874482836535725189969062360728999307995731499803565361594261147663896098567008179783256999791291437421460490335237754174806386543192222637195588836831180843362265199221190232926777975980731646529274932520269524318042594753706636562744868506975170096955711189563871400365367900728586093791948020365951003106257474785905604730255703061672630400711806631259029887179670230496822159596941647938227632251487944483466189014809333212177302431926073951040074582511778646964751904078075387337001084118798090710369297834149615587036906478768354474417024986420701780172725601398479103362886534446145963814858412598277425606485644737349357462126047618831975171204775569254306451885737000162176502095736030742479043914837168431452725167595451631351122715312082324333917053705974500236200000228477932961805014603038614165346877864090852164670187243572356629967004479349635356358277185119515652400447382192825246889466312811712750831297930947039754860958825058401708786439025512605942722463587326732275135033576454142080687412637408475455524176983657083411828886578174714389253099009740195659575563027135196935008831135147833595786257906966299121515579772971779137845662644728496943631707558951719546511660374766390463315139146045322432951114059690842245009755754632451504573094479130826868359677571760133192051759959380296542384080408789104779987170318347688705651065566698196773510035234211025923365196601288078236757283427270712411229041076253100003150222856229944826070498360662981232599331689118951598500743190509084074971892735880245795028642266706949659650196987301219521122741996821422180587736568957955791142125613983852390019888800099385167886210116617091091945240911777926331841942513007224007445858012366228217951352908377819235966276101333440526754946940126474322163283988588265092819179105939641784589038761965110413586788536195770334101429016356820598388644175974674025226459317004749264154720922085608405491483463576991647808211966673554485334348623884296373191305315850129207413052145386874659413590166738316738247568836029531870875919137101618656025834214634460137559104686271500184734225123705888502195570261720253312407313708356351110256454676653234463645706337106678010616645807904815516010932055935283014729360548618517051502045365041838437267754223636749248750871034563965847868510811145191293333201161431433087864166662893732974530377137029078305783064736315315948319694412258805658214252213399807607221021581486722171208738487885565919570429077336272265372815032484157837728553589429032690089954676128113520966040381415824712492109993590717141691332317729720168676503694581390967976626321137898712700368726778846783941948372962244139743988265400125001252278117794329497648039915196098481948226503236503780857992982934796525738439450121548520110221566557143862960260209478779086353586097020749708325299233507357829681221421639050415150414511201166000346154463570493421682485584488310311628278021401836762338359981419695588709372163630117429664904301206988111807707222081931904383810674489263295309806870128521474696576160370933984071833414818620153241074273311430434637019657931554892805689839462999835008815554346053150719532242197715133566491145252676175411494470571119198961247442581537234604662937537244692529093051488358460140565995892859992758957106355220346012828759812205577304152419580475666029407648192373498307084626519905754240741489690170900267279460360801652960751078530878267128003920830761556069583136845973436245961724016225069644862513704119992578958110767850955402728749159774171013190064194417937440532957898602501123344409052799041172949562543364182174643506316053750885152284645579413726054086725620467229541491616077010378839173473412111717711899316644316283946824189166723163349836995513954771811263214618647887995345177554190885545609692714587711463382832064531726729163174333514203256177199170892992709168920393984435050997711184692987231372842209933751135272503904084568556013439435147363750122124669356376495192735341164994662051890397171440734964895838872991471697456114998214825822922462154992025470703948760547710403371836694017174852350209224127449416136661714997650031497670093290105661264003525240316391458478961155885443806944840614697933880434657649811345777707192736378635976339857127692825013226816311912982064285973416813190464487617163311482568806331683741698413200409516149711849163494820231756255778513912163096917383722175284598010305032393754915211103590053260985661621511881636524177048726138135956264630603029572397461236003961040166414040219103459660470344710767337033201954530717804424149606079905736928565305339478374410631463246021216625273905736822169138487137560683378339428852931872840282675068671324998215856803067414812725609772528965794758378175341815626780773770208422665908306986298095768111056282351818703217563086837847422856593241657256486878977665651466456468048996124776891080236139553296378759965334937916528978679488822851151283390616259947873550888219705295046935407354980468564387685417065472685832149429192819763078839052539324723991835842581140277937429143813545418388300822655386450928276124227710026012169669254451630913403989721005316858535734331563922725041488768175952716357800326592487381629636328193365618994111693950221038924465141279465230672702118885149360326622255032203037284606067794498779447703383139297831685674095100659553713557133781101937182147966330170260886754111141074421600798450477722997161421548728150639896126023138037333557824072076790705182817944715678903997296470851680731355645480629410862130048485969992428149644485941637880151902624162307736244952401298277176974992631736764431843733963665174634350330160286406042780341190944976256219765357052309927011801826232428364573071027677925596381554130480020193562035930806713397467322425159808696790794035873822001776939859710290250862532155508967581642440714315143590435839100010741391888261447814124370253023221143699440443351935974847230130494669273563539832816017410955480244060399858983779291331886721878096614105238108390214026462205711570332802746124374453891750084945152608610852925642916244664136417864780789014668702413876239889600278047744986473477584966688393132189636982419930538008935178478356223355046189339136264835955527684801733336372171278479028008452337616664264307508307597247101028202597642903777513365291172430162420222720413755608358934533528517066667884450037878467913282469958693068343969313974580904562097015129448559071330580349831522111709646796269832959325510554679578174429086506232293821849395165630472037228391300560816183349473084553115704016138757674402338384109536006565078056172525216010209510696287228029691105931704797372205115174292015408129692116148534643337603744967996890461829400982497282952250439071099823961309628024127271504084826006754199807352927166388980596977096605082643294064101667332398936283117471321156532057378137873721816521591035932101575368267717109043226340408668346137697916511646145268170662874980466367313870592555846612979669668467525779876494673153666284949946530337591405191203501224906201421070730315440378259593565477685983176001354590924615956148495354000684380274614118329392707668179293524700218876829029773060893868175502803979217185050659087867426560558995768067466289549259089610779453159883083583787047192632119989281737281146985764536825629564001466468785316147493801653349717032492787571065486768658232343685894388074319791997587360070401438573168129695720969874032019922017649282889038680241788235910509198028872433520112152889356096601617019434493123130438983726625257835768285145801793250524299544450021541179273267679024267928745178923417708309125331952639254270141084414572126467710210319639614552883798882392056356173725737312232132623911418692879987452381245836910299255733806048079169251262382853849598318217746747629380708866096723421951079789351476825698324476661868127487554487058211321850787401526620226513703562431372108563475520729370396824592590332084127171050723129298805363257857301791927874019626472847880231662964750163691143537720227898104924714234475529385499544654694402608002529337543923076315487671645957885227227937226196693971241764007755460536528617789604977689441368894554455983099774831484380547759550491918875685645277464450804119992592133515641941174794108050984834338548561612166691617609018812105700873483907513144025815093871596713669797115564735731681681063961633832469568121203948721954800051568539780789830438940748162536683467976527067787856679325332558150154025612765697182499982416663697707246771424599491935120020052398985652210515509932889916894583829389338794640087109275705580027468132160480362180686901294788582092172596853976197192110464737062338362929134639017842478481411211337549293870652155594575180046942726742538701734375901672474845422173491887096930440336771440500834186360621049371383086065908231827808974058040132538126180137729556993034260960285914706212422038942999234583045834361014835221143767088554555912813415470458668168256427113145036201923439960946966085694062108343580821979382808806767196108670332938965639116647485783282310048891452173083183974754773319487385964962752811752153350193449364050693086605825656188410451391326852455688527151790237804311176866560881548198147575380152163177445950995598953661878917491068883603238542990889993476104005377321242438591180136386642701787132175151712686929232053748889797244323466864363383701735081870565584623023246983916737165513653530197644285784337091142619645328862851617177876751072706319584041071444544307135457607293015979087802652765705810497927475542155075316551634257345680900274529519315428197810889155328757363073381469550439107198475140210120797066088766798375211024263644819172269047445101516266761508202772390001428916715025681488953511494040163131180294134654998206658020454902550551685415140395696067795806565500092397142979013707000082520529429941050953515233101312274998551987603425705072595424007409329030157690110718574499569818867389158475748934645613814004836335812065368311110570428747062350284218905543362532646358319102385846225003640009983718686827493632690196209243614159141217122678551050512106707135163324194167501612077568625798607556327921086599470276164729342292581016421396470323348329066812669061609580537303564504462837219899993932783158942821497790612894301140863595709267558795026634041885000062429067529245520665546408263513683648063541219838843070752687192027465963862465778041245313541987781920248786539127438067358535947642394355118384719359688900114260446169564843024915509944119501881541469160720994862085223910766091523861461458499227862612026876836336735152361223618578796422347853417662040603446073747387413447317108186780360833606403767952628477796656247114981889328100061976457596381884696044017106376342627908772361853414255315480884065852384877976948737523855780099501910029715331337140073136190731958846775119049905238920720242298839073647876850561376858175417508641797400670082310643461427457588490306682950226796121395163698738149168263468803109643577488085890572310924809107265351815837015802908730683419771400471366551354459308236380239129591803156521664165385461703207743025194715522010677552612131874220768589299586049933789159556546583669199253276039278852022344848613344367897149659138745069857223951428688138386553506873301151653708533052594686861632369227804107029651799474380427449049483819967095561444034261913577974834370514833342225071524092564078263606061765362459056350833565908127803557726129777617194339042945828327689259676837045081753860320167358416179290621945388924527548849349481535231599934565531964431766167615814600086801427996242788240120955353401876736358537712458142071875443892872999378401674198736688257465102570959850048886996560640235430704747488226254403363244701570271735926322903820580840365034934392595522458622242872922754213988555884761314505280925364030163832986870839553671123264184969838839613938078927366693461394176774365659054296689026642404706565289740363932223443702325016513831494788966510084472918836104443219208328852442403252779081748838191121730531598358429871370708039479448329188528946115354979419742517732043255583984710658134880495099964231652724896557729986592312601758705793427109602230701019323401758069562701639438399584199637315993693542853007454007108806821687773409881664876370109762691785543032553981960797052644487485330299046565922795162088253305748458746791509177049717248667569621967955661127562106588941447991867291298139652259236462772505513995106638653073469375700761900318388621853208150774535680884666903124443484206389150848098889739712863129676261800909572117011902379850122547953299539373993638615617877940434286471288042198510761396123551572541871478210178243095643067134037525468747040086580456289815387450190972873257848063819639234703758870666015082054110893562825352807806814765043923635210623693945974441331843313358739380917194662634188082929358459420717666026739563115736519159529055734105113011138920657191998665317528668889207398803380511797830925271474173478187612764546875290653993593866912505931113755856413873015202420383812837594241007685858898164751297795468519180198347395659369398745250346194071995894454798550823920657017159095343051573466197194486146895186561940731501269886836044702859710802063571910072432931710973497697184063101219643176515220400880242580597782108129444703489100487355107073676648246526707036505244723638976722533083526575736200103105270612186192821726536725477182649129229177448452225997794485529095101270653236237792598186248691081369956498762424249187650543554123163429342752420896235398776634283607343332005987606022260675975490400929321006158300976165927744386104277065379734651340364092880451424362047294289030325439449332194612827776525371002956125805641017681839207991215211773703371390579036678977550617294866683091674824327229565026936394507616059982047958443518024812911426923306978009451096626808556237739301601260153225621616217653427993422043071820075054909520972992176494942371490273259995672612491109191150532143322660027754774709787958397368081257463191078401808754070546739436765496579315803437797480690741094676853046201766981233949694095150352078910741884840444389047320716262604041749496768962777411472951931082199396617715183786260581076998631851580541182404253155819240044365552113567574479636974252659125420624300178903830758255935145737388463883758244000589973743477324620139838433085305415802485828789424686422022553050514462615165343043765146538060293157982307324045012217461351933381061415582778228928796978906103960825928789992709682842056981951276898518298165127623386940239929879233724407383576553711862665995891913298862001510005263312165317074006086376166564448247896174502443613347820649915255940859390396463283469927090498655329108497634042653802078563356843942056308629096307356737306930739444310388788280031038132110682321109593601928883210210259357033287078350754228411251996364039380250503332447369246807746455086810662457757118051716160517776008337649486788893671160424627354936651559016610733301342401073981176058954308351609246878589798927623640175625569769884416482847446505024041257346334732509261317631938024914618548916897283292846666082998487966978784406212062340966142900209624549163249871658936573513466526815706359203776700324940703024793678972321767836020156211089219404476821735194087903254817646504645258129183568001208733054814841648363888034531285514596351867055402304698622031722647014447206382381072331807797389402130313889590695665347271892489325591184978570895150077506654049194570926029099831051914933866006468779200846856795050113320999774972063082775764062295429434182868988848983151083270649188186323690803384522032015821189399917233943946670184221023744002789932640011927722081666952363266157131083136483015935977725243741000605076488596485862839584285246309434877393391398839411430275718327778958891561736475971266670009362382890094343320472061891876541606114537307483620612039674663849538128111305162712443455839206170251541289664489402240189142769679201132042567385799134809227595674848668268832203017542897535197077897000496272861613752923547841559516976557814339712233151430688622144607961043312218721184176346181770640461697460034282819864732872773440378221564965006881820498719041778632950281520080915731547951356739737562635781862333935836834201669272670527831028250628969160881131377714787503330669408357126495460959403137870131953795042824425323605437683068865692448876129792961103427122429411375603886569385076190438525497993386484209014261183062782034101429114501503911828438774312764359469920666505440774330841922173030357810429511326913591430913548237717294865583705619294152464891810697748112181346703180110935757749485133178893040094686001776040793683325419283109612719564835591421371568011335598499929443624218569474941739052242724154840351563070518446005255007999582940527157821211669110219511702105162453409133488280385357487666835813467445699081522989410678563341239185696272813213154855619786731268354409808045352846425376701600564790024577924302144202836988528060606088446327732030788047847738895658737476025379669730079731548291282028639637643247314731241445502332282263181710330332142105367675763644626526188822590813102505915594390302741832049085446964972507027522980528833586607755784240656881261557849983945393556507848550167881493996876135025042711378452493547238245622936583193076884293691892760842238819668164084287431835681549577679047962941127031118429438459567695597954694461753691560792960887608084207810907857332412833578934668792219496268381083187433649519955022647212957476274440218371334395378080002411551701176639204268731432300642865155441180337133246965780701582696457364969089566228545637274314437992535756349462644009311557773602645500545637849482134605889276545101081616633735692863801693800755905088586666022835556879984927526996790469768820709437133754308783084652899880777311859554196467337482174143653933914073218605906435212823242190805850126138885916511329504616929427142772669432951601880661234874379703127212788857371277416682999868659656431329939820474734785335492952455176068286610937481529353002623169120191427072883106562269758657136350084959034386927133479157467808758740378766363357551561793684704935141542389000908234704313332510347146547876802176984583155150933672646239316993167335347538719387398044793193563428953611792526696390676458852952424259317016217218102649562286571791919535972138167710988205792963120713763476346849357537931645159016472046358728412473537978671908041150597094599704984439101556454117579441524736815628267497987131703102945298527783731773698389053594532039468354753926524798990003239543980248607914176699757259222443400061976194835321296946184995497808349615579751490980865396681772610243550348836649173539700484919524456556315679719541168526000569654803531698660168185893563918948218558664042475200182855020168556719811444791815904593471434871257349958348596638257227136277584034356298462334393440820208085302994446694848071741372164252027897288324620362442908048282426477001036708007642000916724788309258745869782382596927800245601386264040504013265170094475380828767971289204487440890769188002387715682147374185057492337519623377343636400477000647737257472863800611375671609132042461977404876377986265703015879019852040009883198182263249568522987325036775495529750711654179588052935442872113830008419067020048134123389900701057704980014302969641200508497654848355244530553071710653227774686918871867381285154124676874988018131425115780310380706912942378925790006162809359343513645186725158181986965243055179772556678689000898493852149785309966927205803159115477997024760881317332736607485512570388543213616820479850375014248070425426565072459982424057824680407461567370338300963620622932840312298796158033065725868431260185511447611001631829077647094909946529956032420996646882639295097380215750814167634088717812924975375386711579211004874482235139385949226552964737388798897759763169356787151326045672677734411953013877960802352909814701524167895866438164437629882184964643013293073318387198028654961007275928375417659948469981019072600787776137390883142526549146522917530711568525843857637168648351365311134258161428260278151704243848427512026867439431905201850482238830516256395610933560630586359364660710980710758349735990767600102230464648047417778883878569373213365168300054923219719078071236950473924052196588661759562900585344394335473429087547074959692334210146624669442269871040930841556293630159939367790068871396441083223687781214401855553276735366866236873331864101912194924780789666255463170444253901706754934323588064366077113048888342756985291133755972598337415069843828253105391463354820270476062415587581476399602475485382349967579408379556493177507882782671922720447687609797293043744840471240915098533834493645952570740347416997745434818672924829391471041780217603186682550260136782768978348362371715914453584432314488742764910096359709101682628699397907011589826389440837400653062898189324441540298583073414939263455945797223383141642529093655944559434415553786326377471787378990069871860215962775961084854377056629055820397916313099437576596039362992649523757287054251362633237466508080680313664249078199785735854426967855690339808542823936565315011144669576906641386496651181838202342234064126815016287553894890422752462183628725718426662791611787243277880128120382416268818386864470221078818599057947244581409466732361628072724211913110297290284593435006808528923963992130543595989196658144432046090990473547423429624803684315326562557121001460660035270394502777290909401778564482197260563138385913221015827255115877316650062484173165471171442095201980281926819130845179142119078475651902767052293922965813890938135667717771184889749739858707238785640679757301750260793008182454302631311518438152657536459727130586871934030423747728192208466099920599712253858879899084258455448721371666908151672762011123914688932514774967952289707553029407714544204586551320987894534298652168906757774019018978547956966087171893258346631127232542935927300095908174341295653039687865512944242973206915795397558706048664799848315898862450098663058075879063501128090167247119369073100806186760918649622506398137968844753106126754152168728425069874357626108319200179518006213868312428689640867488064812185173734159419638131282737461937231013444870228375029873017487698989190521706305003521146073559344741079596953858730242709666193203617009929935708743428728246119285080894301608938818385893968855462440480920993147269766982630153993725635411491664035624057173927524585137745115925781919805237532687681319551294258829849849602109203631431698470639759080576065441913775933087911291264484352930247751014308298359398559744452774986600490214711413538189137401963119688641038434860721495369792526112266948394774544169975616412111010312668716268955036996809854437026820481244185094911071276026537162119626556099926805818443546185541321799910336716088299722561902946901597575485828673210536426409102631852143103483582620780919056280547566063940615645789161203202073436857448003984293983293088781202074807684292027961497620617403697898830893929980173319739714992592439586758616873171289570742064220592022737763391432330306662486565726711704893268186703574463340269099924768605179148895575639422617110928252703555355064207093991498024473675850841896027486114395382975730735170170339713509558609337305652901951614516598508398215057363552899581082019805879538648420581907851426706677132025544456257972108042818637824662128726783962357508249077141462863571412898226122933165330338608587985572842378560006406470658908363824296846777620500108748954141643435544476450761897101951546526137637367680757698302234141402564520437869012213408079949645867470253463949019113263434514858265922458464608752348781443025981877315230539586823373909164437713688691255168252407756447006030958144759547958893943938577344943525942947704613360117744034533888201063271740966676006198716144331308285367770332185525326825223945225232593691377444481457894794715359522073477922161735694080265040685155310173822981261929329993814419691737941787112033149958599335771067823196411877982777376222110231975952250704275431864200059045009502594880855411482020420384573457468667372133349095557172266920374198136895315764314284822314632238392077637914057132351587971653133499802601807766126440343920696780648121975002759274601165769386525733749358338643336984730333872386086613241574354670600275610875889007318668055519285818090239448122764906173850438719098912624376343561128509226448560533596169202587602164853330935896564774474828196729723296504168300710844982821878136673655430814190960027441572895622608351327211953198253196931326528259896529711350439679381356929446592956678121488325263095889442621539280964009427820772164667634948243819480788966813953253966485772611237197133891380165674602721732766711936630666134520143358243574239844150242224551482492579224403998470095497774893597227654598517211055753485494255847963339831416246829854304649301511833730997175787598721296378985660941473094462471031481637629115330207782279756682908571640958280604642227014481370631378123816013892372990055047174514307439534577429862016674885939169196045711870148591540709710428887373089535444227997453462389510758567412530690286325862861249232027739146138096273684309205223490759496452176714535584267331363098260151769888247981994772999465324100766075935858745448084298746908489764443336905094346264144717565757107086284212136797017203311328968796394588790887655058595299524753455177834991824910792208225934502534780890833362210682535067725435038561570749312427996123262577109060146105669720001899746548029929137945024672543131446536209646135258131143320559254008379057989243091203386671857591838044232241811801632564893543177372012237723028354772324762778925916698392501293474390954636571118686921534796076005502856155463121105986587326349823841876156735400292327342220496503662589354486232983769024365690214398338672506756876700540073350810533209548522223829033851222371117247835410676141493934148060886403882407036713661612051627750259867986362708507248990591120197318761909604734606358886967176376852143541380960689900365625571200116039374168216696797832422561818044519485406316050730873810662050225842955458951554915543086122714731294565802064334521273001473834026651003618668813938680640736832807064078412812635065205888457008145582859989806674052338215517109475331801491586697410945873889754332909721140772476789647749908405767710647136428801804652511754062932623401872844777345172062716142609375468487639968753161624661919640514416249636809150608345236931739735928888669925929184386775222700716142108053247342964470974795754664266826284071436551400879240821758387229947000010735185736175858909355648979908160987314592111092845106835681549682158903752627372998462670409418536460336446655324295286295024492128819594989671520132127728688925866008066245468771271842253566553213161369789970685505124590054085445233508089896109278669269200930813874692750941652594553680147806411913112783358211906572866919201468268618771424208952797723672137938162675528872148080623790485834594566323951984094937430814214959070772880692922658200456291727923497667769205312607726363434416916414682731588864661954848659413645388268782779571290977546808861823324505348488458977882636950472032830551481340719445333829060732697907586548333218300375370835831636610790289895269219830469279568105671432554554915447143919191102084460526205276009058785229085725987255985890719466583652166124664144071036574569405674807453851360031017596633177605869368928773143717358936289835619481309898138321043753206149586227937927287917464548035842902654492219732665657912579923254895069794037247999946584746430748226507884792286521972112839019994841915795890281264624426612063553776071557508604930271645026443035084812633280811992093778935470586629054520287004591862641394172050449337042361858768529177172666990938452801467102664105450844642203825551535536519749411423188009240748684505643363506873991639448201417040267896319868945937868736128717327765123685141659440492482233233760690473374555050721423690099716004025501613833929395038526795395341099814342137620594105790760914026343457333570963908932549786361698033560913928822822441254589884318420294238465503926604212624993449121842274979396176705249566669389718700305703761412816156781206204443662905360978205840054710067986132351721910962335632016810078277919037708819943083411326824834541515825390341933076601423698124579999374039088985617138897600824719837650959080523025626842834270090955756311549117668119805793784983119604489419186669512174407691621622170797144823021677009397944837504518718416978390677239284745073256566725651371204201686098271110404314735838343786910849553328032631488486355756686373054819139711137351720013922057084894704994124843467789377791690767427184227205464795351697161000731914591180961695570127844621865223171293845767535224792226301746994032692191254292407912944282930711693953251844557775336029630960616891063839751334554599610918791032181976232964087938071585830853410761642581277290975821119225780545504848311251904343057726650534090725529405089163149576438291946317258974234541637722291491335499834571964635433154731628337977322596724799236783893080340789463656202499981714481171177461082869103679403059137247027731039633694399876718207909962672222639287219663809182287468168740281152525938556492249296958850374423406547912655348083089351335722400554616753167587923793883103255948658159403459317784166224028174756571454077353853317732460800885290363558589922639414625095968350984373118187755224667147718059511644431869687252130488356281510332743029808130448689774976569785818017356925558176040576355187577754997961023737035376958933479342743023986146509194183463129471605797388451633936741714611081104885378488621722209737639586192546855311239811021198652520039919644238875805601527931396032813489472915442831934603027867476717740889403301206486837767236126240125075145499678236016539205231345100710752808347357431340905983223437575339425239972002127934151977105918074125371275449062028154321372569321178973375336018349119818180048308547430988944111971710575726441601315901081260958713319077728096049754672037224073655748072974930157443276226923342323963995716807526777596473492325763792893221953821445311636410553818768509350575830100109330601419312151045028573919655716924623184941682319675087815752265599243695950245623803903802061298737594539103024202343356920010042799970940159819383608792067256854098357751509100323495305844266943967891359487760843171167760738987695423384354248493504510778387807516613749850360040244847171490963329276203368769503141867399123928101719919734797239703990401384499116666219759309004985031194304271063666800700603104266521527077639577352378118540182885679287413179806659382992005903417047872065561332788742857129183413919853497766869503850670736117788897147911638037712463518726256553021168040579466635802530919251163144699702044128137549428790675299937019906401100283868042603149446716002755354957359144489576882198173515844001373869988526134528500231790660810263919181048532682719211236914786821975843923576844398903245802980284857432649534216371045512826151627561318387332694673211834707423860648514693842487257092183240526519215169684003685382481216663928144349978117652519647547944627294025127127442025928003907437691129052078705664832411487175837667835448195329531272304365925960095818419270127831238804110378203685340699685310618538160196799525517790294570116384718227962093858781595487695318184054706160840006317192604539785004679156399837457560086441274867820535669077602988860431860033122034729816708729815186675286652540563876138047284246880825959876184545831497243743855207882553395746340648941784986367103586158146306023528622042339927775126624698356821733391393483011275649931215750385527352963703380914250327985323786573258353407749519123729219407733809655895128729591626280497963364545678661397203120143499699096452565894156474455483414629675684432174717186058516263976168548349860101956747807123137947099352269506718272519627393106879060037348580770145822180063691121267746624163368241543987766184475420119530633706714626267613457867085470819473678214383765673729853933510092854197868420978256257559001879740822109228135968251527623687271583896055890762223716712309126063625970279390721554354379483657788280030148049313613945414309889199791118903120386791890037986202917501399633538178488222701775433859561749028355182684866434783298767313986098091756986739800159164900572143662631601876592338788549854995801174034097777580951940176447221263026443761180540662463302555448310370324792654641545151326429765538959914863028794852326633662383574851431097019347455185633113498980896656769342206771346024394886617120082791681871867424475787485091148434562800395281660095965013877655747307129283064740137840241188631503919274655277151005767071121698929780915954532258048359703646955561800535950332307515312279792026678842297111423322351658097629692526678605157572109602819245945515582808814602282038327083371487728085616731146862862775112767165255063612662617555795081969543961719067550654838067945733601586569184184563187278060783502719116135898736437509207896053929764360699788474437177898674661974517302353901201214041537566267719360819995019268164400246390890631953317582477450512821477957890163973484955163777081903934967082956150432922419853045336695477529715097347234718435650381281239370965599482396968979244053503716637585047366985162008173027437827856532517879834405712510072228778532291676688109845738233040516703153242970431238026289794186602921157009570635053480232103980254866111343259780797250011623061560246159663262904805495870584631947302882773527567281283081064445590402666415899322141019278383433964022918306038820250772115248022234528360464307750199500939788277443991518189022549662946930263088417721984232114825507250138353070808610490067115739228602270119264421564198843113531546415072522417130770625618917945046516702912100645213170686465221331070368830593334634303181805865058079854321888691644788304458119812439809032730440738853597288248920566277540460730889650895121553564350889435987917581208261198743139108769724463155662991885728552700781785950473439239913969981316946023218061453320070676780692547491438831590362911754660292337223519833239914799948888787522687123546128495628041057567168627665376493130252835010564315652531746196559395573014385050646506704032150077816917920563172933762645980211361930828592764915018752799487844359539883332744667008459702170430446036375192966734066519425553398993475898627441363282926901432414182842373429919799076212117745627878919885735233051470835405980551102253886559064771760598459815236005564822272014788485598026745108443326056295751330570116200988572489333219857682357173517387289124861804244356066227241030575695790396442131629284042109563751747691043201828736622200956303889811856189207891707409895406348756847379430281850118409374324339306657349693601800758800555767152297916208521163297625484955021204244239018456198576916325101106695566660696531215794512342157740342737808610986605001701821199268978394501872934043391417725486291075457699484077127663466258394065358557350491441697280551549294052708557312055679497925601337612168899076355570321604771526015743221408938649360446145598210561684326073746883159842056974784851168246860566589102550754163510610097254196785113922632960151645271418117070911334132756400590549271807270774517819723640434483567115237016706544342771438524833141448112035002308177821357503178187283107318986718895267996121740284989826873452554109086535942462723736397121899754477752437191698740759233393763911683038388697712720271053572491636646038676749458785606611668959983294037841981464145352863719978989277672234473437146847827481020682517300774597405636684572659308283027735485595296950860004879602550269127928055342222776827659497681214632636588911172868550056808891343588139756400125479588272348055740804183203050101315736289353671222344601113024162625874361856045351311908749198550024709875133364146420582497134770445541746472237399210990443547559484319082196141741246060659217509975794984752366242575096339062407799574253109281369990719125947072158684945755272946604288645441181161608384709978606199386567025078363602846826829257566955145185930839648329359174273043424602836656918903051408058232635923672254186987586710317831089972103349005335365039363642030972765234874768412374018854833511110235128900386820283889548124394582489382379060060124007753965740426028076268259546866625811292207222350770037129820205236646052347960787298743462192604096805299734140297516900619335354972378409483699306730402474156465670011134433797333942390833462213422632076908686361148653868071507472601944201068443315636230428564978705494479559932467269138977476966390359751580131659559752178692527904714972569473727215765029001496173462334940707589759479438413786716468427700483160126001186106184296878441285966870809080563090763767301737377964449513545983377986210556682812967846549843131926169538156415058483036253221479659676996342987943004572378857428816380305781354521282488028023376142642987288595956416641537832694729060566305332189315111338315274656293653228084243042276891872769257801844688976653708474949199684275070220242172174612200785021453676585885009613261338930521374359936069391732433873460919855078739863738684203516427434707670428151920433073050098172518171230784954542103269824019395494007139176464365549374132879634010646452397881234916775570468354421200249238501680120208659161881998388817912393048668284983050204608829209923006113601796769528111960495529434602544744263727160294094820456698864414944103014990917044641304891271121675188609990018905076394540504843864517838064708017474966510513570318033779450495360945386987153261651368085828911503746911759647303510997356090383986269770149553683590282485486251316338010422262768434136937768100311574404973848719951146435165386768467040862298127176287300968139064753697144218099757736829810161805426588886545573266070347620441967550857177896980863695094464246570148688786405157823779207450865858134581896499191224579445831455991272205184872444543932410273080652177487193092686247209023243103172613774714837220826917944311052223128880206041398115206296858411037110027131268818900357275796683682865332817350949182408317894686923494862679104722229234848810575085132469795487218620568378303569686268727695504377850055477159237732965003021530167856959665507593317966727579044774961465224615435579955275997412019095470121110025900740634278437749983410587499508230675628442913661519382480105998780062230590274116369322118344920421941582140543322744675314963441231109220375464327008991871987789557827710823249632605597392238919605563527961994953153342872535723960151267343223887855280139774727964949790932366499401165913205377449658122329959671874291354381178726241095306935912173641611104898956681712958117370958283620584377687095606602249808487258182394194342222684993880484887132667692539750570979269543385800048761400785167722811622385115008076666453333760780982360656200004021953229393837983763419379567130867723257456680669342991913553500553374796056863864591813988795790746665162862219488325867149937541553939375812119296525703924455318042564684247221533182166987401007461873981772646183189289460817127981597443526153316124144507872331444196035232718457282704469359336118218714385414473138197851986476627392585954080221011975540023983461279655753949851373233726975174662198970713258742433258161095412141831871305673624745510264221628132501851851733304826899055873424598198045003043070171059992939421102542084377884976966273625029256614804066487363899427117826144649528946092804743181520154008965503729577327269614803849148954006271602576591928703068997815040673745143072984698401283536459212532513754675580264472370954075852091030654726022633556911829716776592741375231613248514384247189234835461732115008481777212172034719710209969536227841398310107122916832520990473552943769534656254784689438561227032374837604820494377072863523707309744142399767918274263806235715975552893948014865750990033021146542661331154275151323150689951076893685598449740092449336481495386567731027537447368988753125011006011518053934537371279087642729623473803494496289865253031149463085464304316203491781081240539958668341909970746313251927616263705142325515182962807232766823382749257793600431882470888413124249717216858285388689125716609924732533226391610449195448115226231629339555569674289089408689808280882527812836191161080134306496272116480841121423663976503009446151690063049922969732137415214921289760664854177371616191878250574219600053650305749833005441161230962908216104507406833666050087011209130950712529932633053485808575744265250304549387739407684381775033350464638138294378610778131499336430732355462766176287189986560173964050719361152782209458035594304921204635851938536419598864335442369377617933930463645063099369379976391806714299921192074072358164795153431300867569657899884890252335315078702796943555943567257085685164529026390533620292762624817941513753210935829071629465045417872680048559511231046636192555344826232565778308471021468212510602614574732204066961331066704272983496705502872841851274259105005209644196446028211634691623561646602171713392068270217000872446228654086188937791096178283429529286598696144989554447404507141472135520247628611937418440069634818524059491703319366282533968917687786035700042582518339693336331891798818548011582226906696958596634219314460595666426953529995305597904406117121313251524642025159483103260764821782069802307707781781161026113183148944470244466332136228193844157495163302105128272846023782723008491748463110197578269836733196355205756058075396918693673903119656971054588323523805876802701352095927987291861170613240408605629143336276216059180056029968225896502162349872813780067055329670084874888706401034155422768787201422384904253349442878386034577975477153109412960428964546340728578011010535777620549009289614346476334795889968472467189495770500822108613694747291652983038881187098456218763810587076175767115644530834699968652475779096236812220130030510831615696827986938548755556955189646457490771631529880150644989326857470335749392620910245887493320004260798393325230469744356559011767640833671079104205014216197175715068463277106596356896065086557079789159827573361022941109214819733651449771645085470674141794316059845567441249959934783940169086322856571084973160785163940432847415284649919345703254146033773011172481652341559866813229661725678501732640513298891912473849909003255958444205720938153401815826923294391534141024555240136516504006313080518514696093413612438779994328636345548385100774461206950150020249958957850760764865001070235538313876783261559088698691415830996221494265378046470342479636072804802379669514113678799530523531166259728202922979878131792744829167946611217039835090815488226732853113488862043802382386424546101026988838814458232088609047709127806141966533589850125661183860540561909718893210539543400943657000352487596562262719861512844051667885519520075508179044210885158679258035504069991336471159833141925280476622268273447278580541309641605828431642537113093291359345122777626872253653299526069894574855089912655328562084748676994808796028096258357138240007945048954003378990840774969412049233609011189489658992792257663150040449143269963373274838018307894260903168085813951666936416128978558151770816276621034285555583651307142635072845065393262582480433557171499836349627410258970465922763172819008443146090356558385368625262591848875949542405110398818553721486301871782834518704212529755243605254090863717798568455522332842994377891217573359145911371068174364144047797373331498097377230270114155186879994564913634666553298957527315930990586224368234642176204618825878601315920109753929385754083614169761752723284895171038175134083990966467168541385534226778145267661180452322219137107897151490387233784511197030401005807615400453088926473241120446478921976167914980853851851206428355661728555175636235320617341909279986966874197544791961210866761619961285964533427383642553891776430525729657596717889311972264677458502152842730572026603102546516050563230357037025070443737831873976372822059117851840400036310747307339722047170677830917249510588872215216368498837544576494731475081642558692522789555770984494580129995541005305408285483267200250601237483791176847811088375195826069774000188696542906583123901965959911890874472036006013481514860607784877714651380176000332415671429224771537931747018420379762405401736655956527706112003923829793836072675698555040428385692682890615448675114396649123067055054886000069666242662012435335756098820883673977110287590188068782066497984480575548758560303190468307353586913129894129331469938547657336230354204289627742891699173451657084456326226038300405401406684082114701915499987360465311191701426170309785709479668664794731583004773823495713526733349944997150567459612513695301071740002319417068538598372054654114377932400949289504309183348250299349250852733311492656587560968318967855896966070208663773871464760304020572348107722530292789546661913034849846359992913276100828600600258667662675088549983077241832105689132304049770969074299695864835041047589250057976976128381602986544728852080774370541444048267264390774090171754071684249078444278595996611313411380719565023881348073605181809153051400128770569059144028431471592925451567778013545956076246765181037231578861451732864675232028944527307185110424538484821835244297545750477051681006542119363475048149747216783457548558891974281123643076669333013462700478776823900267231137531215765920351731144821756398042273096168184170807326777131788262363129240517901130388589895473767390579595036923886475764098387700266391907031838615735179265193612635789142310308090268216734810006981177242478228701031280945644382318972965678168399802904778009380516075487861201928051569151230636851506903168172603216453966568692352031859833968625833414156361496828123548860483513948757011802659128512868974757498111407425704889696111851483808205276849281849405647997999885868399317913232328013556707422178153748916241016828136046506260033834738767274037548091437521504791276348058631391065077496688796189733176783964497401207448961303995039556339525017802098759794091210728053724899911630837095752222167563147175551058252524217701490708570087582976864978547173411918965924152988247945400156200590483867666239413689304133618164804948455287612160016044271750524882498270669855243604094443104858848390936941887682020195062087415545552498812041318681948390906556474945529925658481681106895480419035073366724339282391287621773048337132039525667931999382671620861140737673493101323394117306086625104759130104411022374685848704151953590043498663049494964248856997991732750417428204927358242457383033672301107386785347120960352964978955682172266272714888662552038920687399163829551420918239931990877860031225077313367945796145758017482991427399187345591179627708186166922782652333988636343500863322166145378833550073015425992052318022609304366800946929598788737493015792035797182923178285812860702760690660158852908111578023811220932895223983375640830514852622166810919010324971811022989126070856849868994791419112773655518449230527878135762209774841219634456321634748856768151445385172393002199700054875709875385347557499321928092676986464215749172687827822554457013903901580093072428271169802321520855724201508534979154388395079653049390857190330820524745457742434094713150270609248528072919337690420548054109032893442040224977365119137534915424659590391996864155329656811382841287745585979573921965026637890312954409664396435850290340232534977582357700482325734467900257053567610599073120296124027276637495517562885640214131268618243213820969739542593903720146797397409350046691374384072736546311770005548048689574773376410668656433182668470451237548116449761695705573808852717038486736054870709690938192706942596887196829504175639801178533668933456439212009800596549977832222354484898035496290907342628454770528978924044618122070542191303621819009585019995245754924368361601397031758272825921887946908618724492918400136930340003804630618428482896715268983496993067112766170591350283871595167426489635603807377369426179178468221250058411188824335955663157914775212031271197521662485209313543911267512911528793047181786059652027177842079870526084993610828047776313641901053439626878702513082653056631470410147598243659096482949416843531249752736216551877063415420758648821017662300641294766386894404417134900948929814477481369006009873073691065450115897366922095617736468597224176779008078002339023313282330246850798069986145608773044134038090426482778459292730695003849630160844719707885999153685766189712157425060126227945682586852715575795374319940108004513449868355816618486106664134484293546155148530328498907148357309166997114336955860624102417474924371189601179368009185188374918386784871899458981558003914405181640855918896842382033776671350091704620785016947205635563255507306129317394200703065025979054404193178219219596832315023466397811535789369788299540373953364443888105292910572360106846976145868959798443774593853619315724147773285505701578233355184604620761635718108677498894458730687274338072217870300781166433924468488018067602104702202758472301182989267403657514858194134274720037724257392450899719338566346059833239725234019686027590965420554248536024043364373517540903759835460587970422969040724026879295547548425869382298039063226248312344871326741305898012627106253507803231660328215127536429573858256955655801159157553236107347375400322341185932912980303842484164015904021048804667487051430969674838445016199695311836123324880346342908279938065612385254346264273049084926211981951188367315285256118290369266576996773109001976265872910270513928557365618572532837077389920167555802106653929477218594158756250919289003653951853364787929654583384593421494046793901935432490527311204933974682111228724896844578236782116810865615940167035764989698941060691314393150455320651786622523272426741631946986150814973740911957333158156934752687515792617088766894420797647173916067681828414577451370048242850400095649492823911347673484577346054645428434964209313102332038415713857065780323116450238098144512837228481353947311954760522493985731201791286172921170031532490523585856945381254262129130528668047264989870359197097271873761490409940587118100279879477701047105053380681524670592378316282246824863851594195487438173470101594789401106583180821432928686424981702387944098427209990828886520786496675757065226050985150839271139847833614150876780876353052231071133127542513308800211031995592760471408841151837602186327819718714257630872629261124238820667149918277318119260942534411753719779690611657386919918262535450978912060657730882076623691938965775562547409874847872544450180017289070572930002189365229692456763734115689607123850998204188448772578315314492134450676564275093188244721785032986364642895795912626294044318243268835453319012620205530854699382302193489650844321886069652654279883298334663231141850435812168412388465790185762239191629859229411629064375269102783769173164237340599112298474229033098986852483838244961984211301944962638759723152978466365272836504757434992285035676341011905438557795935274169362994917102794969931901702312705885872047391973831641358120828092291878390565927396360223580024238308277562498166442307034459952337248151040031539054896474942286983101888883333359551503469540260775848953841409263378188867155799674486136353862141136535133728281030571615502342770937285742547676274844292845839106652199571125397399002000235338077228091674871986342420876603270083061812369106010366773193373134700779738810186369960064665026074719273541065110258563504727677738633220114232005267763965154476668746063055427494537832749186072184415005482182361724504879158324173440369791756759264061084276020442685217640136862244326839230430697383268807752461580952244415482803300842464303900947311665522671034561561504085364204845043735347005579562982404119243303839892723637215212044098766352884685855132477277873882516982914982751237558390368489174842499272450634092590156354207449498774331478625198004961752688065459311883243818110547348565660994144302462647944869285214979715537690909611538836993410926189796237033274575889823765436428205744635703732148452345725228704722093574408372978136071010808051490941547884777773155292113120734834974861951130996448403295033968590253274944698400163530015246187944341364094895007082404136540166189747900699553154797702618829162113696343540406457264837100126526653999154464869097101034353535240992682165547310172485646945833500694247606883376112929957662780947737835649430782575265658041703103271195827876388614739036372007674240892689939554208586139066135378119533347650195111931199705695548185695638016658579145078568292798513406547865021951870259892004405213007013831043080065186488383661649950459411572884376069709217318613380945318648500602220318689905813610630190384805775379195169851533384575022911368246972829840975879532569760181292146862199716419476778734843079114187010160801755611226746621427653085311803962385132254886233435461155967825542270613941562158160261580988155226784336333031799087024425101307434932687827444249365563925728307724545466613070791681929802234914465046523807296724551545910254126044805797063561900322213866025236705610740680928827455359374419730832557050622006069701932970849268539084064134743787450336375038335818032013083712477129429372772985069895953764449489175302681776009636598649182398442795210268115413883476948168646805736970384105825588961138033430563430812899920955228250936158137615823970758997360611154183739775790352453231016811899270110123751722369141856309423551903620437735520035612606443202167882399932427357304446328355752349376853142484292062898174505389808890779755189739794579602564841974810093093681641834044565783776235738387670997733651628213884513094735235291225348814175171288860420954146162154112487671953218050899656850818353328576903977102035349757828550284449366218178690145107414750636953650642712516779687957468753236371328182394218499500425343638312518192058236607829020981120680767536781544211233334355570832706670288905178196763781052975845952622383818402609933553480546338772963002505727154657714762393786136701509143503988946201976120215659251280216199508796052784975472817415375557376495632864394315115298460014960201712176516502781520801361653990278459048688497120714484843877508927165191927286548361780794155346915012408421780066850594722190103321199684387579826970253920702495224764019409263356135562518524508725324537936753179783828453675714764888751034273546756625787477112889119111120265997350001616440229521260182163768185611060712821019150214255070319704221947932960992177208164015767369696476404194806156899293367604679958233933336451878534437225423435568548340572231178344578946351188146791604685548134508905510859854149800528984967150278062773228291939716463239723811853224912566709721117996846033004517830469406998298342653515647935797448760748608305977011199801378274129816084982618132458843165194526377386939023395439475843270268223360393588236791434120009372015806942126044654802174844867024616199855554097125051808678194361841237616759544390490580338222157800459169246925297562244589338567251042797193300507934067594301995602225183507358461587327249443375081830268908446647452687409493250210859017167640660102851306489437591426505560451653275029296525774059685621459030334086688059226752506265427068080400743561638598213419178908833349345707989354932155560168902726173108065772085604196100711801555199401995005304848301758596227669400444657276247163535396498909249962094240985595406916308785426249011777003283870901698251261719753310258919283914749094611439753925603063740037871463403774270517353782685275580323497590630177135331677260737677698013687379130540595449572977107973596376614925984349670175110718689592258449685255612079443995236375450534550526546950692382442793195811454936967169601551916751550546713874039802303067813602381205068502425946672671162768085637997846508889312815739099384181162232343724152697333471196933779942531684076744912788476893336276421480142199687804289619855959493909912744494816529317195461149286763261736669011895612339915991046992428527950803688028257483091919318071560624012644286117276607446164669566696226084979055278605542993463184318136208385911380123735458577293854386400730293098908938871522550594678081763013467297029791507712454287368489522867118761369026851623157918415270004806808277460376926483185743669221419828441485270877320627986593993223825619284680148660649559937083948553756049387172138486467087443709732465325939949565891246649708097834106159949790065633374603477581693209917630052240698812547424289180583986221742791784248708342823451230847429677021138860153676124046541435408307283082398358304870544832759724400103573510847734853617614307542002192226186140048409524732741163154611806490073169462591548906693004015161135066965824013548149138087034539949046194219909241776556857141346883814808502912183128420583786731168088132044511368084008483800250804915283199645753382806550546627799095989267530051321574170418785358457678705412394633105009959788068242369158890803444018501715699256852854960341263508015430982751456352128270754861834816086495275890204452975501370899836847269581319115345695956298501305902671260914156210032623779034394086679632791308413809112081454142501238422855893240535773036978125425887869927358746381441380416671493124643884526101537696852997625272491204258933559012325868473583431052144014816095334777652327219521907582633586993145450871112195321296547540361054376687440334106104312399958790891852522999162993939510825302858190271111392944965358434021516583055307395753793147904439299717218742991001556000214254477549794624584022977717099461370296327038833040135435487846402417877083128025824327402276233211534011066097330161070478872890109045941628235189899121785801977640035056249999110463499530762156943102833406022869031735199188709859881624293747154472634409833315982829551568664591492678090479550964887625290293306383670836921215375748496169300505785719923699590498776399797217906396946673037837171070008898924082548723369156080532258775943639084551012439483242034729434511235287610502635491906509608679616218676450187013923502817294831870872240078135746175275641716586057353994527062764812263568618741458584390184178813314176279251788593380813248983377476151812756838006886356100416624148747321773985921774629683924881314105567378165842500868202844709109094020845850707628150057559263576488106756323240601665744808952979997393997808879821699214393011923943495783667371419592027162629078006740381634280186194235321193270096199497732373902325045115404016017377494225203778584492046997150783643700993536617664853902884380671213728232884943845719955266479108039378585285249640382910688275503969991930224786526032488866197592761742409347027942117708984670261190350690246912172500324116735319339168815817932119178449859330754907864498641109446271842562890921743537569478671595619988122636292294931821016026373080481137762700837094135194378882631631784924814928982433364426103574204339921278823740398326038740637583007894960389531549743031350836062019902338356173008323345964916938284855312386855304124250627929659066596516785295014454474805823923892103543376465668780536806394204009669947459058742000724113826251017574548406280678519126816295054649671246809451443096249955698716194523541288893758712142089137524281134676401550853557736685208857982140410275492354369744501266835870617219454044590048064172304303724921279383222118837117304650221978956768636814632126504460405832097944532906579706458693560562631415558673824658838500409241809094482383917141786521531221062077866221854951142146983836300323833556176679908458025318259947879571766886580865628551413030409992167309096847154269405526184267601721772735676286671065204012996068864326342725752602434465556212082518589986995572095171392299102455197983329394306771306305610995170180943626106737673436052611278447051691274583739866000809491525208002227688831849009000273865060155488400346341473944483383015082187760688815632265513698470510257594716427547119177463631055565986795740378013396709197003328329088010893718607681802959701834007515760094463595800072675054021978474064227393384655964716779572413137939281759817932829669869635941687514059715806595896503151600905821409541243079178109931512456197778814531629061685634966590809910649932815664531344613754573841602733920330998128279375105424797759329583874978474363238269250292553747065676136070733571533413288466762403933866705933821882098489663654523394828127819644876037576591067889119982591198690052499748316894497966932624605186992534676884894858589617946521863825491137968109351846425388139502851871710798228826789204814677517948725028146818123485887939837778086842140078980099791481167000555772730445860741085086225464100680810496357753518155107150676284479839216375749838793177775861057672448040993873276558779503022032312335543025510850571894264615849781491636617308577844671198276988276268043776671182263300119009467680535455773885844883700071820893992838133996243587701413563679325277454156202747872731035720464682840241249430409922166868118146954439825335427588683968566146621215478118359847659306942247137475886416165200749236213182213577498050013085840482085511220324987981963216950802886980996134313093246620478794044939250670121622919997256178250898899306714626768745682524796616815659166065131521691179795660488798864923616031808465415971407047823810658026808786162949159110068807783867554998014419439266251395595701890015453573535117839331596604497065657179381534111332225856564863059112548334867621669141764355593499412672577416272034977581217249720166883562882312060861015300093660855142524579676357820817290230031871750666674954292897958441446195442738619900035892161186302947307308191974496441451317822280731085934679006471239688141265619766556490795126592637038931471977091938407972101069049336057181155345472497791533974522126284408852582615963713149928871914666945709015955033128122387325961661832334515615408151631809665912868998640286255164499529910938835126869114139502385699974288519828464041434788735767525031820439014915750089653207761684197632181662999009903643742307987353831945262344018700807351304873387032052164472135117095068466778573401227259759868462195443730341289783486877619251750323996108275471806265418383943366832021020587877246006498091602463938480631336428773748682904314770704175511559109708218099986088784279512571807414058272384389393349675496887636289718105116813309649823198202949799906937430973099396405985195956457038431237256339211575652837415357459921379729301713557256619326028332523320589386541375337727085980024551499434301664914224740229620909620641541734224633705122047127671781524310189450543866841061525847980095392687952427782146282348604876904989766337276737513141863892497919452501109003403901939114286779113346794398592149643148121025052575271455395915256946697356768308563382519152980479311198910528770917722136084608159596265024896730540084107395942677912283039563002493055861734428972025728300200154721396996585388868877726230742950412491999810615287343106493559740781896362521160480790226610650901828714727240714328214372215323816711127272791946929303399175061837987391557577864190038167625951228353876068456399861544875185872184447226777541495827774662990954461563844167990786787217324472042255430317912535720175682352986091638708883245085438806650626809676433049524823369926901325115704327427335045094921124239479628773144946857531368518408174357889234877448430000555106758824846612246226603987006985851886247926307565635196553338746058340896012965421856142105255315874841654144932679390206088120490095411296434519920539876993353640634901214647870843623957770128871350941493113943396120172722530590183579457178789342942845064061507437581586640482104132498645957865884456579109608704573945746516009103950229937439912115257417795389759209373476708742808668352544854994206137275362838776503222100097924693982369152843407870054969861582685209174212638151841228946800967941846835080913291675135471667962638982849748542989708239601525167345361534861218701916388986225039385978696495914579890745960637562072464558238439195882338975522507216047084210526810559072557385753390521187072870282208008633622469665919900536353464234326870788918286230999830079778955253708073399040999622550334836720818493473427667512357846501779209861988589484012877090418815821578313040927178918256030201088575117803810717732734338486440986737310240218817960270837822789126700108631745362850530046319073781426003865691350610345416951798902363847421748785243942964582083314159414070851878500600336951095850952407338903045793571564149151954999481515963547672723575302588995119490950934806610445316329882989833170078085149396070890281968854273129815101918160842461720018261354499662554265430515142170041051205178538007328455995533300413028503298314928487697459445644526466870212264956529168249673705164197842979081683217983512547144032583412494662299814296450849682933926894993697584649218584595874031845059419849477524282891290168719739334826137898973805147764813764713649542439902818617327455571320674994625794053572031840546981327215586248938504941073760070784948653117445832560865175301381428180762756104078763689532673358480754434962467176483774794277233506235803808448922055463216725518010999574462245827959169745307365650445822573867557155902672316480582286986565896158148884927983612205927699394090993653832845268788119857228849395169958726831500227613213048738708342955487890604053419512201340137126762214842523731413786128757386241111810532961229682812513499912629541360022576113902823864430787225879640668694507567721973659798831760985583395718455428419698752510360121045875333953297288522873620942933939525030518923767205418389904617123234867896042683599624497369682630482650701822207663484147784973725927141779463327625666905237091584206563590411891017142617084703687434081861800049551557233537429773064523555419830849695671393067462173482000986441849240955034528848578903158402333027192152637512347461924427792103810225510443523694062866493751808829870724014590385317418125900665945809630013673472646410832892072542750030571410895591365574629714899522479042466902632538328582899283842716900574811125098249910386946027356659186101275454362764674007114077902308734239031494231204335487485170399559484788677656471930978974021764921994430835661023489545269413105620776764055438162416305993078816287886969828951439634307085268032854377118266914876417030398940717475981482422675272012519251227333116207592705864772918097931378608319996510927806048740638020170839400437641007454121163386367730989822480793463439135888858782214226456513571866719716494157674653082342110451696263180606901822253074236606371716898337092874786464278703011796557948774939014352929768678308222191012022285518808828156463193187710537433203201176387674534511880407925823619964820281980298969064669694405669422009185399817063935944681825707818233300853981046699544244517335266235502993584042527472710363837225929350509670894285003764160139889985024228322616565191108941458764095892763629280793009647790486218562673778445686256243471821817877504566147621385525269245453000902965588523762609353246645941460482871312917368494000171233365320316253590460125635675105052879287768297632188842867018778772703075740224068118307180691419772586894719309864733984461271824822206089409139142247840420352214876961056559180669453909796326088842929955843996204682572071084759771744204572354709218522118027837950634766734340599296071634975544960443315015104862582902194029709491874554343683588643060554463023161443381894804485397944909554437035590104776252984410241559619826506328086310095590824066400573887699207081553556790391079468959559761740615618408425957927062456691849105706016483911087593711631006231933938627419148729703265004392156074701829352999484065534547188305843530048679267014671800041445961684366033861789425930451425652801927095755666031165924180796309213438556094320113382647245843830511760738025013206805357975796755995909020102379036477491454023949621354326147058989782757768419115382640636619543724333148416644929205762728005748827903056122323502517412507225249542370217329584986238486799766013297285650227870093146793636985997174829970198316755915913980907867953064685055945406762387420398836546584634153070824544236548443396247491239605854803252034600168392082345449709996941701129346486527779039869632588764349491888519386058299020087095222871625343206138564831146080285179482325496767322440056000326166311771188824982503896325411640627987786326099453331480403037208659274446043827169634486780807898580350081922956827724346392706071173200861595329747524768359232135153778402495791593340170387113431173804229210979712986571100143760946521993595602019340067685357147343617175750861695507351452334339819489441495511812516490355440589876639353064257739914934738238539056340828805240501003769720059522963998518192914189014001722347926401153354472192160787714934953472009405876861759717515615454801367214902125104866083867113532841912077965116969567590860005646547578533084526778808352366461152434922966935703496444629604854478389660721228983291851168008030933849781664235664795552395581231258885042549236607144977459983044580778556766565000535717639731424252781006308238608097868460652455066229707131511497598911855628220147941883012703079993219810673846022452602805783645441994068538499444516167387833337897477376429210896897864980570642189219858864746093376007663761138417609719866413127151620637084019911319999825023612065184504957580070621711115454086021971796562557427002671568324133649669473587544597844831671981572233240476205142158541111264249090694882607189843384964924162405469522646330827400689138257111622594405100113319960244833263905569891304720258507462319622577684442557305763676098184951382046457540710748548427632430115391344074114308575051376602966838687895402330622646496817241777163653873695232352485720286288762473448521165728680758672998086345689654535171205233819878247832666664847651049341807112768492738294047331747160063225807278546284594426541304657515270749649850394573313725719222088697276551018808345942382669134884871235132099756008208085890710210984490671317259884291718215822088997683657744507413823144630190352702295339970955634763878059575728349567501967436297554792172158647244324201474026081851741041450522010666354881628995522727574771277518580251226093149152441005662670667057197035037905712845377457051656034471572960464887175500859091188496845000188201954502732005344848148792919622288219887076297134314282049671556928470015310634039160833176745915774167292579890608100656947180372820232695075156658813321553297350939595353506968212560848622639121228246755124926590747399447762457658924032648833044465073699894188757289402648443569212914038232560326207510392652045741535761437310531152531495077185548191186635594522438633758763760371312126358519058471847127850460881444783683626515454983668016394207226066145950949770861238122255171699467011718143832597850834659312605950301468225315144950294017389118503282298707643941404734294376945709388289432181651060908058348493656467380372293784681158249398416956474045760179904840707918452620498706824077140501319681687424020567465066949326454367815435573494709386750945054075295017845665547901138323566396844393496221787284398569134413817928147281839684893146535528002207564028083992459741912181613960842563327860435586141155797151586760918894268062872769164014414415952685907312070029760303467102646272079948782050225623682555092785961094812525737487297612470403032428158562065308561517761045719352820878888974948401036318774035672551475727396188267524688323823428207688982370157082884725584533568428017536164587072024084301899896203761275351726346811862980711655999696883423460303326520867196562719359788575124322202207862161319936833310787414076672741729773082812210074683797086317753052806720130546187278586076786364835045785944516673855903186337391181066208914550269068628371550158304384535128183237856937835511910615591281328576746223405842948324365333998928125690137368826292984798149277531466740412873420932551544607840953330617343204375646402043913456399388059637591302717749522942767225469787467201978944811490479777006855480157214949590361490400014054081412726011505383237898532941045221130523665062261134842788444459404073386481721930736057298738870099428957895859972394159524713076082997473306368461002411932948288867484030051159799498427143025967842440055804004000276946858555272358421630338637444554210645148646860364256916232639082735824390802682191706636690855231475654569614407507251660301167302031780412011814479332809872260884664524557172512871761256326964049393192653154037891767312941933525290381539114864917279620211695249510515465259741852271373453201486283201322873688485488734147403243967290832079063965275234907405854905268001531966351517895781071346782993678882622225451459585986070277415147783434876650988615019430052292659212221913623996854720885843337058932601676620989650559346439192112339062144904079026938357441670612308189498373040428879990292192550654149494753358468211806749897812486065079605267031689431624397297713947565457000133288295690040099671426786617331656721717239631301365088394699695016498653433848714051364797378978362250663042425888604210519518240818224877830901618717351362013845489344223714162802481062265899458806011867824104973887267104459636710266625245997750474816682196347000680227426055424845722917347628904573710805186021650898847817835124019886307834824781794864687603419324252094335717688164833232074594827238709271780747143593662063449804054821881198629276889429462408678891829089893318056763025333283763242133684821991483026552950606467493565610269735443143052788167239434899240304907902304186677788128368923870438074465261143154984631512437723049194995660162150703088782771523641104729123683300147335031170971754152198752926639217880733256536049846885117803048878357277455264346098173315897862128401588082607308740642051532316031106749996507146393644942011999294957401070551250577662170210285671588878513553522310929552561853580721397918430778641374141419453958231240707220126197806965015104020523106370794128924802250920094523719222720425209541987925061839361924157901299264925786969341601614687270114010863036880464920201629950845589384591511583602060664556797995638535874642706488830540875061524030877766372415763053131714437726327491848345711609405995812020891005791027995102184079876525807435352522484145840596239863372998509029293227806704190017922191432766477867488358798664901192066904786023586181170424596705722419539247577546767705057057818940603530468352172893150768736317543888474517393972767908032895491880669143464969318287104139587491531697978195801988558547526071765988193612853335617582908552521497110724915526360382395068597460914287019511166630781904789053096883061329498800854009925911832952730429425840023427176494623062115365182260371561195399371686231792995842950871629903859845823764663087618807590802789166053116736596668202497878463336478558306210186209241040627208457040861596119131802654159737643178453654402707938559992327442804306537392504434386878602164116123206129531869330060702151089793004567150409612763599836361187448644865742131499651062259005861038924119190266583534185190041998544950196822218521257916426747079767876456742436097784172922173412934580724240077627461048028987220306407058932775428592711599746603483158979003804738378556288435713555845957861908660369299256830967562960416984940575071955671934276347712060511727128440485632220941753512351595359772763004863249321603933247817788240291448032397183295493784108338772328967437658919719434551099982719673516902469697485318850657763967595321299116887036105348103578754264267231162334030827954358892703565939278449191292448845478212433845762409423263857146535182234454926955978380247722598017242188721959327665223753784024630683217513756654233097515865808517961070655746889558363556408698419304459612104824507745185093365863584431424112435667965162874106284734986914957276983408927103306186190775138134056144610102992666752523542801862694589160747546645127545932557278984004045631632352220807836090510664642970638765336460807707469158571734372561445628973625919799920211515529968408592667996425166029204041077259921975675924617466746184851104992525039060324911358079636948617976304680360342439589350426753896385715556967677771835769692237423061325330036208635986776049417448582116085472867093903580950180689300142165847699510036943850099209450773911774947886884207367479632883611843418430135830794379930088046397856637564059045595679562997329977324231311448857050123252055019689341613441364984449574783721621891931769362573353496296695366105056741527982994099610691945299199566400522868254766621665470609766942861805207079329825318105654885254010872448070728117344520003835896366829338777703164683266687587570455165673669761262658655931624990801977866015544475183878746391447264350759809323051552378595091331472042999034278403757814829872100864502913361661147494889063306399668588510141317036817300931347518648307817644125601743622645242830219097714184172840393483713749624339040538300586233234552830218735732668004093466502148014836643735814887963259840757917275481578229595492584782169826100708869717444572521187484485077700918891590750280568059420842599721814811237521599674973737154922892760912196073270473471872342744533749993177538363071382622966892465631193815554988318253159089508131804374442216940197801604081630757738249672182707067179596686634382285891714568906306452050712677436718524032674958625186548532243699607677314249519957870533877129088349550719276297910241358898476194548585536624173463749790268649978914443120953042922255935874020775870613888956951753571322700780283339383123646889709218677219846584936968265582890047012654430892149643770553480446429164355622005103749790570834845850546073677098405193834662620971710394563295211641884672085707315069460929919721801704735789746251824583187788036743638611471310460645483829770810199368575573960190119068454818563377479571815312854025108902340975161879630084309263314297719409935741131426768637027865626036524782292513118324001870613124362829956255272953791675338989482375084225521912882869167183647242097987399539712547715524751179557458837463646036253864748468502085043970039948577679497403715467109001488582432762637989021204094343070305337037947452633592258642443471840753573570313758529986984993171628880214033360132727523673709051758780079745382057736011183044271334693343741347786171796413839210291567768546002204118663298057243958882610740909560430773701948942969481043270145084891233472177996452230007927996812120580607763144051265615633088660483784031982225265932970387082927379364618903880658490977646081522584625136575097986708190558085565156941501470509865813031013414122389960592692360274933098443797967841690249490199223361606673458982864978128276718808521240425008409980376018652979520832971828377930079267574117480670982634805097775065893651431428673769781188434389177864081689802539363420411261953993531296918737097941697988119682538562702937479286550656649210627212429865156234144816767295635695172065985274154790751486520908113422851766711432684188831327021389432200337927091810900613179636486640459210472688343675116776156507188154214573094418294341906482895184287635336267776192721142430920903515645344710236801218688962041910677017247083395459220489954725454672368018992973177200740438553371815340871487067701655404293790208472932234717834549203603500234153159319223009022768458110156294276130610881031230125592661301575178809016284729184443287984386484068746767694103427013922321578203065867776683324312412801854118965275669191422545063033030046193646352548974401246665026986868951090146698982598977045568055474026209017944173038194791399376251403735208118307674434687973486425774883152376330395101930900256164857879979208334897441857055497349545993692578285055727268441768694833688565458332246118070929370254166441424796283319845897337175060514849990306682247235311245722983181048225831059506140910578489108248696240308445915275895966052933332414893151389022938048173342811428668673991154252687795062174485395189550789156123839161704848363434633718983421331462334311220649751548413178154556580250895070563218742655652637215025812828604813606961379990759625216359016512130467638428132930344297157506627589030386469947680081038003090763172689121108915698067587436215735294273512571604483176969567295862910477150799423873745175642076102416996100090535980856588267365459708772741041088615328545253327573200339648998733765387816778798077359555389650470571345984354654965874354649176454335723370159901460561075544034440021989521544179012509562525899412919960850542959822514483549511368094416309163157406595466155869909665460407154352544707295514961168813247537934314487344585668356563947668415640512364848392690510174366559414284403502232264865233918433488316352225157529638069353842256892561775973958446868267791396939554108152346454676844520701089890652480585596070763192537060817703831153083930129719900600955160377654318603146742105484484660875562397791818813818265096846253909689552385405275334610796120435984591886371944839513899380087742601605999922435348190116322929891903646452402560116234215958395317318755941534288758293639448923248040919066609142936896036106199398129655932834306500411354497008620867284017901958670516319180715406832974744249485223201181906848574789514588633050285557775881505715070708869451165740030588759491540726864666796254954864288442891816610515765742537899659497477950224990698637160669496700229706932908225186200581372852980709595702042789676268703918252066766171157683214508195256064644719814085519610936815245451832703989437470693434109357933780964328050789729042388813634304114430724118577086786089386363669467530532985175294208444753473246905379082878201700977830219174448861522140190350645615530833320535401412520031661625485170944925084845810130298964975086769209404954430842048858590071434626738013229040404781273218677423374850136981146817464207463883642856534605884879504279631049683558687178930728584566399729400863139445159796282304625029511554985615983188841055011221314563435839985138533248244740883393733146615170115537207194363953980873143620245735078401738799024152092786035644496030765286247556620851434300325858303804777764686580678726419157897354893405878400906140559404307236034025562367613846038814584564295671328686277916009165983322920994705160871151400991569522738806822630634761861028878373581841049750072734434741449167339004297348487669384625794224394440274335076414782814420972292441297448063023362730418923749276168556387769792502502928904441572660361181520655089594642062862890767640102834307208475823509459240335718390909584958299957589958399791699927841822864502341910181996935225115686492526052954126280602729331215718086925136227525230063024843340779125650422926817547374933066596714802849549554207067015660500521424198510065816116508934522094421284204744516135972962613828193715425860248343522420491968522465814818038598565871152883412594138971688324572258250880033865177853155613014004718882750089407348560259556368280231372584511790587011744707877612902305169592812730799070333630123730803044742741738404028978267744373741428939894445253758542957034702055408209883665151351445849179152667281932229732465973821736631669435722925853205773604210474731056825738004010294267378341717957517550452918104324229650467884224857680876937236106510250554072436775219511807584679998494373941256461066505507166054067270498639062141476311747390237515433863108336420726493782491229966254634644507640015480618783639261287462971627598035709731478092235114105139663188465951239097699839633720169265454229355279330518010067576451286849054057370057911019099990467999322808386207502273099407652991920738080651711332950960495422445101596991308537326076071080248433726574555840101790245998768852493052822002837578998964824261191847648043791899312380929290035064512354922694899037848674320742946203368398069002648739280398027264380635393113352470712159624122225178097554187570535480577864060379989876328881317768870871601374750629672622882926971724042556329341296603246264760171358154668599174300508095973348916847682930886090069055748443967234923987019436932364344995953458645543181325102447476367945621390911538215797364727168437304656527202245273132394435851159461444242671482158561432061723104841083149389730994815340797984477618624147543634973547518285331155016142226656720024989208823130454296667334664641404484092846132223164353397151693956279061873292140479379924698191181804129490435558160744927698413703959396312663722327499955524875354716161552008676832688675235047553433586529939929483824117783207496630493709303115374588530531519767165110029857399676455803971650566283649456590919885852921287964638789652712116092605132902613076501240743377081639687851962112819707722406616611237034871374954724062801662093184501132301224071029059636813266319312614279609945009211261554006467461969749337541077543781908962123326569746803699717071523683588234136131972541932056544798728598411515784268048121216242587217098750297286936496292229182345739238230897617027214735549326216571888324269846044308819822387586579404939301382401217675566964183799885861129807566644272034982430785708323936763912823599816180394461468818586485389016764021624620329961525429633762554947039018473697971854970938589332743542952696184219213468585328873416495366016306865625856661027463211227751021135323143638848380615589968972074630305286315264350500878868076282753709665137732193454116495631226779197741073368285403274458745825402189680645047707892812448886946755805031236638192048050799148532215893960124599536872562614634368278151059079236551954999553159014314353619076147922629140175037456433959553417927447191423693445336027252598919687557984300275888125444977344756881648542570846243765269780766456045631732105268532899775232382793393914827031007414316917468353212510972300716878610275409093965898626499904138352703013162102379825774349451806945919387783360237111699281682031009784904566947207859114302609433569337589320207732019969849438677693766919261257535506386343447121358245989815799317319840180859901857170447899769253049690801946878444469973905736217848504637773551833778255143241771372188373573270051888618636457189283187049468076927153499256815976179675054482403550126910223372748276312916524955384183940970125620927969656254309079728016371275699221819323662102709846551564100838047227056153504136795218318911419614406431260670384205945944294600511300870915635114131275349984109914764766998354779544988835941990590001018793836496195524228236867751335068910958634088117901209117146307905279047430890279551935317937997768458255652244595448214320424230406254964708252837625618051047275347433388380630144074664506826530885720309363594531192965381262292349908921758007993442928226058942216244334998924274587119373219765691384836492784819147810557801982351972460974808684820223822910727887337480004688399794883986677857006817825824005498911321759568544708876039508926264752433881528394090503692229788279365159140841912463696636820407625778950401001656193077080685899360876316119621507821436751939924645049667328212183197681456879320273853317608345441842495871639548474065784173761564623540108092708297423763931583211149805835955584463121694791972955159974031113423631477748628571866951022105871176242769686220060266986943873243663303964816919614203495203582677758111775001532760685393638821866336314367841897383914370916220132511743524294848292623512840182097484543491551692450992986255105454453541026687929376370215982467221103486440332978926453331066871545196204916541274358985769142939786202657927784768572092984636693638937257467569587448199835966173919624780905465761453205033972604696557064591331823748629122228566436003070471733822002851435108870311216058657272526568906697312145305338467897024869775127066184905751811514323517065650154673734682975921288186945450771101597490878824061710611350062077798358269058216786415239610991089169030009004580223796753861673114070300705902990344004379137943348055757657859396617229380976781568092205297780598283295005074601644378971816485843981024266527365455944388758018155031095970520952436831030585892521674278712790664755789779862974052569404889648255487661556858687381417270081257109467829796088397571153433462652842322428881857496682507710745085399219223052396960492528375551298289354874504375627716855670081314112112153302788559393029376344744103844295090287259653840076283402355906157531265626248031012272377700654283610162130156346026716999449682787449790871972674889654824018620834809002060741349164817322466671627711520589167184766011905182862710546725426181624952960057140450254242653305590164815952205780282420100942299089939393127617990748745421346002880604724437105080609648574747438022876017147322582843221234459891748538842409653378143901392436343114137767773655762514678855260854729347762866477078815031664014784313001256622090426131198622535272662266820071702110660969579872273898393927669622940757564086657000793052721291584699503141169875046413525435435943533246599194412621010654911193629939801874389030795767207436235052374718721516440031056970445999495602219524450853551632380521429867213694309286174711331446294316928288285846974483942826640664911151356654342371478232455562405145553284969197864216373680264395786307369517166625021985741831149841935721726677728165231232490525373716725298851318586968138288083447182727240899829248517668577606871390172418806077732291720054532760335071701042671501954688518959331880281862913038751744392538938221374765686258571573528366213738888997584809178783795474365728775168945645112949941554538805267928519475029253833440170954224284185379967222548322006056592716052094602176625473044896316494688399666681547999058916040682430750550061132570467991655983170274089337301765104473014581326417028304124599887545384774222260024196229813434906184812699418009663644727626994619033588601777034576995665005754261917657898652577963245279989804328946142606382951564006567295321823788603012117854891276946065110760996531218575713679808861168722523169159240482892063384751764090835712978261308996248928592195182072664563180106017774328749774157865018802814734923061276411978884477024397457650458218927821329652407425659658310204778939227906357450393876295907855963149571947698551508473218007353407994200522182526870707948305731306396686774091561982122363607695407540173616435615731516610566085953293353170601974297842915964834784561293312751911447090661181939729577512038900418828890612449586427335775718504470084843824706788144315840270007913290265299199218367113818848747155377565334688241575199368472683652101708045778970601653667009532722008699460452358055026318152216745702524391400373854296472312075166764304449611383033048945224013816829963135302225720629403930478709253350754114200413285089394023321066251735265559096700264054998482276803490409169855798577381487239191752807012128276940802780538675221663059410980282836430659433598823022031587762342214233100164689585128553568879340489201712541250700323311652034446195049997098231799304598292241056046435413972346178374554233514093753794631041974931721076502107154432803340871247880023571997032039280936738893099731750956364477298872592206208168106263173046077625055476390090237376931732638027001599239426559101618724167849303975647472470810877494826706292582531412218664237240604252962232761940900184594547149336531474751716926521663799926124895281399156599962005171381299955873459294762068412150865566254218905817431511740448584315334279676841472013561327065999450700003711140968286984105599188329686316260033068507568324501452388787488716753283445733443297216258608458546356585292582451589472218571893443739631381542104653601782619680184000412731552604047823344807018030905457611619987600958186719056030542252279371293683489202434419100434876166054113272845561116076251364841566670575917994752858052155275776325626913961758062415076622139888882167884808647579241260611480790125412600775189443203783053537723279052929477530031138222388298631513044534235888523179973842999413168303056765667046372231995452633197957721115967226109682359876694632282592481358266205236148488613581870035533285818291002294352407717943929848885631018185521611039924261500658175355495182951604879027984710971478216127886788909506180470692285155722971628579204409559770782618684448710014718598959456268031258111636625224647150900346690075247615706314429597304239930996809191430818215594766513217636688238645120949065014242963350174920271524162206258492673992711667860222240646204015528227340837222056619665959543680094010792822505462128371313176132138353395177323777757925632318639001403476403234665716510422391907847328225624611090313683638356274633305569725757203223382906088349550697407340552274272244925312103164070079490768221202466465414239211475636231607509773784151542593991991806882725213696307666664336493335820942283650186315338889074664901874900097421093475308366685013606644330881520973030132769855714936703111530442577696999953724254412072258234107029344378781287114414351965669749174858151835482644377894770569142352487362702701818569866083898793275344453111968005160934672691854115387408751503728907010604016948861095817441422851872036852725591419158837877685676359900790069166967272482924383682619971597018318618682960492941156919653420112391681206897121056176136617908666792829215837241965338676822375076362446219919463596213338768996588365364651074296429073421801509175765071712036188849245031680953974619003765583516762796367763183207249447545936216094015431964600272717138931800512559587569199705274478628503545532393878796190366474543009883874385016877622083693361969130680555530586833073490422425748598514618124904241498755689955227919973931573033429123136312532130957379740959142228418457017541893225220251945348213876329337924693489709262596157738397343104321491885132753281740658984670389634846812103824068157957606941052053550301176807296945586908496800495560272464291025229575727074041359858826886469702000996798983319917788432571377343042776968274297329076150797217186926557492478049994307355386522081641934373863722822007813891834113059937574318231467310828068886446507504221995797967122709647989799437815262056209677075456276724795892132372916904997540328707035760096704470396898206999521116597564619282798706378307649193885254636310764850825757327919929234231603089922816991063632802024131606369187948649727505529964229040021956910837454886112138790845082854628587945782787466037055487628975259254571321157804751846726530376468025403711063631385191340946925777663279263560870321105280596325764556875305330061632319359854612689127111878186523701937886618652355135609863297145638930840574695030121347521474202331639553611612543357443352435977652662942329410794262246080630370930314403356303359909433509343519351102377755192468111930215807226476309169353228076655852129079872066074039585457125797755317364526354963161237696718161909085308613774475252671278654700237421716097045360796886990096987236958465274480494606234782099916074910067816024250435027457217966149986835941835300840629018786107528672601169240721395679136342478544767927706001472872625063373836053003751901427204085316964459005512726380835612779113424566487558004164426981541767919334052389373578508560874183881427774971746124605518892335217908260218295787263923173156403195303545558637242158607178886905352286689553460552057935342716443640091011462038788781943949707988011306988117218638002583548843677610554793418203542615662703196665228369612580363424395577605274562553651654245038520626739338348406082028126990648880292940842275019843326864916739038919558131362785073167100803342562811245450247898152482721684117096645874850299397252549128942227242052141594020743867538765790026247632041707944354427107971863493434738907339775050190367210938362980248767564779892769397295360251669954974608592817446853366261906629068470654573823550748422306542020779003774573398741161190135368368038154989106682702344603433875926539553258413992623687392703830482657422945979981996653613772420920699545318928671966306778181426169802498585291415234210920092999807898422503507998704842586425332559959766925949428005398946076961011324587006493065532299175799298447532338013215711519746603501060068821660159035354080210570683590045644406602438564474927588215908030475390336369143469679470507546319518961030687121695141309715442036581453110227593961621296301206985388981847469629066648543280606793285819580862763811369710672009292502152840573254890945502668868328702468481365733891310413442200108427196204517085333298340743675902545661586445831120164704651569596520719102425061449860807332773661686727391162511789637592132237305686162328069827712144557586592340245493030273698848898051292591260182378626176735662873964275364639968938917041819041511500940551829301289354819754972976632945547321475135974345897653730302134633238757718502300414090113452661319907776482598000334582288701646645584185057719479041556285315149142389755540425910877050894152784829045398835767026763766005515330617156754737631392900337671608816078545772115236101409584860268282310947260495973886662170338384262295259188486289324885277584761042038179272594430136355517792708430200080991976241305744326540162088114671661098152324285541864620203724860368901059018403238002164972366284531178742966266611082577436144579418847747557304060774501187692281494455531917237638178557235074569320405821173945002934202496236345675015036533942476522649922763548453551747921789389533313499182228998228867726913127934802257777175364699849410759261216632948511829289587121387687986825176715327747219146804682912918521918567387751209467179000397405363874785491244822450951336691140773081178924663120522595042488627494145141001583250206967660177032472057028784421959196007935457484740939112637284330815435524171740542398190590992135693319499655333004667799726026139781180593527890895153090535501668468792151655941227087238989763730227953368698997531479157016167911959758673041266898075942441494770323247526621124526171904199373834109045971722039205598183886037291345889380960728725895847299183113447244771589634294391541017791174408055106714564410937055636628034913651629081750870959438194955035284828853347970019505751355976115652746654154882648193911122644303033299204585577804484486345366507698710456481234299504876928977011127950678434100931225484724572184443726142118708953111640798524723598777752024126887992627247750840267656860598590444260272941242939405232670528025794280090558282596815725591572804244063608162655435957201737673972722507547840097364036306611283240844047041738391585484990519233070655387383582499095219718503926750152623249103385279275490116876940404636751068989691067831828581203817915014234113317524116089850686454967576547494294658754035723265971305437812693795380900186700564224906820852321423779708001867861086119046441574488563303876908143314786404127151291929791769114596463993379503354861106366039286833281880252929524100817555363391378834942410787907995817416745167030256389949976316809236815271844701759735048511436196714734876369311702880744357680252125440761791367966682133489720799936434473274659916194777690714343156356024786138370613733813955942013877839553224618331163871570087735072541663680005540245480627288820768373620314366595717489525575628637241890920955028270866423514701067763515288710533568884946702605033385792694745897755775249480061531241483497637151509985792470668221157289483316582114026620937342109680961722196593542868750878286544548466224941625089294020724010412872461553742429183135686379223992236181869587855821680717410647331587700676810882304895437555875773987424460433213287141550135108041755413723503674515198504238888946188941949639070784448909299964483175670644884810219927960217624104752156684786547025189431659236170567773266172377826325305077622258922547203252015466511686366740762290090357118549490864806864009281154490358821222243552291855012391013509325783498650640734656187299521506638599491963981501226283477107792900667985302151854972784453611555802439148462534508684332006082296426042801181353391485807332114621461075509207148505321583060614238644649407732906294637976746320671174521969702034628482511739503097623731592931961882074725587339342729253383064563004501417330665216488166612280948591619650597993896928930204819533771683493392320147748542731347121444154762221980983912744552188004558337357152290873302724683964006574195661441803943092110236884875220211811448389218932767628725988978779844202377388728490875197933243680651415365932594147943450516666824331884510306001922388201670874474600367642188985178821155429207326736735097760430174424685079828001816296255790478336954652064905364691718305249595724860805876573722263582894583985555512822825908911530282187157715546602029421763040055603924724060656573284111447830253244756464108541678450817766609052752227875495179535428963856209339946608542149219114051629293158599066988324274156844577197721955184679097292077184752104393262259045932369250736394606737387314826221545774610230583507486002231581198028748433055359647203474768406231588687654143583232102788120984051467359461673443359172613852341128978864273980171812401642008191405629662534800157017877212702362663267238185157563267146025135295437998844693673763611637807072308610609950007695072828796811932905171792790576003521011689587448797274677996237639214255634522665168953067152536909422259441264542319091255266463389451251427180752109528867512227288920505139370906267933828026504359482001043632095695430665300544085159210181383472664389923640340052598806692518282042144651308590812073841404929730577954833774681017883579948118100103314285054563497466313544850870288561215690018833864929383382199702842888216208316182827087029340940571268561588559860947624122716419197484527560163414386564808059130524286150591477664455272911160977949674601500529233862437840115677322665425498784707879455069275058181077818696160984631797934338210734195327081552163290067863894378749742205169696664192118323550403986441248946283516813353541601834155969377864941471620386577815965217320799439023456361103091338289364930779078864449653505956168082284427269644359025033971398338958837734169464551142024821576050172696681668927659632593727872932498449337200289925986783593339487720321131513380651683751971430849447271662062973757198681405038464166022710149628087576053268484931774684792794321444925655818472910971372879072348983056477140943155170080688293074832245100320709566808138328717173516950174159449808579484262664143218154591675436410922748464089160158618787969322516725792909559343336901631165245661971825009161793677711963865758033522629518673013695728189193373895559004982256340292941844504918913831120562339933550161501946712946058266514203834107032786298607511743198394450036937642128110320424005404544685231561809340210599471376022200162873372093362309341363961199277358574273239384138531558257077546290407723951546823065408276894621794880344198359026174047709834297041796871572763550973128920288149443726407922266020871215635594570054150733596230952116388660357942651077562087741170704419344336453643353852865455191830110431678152907708328936765945050295104600631920459004942430915294626900980564074802149850290345967254372092262579774775683847081929142790311180066538832588783357794622302736095634197882256659782344051891393066271620378880875935724808997349147537130521027080895519051698303742936758349294377084664261289487496353026196538568695710387705232856906064327499071765834288701385462188845638268288209876574932854626729820183848593141550057349035726965866964959014782237742661986435710225835115461811405676568957422297904240425266458092875080855807484708472443133943853144712905217078223104102864231857167749592726276919318710499245615450710827788577721433448183130079962414167041839707281809107195979311148702658778868728766085428374074777667178451097207957292618038774108701750608299052143126191846377555943769432805570923968594036536322141364654027586703037125046970074354172089990174374459827629362619429520098526057478163867675766305077767996700268946226181141907657188671195525361557057226298119598327944838937846596850167594922522160457110634776309967551166127600895568962013377918219193958257920405991007869775270578006909839041488559389689984218585561525883283856303966820226058795670833223808616828965224809965151819094035555692104574174048175654467885664760690816616792296936130706224186749714271427935683016402560504794275404864799573035316779070651884592372153850169303084232277946032531553816948423364567011559872746213050260045830781396638921859604768522259242038778148863100471494891224094739138166593394913456508507730372353245519117739704289380598021576565615398181698870957602347759567502449280775400743386468534955571126534251193753051536845253331742325604624884783629526165711585810928241671913260506184834198061723317250558936588185895415964607172402459359212877508682390299657177781941221288249667103512158178913775225632981591490002963785385420762055488686137579590195022510613758339638045735417727591917287357275296886408047743185328803770496613160294523293824363256435788090235691048326340008811526959153205244946979148024556518553376938253408677619328411873808019229780346908128776654636474902823470881828668790577042632448389242801718200695409377785528225958658568169446281957334342814459616759017097109308701312940353286539521285126196169591828292933504450983481907198858914515258594510937166229498995729079609441897912622477486666046151631075672611274454385491090964365994358251455217876537638264628773094221164769251224246238752341220054695858755396975437399343528348162579198104330264391159625153380091878766932532520220287035737352527915021967486239951904245968541424575358027954173374889557987472026038804412325614999240002468491231321842640721093838081912965168092999990861866705930127054946004092472020803723587509922609645686424582788463658647377888763214079487110578859895000787505350749849875051312574681839124758763550128481143978410203552982213996171038604098179140678538493153842672977704746110171979636571768288770493140172110071239080258513044211007698665195437031486922546721362763146714700486071530429122653995347103685248252360868109988846755406540884071310412968940616635984216821319206513031027811193485478146828803164889661560865914978462296474486274584845026144255243629390431781096683905194481113866581133165631649079734295106217225863321591790923323103261695858439106831779010653491056673909953202189304530487694765670255800150415729246969730435957162930566497909192060830639228492036068702000590220634156638443618679055177415884157376890645645635484304789022853225438229899598340322460735647273282376618099182379021092004696214459782912841527201352040263264399628347528715346411000266857386012727743285201972486989477641947519541246720780918271897567063721643668738662295287336567665472903921430966196686752796610684532549904564995460337601675577897234024246686824230016280932564405886709877553134800565725212475285561009539014448651325059056438279264353641429059545211305428081950251441733289770191669859715387373428285556611592229019646229627933512352323154488194564572363310541757434890140085968981410466393696766858405165868094381761187468174558223966801674108947282825728471311837696154985534353255062692143250364998543885148904062421595716215487423994794140237875454688855471874807129795473171008449777438836972892206067318470093699777125190948145124621695507516036373597506991114288762314760162341890978041674563004048303542402749219746542973152856700183872582988215398735904640712490701737870311229828336327114357427767535189616329173720937395387276591016767485609564667931353791459584595458726189342409556361054228405414019989774916322161076368174744827959953088904434297242406883117559514315673595873460823322609296631147090936456168943032390403949241755628586184472113007176718385895924079457090742955770479709922182804246704027061748673585619293186352151590797000117901896810361389688251109063649824057688966131589624589549451355049122835535563142518403751629672845700804243447819945512004732782740019654687150289834795349115038427587846598939213577392913479359943051104566576415739474027148210780094531632697023864230279741833904030025139959413467573256176258265415987793235234389611268702650428390531856178884089937420664050175062640817989530052442314867375292082436189860756034030194664872006722040861930003396196243685053455710711843146351493927026433961869371370566500096231549542558730929483188659345945295310236788201828434249535762254068422979902392081454889479683499025891527081817205000931361858195897625823770714462011971037825667966299726117266153737148395157669947857868029761738580620137751999532509400129169376951727186125817551569486472980862120266864903974755531627098054425312099457159558731274171765988135136213164126326635134787276444804882957981491151131031604309800471418193120413093201292170229924306862392372402066737509107472266040473394639850896012568854899772320463066042669313319716677667032533295754239405106790668125300457646721517520193822601154447845772962009678096431778739911661176851673028979355662941408190073748737601273757509622618353744224042547597777532342169234634840408826461071946969906942773016627047059868958904298436605116974394387977729207910825057705961767222963063025761283361973929254508737373845452067363850793078312894188980579081615765570171432045947529802809014241642032081415397996408808234441044730641648410501662743355818891252688440459140072521022673111633005663493159145433506923018825674688359658439776589980096622501445127329099001278156536695051115786835864103270121432941783256829176226686018833895460387599836105581637142445978908419715557571841588842186490314789077055349941336069009796073342852293002334206257003187695307214319474427393681044460208329780102129361003846033014476710453758542163230619624433647906316978985053583337234616050231457940801122493255838563274203940616501860144369191912229884276719211210376948571602954642177941446832684365412472631322318765530021416000858708003529392970687883790745830184304344414048466980371128336263997410893462378398704079205066746381990329343149708807875668624046239971926070661123929333950505319598459571752645312360225889669312267015433222564990991795553376920423520028081347506294493733192418087040102516201432941743993602665699145839756989715009640265383837367695455593215615151505051569306436731511362031218041335310222062498633739182031679918343598604247110784174640346171829560387995736481794784125066087287067394660425412792755946143386465350731105915439869084603126178303693858173124810691834935857903015915682903677558493930422581073259859911504784743267392938205123162601279513120011135324639057626887146578841277096012644695249199741785819065282518438411668642288478635921688404541532349410367467118772592112001533168821883577068264184545641149281458850892973644610289296183215508437120001586593838701227558154315068616230243007632215703583433205961074901258188305055610099144191225288771497886341351946009858497856914170094375519882770346758158861088255718082473395626011579070158843032514426382128534856786863552586866141971887168247418533161040084171996075035904501952527253497882860360238367946212070776875052887633362046820380844898979816816888531584106275679339259107199924735421476004163794346648741252934035467296013567942624496096307301777960611280214330837065355673562037833759657855360888616668587010998475316420502666262428031332276432164538063206702668559746588719080550774404046567024388422269409487144022337027763259932467243354007003412434171677501683684183402776182164190141533839098045883494547103973396493314085118707119753073036196055936943155149870449618383729899170595158357682815884460643717042357241461733183523884663331904799610589223914808414609798940941570476361319363284904098185521530700829520511864149922424333121017530316830175137693531054581493297824512261461531703407309768295287652615612252767748223469097445229831983014803207396595257726176874854583873428689724559273664194107276184172073556940568841648105457884209841707092866645389372510464413805850619693200630762057061456149568984640865091882813841188325017724399699428815640450790366920665536026843010492363019197629134337709406882272645343222031271857589082008648535585940896815149729075514686283279834509616308375773989107945009756738159188010208391094105889903317253457547041555608597536105237285427679917761509873446182713731640086601270227055719667781706625560541743608929507319349747893933884476784306745752941442694605174279428457212497327827067924810237173894611636377563172316655628359569979810721520254270251024472412620615750404671052667987544923262304655997263939165179133533251307103261174882623488864663375756382222657985907762151839748216931545738057547961446061633619912073340550227189864212573550235928134200549072083714290588216185338957826779117352119843458406449256486853783496313922404577204872620786716999625125726757684967060906827742990148701936084724943611180984712224236336152467365926631437123418989799135805862660173429127419413641986212998660365282839913765006029719279103723137470276814143318705577846663121060698746821751354964320507989050781900452550636826021814707409827172849980040399241643386769249427854413623604561854145092546522650509590904566037517122789425338972106575660358484240558876457234438880110744871896874692809903955419088704626854836339837908968045737215496329017924132381755844734894162530891026063340596956617693157093822914501511351282933668066772982387816557597112525510851031204785139828535092630295124563520280197304130325289741517782126534839869776207988203561839498782614175572919499597989960087506996583602859913242609156364358773412185325495448158384882129865176601561120079785264657659651637388177121309334954762754578997355576792600273821762436479139873381429693558727014965599672832077625481454028733090440370773518493367968006216792202176041765070792770383770530798997373030992244085001063525072358328426175638157004841572450885585846185430071447232884203896755047512221766021206019195868966154512966487632932824332554498195747201968656489388653504597588093152075405285596555709298857742600681739098457405528689699417823340053810438319138916191667853887346031247671619573667659044161443967874581744909933403654826726439952149650178150959241317653941886098587727471548413632864879954698130849488791543210486009069165752530114798835323110532521839064251819182389075077512322304110096489178343662803689938768069327773912110513201511993167369257313501750806595469576273473604851051428899561403587721672985016796643275675270501332618442850325316873626195087973574772740672690071814964020030469178303842562822136311083957934229663770288733602112182307029698590897086247517401749888106404205890168692752869182186054372362091284575195358724456655770294063007548635341399965363278911251825598141348017081981945480980172276253174966494057671076150179682556067463689291173352122687586113502454103979760879713434256959470210064435182121793637083856011044909298894606196207983003220275420331651824937898003951160277111646670949175386893282935950976698997494660650733555111716196359059932422012538188945521331659683804831505688987036780754046259439523033211474827430863910909756519932876646505163175262142765493974898281466892670574252705248998098375707745923705696924593991566696106417946877061232211783372675200289092747698951056975286042870308485349539026614554720809938058089410707631871701643222628232660477308008238014853692719710840857053511212078533342811658364067311292084597906572125748796352288952825012212711915518260737488524042474001026839970913776041034250186081147969312990042288376427663989041130899556560525022471991376282826829317701845657717337602095903965595273258193892860092218247506942701715445435422010021875715884941653174920600540087854323558718521097611129962862118927259888553622085463858832896249770139134936630249857333716926879567472950288061527842588784022880053813927990621666617617253966240042396200181342376035290889577651699239484523365049702008771998053455178381197966607117952244712418141170652223658064465303285208600197438230802144751337407038481444932997550385151403690737321201952665696187753804150603735534443064941652868991273031430907611948332657235968777007982653382704389837902750312613365501669883986196283308227795735966427030870873133220739012558425022941001928204417222933599201761234399199697131244221066356585747933685343646621991310048968542527134616669348945234041078455756460933494305498958167830831881879918549520142268699624436826370882002637820418592478401819629753786640551424811431847380373466429217812674478988851317020506905806182577337813329038959764115347337752917889241813950423943276107706729632721144860689637574929030382199901971308380906631348718548589385711218135228907893794649108764293705352233514199053865747599936066334595243531991823959225016722409948102863596417261163206798723589894263291554135524209104182577857280796616206737191100662131250434269745351579176362375983717324253455198166298945772967833609120801208266967862516296391502606928525714621932519659749845738566183425025208536685347580921910954165606256561373511458676274346488771082089631582247262718588775186204865026667474944301814013403669787230488484748211264625709172062466248478449137569784276123957864625008662279319834119424375666391463897417905262633849264338876000329436404976405476335606612582341443001953748072571586123667716260089690094599645574766817922810954551869427974057798322976264671723463161495395435672857136169967255764153082722430212507929500519630053874444689022201277702152751056677197879418373081570860424618100386638956974976617753127469947852439312233097087238014859815245078713051367904217785130924037908731721330922861621759409685345862458459768616967821630540163673488260326342466990707669980022501052272566987970650283666575636506256800167301155353271867348591952667092947777535193216423513401206573668944322266405109554343641047923839492841219923035066411375521624670589768118114787114522501740733365711610647200223133810604927176321282019548924117744147154829864890736004210596526196151483877051816366162212317986395629517424097915705957983642050820770706963309814248591180808503586703520261107064537160652801072542244643618483644839868690948144496472504643073026848842375221266414635310770234419823880299614468886389826759631209260653944287281786579737813764927329281634103775610869478735494044904901993288050904774331642651912362744098674693196028294076395103807419752982236715781281389937986815763460806630587470320933744081504062043013187823267193990346884150014238044342490584955571884243443320178661510623132809848326134432622665618464658605525248606224633392223901283872499329265485293301370191123945111757103300228780135837408981058842858296706004849782583955003917380286905859403829152011865481647162887207516124436169198680265883919115682822602509713432478191416489028892698330493234362010479494996651811806940839652913466674252660565597853703908959847928996766934696764270564437567404082552416735483128839994390830868601959361081115966924660753685986709743940919498560706093945412589865620508784208712072000683370075712846383402972568486569804337715813871353224839104783601235307544159066756276123423268015290044086572001591584347053770683897508453353037527223368966346959854207042411182099379446049594648192623858988123113346733191452240306247640385572951918835828569271588432824381786452184384963308511449594561515238245097277326522530115546194432436119943139255952996715269569325708249034665746400761346787911465111047229336605526258119420477510484522292999110918996141521855194174860985470623701180738529378154699818052173746713233714509473445824522944802531183586403830469209543466977588751496979258518592718099619128985409123968140981549074369002538037310200987918759135921357013431901454613266463253260383628940412622009697162646034125129375937674825840869236746839097606746672495554505435697362823148513622194512708714973678882044802299577094698130597788352214585729554998615833077994536368348231173549554221079470290064060345892717836816930738546738878801284570720456959911421242884181793197139777070824499464836872917053514470774946724425473114190923567390740062620714743457540589412806553529211095134789014973607875328633873042529700343033134887111590529561859848334738130346870417050135317386444418986252937263406222035192640457344170604872383609709571020663772623014396429822378925309767283930323190020070788235129082684103763445919413055691194014164238887216118518660644279181137933745320147994327074870964887218882111750836943230155674870651867538357672471767524383735070903201969006817986202507225804497204121576576789886015571003248115172165628956973595663260596899933915216238250867469566487911191639935798906772346124069479967317809114880894753385667034282377223637014389831994761124054964221582641781137597162102301599512827104339452153380933854441156939291951430968656484955054413012109774252653004449943102206423983048604952923334523743995849370785750139369793271644212380580012469494559777103269816413881019634665036340509946589604036610430709663128394677216484634312646154777371731132166855523880570867558693882537247936902145756394712115312693561966470136151742669179635270995948243332124687343963135839097192932134181547697487214035097114219831160020669419971911832298936754607284378584114987902811610880545400165065474450562517560564752210083945304660499613325826951386749508585587031664305024474067899009367252080312503217847000802482657691909832527513330914503132211445003264930308777523984772529336681672164558569500579709707946004480611948977578204144788586351894355703223683961135195183285594354587825901103679157016779304563047571368096491202788697568740896093258339195407291693477295935792320310366396043065896947735443378755268434228509147305598783360360644346918175230113763395707563420947361696205132141505825434063790533658649178412024279494137998154112294481764836638127745390984896501933659384118422257077261275329745604148879084058965139630146774221159056148959737472287843867240614030087579018369015218150671249742007040084934739828545750903297969269424971469013076668534160814989629092818274892542489797927680585506824390556576598697340072981854463257108566357322154461621507090796978906393327602859357341457890877174755092008885166694678985553722353332082565227831973329703501517399649541589812813440449353627338269952047341010823493416508138016380260916053931302749488596982190970010022073008273577120265115588256803086915478989343540523808533648973714824667809016316692812246602741865725605287441128610693492322192365882726422042049871826523485382329194953392558645073223027793686535462658145936328236373042167188318393234611192260761053659511922507005412613339057417408351514045899085500013633568107265293171667504373092929961069534172252892272374381284294095863511859915346946495680161356947585666693121865876680748144065205978542911634984282295715265841267344322899991622507619624891356039464769535371564394775338897562287863235326557884747975049282349522794011029516256421517169935799024021606971243777911950062595842458231278232666712721894026797102809966676083407157755171832815962378053043113127320670103999555076661714186023875748834475818601159427264973251547415364809972559378319847814039503643819866025026283013525927066036886214749616202510325734172577868953575935649606897468592539503963664538497449997121788966165630481452031340567568488850192396955386163424101740789027666804684737192365870530947020320850288726852495860324188391442628024626539855718557527827827831717502686005275720991869462437914275690130707015154693113641000636309265138501162100520662009781998272781303114373681094964492186793681825473277775826185610546108617984520570627279797325553246327060424586813767122009965452378318955070044753006099663330006587646425696342125389779917022529117629553768530301717441719178533376630598680371900451404923682649607540121162799090385242568043360371228076323233775199909028672534087464293199545658244023368635215698204010377089805404600031065262167557884321473816594311246807206543575373563465801990233516734536681606091160462598361563375112852510561935703416973479967732273578260521418396124322758720751216748921367998954098490692241828112906079928009162351650137368612685035469310861095455655773201523022089955657972522365929360376937801389288023974720859737970452019664523443782303718143851030851107194810799296497962245423576295474537836450296341596572221340592400224962162713834359477377380535483545483177250816217921408238299898878586249748949122882483151294992961765117497225626262062412565830467769979926503011725104665631283931048112941905734517576029348856368994323064965368354452798360186654131989667870840580981523235874505084756679427402229481411498689869436996421591266772722560318741539149699571253591880389493324915727140711487127427787487231305669066474269842202252370253777101177416133411498135007772812167763667279481970750962437171659066463747026252382378110605782107279541398994919577874912810408875934253808338497927169372633520351463826483723010055290386336828430851973897084329522427301828898333979062126642660756382860447549009885753783499852258782250697919702310709718734446818429508571686743749878112945085967126117554046220101431120493801312439375724411024127599293041311668203816742539621046073272708980341250982791747590801645782083893589553147369500720711325924563003176860774692475943440513338537048356485854637839086694594816502213568298407606086690786056503731290212149841947388088941801625291208783675141584353187289527643044406930647631520916367208254509532626802573422180856609749875843710241708507220387814981747535437047938748574356657171249988567522053902326076457664198635307340950930864534915377644381477098952130995089480259408864801544003923801366610627536671310752598063875904897566208387069888413925720147170344669669957472509534654715014581327049395864436589794861688335333452588288530172057793968165283636399292318678814325782250152452746665681714582807024207313453921506852611007941786871221514991997219763892364429825807009136971826442233373151868631556479475203941773626219404966602353762356057938682630493687886250795175370169698465652658256227957298706653964768417442510384255634074428280770164736855417446990681106781584680648045405772348703973293861822670360399444756063657139052690791614082257883095040258954587493216829564035387506474356065684940255965808238241236371304178321728097443224180485979850028525110007198231473826644519032740239701835423335873849577955059080569546643622102142407015893292159587910213159942347571001178211085631253987617205019699843476969827311698164222700313210111007648018006333783268019317317963986709321515497428236863042806714997280769091894864804222570648254081383638553455051075035889059794008354630108069958342536072951501939237156020626433058248972950091634125118850828926007257872555356367281028290127740913343212188059671225084645087708394707572552410508007547297878630664577820857883391184331798172345257946534929449322567692176539873759135369378248057243317134345323028812607768607226337559498489105758327078857329783868235435972883220505497021613418683030607480054549104109174540566330446408051903180091059002202607073237290916009213570771732612314173239089934400452557409000766631924931886845297954597554823168328071711796438044202838020494777026520726843102506457370796438749316639770830884364897697219331424723729552564961508016610563055111363119851052543103636996902889839450132423456054784839984193675223193562848633723207572476437123500224829927419149846586974346070777510182448312623923859975066765339035650894600188180108664184103798407559359094434604363196172043597930454326385371990266775277474448421730219293482414422300129342140801911449961910798563184494873709084201890169007732703317588190488700531893070293394694243808143259845160615141057160846681708609686037319950752556574446509387450545061818884503160074020918079260813439051373319381138383866679291241474250397213743179880864230180069444941507807734914015937226073363512807744935376885782035921920747413155188611224489160044408873212982953253173459687767031154494647882029379772402341643998973773508527717492637207242527041173545358214331302970697571848849939153204422878443734022144575398332585752535982451459226313285069883011037024488271771283143285419708996931302818502681987179582501226751705096795528897108249965895760571141070700104368836708222320382072548822106414347921626123656381422936336473366879346860679054866934316985537396891671419904621373449872910105840589801564561808519875881464719750768851412822623756190670475034751427294288761374316913431318105921066698158132727876078680718512340053559004153633700534795069269185806429200767920133413190109043982610051944614448368117197210648788653927131208495233081436234397168447953712662625215003228653737339037997281189050396911855802791034469727785303478103282354992600891597021096732819445107263141349979203084708265377137838391695569440617472128860292464506730562117982945777330437330970134594367768500508706129236176688358497434213723073768059631069776722600077255475606897263413750617058057168018401137631802269717325323637463801037546295776840718778363858319176739050839234200413944173529932303763061849885655535035372228734596102823807504002685475574253854007114109018427200610418302435975931408008566622407714577675026267302007025150903573919011650154796409115239647760807266573204379528867139459244117339857105144635612499351035828246161171719415245886726192199501041039539654690307736793380174493791887654353956205028880436072216816245969304244718838957581209549201378012512905829657543650857467161633848966081281795864435973585157017742047259873848641215815400569072881149621808911971047440308051644274360531947290602728212310671666953465105363117497459209437310880766890166283265174247296763651551554473207010115751188048345187695076121366291856963916587265128294482061784024987899941285921033303131758702498642560113815412245274619886887681875189132800865970620950472983816848076722186077388416880062923050687622006590579019811602889914339950293451359208361366143979105017708963257179399802217937653394980724191388886577816955686108884986285491844481964841750101691750676634863197419491124042836318700389189515861962560015841142238199495959731591717184174344261811541894532453196554866592142878395496140382393823380409928679244244490762800477458005770468203961016344490021179154667413046017562280646733713653723248508846721946619414020115762091471233239591701080629153996471801602879576752719243010206405703023972688769904962401761457143195757517959922434088592207228076138100346730638244195779956729730125445146147146554391406961718961767361312491275256209464464829646426062910875354117070012071047195955201820930989840353993705842599977343371266814040257602134757699083353569590591089299899043578425975869786074615337034699231250713400476818175648076745980231712791091548577610964629491723672130300562825766731087928875406360538232877931573337221399910667432497450239991638570756836857042615556550908718043930315922584947087839405333929133958039889250939216670301681670774374006286956385032882715794583960301678056976731753382649019719500854438471090960445188227978377759329937882673969661067028122053483847647418700338907449063824427008905307769443749989044442404831160227398739355176451630642602961960382032431076819322398760394030229978327505086741739749431794492397943654879577986096027823568144944725177653325127651552740909681476223922443157283351979667420956077699658164252252261676662045987269668395015300435377471842829938614722818370999969063033413510778171905731557917709087414013071042637840644821709090964946846791118470868673039713126448038219336302404577993666727180963510111267485039066077132931466355355439934359232711430254247394866228161982759297504499158991149697668910642020860729701056850806191952522822695821852722483426465227487201788452207909707755495907085381517379313868554414173491944887149864965930286815464686578523767292920422274018221069470414096062799558754524241188602127885584743348755604826563415763524227100042731987808590055338866276409972831118938578995248107917169941385304833563011391715587216571783914269556357476762645484228887002918580986869228489446789407654683029597689635130265760675651934780768401198616128548587049770225321450420768623273590291670687126893361431390549351146743987115022075797092579632543605774642635454635284595148647151782003042897952174428095860946987182914930260376444770219831341147062988031646268717619900362619702340261845676812106367669240207011222892828743386328656666850246663112123558127666725269851583514965817851076576794852109995096437133109273189093999893102790619036344506035863219964145370213502255748446201970682807629467482230134471865186162955106247249834868564251935159218461916076614353563303131539431887674010417065911065424310806117212711015932093231548850469012967258302450603040403403932461101856612342654082089920107950130442135801365315709923615652702519380093972777645927906631200092971588370176660115265927955450025751035941955390119074151571198122861496595911956285966657642837645923155871224991631903768303071012924686744830033348077647312183765728729786619460980475999207181698982168399864547261552353692051194834119957367960456169697368353817261853199402973557051014506414742521077634662120456672288908115461713938957267430150110858933400535298124131231331264693052815247014909122070484082161871966870474467169564807146979689306762850922835543203888613535151405154750414858161303940780362986772199168112806448456281400223683204202834786743515229261836552066319170129268553570723206403750021950105443454003543214017999127650464755454857948664576296123215184014486517975956254211911297436581623163065392430571080898464467934417212790452187745436864293456318243972530000273404967300254998341439379119032841758680822944155084909270020790729036924941009554906825094925301255428017320421022023276266714207941645552674011030274780874584173521046015037739545772414335717473290585135773361463840644338646814755905878576406044352711685747790839541707497398745061101380165520663883265522124407052231976044771576426152329912963714785425808561909460126600113457263983093877990389696665477066370337853092319584681608466714822765938377278038592883428577620757024342205928189996924804168566182051264191155589152456557562948620224873222851872200737240973266699029004530937561726151207347490607124492046587577368320745024134883442445952663000658634699353573258345656070714306451529908900257455456410378425585504123986758715695137452867888142963674470537370585846625363882304656685336983694672769280480169722125301139912432922676976866981136561713199021272513253125296181528227967889760200658910259444203563720725914307825286430695878233133145998260141649550387045606567643384679272050895109293606330747455560171272382172027174793295575885336750227543111874821871153949384721502372612091229289266452827089967465437228520337132406289083282052826200401896472199623112975921034332950760945230951047379821496667916229543688519635313113313978978417020675524885722010080533717908647130543462929114947509843117733816040245796041581692245324517608623337195101238731020850938368523356602659921119628849174448313775600365683714456576949036374371838358121519898395968617389456078170829687024672960638555422206051788751137757851767706131713339748537653402273161194382451222016702708665588582861192570543636344132670668912747453729081327535137383120841110426246010018868586410451951849645871775593442917403794695972818944110512790917928531211916012272029904206047236682234644662535359188392488399345120372211234097312892520024172948479679022235935435932107199955608531528129444326616386995663765854282318249744796302423454562105932448992883863349755866449789541820571785473289984757451072531486583921003462442188701471408077040116907008558460913230801593511531119362033030293760692388930488771194975569695199421880867489087198918095018345662605058913923286423041082167046815269266853523920164320428849060018446341910279364452088127770365213190273158464333715397477842476726654281856471580530694866177331360959008327298353863079550267916118082739042372281396888150578549236017275783284412845724339369860248530512077490497352581239127660144959258470303992487342251829441452323369461281178141896792569478142613517451551745031572703315707617005840505403892382859377239753033035318039866657479039288383673540742306222600502266735756327936315111367261492016314201906585844990913849475843797111381962117021774726150013513281769896914449493872094151161562681547748655248308515051246053323386492615843335767345555480238277412880841837667370313868761406889255626010923997816701002555418095917573359371383503640381368871203783877019617781972361680403871757285305222387408356595542855804814659716675766942523017632009333438413182138308992426111774235932702146680773466314636361773840000428596248253932143879089191766360880199944092334182288637284245644156591376550738064775599773087211366996709858780416202490142114304361567479990082681369730015507536353505977155646016268062330071025566673420182158801958914788821443790914792561664823116099527182938356733206986235326391469332333422779420666992137944895747644579695470121798563947826734224206465145578405487098763301435810269340575152912701951853301563042137407874990658885475678884800844468598240924976600916467718547467916188189886303822096774894537017162285076795736593919326386661078493096174875949717617271182376444303529378081168764244905035562853074367277075448317790049029603264979322351821371423351635578930513734621386138879680855437094266247194424749133168277878162887361621773948079219975858844271650227964102526907791565827797814858909563796945472247075030850072290419158900914446233856287816008804192871244645792543520778153471326013855329838815092503732563660177760336632916745325562437907695545716930772306236167835293664539518147748201558360808199201630443829521631274226615025892104278841625497970563478812183155202753354361951278414854318222026990227573104634667534161326832067578588688792356111981170348844034495835897367705600710835675759536726014557537955560775005000005122547920348888388959027653376387476881718697178016221901056628755664817156154712961761745315628057265600722034483374825177226846040641814597008800042228639624010079717460292099173776012131067583479258671815707223614212455036088337043163030328023787392376279076887280075057951163587064908170991479817183974286928611397743431493064960531959342213462620735751707769308942811875921945827094753425991464826687178310292096801605755785385154697453990310941872174276281268286464660981727101001358026982979706501619360582166832480673911592995891160384328643701447737480532545476950863909134547506987008763324022056764938270592525645778628007798175383494519263956825371322733159642662124410572401139425603982053166264148849734874768754142745567295213431254981188723627562271517846833319180124757715102915226070424156166053214817413264062412859919777025759633181771518110113780212231901114460094217608648091068599047596732540714703009964221456930438273561569080260976947573544711319933797547725716035227139823339637116300645957962214449108392253937515632221239039385005814908198971470076035601129842151761767280523893725162839650107747924102667781383513103089261387262972765892155939668844785730473892989101043739973625483153860519780967113817181888723027867032738450831908578902509068746689127557962443481201774345866658134878910466895527645117660531068463281244995155152271508837371070946117381640835038732936745617658898661112953145968209255920962736678548231666711986132778767266852358711659723364744324366527574670771841057089793598366621421611372462384647735263369017136474439294920453892221925155560250644142829815618933762226764599402876509483150064451157623079633101043510296395224923521932009008640669594730430509071584839048046740537730359255658030425600768362392583563349074016080697685725060444116604736061306854506215644982050530560281012776307516156694446061062870752706117084350531396335121906991516197376245191156459547938728717862068940010382145735154924432495242482046126117864724596570729115609159046777247001512608263046087796011077240300820501590640167857305519583242134297752090009605811106556687024345996956098511499267109187050691316121707107232418243077469288850056049072832524294309584635504276590475127690098203669522956566014316695628793528629043909555208374071271923445854056708422967395010758220937787029541847001586315916658818806633611227887061952611498579627613664230009328573325436645287408917594006186743265285715999348126455495255413815935500712790656549193909619363787804280662963379325164601242355484205107452548083561659455823718247789650631692506146930700288146517914452304108000312439525629786061452125126913283051111961021246879178305228000357790847049266675586703830161952015778562212170886249378159065510536720306053274581803130372705122998971591650017410204928788986598604005916697583127569104317480780900782660807367522843377255594918549507374796422374737638848229146212157346034378015684535150627294676746789087265643318592083824048296951219826126286348000608391994999769001267651794242055858705298344585989350552196556049394519679964587254982027216057900628653505884039944777816596927992422224255724966021733260897221990406295984224773268445882658622358420959634098685931518281532908944728381161678926290386196116906136307689900823185892871141343639559371491010894648684552591698177334152150980554001093801262471884536253520125888627411395773275209344477091376719388450060745183288246935360735228567728895805286804224546079682556680929376932965716670688369458034983237365271680594809711681053501031846618875513468605038449497737082014725305219930733687447105837193617919324361456944675229929414108287551552529587782819639531751674707239955308446740783923415428449031935173814858765080731589459347666077771701526142576190696684232320546208987303858200834363512833436483541427316280110561738111696533435298181632380448500723247689457425323527328670585531632054991125417068495872442614802965583727229424016542847043637906098360149684525730396037392872929197344551649210451812992118117759035121974141038970970932815845140472316205587936336618715377075873714226133177625314249271710653285307644169970275380178747431046697871271492587902493715811637061406548076336092172605739905981552256744033991291387991982714238703107280496913869620978760267635903820289018103508582541095203068225230626518097956265117962722360215235188906926357627592323610251426949629213815515057632435214914714214693260735292625717864918292720757180024607288530035391099952137989271623038355907559620039831339216476534690184541419082868635117064673529105254316194903899908942949712159349832192538544682032352024920289963732643165170667272226908598771391286601206753437978690192754644749860201648778629755652955149773549903082149283294098435965796159653006907388618040166061246861630405094158445808782862260730706799520819390340939918457201293866410506920504337337782527848988904031194454599070608587831399700142678129104061515692225198637041486414139286348901553200174294664237888106179872114799780209628075055311955218332539016503045873013562562247041673292175124932285204035811366401545768916715595346021054313917580230315724504649408941211767873638164439016327017512296210085874876082476750317727579544671396239059450936047738568485443397222842279855674793802096221490718354143317109755572688657780984547973362112480798840639475686884582697542020292792087966279763596947028284697769811929667889125617364484275716320197339227864954590896178405871011354720245359958969930988770878671344747479293354237028048131066504329680193224947268444372625187049840829482807492071698163971703750113398807804772045678458513000588376432887324398006361704100529110059927253289038290171445589925253236659828226936662804053181233069541878210716245251101790545448700507019626659657064942144860841111794127170161107880627886712258893913775035266380494903055628701188922947790227474859998878906420761358888601676703474246414581299544169139294245069650032921910392366180600851355104768579628220132349854884548612963029409466904894055466625009419980257269648752647261701270259122184179938677766665674698518284589536120497252312560612601832496302518996943533146556977978715009740211860708687888533502306162845733674799868260324390480830199417341481850111671115539513305133289205411331405758854760964347204333408066729051506068704582192397135822061166762360767069152482658736607033514805333034852167294439144597670204207603586272614815588295106036447368426387203210762607316731692433863900158066555911233909265097901611539366045364893256831771731287353246114121789815107428423969389348655374809754404910931433579839382061629635940703914207260735503195341842360276819472585018737320182257952168733033274698996363297742027172642076225598924993123842992039833203033591340513401351575032221029392599926065042159538376523290002419634949548009561266763824724090993116879372539900745754854470309137231132841492054350825004524102122715387057485156637504850921831027300436263449638460103585008449087294066898840006235098057235694451101354345135322323813686284230333006333374838679956745949210291498192722719539902963763498864897370098805403483548660761946336167271335601691100085237149442094915620708535148190576218685226787453942696404727147214350225965677802878900634376086768615676911780262973948645546873660165742298074703883722303163846459672156881268016149842461053014105464804345130845027918622119712951037671044880862647968817493256113395992886042070780141388560900677942733596024809540796665473397448271901558996166571259610005924740010378058037457758017193324074576035574625433608374181850340591849139165984374749927275798692003198568732050539761926871553892511395046249724121609726744814298740769935681277652780209064596879336458090872921868448676009699569246626303865502220363229314313169471777780285989618575033754120075562172479645703518120021335201470455334575406266139984758976175301792536130089878186143123725832802412112186644826024138608091716465064578579010067122368440119017450807432527323383018210574838310600122222703332524052559608850324455142372014063314924824671647399271765412164210771534669921933150657477417807600806741267322681824529839258260723411224318889030519071727217209826393159116728642326734042926221573961047799112537693586142879098324361979838687941178952544098123624108653514633565482177320808336469793212695955395203776535365427301096916784848716274057057714062660955117675698968760734515387509454361338614398010518967224139809548936847178421266861068833902649245453985303799636530436495796046261112970880722875106747577926448309902091004667020681899005677392956091805633508490676011285337400914488538022435505881821421391221497529444348780057876517183232740261127079868491736554317357072130170371297718436867104058334381082198560458837180614678239732112991393637777590120556666959649513109521309259939802716048306390539213183619850298066861910550545075904028466521941439433168442066323247882639745170534334156324524100959429928271783890121785583438580257080012156520060703752500855136607192496615478259097507153502314308677061267604894276575696842077318052223054721283769375130780488261295306481490467219415230062253961652268044145602249952939301682990177474147807209181653971295781136758699187338673077659341429664032861045248459681185057496139018260564793906924311700805505289959542276128405260006200404207291209355240274719700642466436807593254794477319820289514487116201066870960996093358536907625040674793442893012013471296284728267785627164421434430835714247127723511915860553733403328915092215903797172810997033763888348747115183465295208157159127578890114443897471672718617432234295734776568403521451168176199810809651855012088528042189983752184435165601697000817412331942859524711863513565343566676354561837438236176111343230668330645267868314785990581756678830837223560706211279237005325298039180180198354319200192578005123754306215253190821415345187897787143174326909804164826244273945443058624783588454823212960755603865280751959837966255581291423536823776356964418618524107378117982509970049028088987734509734419665364316622270662830637444209450493606655352782965213371839047802376473183013535945423146036472375186379704057590930421827821946694187335041940997754292150027401763389332460407853299210080160037619372296463889479393121988424582187329576174973088896160660148858436197693174469059766152339712619141975850916320772420827895267128625022576361700600596320961465828536106175477694513903724371034509990342356237039906967162109206484024056766516561980294572321602961240340303776512368838025991125792812941930858303797696071589018418865461074375820287112361381364855724405683372526838511825394588637236972699167993106177470264430288228938228153981217797960359715299055473393128790338468215360512009132357331728546517410160018360855069121704306498358373483310246480745832845447835040444770873821770053080844974900319245628025830685058284519562736898062300326048992642705362852274947272626000281518979422565372151203987753431734006882222718405804464090113770844804148996213501587013897913096301404884329462535375394662994440713568646351979609866794401818190598216792419612845041305527661387890321490981973856108638403607067970629660984851725984885243409466433845731765593459019834339777491666200130796984365995180554252670233791313386450561715265043152626188633211888086171546375918769787039649789514595295722402176013395039686158820882709816176366511456735174714056855348462521147050517110624044750533802670937427050038418338648340473257256154285023226375456455345833926347155707369911007597256079864316254426420272034291494926786107314329406276233876754837111370716632858705658802501506599547304334168616615610991488528041068460937037039292311902505628236242262919132991664335651583488684235526113633363321354091905463326499527133076969352438878668186969067465516572366892793979051440138756365256446980045320888320000102278996031066926474554861623467551311227322525161691059288209880397926685201836185295219128341944686794846727193929215600424863073292443884651649671059599140816390811589015238556812332251404961677563032896240430729174153430132376186133285308228495801520928082918563573374654059453740214367951223119113470961450036876136692508993705027427705392258286392149755512901784956133304029730223087342635430808868291821098379354544839516896861631650586702241751513428176973165983737473841454537914504560794879245561062034239374604180586051269382704628197416038418825036710081505339516604206142237369919291840405418851087658308500503140042528906045601102351365879227813505890764886096886395112717181615803387332937173224442342983649488793381490710343986508473738994593752515623923421801830404192691225951336500075591312687971419083397408968290284842055486338508156096889862723753319616748568663360890809077985899951971638136689684426860495075860563512069482396287886977675380486381431998949168826922310760095433273778874296876121111407344049866761308383858310440005763309296220979564039475175699214286571237414464727137342225762222457010566619933219395907829139374901252350610858368898509571810143765617828765866992620587532600818895847820844730768011418000020995454559941492983278075165299702703410019641409924634793923624606760006658363093643185829200581275145005333401735830292660383282870755941491129974141974204822094383547700618731419228803055305773857190943865264734729641377329131025185031483650378671475346844171970019206336418324893583039923037585401140677998813189307658779157256769780473655983411736012279035316452954936814029898314746849307561739242116037205163795480056910960322235691056333955251699638205127524740782228901886734977479735545867633175948699309091541246529298007267226249160624998902826966232849788205251348024044957827423320809771936894417045371210734030050957765856434639646724609408420146504078534663247591721903619181374438783251592935227486952769836841199496923011778900282868090235095127539553077206045646492492418522672025622828140923144891405393974143600164195569127564335452292184449756243456840036342407759672010955277715567509281562946561575156504620780929788361689426946414935574701097172812104350019305099270818197139672088607948985816418680704524763706192335961095680659590651380326311942725213527630610776758741492563642392929675647887226170209901334777695059464708045394647118577763591816906428758811394455223282322414265928839403285520449624534593653203997964204732139886845367687445406202668301142020746550513644591267561756963970033874881523580891312626214428289243203394021405804749555795625093700812822438213741229547062662120287398629440705908449528946431482710901812813915169785243294103796221097748344522507603218412439164538690437884082962103448329623886334245261342901856179866258883617150319595378815578729108406322920626967395255750473721750327091085518689456547879018477878159467144874106043850304824415302481489915721605884026161806260624257851023582799679022292809393032441748391314002570424969364984000868086762515161042738573792810231896289443885633274508835480088670375326769987321986180466581566460712818065391360925758537436107577844783056783246799742861496118733263538077891853106110040166938317284596342567527213415787282050706618622464299837446451228414348787302380629319434877878183221003051706994251704753432005142111879498809658201899693055853100505178023452948992164649940685706857540081198940399780810317743131796190657593380875253901872403045810401663883683862160668103770610360159243546869115113286141037789322233180429802617949841562619975714701175856830379525355318865807691327232696750099550400145212158877183435602032577650563989146211618017741768325298784684227081142324019396583607731996900110284198439746413738510683247943740896196917842198623437641307400968460623324821341267895349047835322231402002679689736006058645741458928244472413486024443554605386031029846961558447168568595019471439733348225507797958496070475949310411564852069436493894953273046502465870860822739124308239245236295382695286871411567682416013110669813065809242636900925030100550465686644798398726637927493446520182328665064003727570109543714621868425952699294072137752398250602709870124523029947008029376608912934006340345385083743725227039521406458153849262190866960813568709917210568247131139875018972737949357794599558173566233455910568630016523738113134830534494894775137292465538817075525303377110550328017742567873625390386564792735702345918001733203690171459244101248343199485816705802762743937014390402997218846405497868630983891492527381427626128442840228290154458041779666832843745502118400801617078228325805641820362577867646370167539799857345750905792850593769031080453374875212043974769437712929890790307079920343565978138300900098903558197298071509452102848153574859700371818090264115361642983276608874737272091139495229293692137636981443550657838333672799106741991448507933134766472093165173125381796274915310634610959347294970842011255455030718789278414862466914522316666724975505566171618868686193634708594822075978847666927447844798932897009470980001832035073480066561708749901727023314320827067136375089322357136481211318892289936000093024924238520034252164758946694894951200081838090539788609506945230038097016440779909467796723919872589475351893557109801747324036629765345684607451487920942387440580902837266974718897710180668942994614567568132110700509706191736915941753231908815644037276610159424462754108972588596958605843753412266551075493474695376286420476589679201143056771776885250356945085109865129090283688064114617687550293007558367247835445670120028151041064352757567042436832783788678919016269936321611827584746640519707789784844665050174340625842594602744043367812477949561700363959485824618965683730184171138173960939248901933422238637791129932889143714563092430182198664755176325133479230762104238394300208178848136429892341296110734845042741292887192013457927822746460365042063548996137674666840446351962943880354567039473659210212221083946878874257193219631676947609068311323718936975229000661219463439534147677284207877013914375717957774818804053834045841726894166154986365985091072233865141046454825740572168870206614105234546310582945555323285981429713143725118768521993947655218232652566819883148774382278630630442837160803930445158684995639480136403846738089624539709393464176666815427670732800022995063171691912304048037220712294555102789155477363101302777526136412981191243083855459517121140836035720933072831710127579950611270295333881351982449501631992325542397695098752202413803894842756173184816401138617727724691220282058431133908464236668516688124857649962261127878768475588020499073486697988184759893398378238590458978321084761840205163622443838075862677230750763699066378326611895221772378180219938724334085445543723269418906300777439386925606333590576330065218729198324356625229342483997588571921049870607424762266548423909636640589018184701932309421425582915313214407274984153562498972645964611774228804113437198967377955640783484765371672141861379198065010042351347502648760073138706879155990355128180014499335882751809000886674018575678118001326901949430383499355888483800333861354595506473813840776543232462712476275602389351106704111952392480343023899898095558729798772773745331722084793983761886962941083118909072736994520460509483448031912957995252854359897221722124139884519435118569259671896503534719470752716156494902096004762973237846832377830557268487679550714802580233868052845990057730013020729877587768679698697612894768332497746847436675010410811431188263967474539173610807136262279027801323739608424034260379439948270757900864309410012925430174581088049735695448886188329276196897691927318515945474644904466159788545748955739020325282471826257502928214386093680204942740725665132558284056657779605284411629609390929408981876940211941749414359508005825990900929344490159228666573412704964301144443877719189106270950928714794545337979258222218059665626335254720727470327474811605345165594072753478071174934686885306843167673617245741115754546720999666259160988468158582142277859363424065626794375202159984838025933223121343689305226898981340182825873753069313325293361504240400066446791698428946139775191967515155054645194402449364091678830434844166323432227309845070434810294664805115346725543833087763586830584491557648223500326155498935350701446861452411779055021317886232743266001439922304720405044490013399463335488581212561339255628671958464711107038700715994263559441331480171474957089032899807010919852316479181546547171973387012183965414775703959988529125838244457753262783727333404081912767575440608950920154816347824073690275868200714577838601303037049777412868522597322623399577294525846661740146494968222596906989462202734411275683089349395022526348200943190884231544682660766841999221299057782379080946772719259828880196679705833776125965217976560181885485834595482851557454569288451855438337354356942888104835576026161602057251395497370793428362159772498811160955277982164704204695457180934849564673613400101581966253642583853127809160866297758064214900960415223360138100594508756815651928859182621340297220481662387676756851415640979006435917710353842327562329744565501482807303585360465695280652806813395768685230983634819935843025041593001241547410681108169581168200819139169874328796337772646005340885263123770597295277248721638612036351275944888057498455880813344478005348705772286545469485931609878537501316475102178238454914031407700393352086537029782447748813580250424126115930570518614004638215669948935443830182466472195616823261953251156256692902839531377436659234410624830761061740665794996076225803527061463095086191625141088304573790252029751042578288972412772740696651436890366810536473743079217671535962347519182251390610697032300160876417974290450712570420007417873051600560425147075657367359285031264622727263013261901886632231935742120160734137171465475196121846379293052252101348698797983696892789748330432007522114060982277690856209525499560483130798557995197451574357214461456166034627702738253902481341635668306562969907659999435120388864611059425530370326568974737619700754661686792952402569420228227385972308598691208767129283019872652577899757002297162534868898505388967559890039966490962822808923606933951164467712474338143971216579758072047106784714251051677134151550879037484310722416865262300736374072114609695561770129019322750055329343785742980650333930041728641468379420605903705168958324891487711736103632973851060598556651269661734590025998776276374059508166053869467212521316935324436021186869507653866199611251337974361111878715306071887077949116168298546227920497588152705002023753079947845528711022734116752392451962558745456166548386268098424597290248843634782029179903311332182215670244607170802282644891696762134742304765351821842075907642048700133678378349988588969721205842796665581474634602236372766460949754161036446075793922009060526554301015195510846664730776545225347907876630276510650858946988419227209130175604731808428440792317592979893689141103732245422164298261960860736677854867656166415915844683762574682459491570479953914132673505281139114875813061801958460838213561192671191513913915384411233468883000527644502181243168924108514204720773207823585891482061898493992407554857064391478247669725822649998845775171475175156413277900166260315085284920529428247366877532140119816936874600127220499167669553142362979396818871670284271420646878924673393883302258871401885680693871440873105421428359294417476656553958816438983860801423041328045016770284192056378784312190764871291368090209754229556678880875970151990312315100644218555949547140932585304809742670039602851180241485415436264649641129884744659830425815862639011676899194413390186972303097252096926516956731153928374670445874944413348891639610190066527426492403467263856995121758148359362339948684717898

phi = euler_phi(N)
d = inverse_mod(e, phi)
M = pow(C,d,N)

print(long_to_bytes(M))
``````

It took 2 hours and 5 minutes to execute on my laptop and unfortunately the CTF was long over by the time we got the flag.

The flag was: F#{b1g_m0d_1s_unbr34k4bl3_4m_1_r1gh7?}

# CVE-2019-6690: Improper Input Validation in python-gnupg

While playing the excellent Insomni’hack teaser CTF we got sidetracked with a real security vulnerability that wasn’t part of the competition.

We discovered a way to inject data through the passphrase property of the gnupg.GPG.encrypt() and gnupg.GPG.decrypt() methods when symmetric encryption is used.

The supplied passphrase is not validated for newlines, and the library passes `--passphrase-fd=0` to the gpg executable, which expects the passphrase on the first line of stdin, and the ciphertext to be decrypted or plaintext to be encrypted on subsequent lines.

By supplying a passphrase containing a newline an attacker can control/modify the ciphertext/plaintext being decrypted/encrypted.

# Vulnerable

python-gnupg 0.4.3, and maybe earlier versions.

# Timeline

• 2019-01-19: Vulnerability discovered during Insomni’hack teaser 2019
• 2019-01-20: PoC created
• 2019-01-22: Applied for CVE, vendor notified
• 2019-01-23: CVE-2019-6690 assigned
• 2019-01-23: Vendor responded, fix committed
• 2019-01-24: Vendor released 0.4.4

# Proof of Concept

Hypothetical application using successful decryption of data to authenticate a user, and a way to exploit it is available here:

# Credits

Vulnerability discovered by Alexander Kjäll and Stig Palmquist.

Thanks to @dewaelethom who wrote the CTF challenge.

# Math Functions in AES and Sage

AES, also known as Rijndael, performs its operations in a Galois field of 28. It’s a construct where multiplication, division, addition and subtraction have new meanings and implementations. We will look at how these work and how Sage have made our life easier by implementing them for us.

One way to view the numbers in the field is that they represent polynomials. 0x53 is 01010011 in binary, or the polynomial x6 + x4 + x + 1.

Since all operations in the field are reduced with modulo 2, addition and subtraction become XOR. This is easiest demonstrated with a few examples borrowed from Wikipedia.

p1 p2 p1 + p2 (normal algebra) p1 + p2 in GF(2n)
x3 + x + 1 x3 + x2 2x3 + x2 + x + 1 x2 + x + 1
x4 + x2 x6 + x2 x6 + x4 + 2x2 x6 + x4
x + 1 x2 + 1 x2 + x + 2 x2 + x
x3 + x x2 + 1 x3 + x2 + x + 1 x3 + x2 + x + 1
x2 + x x2 + x 2x2 + 2x 0

Or seen in Sage:

``````R.<x> = PolynomialRing(GF(2^8), 'x')
S.<a> = QuotientRing(R, R.ideal(x^8 + x^4 + x^3 + x + 1))

z3 = a^3 + a + 1
z4 = a^3 + a^2
print(z3 + z4)
``````

which prints `a^2 + a + 1`.

## Multiplication

This gets a lot more complicated. If we continue to look at the numbers as polynomials, then all multiplication in GF(28) happens modulo x8 + x4 + x3 + x + 1.

The reason that it’s not a straight modulo operation is that if it were then the multiplication of two numbers could result in 0, which wouldn’t work.

An example is `0x53 * 0xCA = 0x01`, since:

(x6 + x4 + x + 1)(x7 + x6 + x3 + x)

= (x13 + x12 + x9 + x7) + (x11 + x10 + x7 + x5) + (x8 + x7 + x4 + x2) + (x7 + x6 + x3 + x)

= x13 + x12 + x11 + x10 + x9 + x8 + x6 + x5 + x4 + x3 + x2 + x

And x13 + x12 + x11 + x10 + x9 + x8 + x6 + x5 + x4 + x3 + x2 + x modulo x8 + x4 + x3 + x + 1 is 1.

We can also see this in Sage:

``````R.<x> = PolynomialRing(GF(2^8), 'x')
S.<a> = QuotientRing(R, R.ideal(x^8 + x^4 + x^3 + x + 1))

z1 = a^6 + a^4 + a + 1
z2 = a^7 + a^6 + a^3 + a
print(z1 * z2)
``````

which prints `1`.

## Exponentiation

Generally easy, since exponentiation is just repeated multiplication, but some of the numbers in AES have interesting properties. When you multiply those numbers with themselves they traverse all 255 non-zero numbers in the field. They are called generators and here is a list of them:

``````0x03 0x05 0x06 0x09 0x0b 0x0e 0x11 0x12 0x13 0x14 0x17 0x18 0x19 0x1a 0x1c 0x1e
0x1f 0x21 0x22 0x23 0x27 0x28 0x2a 0x2c 0x30 0x31 0x3c 0x3e 0x3f 0x41 0x45 0x46
0x47 0x48 0x49 0x4b 0x4c 0x4e 0x4f 0x52 0x54 0x56 0x57 0x58 0x59 0x5a 0x5b 0x5f
0x64 0x65 0x68 0x69 0x6d 0x6e 0x70 0x71 0x76 0x77 0x79 0x7a 0x7b 0x7e 0x81 0x84
0x86 0x87 0x88 0x8a 0x8e 0x8f 0x90 0x93 0x95 0x96 0x98 0x99 0x9b 0x9d 0xa0 0xa4
0xa5 0xa6 0xa7 0xa9 0xaa 0xac 0xad 0xb2 0xb4 0xb7 0xb8 0xb9 0xba 0xbe 0xbf 0xc0
0xc1 0xc4 0xc8 0xc9 0xce 0xcf 0xd0 0xd6 0xd7 0xda 0xdc 0xdd 0xde 0xe2 0xe3 0xe5
0xe6 0xe7 0xe9 0xea 0xeb 0xee 0xf0 0xf1 0xf4 0xf5 0xf6 0xf8 0xfb 0xfd 0xfe 0xff
``````

We could write a small Sage program to print a complete loop for the generator 3:

``````R.<x> = PolynomialRing(GF(2^8), 'x')
S.<a> = QuotientRing(R, R.ideal(x^8 + x^4 + x^3 + x + 1))

z5 = a^0
z6 = a + 1

for i in range(16):
s = ""
for j in range(16):
X1_bitvec = ''.join(map(str, z5.list()));
X1 = Integer(str(X1_bitvec)[::-1], base=2);
s += "0x%02X " % (X1)
z5 *= z6
print(s)
``````

which prints this:

``````0x01 0x03 0x05 0x0F 0x11 0x33 0x55 0xFF 0x1A 0x2E 0x72 0x96 0xA1 0xF8 0x13 0x35
0x5F 0xE1 0x38 0x48 0xD8 0x73 0x95 0xA4 0xF7 0x02 0x06 0x0A 0x1E 0x22 0x66 0xAA
0xE5 0x34 0x5C 0xE4 0x37 0x59 0xEB 0x26 0x6A 0xBE 0xD9 0x70 0x90 0xAB 0xE6 0x31
0x53 0xF5 0x04 0x0C 0x14 0x3C 0x44 0xCC 0x4F 0xD1 0x68 0xB8 0xD3 0x6E 0xB2 0xCD
0x4C 0xD4 0x67 0xA9 0xE0 0x3B 0x4D 0xD7 0x62 0xA6 0xF1 0x08 0x18 0x28 0x78 0x88
0x83 0x9E 0xB9 0xD0 0x6B 0xBD 0xDC 0x7F 0x81 0x98 0xB3 0xCE 0x49 0xDB 0x76 0x9A
0xB5 0xC4 0x57 0xF9 0x10 0x30 0x50 0xF0 0x0B 0x1D 0x27 0x69 0xBB 0xD6 0x61 0xA3
0xFE 0x19 0x2B 0x7D 0x87 0x92 0xAD 0xEC 0x2F 0x71 0x93 0xAE 0xE9 0x20 0x60 0xA0
0xFB 0x16 0x3A 0x4E 0xD2 0x6D 0xB7 0xC2 0x5D 0xE7 0x32 0x56 0xFA 0x15 0x3F 0x41
0xC3 0x5E 0xE2 0x3D 0x47 0xC9 0x40 0xC0 0x5B 0xED 0x2C 0x74 0x9C 0xBF 0xDA 0x75
0x9F 0xBA 0xD5 0x64 0xAC 0xEF 0x2A 0x7E 0x82 0x9D 0xBC 0xDF 0x7A 0x8E 0x89 0x80
0x9B 0xB6 0xC1 0x58 0xE8 0x23 0x65 0xAF 0xEA 0x25 0x6F 0xB1 0xC8 0x43 0xC5 0x54
0xFC 0x1F 0x21 0x63 0xA5 0xF4 0x07 0x09 0x1B 0x2D 0x77 0x99 0xB0 0xCB 0x46 0xCA
0x45 0xCF 0x4A 0xDE 0x79 0x8B 0x86 0x91 0xA8 0xE3 0x3E 0x42 0xC6 0x51 0xF3 0x0E
0x12 0x36 0x5A 0xEE 0x29 0x7B 0x8D 0x8C 0x8F 0x8A 0x85 0x94 0xA7 0xF2 0x0D 0x17
0x39 0x4B 0xDD 0x7C 0x84 0x97 0xA2 0xFD 0x1C 0x24 0x6C 0xB4 0xC7 0x52 0xF6 0x01
``````

## Logarithms

When we have this table we can answer the question How many times must I multiply 3 with itself to get number x? by turning it inside out:

``````G = GF(2^8)
R.<x> = PolynomialRing(G, 'x')
S.<a> = QuotientRing(R, R.ideal(x^8 + x^4 + x^3 + x + 1))

z5 = a^0
z6 = a + 1

log_array = [None for v in range(256)]

for i in range(16):
for j in range(16):
X1_bitvec = ''.join(map(str, z5.list()));
X1 = Integer(str(X1_bitvec)[::-1], base=2);
z5 *= z6
log_array[X1] = i * 16 + j;

for i in range(16):
s = ""
for j in range(16):
if log_array[i * 16 + j] == None:
s += "none "
else:
s += "0x%02X " % (log_array[i * 16 + j])
print(s)

``````

Which prints this table:

``````none 0xFF 0x19 0x01 0x32 0x02 0x1A 0xC6 0x4B 0xC7 0x1B 0x68 0x33 0xEE 0xDF 0x03
0x64 0x04 0xE0 0x0E 0x34 0x8D 0x81 0xEF 0x4C 0x71 0x08 0xC8 0xF8 0x69 0x1C 0xC1
0x7D 0xC2 0x1D 0xB5 0xF9 0xB9 0x27 0x6A 0x4D 0xE4 0xA6 0x72 0x9A 0xC9 0x09 0x78
0x65 0x2F 0x8A 0x05 0x21 0x0F 0xE1 0x24 0x12 0xF0 0x82 0x45 0x35 0x93 0xDA 0x8E
0x96 0x8F 0xDB 0xBD 0x36 0xD0 0xCE 0x94 0x13 0x5C 0xD2 0xF1 0x40 0x46 0x83 0x38
0x66 0xDD 0xFD 0x30 0xBF 0x06 0x8B 0x62 0xB3 0x25 0xE2 0x98 0x22 0x88 0x91 0x10
0x7E 0x6E 0x48 0xC3 0xA3 0xB6 0x1E 0x42 0x3A 0x6B 0x28 0x54 0xFA 0x85 0x3D 0xBA
0x2B 0x79 0x0A 0x15 0x9B 0x9F 0x5E 0xCA 0x4E 0xD4 0xAC 0xE5 0xF3 0x73 0xA7 0x57
0xAF 0x58 0xA8 0x50 0xF4 0xEA 0xD6 0x74 0x4F 0xAE 0xE9 0xD5 0xE7 0xE6 0xAD 0xE8
0x2C 0xD7 0x75 0x7A 0xEB 0x16 0x0B 0xF5 0x59 0xCB 0x5F 0xB0 0x9C 0xA9 0x51 0xA0
0x7F 0x0C 0xF6 0x6F 0x17 0xC4 0x49 0xEC 0xD8 0x43 0x1F 0x2D 0xA4 0x76 0x7B 0xB7
0xCC 0xBB 0x3E 0x5A 0xFB 0x60 0xB1 0x86 0x3B 0x52 0xA1 0x6C 0xAA 0x55 0x29 0x9D
0x97 0xB2 0x87 0x90 0x61 0xBE 0xDC 0xFC 0xBC 0x95 0xCF 0xCD 0x37 0x3F 0x5B 0xD1
0x53 0x39 0x84 0x3C 0x41 0xA2 0x6D 0x47 0x14 0x2A 0x9E 0x5D 0x56 0xF2 0xD3 0xAB
0x44 0x11 0x92 0xD9 0x23 0x20 0x2E 0x89 0xB4 0x7C 0xB8 0x26 0x77 0x99 0xE3 0xA5
0x67 0x4A 0xED 0xDE 0xC5 0x31 0xFE 0x18 0x0D 0x63 0x8C 0x80 0xC0 0xF7 0x70 0x07
``````

One can notice that the first value is `none`. That is because multiplying two none-zero numbers never results in zero.

## Division

We can use the logarithm table to perform division, because if a = gx and b = gy, then a/b = gx/gy = gx-y = g(x-y) mod 255 where g is one of the generators we talked about earlier.

To take an example, 49 / 11 becomes 347 / 3104 by looking up the numbers 49 and 11 in the logarithm table above. 49 is 0x31 so row 4 column 2 which reads 0x2F or 47 in decimal. 11 is 0x0B so row 1 column 12 which reads 0x68 which is 104 in decimal.

347 / 3104 becomes 347 - 104 mod 255 or 3198. 198 is 0xC6 so by looking in row 13 column 7 of the exponent table we find the value 0x07, which is the answer.

0x07 could also be written as a polynomial: x2 + x + 1

Or we could use the built in division support in Sage:

``````R.<x> = PolynomialRing(GF(2^8), 'x')
S.<a> = QuotientRing(R, R.ideal(x^8 + x^4 + x^3 + x + 1))

z7 = a^3 + a + 1
z8 = x^5 + a^4 + 1
print(z8 / z7)
``````

Which prints: `a^2 + a + 1`

## Postface

By understanding how the basic math functions work we have now laid a foundation to try to understand more advanced analyses of AES, but that will be another blog post.

# Solution to 35C3 Junior CTF challenge flags

flags

web

500 (variable)

#### Writeup

This was the challenge we got:

Fun with flags: http://35.207.169.47

Flag is at /flag

Difficulty estimate: Easy

# Walkthrough

We got the server side code, which looks like this:

``````<?php
highlight_file(__FILE__);
\$lang = explode(',', \$lang)[0];
\$lang = str_replace('../', '', \$lang);
\$c = file_get_contents("flags/\$lang");
if (!\$c) \$c = file_get_contents("flags/ot");
echo '<img src="data:image/jpeg;base64,' . base64_encode(\$c) . '">');
``````

The objective was to read the file at `/flag` on the file system. When loading the web page, one is most likely to get a warning from PHP hinting that there is no file at the `flags/\$lang` path from PHP, where \$lang is the user’s language.

The embedded PHP suggests that whatever is at that file path is Base64 encoded and pushed directly into the image part of the page response.

By manipulating the `Accept-Language` request header, one can alter what file is requested. But, all input values are sanitised by replacing `"../"` in the input string with `""`.

By changing the request header to

``````Accept-Language: ....//....//....//....//flag
``````

``````<img src="data:image/jpeg;base64,MzVjM190aGlzX2ZsYWdfaXNfdGhlX2JlNXRfZmw0Zwo=">
which, when decoded, yields the flag `35c3\_this\_flag\_is\_the\_be5t\_fl4g`.