A document from MCS 275 Spring 2023, instructor David Dumas. You can also get the notebook file.

MCS 275 Spring 2023 Homework 5 Solutions

  • Course Instructor: David Dumas
  • Contributors to this document: David Dumas, Kylash Viswanathan

Instructions:

  • Complete the problems below, which ask you to write Python scripts.
  • Upload your python code directly to gradescope, i.e. upload the .py files containing your work.

Deadline

This homework assignment must be submitted in Gradescope by Noon central time on Tuesday February 14, 2023.

Collaboration

Collaboration is prohibited, and you may only access resources (books, online, etc.) listed below.

Content

This assignment is about recursion and Python notebooks. (Worksheet 5 also included material on context managers, but that isn't explicitly tested in this assignment.)

Resources you may consult

Most relevant:

Less likely to be relevant, but also allowed:

Point distribution

This homework assignment has 3 problems, numbered 2, 3, and 4. The grading breakdown is:

Points Item
3 Autograder
4 Problem 2
4 Problem 3
4 Problem 4
15 Total

The part marked "autograder" reflects points assigned to your submission based on some simple automated checks for Python syntax, etc. The result of these checks is shown immediately after you submit.

What to do if you're stuck

Ask your instructor or TA a question by email, in office hours, or on discord.

Problem 2: Submit your homework as a notebook

As with worksheet 5, for this homework assignment you'll be asked to complete all of your work in a Python notebook.

Submit everything as a single file called mcs275hw5.ipynb.

If you work in Jupyter (as installed with python3 -m pip install notebook), just name the notebook mcs275hw5 and it will be saved with the .ipynb extension in the directory where you started Jupyter.

If you work in Colab, you can download the .ipynb file to your computer using the menu bar that Colab displays at the top of the notebook. Select File, then Download, and in the submenu, Download .ipynb.

This problem score reflects notebook format

When your assignment is graded, this problem's score will reflect whether your notebook follows the notebook format guidelines below. The other problems contain coding exercises and the scores on those problems will look for correctness of your work.

Notebook format guidelines

  • Title and name at top: Include a markdown cell at the top containing a title (top-level heading, single # as the formatting directive) and your name
  • Labeled solutions: The solution to each problem should be in a series of code and/or markdown cells, but should be labeled with a level-2 header in a markdown cell (e.g. ## Problem 3 in Markdown which renders as Problem 3 in large bold text).
  • No extraneous stuff: There shouldn't be anything in the notebook other than your solutions to the problems and any explanatory text or output from the code cells that is required by the problems. The statements of the problems shouldn't be there.

Advice

  1. If you want to, you can begin your work by making a copy of the notebook file used to create this assignment and editing it on your own computer. However, if you do that, there will be a lot of stuff you need to delete before submitting. It's not clear to me whether that's easier than starting from scratch, so do whatever you prefer.
  2. Don't submit a .py file, and don't just rename a Python source file from .py to .ipynb. The way to make a .ipynb file is to use the Python notebook interface.

Picture of expected layout

Finally, here's a rough picture of what the notebook you submit might look like (but obviously this one doesn't contain solutions:

Note

This document contains solutions written immediately after the problem statements, for easier reading. If you want to see what a solution in the notebook format requested above would look like, you can find an example here.

Problem 3: Tower factorial

Let $n$ be a positive integer. Let's define the tower factorial of $n$ to be

$$ n^{(n-1)^{(n-2)^{(n-3)^{\cdots^{2^1}}}}} $$

That is, you raise $n$ to a certain power. The exponent is $(n-1)$ raised to a certain power, etc., until you end up at $1$.

By convention, we'll say the tower factorial of $1$ is $1$ and that the tower factorial of $0$ or of a negative integer doesn't exist.

Write two functions:

  • towerfact(n) that computes the tower factorial using recursion
  • towerfact_iterative(n) that computes the tower factorial using iteration (no recursion).

Each function should raise a ValueError if the given integer is zero or negative. Otherwise it should return the answer.

You can put these functions in a single notebook cell or in separate cells, as you prefer.

Also add cells to your notebook that show both functions being tested. At a minimum your tests should include

  • Code generating a table of n and towerfact(n) for 1 <= n <= 5
  • Code generating a table of n and towerfact_iterative(n) for 1 <= n <= 5
  • Code that confirms the values returned by the two functions are equal for 1 <= n <= 5
  • Manual confirmation that the return value of towerfact(4) is correct, where the return value is compared to an expression that you enter manually to calculate the tower factorial.

Be careful about the order of operations

Note that the tower factorial of $4$ is the rather large number $$ 4^{3^{2^1}} = 4^{\left ( 3^{\left ( 2^1 \right)} \right )} = 4^{3^2} = 4^9$$

This is quite different from $$ \left ( \left(4^3 \right )^2 \right )^1$$ which is much smaller and which is more simply written as as $ 4^{3 \times 2 \times 1}$.

Warning about big numbers

The number towerfact(6) is so astronomically large that you should not expect it to be possible to compute on your computer. Python integers are limited in range only by available memory and time, so if you try to compute towerfact(6) you'll probably just end up waiting forever or exhausting your computer's memory (which would make the Python interpreter stop).

Solution

In [19]:
def towerfact(n):
    """Computes the tower factorial function recursively for strictly positive integer inputs"""
    if n <= 0:
        raise ValueError("Non-positive input are not allowed")
    if n == 1:
        return 1
    else:
        return n**towerfact(n-1)

def towerfact_iterative(n):
    """Computes the tower factorial function iteratively for strictly positive integer inputs"""
    if n <= 0:
        raise ValueError("Non-positive input are not allowed")
    tower = 1
    for i in range(2,n+1):
        tower = i**tower
    
    return tower
        
In [2]:
towerfact(4) == 4**9
Out[2]:
True
In [3]:
"""Prints a table of values from 1 to 5 inclusive for the recursive function towerfact(.)"""
print('n      towerfact(n)')    
for n in range(1,6): 
    print("{:<2}     {:<2}".format(n,towerfact(n)))
n      towerfact(n)
1      1 
2      2 
3      9 
4      262144
5      620606987866087447074832055728467930919421926519911717317738324478446890420544620839553285931321349485035253770303663683982841794590287939217907896413001562813056130648742361989551149212969224876324067423266596922285621953874621042323534088395449559871528186289511069724375976843450129507660813935068404901191160699929926568099301259938271975526587719565309995276438998093283175080241558332247248559779700151125941289265945872056624218617237890012082751842933999101391215888650459655385867584223151909481355326107360857559379424168644356988805892732524316323249492420512640962691673104618378381545202638771401061171968052873214149454639250558993079337749040788199113873242179763112388758028783104830372553378956776992639131474698631635403592318398169766049527523470365775067845991971903958476530419618328370557877443728831536095595687278188136535874255961528052368239396098797700270909915520296477257449337496386440043216964158869797025960539307850266981043908205789164810126844405305719909486930540196091579061817941577193796914388142649901529545033700511196761537723321992911984637319290332263725820892098495478423635408198945460633049064941111931027698537027471927911062690313990295177372317584723804721189364511427905178136857822150332381916036422221580633685555154241932878964260108523361879921484901408275360523714171154532628218891905218752904711236625818819886923111271809647404471228704931682411384093113024792962857532782863101903587702191099392714060187195954392300190493679949589600313969267376351405608643929098427395200104486083111899853964304610758473277805554587439480383928476216931141758785031250627364405235869678559439444545227666592406138337486846016243289650621435832209315605503377196096021580300792698754457973602845403993921462211927841458267898134874980957060377354654918045444793008000882470017928275815652451786276451199637925745963061328280451266907720155464919652537995830833524781974006446820930880129957410807749296112288199085499565549310893971115388988153908811684545030381035984515688573254825193520417330269951810865135265587428530428871165742440180326205672339108762673923507302829080947467916299840992454977694170434544545004553705499927898038231431842130972614908743199239339049537463039908011539775745163363111687894512144470171171599034321325916810668925527973908585629534468475360907368975854136426617805540275265536695980531795741752961781839337939697229977229581413622884422740279829977295915284666545124027431227248638921658795003647241763610923587053531289708189255142940653575571661872389194302498469192576910707929001249173656858642938851162325932929971268708566073015981028382563468517866605216260797356369591713470804994044071903886744093904410162463016801850076971539838697051896158620091762261500022234753464807726619508932259165499658626680060347482271638544969762203749882434829784967867025874471974629293454271244798463297942525019505747161968798858062552781087953269221190309879654439254115418026636789004724541272121253497943662018997145763503523369967643185659604571680435276640625024148076205499536346902080926003964431314927427173668275389393026392328635534315122068843335610761770845434372115640889658820852405136637109590065139017174875317326958075025561929277217815025039734193299498885243764462790619673245800298271451436579611223597612211479455640754703221512995698918281166944267829972170753555014026296329897020471435909810439395954090795545016914714446924465283776735274343167533834274720996602409995665371967345799642864885644857368252021445104111807024240910817060673567805339770212320504490194390778981041095857716422179677233642050085309950750961662047685962353814133921289381813921259086794924054584412880804865753967455899215136744866406696751747407372480759721653626616776178546924271472508570825254080549477492826880974482677669111551245728821473098493755388353466763714462228219181498136190553908738691035862076038883721320659088324283410846324339999134692900717857569149963985918857751453397382159774774285792528647213470035291185723214997192088765194722778927665975818312843716205219960920944919375073862693507630188254978742421353751249622298284939174031859378058062106930498584624853523194092255022405607054500392441837105943277587823634623687560923403343239818886836040652096479941644523023456707104876018047244942130066318938130155889791991428879141258493822501488557974835976622457460660858724403111700636195120767246105635494441118490904754243647209488007186062789986946028914360868322544677988564760491876182487093444656344609202784063076301420375979508416374167343320110442401817656079876573080258225753326682553922015194762878618796083754315162957822145661096264686892462805920819173140907622018618476138406382879366973096919256168656087217269391421631739585893322204195706304285909130701815919295595732449478143143909052397474093099288157174834348320254234008185824782535694374417838936776046058303007470844903864272365958752352576364789609557125766681006667763643927538034681179525248480527521026279097719690528689992267976014652649490814337906227291723725516838655104885968652424303417785949340541159153480933307765407016373799437724631853080894642774773331929416549896336317798523713766705151588750707094421786790014833654371208756866544908809266028042799852282134466186935970514191284235642315443364609616097333676882489800825247297243685994399204486695865683807912151907065632872896961871130327409692196701577141592558036889251309840748674053253695711822005982423075097637063844514982147207675036150001979020612565735459361685280793393539514997474800281271988879965520817636150323236426770243663175319637221924528808481413546173847270528060523891440274461195426149133001285557351911218548539614477636412010045445103772338793934302699153550748213216921277698969261465133243126496679512229191291414514483089871282906025485541898252262897240467195186683537598820863310116296225022345054191109990503432711800293292483131545746409749253838720924889944747386536495646585175655639704518009085625548829857453118030878168826759643739525232895473502994399669338507727388671036351218810645021679308218785907605149656799905887045518671323684445277786584611049656430396633387484914633751614603182118796402680949901726119247287913539639164796775540142275304335166024898758854930487607232343956193104795278099599905994919395902021234837696938323972751758105173977355610809023870308479913032092767674015353418391099813487379113957226760803034497903289452025664393482921592319875094300430271253674758363143331725575956177568758420741689327609640995135775615758667549064218114401402179624403190329344474567660602726267327172588603212757164573403812755284962582160004105290770808335932928520976267032509724321036742734755890117047037973807142192570106133126748783057557563952549141456488196613126097495364890941712734406168593443603668275311711133874507839728491299497800359269382192667682306336110652560276671574948339869683470250530697512361710825893742007410426277795877640924249863112903534221750939500345800491316503160955155566759645151316441795912514538947583865817469925695758597657887011850763350271102143162051110901102974814123967870153277499699384519880192453715669336586856789609086835857089704412737567194682453243107336729566025999906911246440595023931719078520831490247287358117567132690605052529172953083309387423784797060740165507220379508804745445459892733895752504758121436253768037331907490721082789232483704931110573457462094123278452024889883483126756145627657587219800765228044336261601356889545625640078513776829880230014045345134456551672907296707069261284051939723013023210073514755738985512280209960055089435909882711059954684981682387113152167393041917659258830185777038934181830896804930404217534213242117692365121772507984617469648920566622062714129273188014593399973764659571070873972870924439258221435907812348596166244492182932062025584526575202335750237823799332229079581906268578226420245393404886503914275246820398703889912621798257535542387361588286845863422966090795247488138081335225485389572490345651581655651382271674866054262288190597372977889408563727666867063577611245500247157708504051007036658678298737282637483586028711482915084715307785603676158244779132010301687770180893837904829570137586440506950174313251462011226613390877072301427012923106597335452938027902081505504167441949259316348137439894315525524435189490183804249170435211827583008943379332361736225913939898702095671943678807374499391153173842336634038786990615618597566347025277087592599929755641969772019546716755712177123974482836921478914963626937887492007247691866161813360941504365822627120903137460405370864590521183924772867619363271364086683881861192138257680521396643314514897308095037986575786211662786846355478018984293431332312923549940677807203459750271964653887677188177159883533205550917663480801662097876182054735535311609308629238124830413563546668664688313771208198444155884447596718933408979803393808957076857410098564271280658535479862006982155296996709479570359645524313976194436632466714326936538693732672344801948708422352473688908179283627591972465743000159572095019347215134010102085223651237469703515224786668838430733501367807202371346594876835365839853149647400633826625756481265247649157859890019018546733484404758223804567420562613789324955386722632826054024577326714491045685541754576425630927213192138772897916125747954060131918972227986910477649349822420737830026037382449865466152471395556578686233132739567554856704804187010087872262192235991229953302957071530999476754874688737594246591815923444076964097253798846701172898586508395347415607552721809540487935709798434132989716853318657794470432181816874616432213250479807742070410205699552793667877615303801914202172579672389777503171157305605736510759281430693695281771025339633747239042764230461437618127391179997858000891713258654057566741080446385043569374045635189593658193493998747648139887641570441624410406455174326634096341136143216051746944478932799208248705579105803987010504180163876127167732419283800923998781362584181674256562486399344024213371821948791639485059980380490138046122124367420246301181269254608646870394541890618690982840036382318094367046008976136589135926603563935616506345461718799622979372098339890995109837422560270713748659893737168686264650653377296475850649186054579445782286334381201163851172474964309993326990800119160784657145401449281630389449362831390792541351837228996006671430870611598644303090377458396566931514546782787267819836874461221887120818681527521292724305375859434938739307328318714813824270992236829275946130153178691069218023293023956085240527232236058245985607967681886411486835997181171688505411933251234237830703401972476434851530393458704953738386227745799069073642724200868572871289657650404967098367100930821865179580952603014210567336139084357250074110490454666214912146385639324131875475161772963700550536059864807257285425139488600427538714951776562446276012372632440550102532675964501644290655958338879900774894011259410698045448697203796912903662584597126587314011589074073372911140344721326858161515669655380992946848204500421374559426004497123167327729487658902503107780229797956412465845347775476773693671392051408031750979895876045649182951708194417075194024349600057547712982354226306057546104313932654078904645738468156578497517269888753719544285982219819861271049469636972325876252988545184509007527594056415915094994979058821158692639262760593273030410243204070690740163234569878359118245424726292828791286065232780336337594328867722457833695345314514476044775455490953955378653786150143623679142070972303195451864980078779153578981697174250528611486221023772772296864926285404643177913178499197249631382364726477012800080240004996639808302669152148291053528065940517957586749293226377768716383742689968951862906784952674131085843366226864730518548707844491344592858558552434325049292595028930476059097761739570487713570744892423830641808574818829272237537548101222965150000718491612931858006123092345286757784949329438164753566004683235002020939887895273086720515264789148177006749104539079948057756817330531853164255763192947879674532150178479034799968949471487642582675777519665243696450028000801259798465330265243426293744993898602030773034122959492235103331798468656484213639027959788804349561997564676008617946894846362939538036669274964927922265308788480403704742170951394772010537147727215486042077291427665299895866828862735863315676673687861468257672365434731134498611209804340808283966647310965203613406790921394771001986101208834828854100647374091042972107422926767137574163196908915698835343723205299919719615611196624338887588560570433772409524249298831514292988217767977207591660470864619981814355455018281147978269002199358031832184656625270762189820569210154197227256631993082811062140701582108051495733697798658749517764783454395432973892041192818932836103742535677053698311186497875649933801673618530865782967790488492431874304217703572928985938990296008520309547894401791044185563721700311640914489480035682728041995154263665650177134995328990427905366690967014917325119830254484971832650232256676637824994703158329751835686111996607503956555088577801562878311702335576588489387369137545092354135057133602141645825759414264490780545910221936770612779843320078476243311766155256329224918629855874437477124994644797643061938634598682302714736912708023495201220270261296961947156047136660131876188961445236053706503100827289046945302219099596174274524178158055658406510635017734264512839541891814992705104452647463319192580612885838554102362831188460296123773158765865756301792332688039417699299145866206902465125947951931929706411598972748378801063999440715460344485800552465524887723057471427648345887462649663898659750670010457987835782385461509812710741685382485906676775038655179943893258209902857333631660217357350815164070957754831280562089412888526028040176279343036260852451623381531495358371857354234863854636030033721138933070138321494171378180645029973341857283817936539039707439995866404198458487964698124994051707609708826451310146334342111948350384538096768198164495598082614451251871991710563464484691390034522192453079487034597904192237281117740525709099217316494096982192768539117937223715395976013834766351714701366745835899620667136070108288535978338392905224936942223281855626247322723910497871737394396635052150512402382350085730339827014355693123427516933433308148023564363070331789648113990245170233737078950182558336008831819657006961588415594011904652331798971395712601320304424469954841822073115108699623635252080611235159276383186587090277906899355405576374839662918070654596667838383424561649935713948490507341493036558858701203745089819629618586364333445083872983646301961611957848935029457103887145534565167368006985678789304739477182287284605812949416635853124508229259634912113479802066914318416377963720818376868078599647171826279936306011206123260774416457772992456418305681932785393762218565943137053657265903026814550465177049960143825869518283474573424859248926768776505296369996080710053611551577822038587458544677725123606871955640475099108571010299068247746982817647831531654985416531498867343914467927246033351643595002738326401980037421270549780616320524162412733569778616273910705597314003518554588639015743775726435537489402436132014281197970534539010673522985426018483819559928273980230983486631522518623508452415419059605574247493540002419581636623219469122087679389277038802629744664762332132774690420979656331055572952158469786320068988558221634630165947305928430397512026660539363175507069752637078413145624328958256601317617095017622570947185366355075931625286953213838678334844515913289214396612692688647580196026785705330485950479594377919468385786227917633983215933641979561233445822023924202955602075659090562687767321653133688829925565880801385565200838459534731419499931823569978109347183776829937724818755306793961101206787439488491983141549811517461977521383047455848329684028200565889565401361794936754685891512301543556351424078769245003375775463465545801218712121049591354206417576893425165038456031953464904301521835174275861389893926836991127003576427477825535415343247286478973549651302456538811495667952863351823391059994657262128673654166372078153800687630086172809765468660527401091231521829249936907005420768041510318109265292047996131838881827433581113622088436564651768838581922511208851791548500621121993874610033492672223432538242981519743863191897637746129697513936499838233703981097809106694195479397168047339408641492786263923012643667178576885946623136100152966516582194763190971965923080738816531716584219386585323380596547203794040787982874741673968628220041820463219917168722040735323473315282569555810627845244384240146121366608188953481409744853296986284671278148080400633044180748952736202502965162107122470841767842891719228373364326354317925939488007887298195381870388624890815170057768892317297790163255852943393567084892957616175957549876551615372918340835821168302648489703547215083147604214305767163042857730325233433242346922770415612642500313841689847256579694021490141922189460959730282478127666603580863106896659440641204382728147509028041428940750529422525436955616888184839282257143339291479902303309813011826600745926694364726530863978599478733700278453491689029720136877044172704184716205861568857709934602877758258688202484486789139216244838816016148697819283382273943603849806760746482155593698498811924782791653058107690043414729426786377581445869688506473463338544703460387095406874827903396079031424224125369555786966355985695309969969800327606415613290638431722057919693329868558377652810921745490372522520340335233823012006119834742963427335005583676076287674994416046031633789595089327189272735241819834457186339636975973216175760520756558315532481956026339614009479494576411705817530322893228866878166212701773413760618489951477449552803393187105931910291073112821983339586153473471913934204470027796787506124302987239326944012856483877026032619027257284056990251162486153634457005686065261811456080036996993544534315688991378834226649767197687610705889706198865453888289971826338947082078861046546437371528931328631914576809054996476688872507767027136069185827431243274135217007487211683679354987117825324434945365018801680815860737343257295759224209124228756408052540248314699706786800234263583459911917261392765856093312566148734996164141607628732356752996491071669094311745334054622160626201660612366381186165067936981260643086442916232328585495578924081240179789796106937574984685930393028295236518471159305978701354618773995194573104242665472453003332882469610859837455492998637453579465951735804944074112338179808644026070822071432387656160396393516045323172118793890847876848420561318096158140959636918396523856673925675530075357695781645249129279398467003630517182901987380294725500820627994421955709894803841484140774383588796715136264752215405586049904045797066603635780913845648351489857315488816097448070506152896684845410239954443374294432764366256688394972444720599182794963128242340274010812138650592040892386838643534269151144597858553063971472103778300405465847349181078756499727770865976879351344863318680649420187274713311971535169989000324591125894756015072287180692373652959151057261332832862244507000569376059069714893658933803588456133407303799481189360058572593887690785459493800698032089084201520479837872241701460542153172297188156499502568979826772485221564933778358713587091907570791625694946085058811881470461937681309354813453594143953089767477965772711287823744818023707807477545150801160546371499677477237258951644435795826197597519696972890488267631759313285102316472853729406028934649561012064191048199257614759591617567526593498637083777876273930600646983001877135714569578261121782490846644590670070109342536858665167674529374964863253832822510752155290420425593627213678563652488813070550920507166473861816239909680125994257382829517027061639361890735832421013205031598373236417308976041045283523292057564387728886248662182911573756867194350804910100642738706993261050184200444668628160321825267078660266963376996382991537043054394967692784015303524420246017547922127465441903627745134976175997940821369887987810402438873920662936639216023078023395073621064556084806878993852273230759119313993497049619169304435358007734259741571268011167365285083131485193577752480419512114466885606426019281829508498485873052730484941884102146272252548722322700037288550202306348562313848937425747064215942467730302791459892240710761455185729758465639294285104995572363788925211521989400793760949557845347695169866090509212033995456080081727008277424334575714866806610273256026971940532680772288408681313491572072838600799670026783141327356945244324602499250001152138776260916194654945739621454129559888689535560972629491163895253897461839956493199931298899748931475054332733852712100201772455123814037280935511491022613591803644019610074049076878765025105477148909540205171980521281908788686825583748357497307140142797834342570984439560887227328294237838783699979014955473588672163220319239104206251264862524823748798136330314465543984188814063173061025124652635805331605324929803189567009540216906040891045871019255469397086504712341692450232288842230079665374751327856270414823709523299863147126215441162036529754951834076864710373073347115257641702681090882702079022077193210379111296349788868738730443283688861996569116808326273441574949790941713182907771766768723333439513099542498620775050029953608490861571864553433173933252431243655975956454648834060411691222103913513926281440896328930449751062454914580786719157277014291191865797286041149899038085024590979604523384204333074755499846815817810259413077206146355272201048745824707577279410220076196899160164409573968278133864283710473660501597984691445936275390773922514198972919347215330311154876431019575445011706514397000337578778438466626210467991730182686186052110844638514206375787455700051681026940256015766281358274712262871223553244650952219764503053710527580314298917827353580410316540840144487748411876581073746674099593352111248871521400572689097960268425502256976196872872396688983695178090013810570221149715520489319113945110984122517496558890294663621566989684466024229337876508063695902628051782862072942824247873589985261496063424689153250415895887207701165515125516384110567163981586233787524166948160025673551445750141382546383809044301511153403464940369594887107202081317562009459958796151610864732410752893598841675467324089877721995629043995311346156453810716902815361385310193027503093166320311193699860474989853748858461540498078742357077305985421788672165400542314585445241422550806608576093512883517929204438048196352556407477930537044630423184817302561742581758982646442164699129212780552365062545829741272494564003432283462438270591439197702352970262518206255308177069476764673689858130934014707162597998714437484149293780334073369524574927341135221987188086669627778436242787250512570900250098220235905793321498830797411335909585984158871178840946529501587616282512642880709484545759349822245861488228616291760275564192922315021098042024470676604176405383781443538468617328570433398542882088790208647406856460125162482913376493493184234047859202615120303500446250715092090491304456611681738596585005040402054755011792585826941415291511745672106108665995035257894407891302891453599297495258809138702602248492083858806320008508801261174083217021566695609719804794642905590100010803465838043054397947812226310976598271308676392784882396070746921056392329127102627256333645035510120191293258630319258743549599821209169736786041312316136710946695825121610805546590117124277043371533141787812178843636830917804204611317160930252441981155692241543303637282302115171258712500694584114514434411502437357518048156776526936982491885132978300251413377989177641879174214980634382855822002369598429253115342915874696908174077618152097460129524920648601241580350193097146190454908747046320461211187363260380891661539234833695713192836778742257344824349625424937979216734797294840920898834731636526288541222128700419429482645554168371321893789662284638142556842155976266204670327505601630988870586830254680091776141861183131202546542523047501050334310017342903897050471113111336700415235554842885656883679236919894945673845312993327267415142587004952819568521834799586725623303928189330713176923158760131760901616265941556683138506023349473996268663253546483145317362977991136364790466998137338090005126372761418742170129755248021594335568254452488192703104622339664236428636329581206451121118709640756109208468593941353820331684822246103355786355958349692323627887145735282788298833243529158168790224797561935652445847238043602970430436133371916323871129992470905661666718373362250182405009152327168692708163388620306895234620455736583877485697674064267364374639475876846360744974519846544883137883754214405139899992782658211997769345791099837327797232045415365751191647842396058560401512991515734125555768120256732832877651375372909642325440744761941322067357416229243412190785560412523353113423118725028154207096269120232822973618310720253084383346876849057641754126286084521127672965125401829550914575353004993521389485874585146424178431617993042885146010372283789817419106538636558847537258182545070197431631045890047081511124331494724672392594770980108638140304136895525946946409852421207411929060951309376150058997655426377704258310198678775918092380450919549974050118918914114607945238697499075780954045409430942561002332206708284894996566940093092655198706773566104044823213357398504682880307927826825647455071545847181457372709249743675759057941000887145043075212669819252494923921520935060890761869804851361368752709409585996297420127576391605661352484593972992094161021505586070505141578474167689782796377848447603315010721557064723808783956301135843338085782496786353952798145186016773840544985376898597836490969802622432817442199987562458063128389000606711923793248747117721115784375189404572799042241853489730483049664976137289088281393643312165996036239588642282167380178131260342302655587591657516117017417757710934187574813002437316436469515074450784361788625308737445608725150386385646425859155006093679563514545100002242012666148204619881038428842381359384100060796592738609895266080730393755113391150550783768931731839090585749765923423065699901837439859003438254853754518993891990549583473075161844682345078815551200913714600476528721151508469422620303368122252515539433121389519551599712219471743612422188816624333632952658302247662561547325286263883963462175827376262568233518954743253411214995656455410359747712475394858691000052585585279417698478875087018297043433752265770402718118619909886388747675753858919177174289004979434005891811638241945211982762857549544315464907798481664870205712913557829424493152457292091869511714405143772083207913284266494699164565711863437634667966070342884155977170440565264000563262902409322247956485346305718237260335018920831496922646774347869377513545639547319719736976080471593429535464035397607843696956948212705562502377293292804442923680613825688953867701232462585174681456947527456914571047733918976680853102255443515484707891725015372756841845850850419454449317196825659580109359517401278866709582071688145948751993547077205409290563659088167171031367266411778668879224803611659790096747928057103714881003073151416740086846929322723387147582943073310759699119576559988524211829138348372692090476084424706018247751680936570891199269876849359881600201990361557816186743189591754913858121201381567695264011113185445244799558658663105893582373073023797434062717677782988070988851831335176953277515289383647103469706195772116058722917193864839722048074240348855809779769835088226201816968207029459508570457503841951916232593942614189733697916189276580841680612743265778180238045901839895190462569225703847185944798372865873302204901486138164930588784959206972875593750558616861443952508103590143857390916859864286917472765621990195078870212307319517115411349357511061634811603637456593786084037993333203533187488432314242855462277568465817145536381033900675891306478764007571496147154592407414520346418886315483319523879861253492592400488661787227596154021200856456135862242928912538086514757541608704875855002524461318992881471517338543338645343417212958784941356064248412354317515693707687266445366799790834856700397931220808353457171203663295460014074438957245049399736955829529991776017965576329721466814905652887436421317067734628020227481358575090620419887585526195151894965583449023973872091437901605095572639765383637872632204574058302775387210859747012538383991734240722586548841909757127753436707774425692588462391063757244287935538061369287326699459909279545042657587375749710539495128880030928786305126763348519904715960886690571063414939496289989193614460185006475342381630810998136053326996625702435798540473963420398800933545757602841057776850422200872242500459537526471897042572915328818442673714990337368187739767508660170767959576702881071403812997987055759596395442243678831797984262322664028240670087213103897924118761525173518500477881521286941967044683587730925544739308396541678831989346129396086135675665987144981396390139462678144984974781377514230448597578972816719958419493039761767068538907367416959166139257774400037532930757782503177569392862981841759837792830119804732474126555115627522293431963926879942870016928007595682260701611272444666752500138149253070206397468568294759022625317464309406336197562845925955033134169776476914557275874686608392852715320790238202045497156232652661432245703514970393757624909279820551260475853620995524651978466188238102909681655693630664508568075808094313551377981403404131153637710010961727970358003474291087869116287158984756960879397734667771338616515135840767630224727762682825124153369570879251640976263359829635998604054101891880414702557961015011126611145561451046241475533232083238521797630708432512568871164770829287314703516789027005617615205135575359164903288264038077905223473331594483787480573589035257584367058572304282420401275575538223074166901161577868553086048774370631262543260679485767367116507700144292743463719422262317693272227713633584900517634834182126751784595247976573770306889629215454822122724486440444880275382040992721600462602230235886609734620608537930135151695660061244497978439764155856396024765111333711264329597670142095703525277330971657447424657932167594699598738394618555900972821798686555934517851750932746039654933276653676104078651155140788661306495168789804714303857534544807519914933338303605435855322038844713084565912366455332281981742487172714466319831725284407958605481245314348527716082365776762078253518608167109098490134629597991097629291817702415673959579758890664354671697960394264798833727151605559070481930170446865968086499149458529969623945576809723259740745795521025745511411580582332478172583074035892448406603475744762648008817548720782908770303736913590921777417959864158951623960931619600820596287718160078214319238068342059137483785673440846793080958391074580143244483829966413313018070408883870792485604818400480218916961519003257800794626450641358004477485636854866070602512826153857336332134921629493999796566174364669330125700709137931377641168589772910503371601521388187719889051088971190532213623489226722171289155761315123744920874725433040240337988827202526349468332879992607848578315737302660082811986715923532835453601141874654458391905312177355766379169660857127413695011689498742906677421416532512506927836696574431960853031214605497753239631849510724887216077831272325602364564326350954690079476555941223756770131034728746349503959672664606187206247148549278585248869439688666566628788366779046105581069084190391710812081719243306597184573788617534509368096302398918280319348476961544974217304430310222932409081035868477641712517891900313194794666075494233861228949365181769103295514982335436102004662841985069436228348670142397156472605145057700036454334105850363555093829537827405878479365179452476544581841823319224544427822113084407403256686659342365554644419179257923548502832236050974326220510972914981845162465642984781409029858811150747427105965045076383080726433549628293889147252345864018599492660832852465832266621732901726953033221907795798763778848102804037805118486602205925384102528271712390253967271198351022001037675087794593305466866406976564575082306145688149320664214144493037370876108435103901591480107026080365370090288280568850694303250123152042910600144464677299425507293751493625696625751610760570550123476123665497912151614868620732158532087469768265944101112285862451935945439712765444472893567339317591295908351644288971694008036685445636622708813528115170380627927402529061680356927648695177709645301413388236383280752252509140926862701407955461776888141615562380356163065203772972084478715662203165850163929384528598755414794167460848197486336143371111975023149530088124582515081439888154847237342922241581930856665098033365375340457073179488415407996193455730388119692368561470397502560757494129463992118747069990873919664611534478595048562318433017332360085397531013901016082303247610004078618809838162598541771874013887244659904270710097768679209109373687604235927253904917932113778326130346623856689686993360104783462988624117092540907150972758754822250707215667627214930806137227980443178928054526236744195748049588647876304775556131893436562081040094837341131395205635124612306048726241099454308444177286892530784031664482369851886238018737112258483361425829708869570200697172471829322596696646991707416016235600667698762079663190997359036697052805827185902985675441438307458940087079842283082475557280115786185553464079592645723162744068954176594452387731180981062055788847293053773217858824647185579171975598175146810631454014723108329725314662979361402825888722947757280171980344606860744645871059898037160576377043990196261707111294568652522432018194722658708984704173898798887373432695606949902878281743194018740400245811820747027847400335272240118864569187498272808452883847447259123707748709509256234695173603443227104633986891976532777346751574564150543798896198871412469798878234647703047180192416880836200599817754458406211101065285940675604048299448127025909534001764271860556307629964959420541583988952745798018620291961095360424021424885770240717805569617565406653682544317173984543511772238588224897124122175881686649120025045577956721522063417779721840318935655180394112804337294903469369359443821718138948025639266638529179754141722590476751522199084216458049321910849568388833073216463600596837377308937122015768206030108174656873172244112867246586221232751788082969054950056097492185318888285027151139806261522693922507406481936263097153637940667002233357154254963581653680822404915551760316430497627546013942176640245577475205493549290534743561620887543331490341686759000184268953118858278504311806675247273018109300645759803793202985808002850174831920777488963279448402333268367534942243661424936119591734101094394362854346432027494926372670737774349322876345682259484570401118980172384252224136967030002805940326891379874804265010641498265899856535966096631363746840332525127653126216066065740476138421234590846905835268371314674761680660408654890047659667681386254833804178501384352007578222147617129274932715396578870393237557363452095391507653479089309872717799227570082018913879674981891954781368564821906458548159053172411068400966635104470030007516561747706295107313242107335091228524395113119758687379990207824702380877555648785790161557525210595824463263408011747182616484386177817728420670893839431712797304099482427702305239823194596747966526711404999105138093316342673943206535145864072773328357526638311131873385438585520509372507697715015210456743419491426247266309820480800755931375824344139589513546150914807032573569745044073388436110266947014079870131325086490021146588716372047535446687932994981593594592680593888898678149582894609710959493776157188666204565315376904185673789613657704097945178149455997460165508599850365501310108600732884479677534377182026098799673483859520062990818650349153127125087306816482171006565762162874287482176645429098956976587031941634926436469784140505633154733386410845859674587059230354538719739440272721045564439426395501143271287416967538887173543789332123706603916136101607048375239575110806911307152335899636198738482630881458409164247183698119863016495517760015036290351093163566020886600489668144923796382246378589281869181043027355076033309125309906843265533704419436710335081713967594915973949969898397686079904546663854179008685819925440511539103826056160083017643422963235800663172488267540786223730239247754602888277149832909019302089035065492486798077997243317639210161607069269056066181713810401632577751776354869422764753583335616444669664352109314070757085885204793593487951341047249600402296072891856133299738531250070954859851776503577166273610348057844338071300661225056503546228413550444608832866718542752240451490224334697165468184275820838226143906292230250496093946256203589922783291755688877290378567159171524001326257319763148388141136077704666337568267454117433796349080591793233812654912738967064920956397524800484760387423178550448250042337389146884581520477429114539636375260357194828365244602635705663172872902324559542197569437655127771046486980443431453464471353262895704100568075082530043704621557351105976154814789315933767265199126186879975946010924918419075525109520427066244132801006176571215221754663393053729072497702024185040746998502900008844728564458385454082715229939316699141628732600634491390699488321517953077245382616064764995808993886463038253853094884520535924695431728933000800904186515537741535723092531178064711744387768001042139603329867534950081870941418837439400526161600957975269514345088832512014257288316097409439785180095191765049539000279913050154312520320813236663432478218128953984612341252409627540841274593393773799108774534113439233760920271473534827491875905392548282703167212630696781757861761101548327212890808224503988439536550485755613514277614920787602262234185650930485808673971392859844391695629746754444332217617898887756240940324907436356118637513614981988514623425589914565823415647253971787361097666102765792001220604436768854756408134977923105435602131755523144818837082575320661704736316131333984633724415894887937403012187944518753823069166934132991765330262374625862770277481946940016636810154072097635674411641310150961889719219743893237544132509692214764072224664010309791169683524064645128439253852854970565326265055768555483394313859892190576977537999598281187958415680145339769757263116954179660672594178476268402255719558370947698787125174386917226453806373579777248827951146182972901790791091046034275177850991814611180308884582553677885959891592833423885350348685971122824967215005460861400520485528477175782451605500303057171674030998570767947441484114320300094353627415439954357259405420939281650012270204106959521652812231543176180648276195602311769742391431445638870875741068342627173144283309454891999171041399771428747554137501992693985750777519389794461301146446921074072992924385232480517006290969017515369091182025835130186181172078506130706377135094980127717504919039873226917218485666237765743950830840509306925668982495601523285480436261830271460603189255438111760094124427793333162594536970573314956774399443670976277542684859240082986116400242003258303551457831123684110665887412813764578090698464370155361504467865002277149524919705595377463199651113842921704320123975696241711604794988972586646656928725322922391516978037558719896127557680720956149173433039168508191762316921217145815192947140830174346066994372965711861235966022629234905092052835844538174978735197635957304361755737985624572109410232309195851524457400184067249154174524837529614706976380539928792205936226905723271819738028817634118651256301152853700912966102129860996410172625830870441214544625988819808750185158225882414285971075250377159062710263630433137369768619499728450315112946754200625011349251312577121187446924242966883282591226677274505157539132531176878003543076965648236468963228335287184430597095634482360478688771886504794986489692898488535218064024220818804532813454087277303695062387474185417517181280163224532864419620857153717475196256356232758819326019442404229915607920630444201137010989618054989613807069997162841421692813243685983618280227996782299307517684517024386741343637461095288191700680400047131658270616578451881048798643150801971393419214718182402208968766997947895225325141681606689348638337648681383546677344824974743617331422877913776356167621014899538427178572573517370548542926880973772869929735039786278131542928436078527359011356215820693280178099474274648209640355248811941531252791989502733779120257929266281643161250512392150022589585468537589460013997831722808284221515412669756265216541061085289943577521652068073404221088189432321838940165148040780251213593254925384055211836661983786391341900292720708808028446804809812635499967641883691214152246244108636530364559002434644280674932537581297388883789510900071967292873664012739227720543459714950212140029548198886618758281764250888869589853440139494782242036671822185490997331866456724488446235577910255574240395357955210600136686298824033135738708674032341773443225316837971668997040872397565221900734379070618342474511928784962346647289227523108675346487917834250889138607354458262436744155911744572905357872778914616927637354384201654857070331943871349944556173631792078820543624576118416646258523860736191592961136489008281213768598306815609346712298878151125514042845602522239234183832231203913527950013116865609038136128799065503430228572967761050150902712845225672369633041442999426732676639933244004456967679161554470038601551085834499701122162984537467713610340946031340579944930369891885928961207837368539113095857364728778269147162417360840155303012790584624343053397405322132865819146272937749779444399080654693566950759129859904544350692486360225640771439103946794095860539038660461951080775189014536098157078295189795293064715754845443391938816106184131734490324450347269280242789042552859812853583387548128014445833643429923868036042176482067365381804303251077099956668961701563488064612124303077369812087110110152603933803118084284327052765927252376080750801465887116449251726523268323164371978015140498758804979872326098678078540687172993950046447066618323288565318225327593823150126596029567182605022131290564768257450057221850719052174677674844572601732571361730048771601366218282373552413397734794276266378293204733320741116891913951647656416690804609819007450637154645756797095351866556698098882682817386057230593409954878648911633086865960598161621549209739923109500924635321685918218472675663964193308143023863440300601348040890620388245668559320196522798191541910822626432686355783206968172221937170961354867683971354436987344773233095129771165565775785164133363390355756338949661629097955298424822698684231756951915964462899602400861488116992531014627889080518085713186837421175410087697818367968820482939716079501763743423930105162401437711328977802573082064314932047919549688616675124895836956906722595260720797485427886691216924299107491961809758574270345886052807065800936988809107993892539294383012970120773096522543430251462146894707537099193428648602107205668016542183531365829813549715633373516553321297568354544895005335335723593985560083198446713299487025703974431992165735180410285789049433426199456022114967615639906326538285220703476577037747486090122809666391182867695789355433664955538394011719189236232106707013204140393084789971201436784958989072261238005009957562763204867109434454768182364664422695588550939732290558976382570695584425702850368168439977108015408152516706918983279720480345963930203642597477149233272413546321946372214237742393643840382064782452407595257118334256660287958769017802191185329120517879114168233152659600786487944087573026550997389543393924390721698564203106167401870276247694405932361294256160656979998814045260418335855014139946020440914169216865986494888058423583673183908448429539101900793603759007427179218424932221557620577845329324949579775318536084668722663490113546627803273392768447835296988248182123050776514664031152951959804131690445953652423203668367872484910071163541858335911925126330663243556597195568388345881814113284069968927839895048485236669488144903618340113319698249639020990953129484686530940790383438180763033388423427636239718874038656087527340494496514243153993386520179593017697822879697608705722692221356162887108922631835872672179093283904114388667527587944188440552704050636285871376002331138494128431826984138236109889129069384992336557839815705077873695110460766124680385453767738362886134921207168954920330369883063799432782303891028333951731559033957035850546450727043654748549476542358807626870955538013609755284554708409151932109360864190646809792906438186929799054931360619865947561178455153699249017300115937936101117883052566003256898977349505369125357031632811837361973442824974574128735783581032621231275707828209307703930161278601681343802122095588295919516381581712203491519031223793165987633658763127578145373098213119116144157705442991351480444211212613290258605081290908060940262554926807676356700877522140974563096512506054333154339113754413707083356368435478991717195037545701310497453764689834035346888077821820439155609214923309161506361922938284042977034836762318632073024097905937495452253608790571023291058002381278514888818210293860380988552310885741864915902576779273554028768362578788715180034963290426650712567796120414825002301045988650118688697514988274089512734483798696534734072276104740268960930987824841459416901654672691804706390531571058656821354596964325708232085994020788032365068285132695670421800922822140655260502746523240767492038470187684924718365119408101336331687624801929348173420095024671266835381438051192774444123668279724547401439680057545048475212857828638174992641729027133320185029035554730632763155353176508089897523345688736625967484630319137117215943512762172957912575622441814338747141374058535162134788020829992272756506693225629862313759853450375308617445184861400993976103064933231645008602737142820781898294152317845016611122584771948630275283186714475695568970260600500935854972326609098423723200074253523176544862320584549283926149796800291953337412457345121410855597831802359568436324228653538711526670456919315231229925770188424287323584815829341319511863239162001321576197221221797369969416445303303077013761745097392560317664387683475421735262527882500776596937407470468944172842891434949007838613446302957441236987587038697550183380856773472900489394672924480033227743702874133767016908665647003942898884645628652811807860755263622464112465477230218407725691996901742200730221899893969149691534763801371144906573257829492090541252893397110571264967766767581909527921313231760935062289156972788030827201123135140406301512024304568057729819891734769350227012881329884798553945299162682901276393650991998105114986173784332817279726108160137486483381474733058458033028246661448772843563645452513672692008402156547298111460787103945063962606775128902022250339402147796822553244866910136143847069291248464133489070118339805655501990661614388221234823401304702706543512879862509390758181995800521500620390548746203644951222072765136122629012815356844557214052778393815604876727101149475738150780392394173351653939712951716792518145433268439789189987817991760463002548402207828892906283736061886866562572976460017981650589285224283560317179321815389693540491594909594039138736598418945349067026447998822386161986557698636840324298194522194368524008286132982556684205761911964637431396205714846362706907735741059396670097242989221928877686278091170347594285535069717418021866531419385838170923867759002835539831918937642687013435274181801683456810400274757618306087958504690415880429174879569949959861909085608690741901949453532868833295928457971454057290720047082624502094868954000630711981013874741195996938502045850196114260819812457458368064976538471760174047715943331544655618925521024129940024364044705443924998311312162922697063450049918052286784272806540301728308544561061810986933000892288110626075541858627637675380365434687580971123759142450514789256062284732981784001384533259529822982426079441487559738550162969676938138923838743288353301348217150713123600848859652761366092001694109734316989156666410701432837956630590356821682749189789598434676217575816730878817008380410948180267369429085141713065000485904146175157991091078241023118494769201665203386560821259924333871435190697787086971377383894424331901874557489516628019630601414615192747020460886547396777967336695693499976824057552304079611657907951197316014321619997990722625211189307382335099947773806008182646465761936669393961908248851947598494138399868006204199657911992815932794990876753389661500560071405045253485590544141112982785628277511099160129402669569785911907671639636129463859615090686132796213501484288850659218559440369372541566753727875188353720851715161447368157585148356094040911311708670022826394644214049238509975386842574112793938927388813468423138853708670087302512870134770263048046268322037913144026957029204288524548893498657003182123639445307567409934314539014368217846787392580522141559997730497495386413917644714572215212347330931531259403379588383330539980167842464246689139087295050155753763370907676510490708570461687042137147019548240769366316131695527055945415247391256155242072429056735793735824373413844439569419157481639785155796647013990928099289405114733068333510655630912600111167459491207905804909985645849046181250729921542723987499501743790921439724267640304267169643758855884168300953566736502324661412565448740044511555324630132884110077483411617394585864709994850105972244569550705515030646421440595645547409620281600237066469671646960584913673562903644371367973854388272549337856389927309388434150560522008722486628123553685423126468259533152563129741510200969060272118902025215061193558732371875616879923512298010884001030448426332645950513887624541204061834365094678201305937458631376418111473067187941709628973347901936363316540925086681766407063128601234503538500115351900437037436183383163165387748518556689042076427033441372364499987826612100543352148063422721015576824559913111080773140323986488845380533002294522815903183910031982316568355931789616855633137804965911934256315692155228547398512923420685519974456412992022975535257127210710735157578284075524244063046170582792742823345041285169823486472424838657275676666834288654864864063836701273941740690406862825000424976075398162710264114351051347707898548666220407430442883823558858793788938846899306949639472868532297517053902221281389636825925761601625423343957629316877815195172925755957619607768231109968647221121408308057443929607180941393637930637019536419322768243033269617699789701892988264885942230925462009098651916926881146008036376139338755900002362092795621097850685964897778854161806234196978203118256650570748837803829936628756586955730030779721521851401461388461083784801553748443794059396942807512534899728398091237803683710603810726597031464604989880883625299649731546644027471981786246468870203341840889866431174592999232798711300818154785055684789920028453396136691228208541657980558517581327375063500879183635600608629524976847716649652911869608366703109827940368271236495153691343897649115573212971937950104293164816293009030345625236976628596684183472961492745234952610257398390321949179960914241430222139346037482111098879505550589198327879839501930180151242022830337338463658437484377824891699135818001255672995994204751107756248270715921484509735966407982996096580062422910265114501042502955277474481686974795923283295714612146585789601903310718581372576466961683999289391257881692880043117700965218930170933997859998687441650865282632882474384938534573120057177349339198861372127615212142683637625603885226821620922283103206514944915889990695038451470577991541327258912772932657376921066104286511190533873007044420385789262303419007802334367124836293481544804254030683942965501132636405169143484686725221540547850816617309279818964498713104256825303040458720725202711776371376724905070622930431458531119990265247418065327864833972848288046662166320606329668367467828648552471947444475280196698503657597881315599245407714937307793119827745261128986626952142304686671402786413173086267342796372670965109628937340042667890323602050570100075878068238423496326469507686731645918039784159942882111300242960954549307429916237556826725586098300963305942104717028330517352366412884753040838290124963672998534651043771233595066056189872026813031664137337376966472663501687304716062239790777476363752845168658551217111812942797298798896080403450998149673748272149722074078016278177440993177932846168100689172115062953273973973863154253343496440444151611397403917515006425910989711736206534762974281966656908101638269725200611380269644735510292837148471833035213057969793459599202826768083615449560644703626962411546094535479011350070211961635969401573049495292696158207015586390191340105150580397864158833004690507649101803914040483098398046895803551894160469178354207724475943240159088543458564060339710421663908538155293750839833303012451764080475500300797270267172961905101644054244998971998636332345005880689243561253200905370286112134257840374496453525637005220910027962902062017456108574538057290945556117966378285327698723264034806751648689459871909989001852867152528882732965752258323786446429315685474524633386663330608369497995902103053139865454462234325628747458086160590666088444592660928258029256915750781775659425182327297606461104134712941101882454154031073869269718051151328843986631669181500539146162760998711219711770147742459116153775959728481900602150527738408876804662996241034802321637518618289152239094764224303455039705175878138621874131002193684400492125396445577809551108757021233265240414675006324550747057574347001633931998859824153954618281145718279281180656005950388885754600636292179624587155146073761966726654430452948866372678979209308938709088378144163348319484637150904392684953031977566401870957616153819523655525507470107635458721417978512346394441725381738090071593125749568090151291281521997633991825267270735838569893780665701119229067589510830233584631286143483878162613525290420850725354762754235041486837981761004663570045635971448457051004014032523995855355941618516506789799983151064088075231717711191862884750912634625685382076623616574301900851922062852285460429260211250582611478577005537071979948606184069687407306403046071998941771391254622299067669985666908586724024568292726399596980520240950519089907420096215076916112147317569352724933231687999195685611278670749591046647052565287428243846998625932520004249325060871233238343285408270725477422315686851037674637432259274751313190236218363518961913453448567200732644532215589450416353576968121317262773133594319675623594888600146029603411861335381748169112269929047917694501757460556059249527171887647996651790608037616483245053601176891175147935766193052679199252979296973889895993814766403127607719028148073083352567057509133402125717343112860868581898529258361616653587668151163311647007581736945517585277265532527336822844426025505346297203508642557620841959712565264457231737661522568218299738657255203102253018798003210613789264635112822198513550251554053897107972261309093939228662365759951154801978809061486112815050937580512113560706057885481410394100475904272355439990746152957396011742657798477725669787066505081798280773097619902894625212672891452587936407179456423648418501915579363859614928189260646630089689829124261730085700887546624464408689450970427138715175176216339001023202396501118113729182897913107503360179187893906149090929927254111040804233922606127893032701454970738830567038134362403698084661698198094016162045923365647749738722475849745547302592968356160655213594972885985461855142254964004108706130665965472290103471446269812812349081685141952592829574859751452217537100506430505168574572860925079098829491257689094175858872492636487845824938416795476278837357861427675687064217064131386849543174367573053431947847081720267812985668506722051387640129224395466871501471887255801330946934835618686570040171031287540185846229001608430979683856060380923190238284244305902882103791984042351918862738663614388029395951752395344398591150672058442318256220020223125487972052369118849067434505677194773472979371278406172456460690282754751606576650341746814943552844377332205668987045406313368895257188547664562191604398981650648192594299318835627577553142145560732894610997225311177838295118103457226868924624660900321231425553878617900017523075029451851500168969319431797670529078252473068243122347395656526355819290570275389347477625493243718240940120426315463206211526167020706422938261127512350183052687676380435190354680626577900121584724018893112583425324591939778950965931781052735964990307229334017234175821735752228322392966732280265986763149066719885190000059705746856656677540487238886120955354840578558877882534144360730893367787159069388984039514970402504476189878144060160809519137742534189773457443282082255076350275600362761359893300241181476819920672431545853046609939920309659395041151390847794506762771432160407971012818305258905061613469969222132430041635671065747332308281104830564785367098617217270465620016860207983729837381528952308276475301162165163243905139971842347205055406273308544616651813449093039912440823984720291639851027123270998292082522714769534528256947609390562567614865962448559680429632032548210155335174213327095140877986356305374136250593936432743184738343385173698528876239245393448230392680111040021363206531182818156319121608658180872917586941628437497562322985098044334685439800660994878576334834549578343013580217317918142700249314767431282847841582742354398461275859643984002426281551839722287206044571059342758164816122554388463981754994877784920993796626249066239101714199570212481644337625614352574609083083296648519638051274579339881745814869841619616843538038674151720122138854011976610576000431977773219467329734222909999105323199960636105423742522980945346930540348689327192852826484538024593787850957741888988937934258960283496407709556548997825308080969550004739608141161734036246467126060377046399584237260450226991737851993515318848319230828592968238900221931635703705257220118877289609857612901350957168868656069443413645854130161857595291907308183178104025597246522654167000582739267271379603339020016526551977840269471479083952282181684098707720476625286903485299753020748881527576998822401531972546176398046912492095559334055610215178422368530016961079190000047065255960932007126566857423983828690638557323586881079481033522755592451831848576450961271934852023801293359909184192405136123918917685391716568520490966022210312445934967410110170648044984608138065612502635037408703492283624519959771210986838951976554335201549140818640264026350237440030551134184452775893128803897285143475042192985604063375611395586134973635654653045096283934264193051600580253684546086215542954937793262534167957142891938184893882242948685476389178400313561866476260313171601958945301737185979862404877399323211505726427767245392872779613529114482954040263933637208892021438471330837059387755529979634254738954417168755818806656687251532591760437015991665217101347425208116083957801440701304390856003828450685195275510921197795615164332963762702879479324684474786362941123599132094042250929609156287007392099295149448963104938383116304260532551264472131120098018366776076253980430886506537987098395928459205910683941264355730668029114121019080711775796326934688944218509547235247741370985828925349613816985451860090280923768597481430589496484778327628589386851829797770749159214720913143795792845890770025032024279228906406372559888614597632249878072468504646973179085946906002096773402083936615180459032978727627149584638845194388689361247005257554029093537755433029065731998341637954244891222087651418519925157379503671091944069389367725208899171651961613467238033451346406096307638238266731313743786814969202247379460025889225797146308941360036025071528010492637623492074280290884467968377389905578319034835793905139296207476556444648657308093023252143074500784611928587654177697087599749393111127721283707752272715809773999040949904966752764797253832790610348541456322881346638337070673879281645052553477005249650415337681472239674721377164827932844359036536771758973161503029446221130836054201248384843897401356025028456319869726136197028159288435545795427367555460917666474318080492177494616130257186192437620365902028486931619071202655191174788108445896472184766345931191060268390984786502922689330341471173713928734675983106413710830747701818325742987969845108040003277768448507944307656873101463397916962334718189630130207141317500337464683495945718753615812798844127893491660053086811689884036927562550417622577661417463888967265906778029341814835458564699791057567110990526140387475889237428513137808046858539666401813881183980333975677436156828516324385652192144413052871537696535129359209319546437200185042757169239586596891876667933520573174244384759968829960781208596276711293085981803026062886540696374161377338993437904836066887182245667094389332099535029814992741587663756524511850387307981033955039518752529099984148056392419966911547842253473704024213445563768325289379275640832534975609174551123605901836631273023880928524960191431113754261299969801543866295612815555756822176345847996282770350623188054772609295485685086423710520127582028427015327455713385835954747969199704981894193808088241018221270100562297955279007256362155337376123305790554823729789998514496418651489938364099631407770810092043188178012163388740052599572925706250370728317993299524917588185189410642211367821078708060817533365476176294458209549880992552083965943959998836203382721127963810303848918399358096334044338305888425023926938869625621506448483292931270014973928389020022265125692665033093844803742473003939280844416741046061146802734942642761189589684308077270191871424635835691333341478079827975782327815051770090551290028070962348115002573907381322878025997871234571896393628299930049674390176144082270747983013773955321762466424004564097934355685677985464599520837850317519614648807470245088780372571640674524704474518540622923788965207848141583314535704280526891992708571297033363079667020350707517377916402201813449675314027767740470137567351408973916233176075058966793101397568895329909706591329415376985151832606179876132654064315712613190037103215701870536778425616323840820668747506974598588892880675400909510263236170733054737178182819416769283284052324062668364885355147894066116264035491487521022851632634641498553300019467557837334649878506894764801997823847490956834780705491712677383545229617662084405198614538344515343829302003354884313334705771375343970339674335846456753098160046837379117272842763292777440525417608750459239334785080565238255898808939239569235090177803116196363967449138387361553458857972026518014884538201031087971100737171921133297482329543714404800790014469209641613958241274037592560817409187666110672702914368265348481073430456672317069466831740121280953712784394777651111224877212466759550787266303285446566601960561933320094337650248860922705672338164639372017391834362844198440038230425464178219528689006461190917788726347713282742082673000157356629768164091563414791289141801161415217784039317167465571403224345867040726814072857860508708431619501429026119317588560058241742525190066428942891112051337683588914974743462051400367740982752171481368328284038606275525721577107725696826285430337225564535358393134223964905543019570239451337379852821342542732668153607788076998719625775738835972847734435955227786746977579703924720316974866988231708226622303639175731051672879172978123743377582828426312105570425747712977463522598597544875669717603159308173649002698825511856924969917984605258361381847800145826416934915235415742057659857024493936463338267653010008698512180477457182369816212222143107400864332090377461495442288151791943698158238906780427207690733439310287949527445736619650325887064988517490848106496223528218593754507462903463043459100164720664350426128088346609048132531647967404927656126553923579658619976834934538443571994261408740243153302170009269295045223575452148375473426438702679469013872608217753007405866478727780460175018871776455762924714409798677674464643993124459992177727238309936056350852922932810479520902017893112635898742878564998709657062141648762760422940392441604341179631932538909572256817800246614318083733200235970796716695384578716879991905023178327820105206341884668442264358560787391328327917321492527778456617645467985191173928648909031302232545988948872753480211892852155180953236935814112979578711795786074040657948928583187354680680043114327218214189584750847050945977136181146117641516699179013891638465018658834037864425609235790714048461597750669510608687181456042716144524430703008849499513273626873014249937080675256148965370310861120966935678288673162204040002787715410594576472505352166704810264811222850471797810693924868457189541360897703662263690821255061822615035198928031986409142227716930064281659735859787949880095616285602143477348468800728151737282364650928174452533658466474879899338225548036256976784001119303579973593683658720913994719638427075778747295135598541113832012328221563080241136620797618568796709446968661034489954010871246502794680485304490331754770392145763927801749447274030929241870131388388395516761824705398522744965233488887145126510325438936189889365236459879963244600991930563170656540826040454191486042645743743410949103556686674670755817383774282946904473922590264689674480042165857325685893430388929053935664337835315341996706234977620462199610571790930687073660794614601254211676013098551035453923422722648824405101996185634786180875163059065560424860107958913629512282838412368274284090032873434851222430806365303729590340847296145456170861461450243090828806136937343256639428456684416987798033454900585092602263973927421022825294483216123500733830860583320254681818317808402630708386520427703602880027309423364655230200248707685024632770372718214185631390655696309124502001933135704090193666275120983930011808715287065544057447050474125891809634115409137970680810372884729418560531024224163462735063908227882976084587588202174073499702435854075490058663395400903734522778952549314705632830189068420651593056671653932915905404224261755945321001700952467872366969336180115006533034646101925540280930281079008981581695423650828499701417826867694894069302191680118655507559525395857410482833765514062424001010198722435263945217847647304948984879260179031975108471312003408889100551403627079003606892240656830733872701351288490800597867429946082183593812589292263233086453203020009433926824406333125031539677767316452937589225630894731441143137946631176640157034468135601756950872292922617482541413303194930949109590615630615815559606077446324835567946084205023616090919233132815982489852451568127594400724925215419104351575460163744254801334474355727435462266839251411489165877381053824295307081813752203311508096188531748213265861564511769003919757532350497608707746037833649629475550584735695976203661266313247955825420741986038372289219033039719844836889514430276799703926524511884200970624977833082793454170653281831613502514799448429903898062715556280416788792405407277704586384574427287520023984163259203225338089687121106608978582440001203335403388768100265061894633641409208667724835453116333324647158470117194557694258958666978759124736825277466250552114610921307329120740486984326105768170466264456593616782449524482170281379578453272535829497944498234453850650150684884359269332795355347471581107305035177991745829020004406424285464817065439887867113640120464893597941807719141546190308592354223733140326860307639480459563578668597573783363221045277436467344696604298448330028757684361433255025857159090101182418331909647309435036829782110266334460939967852103615363734218785554960881628218879983846630441637416892531771084839685211617839841060480422359688394549504217593503512980668050389900726476983753816114371414547218699521909171229647713100027350408366858181735873010494506038435492871827772497183987436628374366145242405620277111858185878619096701774659361296754620437848439340441107458487266350350283826998488674554273566880682538685202167066214480093552156423168213167320924475017046129652569119976446374821220656504890265047127607411491295848696286914451337199933191546749945544168694109634284899657826774850340150117257897076876222851862756365802728349095785135571516996461150116956387730938955143873748856041270048136454842742628674114280391113390164408779012391625817687023480684030809624087410926744332486050560442931333476823721042722320477375561617262711679846158101893967070985416324651485643923195152648519557283174055305455593736918086123269426209516130855146977674828099003632528577605620844491436539128570219629067952014409790863585930496088851181938859461455125633907460465615674157967153052607075098037660696064704584055292302763938657034048918399929955575207442707759057847792114801255757300054404703856682910771945156507731318166518242983910575296002165000161520111638380508680530938483551267816149543332881400028891859517304115443975108954442434139236805332471592469090076613989808177618045016529442541417405919786837524614846172109624187103408502154469384527023528821892348146187555846048722058336164225880140993226159725486703407605958585332691601393603888070697279138145277837934853958083182366072545783632459323812546907000573301722490098743742051013336927577309270565194463174844383012178034862923322272679419509788563596054844933699932064110140889482832652124245157377740013901201732580872389323046326184790197849129412782752953234828322784889925238914690316666937505127455629981409388563731980745122129488589269153294239437733169425854369607328459187161115653395252900709440767713691413114719275941437927126359124782538727884131938638089042886360567591073657357608450602650940912202705308337928693891406991714984909025003139540038521022237546862702439718111041006338458194472452061526553412384012999780195401074282382135596377571339311720794336266631332357330442062082240763447285929170007377144878739405181145584304877472459181876547475063551100461419802755006318287289857609532757756479846578927151417169474306062598566893967563115488853158067646483794492876354138027637082793181828774839026569500287602798508773679309507056344826747856920554244930442122736912041946165447357705526967370627651054761836225925280387283512788044224332162806316370830639083847927073326334787360265746908392587820462927996807095356936118370026079880311465707366588562024146966949181106416083113484390069175495762003494285011665800208310700689150725154668435643638653243778929748133725295820748409234275979312138021291216331974048181394912625813745910451135764929187395517313942121458186597730128299521667726976959387487062771146026022308553700898612823198224780051135735680400889269564217877026856047568944871501166544846769543098100338781520790572322321565392888516526951414071637658641026597789197308833351364949570748658656530197630507368747031265670824580830138432452315524099536889905385161029459226595795680583982446165265122173341705358869062546347116882863237435036654754632821383912083490906347828262961987942722560347658346076572639985264511753477491510196471964390280833446996802448258931332033959415454161187658452205098537046362079640814358851254806332100444257382247273850974781106158588327476773281076019329100837027256543314154560344338710514282806458794649805350896657696133381797581724328069554093247599210076852994771437287326205271040085723807327382118701769798236151351564667118685588399051143824501607086237389734950715817538049953963835389082388142559063239995597866409246733897581464578429871265106024294813963196887175643863135191907472967364658428314586262308716159086024541551170314400290836170776427733463313331326580195800699745521067654952779406907344829923714301597557069026311874807220653363023057153251493318064519018574616089074724191346497203418390204679091482756755532543157080059310984642703396853519520396094872051771620874238391040754141122700940170147736002527342230966148046089842869557648857800770045831004866396346650099900994103477222669023202275729379505008624446294742202831493960935622245093699516885305334442474167003950176844841266486068991005263855159868302196404068177435582417059835189442001398826988379139429574671095986944395244503044052673106292374946748919943499020691967574704124610129947032393194804649174894687416714605981918118776390331016740972213289607250416969804326837078555796056113856061752805358105402784017856640902559521236759440716259599930888931950304938384816545098830968824692465903773557799759820945920233742274083946064414786848738507449870272912100037905276336596671696038410519837324227928418274414420927846043254138606518439778275252694784399558172205545615120420247406785922293588786752096268388032253096806246158353044567449319439138186079849080934192096003617792759022135899716708034705047097167922628647442741612738939679175039286102210195528329115862404306545204125938706168205927840250845048274731931452095898261870881795444696453335463754365763939127057538966649044712086524652586802404147425029808555157283730623505303606883379733210761110501219641650034935289466444959601877864656103438780810081711467778050749185274049456195692025649823259969556598474101430189578109918974555560322629415124709387436487972124022618097544643163674006328382009561701238329091882377928180696711710165172592711146387924473614116152501064534111021418295803990664402419795649340754630167151351977705280058498624458592439837184723023297193309960586503412712727487207882972434813003349061971127843372317219794620186778140801103371439779888888271998590107779537441853239797015628826874234761520796234019789459804237050044391321420945231202995022165135048915942149734678494287179786190225422911840507006064472726621858195543289097187807592001423101120714809231281384766824944565021118024409668800566218395831459494475341967158087359981335906973540512822922383457518650801982314145979440708966997073525949445178725008287186996302275751337092133003112102381589359678138462299511333902709837699620598244521949255795699283895398109029058508588420064638542352684129210156150344955921733862437320406900500397594410408890453106112068795127776202087708053992680419472596236179927048389056878395480633910665530491588155428145709307038799980817092635548201971972304602151204027586235076374295459402245337545732811342453696642829037302343883752937790490456486574341482611974571514750695785368999183452838112361892204554118280035109890085351094748785124748110950405090823486151632665391893766830043227314497723647471908811369101896903648103742085315919407716632253297064119997691836354132343204055485694531329384657889965862892128511360227411981263931342432672106133661768836132284616564629370549053883296653854263969357748315747083768176131106822688944525504761638892121377859664370096696308610615935542569685119414918739274561939437756980878828579236906432639570742493598230079891302115124116262194115644641644575470911800423980078876755707737479644250573183197765738925735147826743736569874874584623690648554607910968943597239550169783201556865988712385883160015584097027350329100395180906841480242762934337796969888251027353375418535962202283006637826381104987463398763643399797522560497524639106338757130409863476744800909774119043615024862852165116540613527063517072426284010999662870890158722442233850952222343076188451541326543609386861173674495178969466311755867480873003083194727377418527110105678442252973610818435010675021789618496989261304616523101466397031199848453893453216221601447249227571432358186433948900171945189605340411298153768361652559532337863529761547823873024267288456468155576838877807382218270781700765756627255051094898785139532020962753426409276994009719791603249148367462632394613003378986133777140035838446772574326597318066286535162632438396147033116461074882575599303361696007384917509482840033086387124460651235927246428935129970939769062980956246452166600886817072188794742204597201093722186901646257270974365098348901433847212336901959315415901183867723809525326132155010226268140437453964271637317415607760110835435316255436081723266354277460279371264236931300102175204876650895548010849399317331949891902818380997825594281280149516728795138156697788405686981081634044243904335594942077757205141119332405129162320800377967027098138691887617241019835011676248017529367714969319978576812934782615690098128677412105584350757254535461857632308151692635885185068195515600041431945788191529757028038239033079028661938778945398259368657052359447027430704728830191059789613311201795842663458015604442528770828831385063207711869687286743745341726155450015735668083247307968045262681948544535747318245369654325875180427319366215072583257114032665737648925745142269305218328079628869079425452782809291060244462281958453399431863600934448953661734753031669509571807568138221224800954788562976198233874795371896249907702878690879144565603012159846465245990742950379144915948479628260892129677157800450876585158445611121023180432118540900686920591183816231014013264565623041819522727681158914855576259098516600926553156146554675743701676217298131861442484384346645935292047826428401231214600036357411831909174464297101161681564272707323288184095933038952048398622774374646778112729953096006686975476176963874065463010082878837324125584432619957426013964290302418354139796265020573709022220728278992796955784159600991602361744706946856963563339668177745911171805932997185678204247606318766222439945867163165047353431957133617657365329871087240107294381487754007368333486937076189432898443201638767480130727469062872473729906131993389460272992837329511274102572648821916141005212004216800415742073808837696941897944408913713292844317342738522252556577966526003363829535652439008367545665453322689911168216206208291577934130743221249062188093966942662704616955675299177998625364153656125730263824604826492412861174179029582917931437574131324557644441178914319557568847096579068646808324572551928412704989257292494319736868250444849720255599808883992108527945181580196005007479895207445359828890063936017210121538083529540699772712059891337407516804470275482973565332682712295064646051627957053843431648750233089498860501775810648387001212683525075543106646049014886233603126868043564617504555600883710969133572152289792933332651478797651221703231533633301637971242275256750183830555084292500104733339365778843959720705843879768253881514362709448625223052434380135105055730113346208313702783311163344865903690039700951053214579550061577966001005784913047636944958303070811260176082035948383349202545745880769939179275085267673544350398428293767328345881262658058120296153172049545206272621846111258025815153111828357018508140688377981341829736141237792752947742845514502606688363081014983819657766087831946845199470951425115543028313076987628499519641014807033518952931202373274664536823332196013171908264584139378130460872918576247645012156713946797782828739577760073147263206820541579050524256329281748104049657848519876002896616225115529475141930324681159043672473699973925591972632203191875377804538156427222691412572477835344672668302541321424131760888957265170076577128441602895377540803064482352325011953679870436583405959957312795426790650254260950713293339208025211446294742942006147222203487491926078434967255910843969983591696972465840891238272897426298068269344527870300634055281913282084860926385441402393755237875073537114243502489070921091488148227703796823582660227558387321009171883813714589177909795321307791383933385383458270402817456032884019874345975309801213697919547077889249011032041530863853413165392263025354246587480627150016442526071571976398149209481265037853294855681985135090847677163282346703982014071522085123407029660470499436870111066790540531198126472687429484172654629682576122520447322198179744772157596923406718929609557502185596681097673345601846748857617254327699875529379066210614386324555960854309364859092166498699705567735248744459420434999986564091948947376519095990850478275493926885184147868836928304419114055704815406020716866024911447787633809559130724640848925274215385869574856397033394754364755075134151316415539239671252892506277300032558400751531707693615127246275977802299137714938218200668155711712223625768333534432391152621858186427015512399878774811169785500065346694530658631999269708025795042194747711638014780039580276204268360547339407344489508521512790056948667442342134066153905364367870569688114440654181525497864142705281036892940137873625161986569570466661999424922637391514105803683376176148080073947023165665920934312420020907112721230294734417602671356516185504625791655774184834054777301656188329437810887865804130905639971310099663513756765956887345077437183149688639208202689797773707631396840619189592941664824666396193945152610097390228807862488630343856375379187871165543180799752377088042731498196364336612910702868089478546819182282790152218774436969638484819861702050071400734911196566012847692178102772283224660508118931274351158558907902478553553065454410400072262709848431323626898661701509406073046869022649128754129079179680773867734638476246595449303105317725447941411465145625796753747256518231294859865872742581087514071556248104649069468448228986485011461856677683759267609965577496665796078808518253901511413799674962082659408067191961469703288147235169214113122595867514499969471649811393716481353579083945707109663935111823907152718203071028003384263332646204106962872192248057842291707642081161399312534875065512889598583437655203754458840121925977402868114867605622112070393362183382667376468489695447236024571005966553019399601242889590740237158501006460439839353833373539045293387482160992539931355869283836474474450774375459298366918665305467715821064889825768980167130394585618869218951464783170216366717692479283244103580436569419819793758847333605222255371952112668238995532337823927129389392435146497374322680415540558858874866661167891368833285161398516731436049273572291402767267781655205418839212174550143287230170578598604171126306060807033144464432524458104090544233323464736862169395574641520090399355004304096754745560237638041262826837936456433580225970772310825547784094602691806310580049950686358031213864064278214381304291815364394557933184392605772768973529276878923830034141131652695857478663840637346476018168247860808577770778685248386389255171463499165530351375237220024858714731793116932410017518341846953591184367413171323395470049016158421996309809467676251552346631953608140985523242937237357163006562334091718518228313138055112400523994168683342843704959704396740964481759136630512225074162628639699287062899776882676583948654095786713757763212741537002586109365664035293615565046653197101965799568420517805336520464719593290356893142748803365496460074880835356540192518604351564743156576251023449278736393008627402606435340939446148203337452467261362694544687105513646082013482639047367443271916364852519073299030180685709439105007084764179103325743122687912314986643117699631659976445485229505547362089343031930494873462537047013515438622280435948244753986608881047740874169440972608965359103587080100507971135407469105037592923310693438100841328906212054865763155752433197333734445649239151038869344128775902627609828516130106962644436870678364887002848308355235962499403491286216465352691586537641244695067092130713578113606117829065008889062642752554320545363002991970967472239772681596479946167860052448560606865134799346104664153961491108372359152329730572134865464119056959305424249283169844800231965658753617921008933445782190239500528450211327973612462785096319390736319655679034470172157648438078105003564092270111086564259281258497268518625249760187990575331305193596697417643102865825183340836283383368597821329953506061920240218252578492104300577322324926934678034583682595611054433422598185232162896268989881528241352539987080642888000944303818789815355161374967206529032734488116862850259657537242809885331339747755953121799071107094383920661211863928334202228262709526001419033195994318135616688676743233415979916434937434008145052658722312323759228777327799829749993132942403154076692708356381114308019798125124676601373038554500532268646809194161818938243487839231196029393022771089343140046825049994178779911160420001526350521167199012201009199164710402874121021436187987598978846546136337043199032442133305808772878128686743824301248578101407912102624408934865989787440200664198210821726385006977676318584404579284780130426613529837543518094121644583245879392441559392002179834411306463646840210788573308517555215512832596398801410790555572985864453921135469704941438558170038459158779258238355292951242489262235586221729424840193493544468596698965503744194320995902590044511093928627071754319643467095014610824338237737645318656342000878457866141335871220002549794291614928575719931472757663727763595862857708404345379578057602233477828098581260015309206121852185945676744307737404526621969515047621894530428350378730004288777334139713271377081777143561171587279452652954599007176211236189774054278056848236396538882924631141217129268572139175028833839197865381937470445547270057121225063451372794222693444318917139885253779345279074535972758910602477195954708771816802584141246263639533017120553063920393411311439886864314068260416603902085707220441002349180927398384664186100839727231697549076639710270474035129374993359559942369336321067095285497065724292423449031828226705682552674115331347091977155880056602200492477075669693733496319602661582963561933456819474215243461340701180570524370755124488225728800270021952239112542727844354077662612168714894613013714881464112432429013931234176805173370061814087925270251930886592148164039265949127997716446730784868569315009715361907680258603865521629341861188404771898577342034798937599247086269342831691670736260779983247817560200141489440570619785955128487587719027086831254012488616442661451522866637440313195784522055043298929220584654483338638370226954937570027608837515777492820986920227782880810115461312586048158631343967786715554255720055987589580749617049067240646643953794926350044392549926383927321655193592056980313424853039703953847971164951382022193326492391036081185147698200368114673791520938128589264272830184566255776927016913414320104286153841653285214654346471480441776540028761443438848304560312270748569530242551266694534917824264024995011488085946334250450785215561935969482110762537183344036029169733532030550430606359465390027010836185838710031196316348056570398929730298834154123235619306071764266094353462196621510679697281459718973183887253216780030529920278028308381592806710094108948469817777276009797657305800960999928918132918095999559284205889673944434748094600903233932081773655713688558375687366879428088591501251319561344160678769932384766556931164882257651070308398543663979624758546199952232332925909686531419699971455782938192267628329697778781758318570831911785403879600661905831860383684844397861200098503043093347708500638293899080881356783402003348099899608770249326768469442295211529100777482433553230311541820290228453930354087661006446875229059142374969897545084238166309239480915963834021896587970974112273864473884943561589262159820451036317188867992578122085825980702296671259614327005084599650868557152399696034437362938370555858634004292390394451476508289019206617842415725316634053878086935827711892861932796442158069181506377119746972705129619332833311566126313872159980528070364059992463835079410680621220132028740236867479671314079620025415241129514816622939296838782008171335065543933369600106394127448388798632540868440049558786265067751937956333225861695401254257240802572240395880678731783672919515015561593846139993379212458689809173602042518740618311704118698313959490590498905964214802919945696010191737991318529901221807292391413113079042197857096707819859632748931389707587530854059741217720620652007552835687046796925010334794420544131129139485651794274033227553955672205629299943722738912023298450096643657421053323964084803046825814352166779305300448106580363601207080849626973293099002825683509520686586080791207622506344099411091373247983862141728986871317153672174277032162821235904503790625391849208835094794803594727496294472839021621859658191109388773029059416356524254107755778565351635778385668789095091832448962451982549466917779419878488837723692324943010829449469176508236098706910227168087062210944203893405014851902558751219695354789017042714689677597732350246090410947338732326411553941969965104209797526764246743791962159340010796212967276070191560158803620357258072913342463516136684679900543490551289341372771605448166909693046961450533962800464978793112098815055488876002853650960609423541045099486736629699634336591223474727087187608172128445990183629530578872404337713708845886516396686769537084934275987030368838833544695391965319051579405728588086362369948138837607474343599684924682127592167263806031809759934904513504270409176266687166053902527358626933888493342695663765807422932576342052989901436419235710095045228989894309823037210717973439344305923629426997333777789586267777453655261120854061556281066290001631545556942161197846095175145124199746708058259742901412556865574732279245533284800198807328061242399206725018971073890498403586663486117495256200181650698984105302560339658982987891817866180451845859381165407565632862536853487547793048466972329610662689048281449713928407197533016253754582689298872124448113013311576880692465401394938111346574991334239577447963480575998975939795194986854033076420999607131107852261845743426448800553777633443061352113444708483047869608875525121326340496677880083359715091268871333851594171257574079341888910327748197947101050492601573994684424473806264035147809652639635015816552270736135215750224136120552143875649259437123619756053161879149583146445947109489385475916460942990397224587674844873498814862585940751939355299070176006445370584603518928674433513574364683433663727308012500274435655472183158910802434389329445592500404819483180792064708056661805217219234442613580326973273750580951570720318140945462418105951412348118853101956788925322628373657629137884985456937738642017420930198360752719049651671150797789680518919562474921655095685053423813649697911466047062412674803790510808855813570987444049542551201047885680862240918587149529911767893637444207421914399807862419420735512537484249601451339629242458999540263056455579232498716552251771939216911220624983776943572623052770900523686331838528031578258850722249325224821516801467352132474094236087040089958946601666776418808058843047292759542337860001483824222384213708517072326135971147676267202264396431086919313331840595133412938091584594776489238974682586030598272069012647004916787941700068468391801282753993529630814809873945258996152384575696016759057830710457869231162811150964435405978690276317657359052339624198764318600337590449532578089457514878842650821155823565537699833028517678411442072132834641444263371880958796665415147134748827210139677603349258423066408274733319061740101374269052758300525885944815253509120873051765198136943096126358472254930205105043420508670835824035665262483148943036258491069994426611645055935594958793885918196608366988699423844774308900085892039120670278997478692478006181452448274197914494195429887279680973908103126745753623206918540190215933112438118493945459079964536904851668300124415183094848616775801409609742803886079254360698295265391364673837801661515826257927569884635142620745117498992781756377879825361867212405048256585023613722719462695376425880584227240808314743254454920103991151185576941672643672163487677745486742143790911570700569650389580474958033839760200441111139271676902257797533580997098350909829499407581503558288078291574322941198187880019782457394273174306189485202007779061607554308946310247734353610394518696361066279243189788676971208190950284462805806688583280334672746881721638416506243480651396507936761598774912143905297845901212545552900121254065429565252460136859252566357052918370277871423031670994146859221764366183144747210869770662930020628713737833440678435768362543782432846678455303960284951119817642905652720412995939088223257230601906647174231004910430862370489181691778147906860940601632740893908038791449334119370888367091883669491665898725660367392470831889677668032117253653348403093439001898996849796941000643098744012750153840617233399847090097908559821749729184111093660309814916484203431549480285811304637287491409277640552936243464753685467620997498529665145030914875658496676247527182981821490935439013266375099034674149060245210659823519845654698637107675654880472468994199195130798644645039651895704986168043637816513639657863074542718901149338441778093131812170505540065446553312153054132845823008093683541274581233825632502517596436543319806020836569314354691601861044436711145929318594226811278403758474175827177769534670213497495736936174253992152859065325339327210070651645267182175519507368294775257457652139465450348332941896688053320355362612182639004633520064615544810154646449342154463072599419919333812874819542606778695663917095021482309831329088609697328446678746689281313729896004769537391418675270431733027587394828221986556049297484537776650404874517776177734247942296625402388743500944894317616289722471655971435729914587766226422805398321025471394834266789460971397395459045249050786918104466523115254158398665696188785126121442966036041468915549523197832453257118693663027763966859420760697670285425317739515769477675654376966490844889014524908703038505674210932066793428030700449737963455721416590368716273429606726376382274262385780465586690351948113243109414323267309856871364273881891021653399398121184171492333163065267906177089015359015444768926371281266247373790377618171154042760161179848233524338885250071253980522749403204049705080917771112839530597583343556929588761423483328023208658298009442205221804359915935119971908148511046706087245880803689399708186190425947756204985446807795252318931284985351366417835223659113412536050397734744252056509596301024638210401633090048823678532602765531332840101509162464973885613560514442647367165585230508495081822796236025194112275518642319619106149879391782871773388658808542735167061525102059603789566678042394598396669177051838088981224044134146201893178561296183253115566381056182688834199933893096751332425884890893080726997162669096001922956065976343522913523895529038901716626268667962786091358151117265297054614024159782725970768852790582588970057147793738806866033790763948004506847198007653948838548921370379215050963825754622915985575961465780050271046459445554730029342025521383978375142817903035217522761924182743777527548220340235097670728988092397888529894898035498027118949356628266830143354361637840449129774450345193731484245705801002785273489998598855784676476337883729945569447098744022655769343696821598531315076261909233094820377053011770490195739802223462748258263388508811686014938606538746310532215432586139124025319635732966818289883754578489140700706989963360684442679024962566341990073761511781221125773699337015971584467555310484439602258456485472580134685379009904989499148506199460963976243631177377220946224518393922231621748910939445913821066523315840687981122906371450242723182519381913252169469448555037433295818718173755728969092466164944362982599536262686679063118132664096783269299534157543409417093109529476682693681364205894050832077866704440825932072419896519572541068538284941787552191025034813745771592270472340354694164401660876120634270758798087857886169128765707625084188592450589084881305480232137036809408239866501348037358242884545557546549265525329431282058173240102289520835810225222462999754019142789101816071098159533788765661196124920059662863304451611438586916384631985935250984922207061955471318426471266421791350518004188928481736541556055900957260126316739973648682674526898216161446840580938685655306194074613439076163311279007124319229514972351887956630317459688542212219410431799826421003459236464386638629207250381458502525772505817146105481697454644596014280946070255379876446600196131906384987062626485938357333083612540265778606933208721135004563074915080850459899697850520252125144547009868703199201968639522971754530599553881012715723912157527708795420133516150725606851447571205440266341247374155018142923925578662000253059028253056495983459440542138319583837865698086973348186094770185081252965989980358535691651675439446009145768500604625580271275645221878430380432198356231237690738723545542890766070625469618808393604717850350263203942791757688488699765151923962001516642759097366960517228782881524933470459667727050658678316020062499311395387727875659612586356834861191693575197586230046643317527989881811825511812013811540676483532894974224073064931971296181497986975588020560350935778489324493338974897261170903078295063914818375527440271275411941689246310742127480749483149755290817757685015496976031991205584589128092289095996226489670257470316925183863909460959351483626237745602511868673860940699409743579084516053252332776810697487452329023607626190942220827204828738200510229672747874871855017418606478052884456548238135917265136635573146427628097158561502574452708550727893157506898546146693874662634568210462302303366088848123488334888662435047430093190621808234807705280053203150344870099226809886861070827843152122494178732022070801267780335755825471509721016695885124898240481571589599246721254326123491998974801038521349164774128770815392775190637785792007115963172382717525754827656039124802886249719979139625066866238495614190053275223653896761332621401317945558431369202278993922211938573611563999654139623472588446587949557171402003141340198346442918233000496762118308468465186593367719414120299124451572454965049568528351030616757521371458167353729851463386706111204798386264565832292853819676007401847272118465709092717072790301975029545251128575557272342795236855894105634298253830019725960299205862822773237251070611373859643220606739010401964137757116644167181076116292147839428814655486159798491819566326660860102295140350389973772656393278439049308436231386209117983323077499736002898822602902131996845204455340177077650107317464768172677693142862276383874863831251097133478780024838970284338442106408834810051717917419624523913218459640757766913670622393296619267582574368519622600909612668592608653659065914994783538380899267240601320096417158406975096798387827005083548019323349322147021051904891250119819715644286113002008163336295915891459840481378134104624558505291061804795733158629867084435084609033814406446964525274335094996807111344390002227861534008799775324953394043088053124619326267351793943260576432574121627638358933162877608698648185562201849513616805429805319492196739441054768770205236880488812628538095895715327343372131853843658866824267154389150340265930235923727750182462443997909940536167134850133566229179253486276402952909646925456439129312206650938086260245461196796186309754971926886735018993485989466783342931050912409710219488289844666645193699774171452822911747764045983041027927184179251055986652307567035437874835812034511157769973831366787497896537806296089365028946253827344880367830875074130639584776757063778374956139119031822419212403076716827345227973746005087712747325923076544114726874843585666468252078938297442854670372014118962577325718897217555907536387606292559711852898388265170156732167937064983162253027171576968898360738099599190818411330000733881178168595283417914208472568516806091827821565209316579405551174532904402961434289264481357413141565169020095448201570187706434904173899726402242351892743696130352858498300155242779388467724412917517683365275258706266175135207921900415052696051728722013461325968665378416699142157822983750488796106699622536204760336901101019981408545339829940668123116262089472865857041937227710227377441519601026758458583860357050099481033486528956331987048561685717516994303549955841433412161226143579093302094318588838027115740055487718733783675337154643601974183942997522998075776442872985041369143162461148626897368047354431528768002748545569340082681305693135433825239207155117857591157781762502305845899397428258806535741519059681047919226823172792340648295647015280623018954164649154206662622488406363359860716155123403850733373539137584117859464884826343256718374234585268695819997015392216598740420623061983927060266384642697668455494186427765555846489053373607413520484068704874483913345108494967584404816233930164093822982009543663483845164774108455584144692891864850745377223210257618121265586254487338852343294496515235409431703968632889870370227837021707810609139812752236593779477938953828822467258056553732283765473024500628491306637673895577539888248775221760300806026684700364585315162310044693324179881468365433221796936596861467058934791606141724189014771045484974936621603825488289971367901305114559828862398143976104463293351098902645972708896792587485832166641814613764333807757840447655483700988670636228437960699765476427589052227632220861328820533929414321634421312327020942087554886915579887683058934194389535444109605063326110320400794309081821437789543086026191356522128003934917075714905121693497022348992616928786097815608280358014762616501922787394448052127780088722383859850495986359507286668277838730275401991886834600778276221208403590236473062590157202065967951155306281387815336062223436439362997879358646404912606699431548457093845948205192800045309989407929677731882881706812395934792555979075025705650609798786038330222142588861953123330739218631786174034212296409758637724132020092224379603265110863122500079427671060889121109682547651859966462661461877321203482413301054971034041801955008492185446815190073327577795723567481320794785443445381615598180017903338141604940915719423038666392610766752534812196878902514809423073307008559627597381422257156029869053357520658253492353502859804038365964650734449281243388638405324635707890969025218409880290478408195080811055879044523891013594828971152658574643178663560564826952008105036481866693938193010357375289920947326570833770013347606781507562347747995663428930935066464200152831224793212936764470088164949508892069601359089810875902142028195470803297840542884045559734839765285944412080388390199866767275685781523207965045771484902343399258777434529874748236443970766451191416058251666299701387577161362893249948601019686625626613001629366361302417557074280789534102333265512246312757067865264448289973607578214403464232892045070676211708934821537142272125089890275928456220141163683851479313353315695048757821181457149101077751063185715232197067955250810264842665109121819564167292724254289070024605792876041354408993715000055576909264346923983248573645431677376494055135245783923283739778021486432647660528061380481351217281729478110085484453992188741028166269743695745892301317379624701700077657932030289155114349673673951906595766497046486148053309985416620416556590422090023957194443352567120490412113928355367458632040493266983776243528287346209372740188281917306158405440945684124566514573652695800750421285560840811865374566389630770856927819892272166449607006321687328709449490127849593749879790730734199674909272132818152561711722786616775401755303552498319140151368900271764572375023640723147306868256375796037874957386108844995480386610503140685905680336790769553644465634178417245484096337621389822937451585676084087088690785109392951612394523171253393316931103911283388299185842403043987835090887622950605211124324682503502784887448982521054986284615405137924026741249017023219999201739792584978153343662304098406974323956881422418113720328258560919547143294093787041265101852836941257780637957487473688199138156952213478071577265287451799155418500683597415960389967481229966363899816706506002653410206303483230050980274571810577030559879948600560254965624231753053540611900667622274042236989525461119769126023868399928520726028207393407181123707625347901387361578154769514143676425218445317413270316327780676119340721295700511609599613525230686606276796859188884171401451303804361294380193736412166996968533529480142193040049615931843287861080759922383441378903063438610078299512554925801934582242664385501154111428770810990070743304149868626822956105347088521266328117093249148303794168735815122589352048760639721116964540695650736217324174853173087667604268466436240616360705449822741231449596545495611608378655072274860323672533739858941761902601478997947418627788617886329195681955501794159180493120154434066921938463578397894110329027063789192658282725845276580518461179347460966236233628093532934879414721985856059054817674520763157551816268810823569282148451893837768663754147636188260268396708313092006357168057004633838607580054543975572805172277351755707916039611530072713294863491315031388917947673842146780937338252700333485182334420779359949191730466828208922417029553257728618086324405370471670062710980576647533213689557040890947317510902186497460670620209571591083268450070828800326257601843107737092647649086292490125550945994525775886434652600940832555862892948471607732936827274478323561950588765516761606420838836947963940967290998516409676699527293047183022384114634248167878517406558622816907327175052546164409867937181876549827631567770830607578749341051985636465109213121313234184197293830589584961917010432790152704837975647808542585789461186065426346202269586638871565798920869371561048478283586141207000358500507583803602142583279904219267635572265429925473597263282643305065064428256653587056007820178035447173981544189250744737696627815044507842526529774370169329260560496977795644815420009730097710281443342227350873493932814247981283530376430420267140275786548904924417301864781439556526383810884282479266081841681153865133917466846189997732644166922918510444369188518823815736702809032987165704921413658292223749713384786269841140542235166772993096850238502433916511538955891410252307548200054232561097166098501067162398421865819037731260373261642330017350638331527747234694812687034485148304096396035216515618227168155820152070753823313799623935514062779174596635085611490168358462713798079010480962167542006807582987735242262288418059535968581064610807396077424683790167719691999665072883923814259783852921622518475986443172294735857932892876963612494550771330878079980831696511849779450887632309819699075669703646095451039534480459936853595487124669062905075911117452386116664032223513656024985393147543526563301745375894190784518282591702122788694864650039593715030680112027551012277493935518552624541552966481403037242695652102466202616882905723741864249247558684950591638101047071411007483072583776819308707149609175841728309195664146546320791181114177621059078980736061571340492279209224814917941041346997578218125766525238079953252223928434151948759550579033782548845172987189387374944018422003077381717163922555763613856029570907672816857506116975298933406185341198382151106500923918428444265129715096524718820565879181591149417669104166011484021581249054131859213667997627897515183033286900336315668384692110425490968542664770017124768090720003310529932007706058258060657748448162318208631646041981897370716520499540221097172891774131169504215560925748757603604616364068233020000585545547659931406428452139695276808844013807687345908837911142258794382989405468812607055331226707651299666437973369513657569940597947466206805422185666322576664041406173821387515524571510299679297818943200816137676407351222199759550694498794976093752942595676693660231856662210226440463102340663868436139178163535666107726009537500819488766670623077607352538852502586579185158831366162063155600961085821323942484803873971171617623400421688983290944969346061178568873296659379221262875174731851922568248746437637352850757292994986339645867626046512797301904888173353419006114418928337332369415276203097315590470121839360095241353378950010235554048027055728122837219335929120649075364310202331095933636871028155140779626088071684205731811873389103852350836383651661854594282785591082547429149146170795012320322793804064964420416029390136905447536157089466942134273819312360604667441666619057295006564354792279869410196960548996907809841076908905276875897313616772432683882094026313538468406676693028805205899841715212050146917895660180187982297859462118896292489320786607765577638083880152761326976054051486743458850893620465531881669826159103178561481789923061515003938211095426880274766405229711717833727280823580587073287552912785205785652182929905956758728251369260662897078403626165996307545616072774789429518235515030441110197330028059747081742871359502675586385669980998864958365708289481382646844144648714929832501273284911334402779283707067690338173159971673923956553082753457274752690485272964635396668903472824489820549953365923303713553431600701422079345293310028687480004357684799282126347234166271745579999409774453524137514142060238451942514287040500531877057975556376022355031170403240704100664593926346348875834102336708346777032796136853826041669673809178252430361824373916256303210907912055723922418938852662166096721609825778537629555037887566279825097425785977209114775940286776226124686154177688386837594793407602951286835214354935184114778230295581795380271945336930918012118042857735454475070349771486237011508522891059010882693530322101943076733031630499436239223029838647324510067387580773999661461987105446307548731155222067201880592879211227911460227960365748338592146701914933455409522959329027073487397812842147931874208483262051190250515853606981955385425405679461165979555111501480445647929092889580629677398405534221225222721723149967300577677345825623859700107956484655544987856007402440015275574548929351005342910099352111069387963611828775708987864010529925822735884095432293336010084731927528552167205913963111486115830016818602259161403613319949016794113891989264897443020973695093631054416565332800388181624460128245302834978862884396897048958972565711842265907356817582505697002020559924408515106094683104925163530638955726193493224022393836575656150074165432601131863805191900723316024331439736535011781736981499438161569417001640881350319957433095755739543850480407417349709364401379627336871401954623239741738910533837246532270701640903126352938756090500818290386421038109021111836013818778461327758983669661427901695789850109026769221729716624908535497161594549195051440003238748519599812180697334656413877707420218663424200275860367534854355057640226611021267432744980905743405368022899623429173112435822962962078392390475904010084237227332552806710903993612181981154251277228651492286987606425161667524052537225034539142901962087981048560260277690138990886485469323472381383254385826704380225105836246661544595426690862989982337024494733463828257928267170564879468452650409367294033684528683637608913810706465588491219799093073034376201503657212908190338250492138793210373175961040878135129771306543802779594584340922005246788345629462805845015223316908025043931810191195902489979874353188546274448654703037172555945468302005183352002256305759567256241843509745799750662214976644199171619522765796904909299667819162092454767365219238791399253577322958318992037415493679655455559794705696778955209239313018892534455663367304951017238035933936090841838035724442671628883374793759236041308359361808373398904772437096379244843018810585785316733067378029577926741615072137624018790919449164801369826526233898046856878281148001319251850775532500472289105830539830693022238738199531357871930013933028659101914886315463702699562402735364882379885376202552611557348229113985589931584431095873308157298345994783558449033464329565035893611128163902321157814222798289654295421659586079794969303079241479636887242305642809461392312227730099494553686264591791755553427765826509985141508906789548943228850859283471182463650241651968024389094997136061582289648456368604156099672289623697285759564382585439827873878994850075582665911065304442998535615969835298001749973725230312520952497555251296539675466982826386465915860520659416782515741716234058226750360754290769744534578758556454687590618179383370746517850132231372546298625513642321945354859544035063261334265446499756634782899411523705531813722894253702941916069758862409974729594412804482566907683393988540008106315657152093493772804658227469695459980616829116903132982969440548414354125336254371894111725554131959949104620891742416948042000421531321881928558223131311104953945790131573638461412088957010425810600204674097373309077675532250303410569867647383722463080226282059107510957472237636056616343914104758585210370401017756177750767836553274758193950803303686904973050251486615793395164136673027129586540385787336169576379980721922920251818264894033085005195688008947863936105706025584727153624084985449599363148678829495683423294409757030918183523498220851546551297915738940597567683176548846028263461811818965549475426027530632450194806335353848474882710393949546915945041315396067734468817799905859124471869036380171665207259440961074532666003282439695739951864574235825112346515547504486943263346906884720771134734412942442867915043552966691206025037919697197287311695225629328341865484096162998304439825078253198443594720125205086934022091395155599251587867138168864440949697337140137998933168211816387840364458820659897060099155020095532168710468576845512231378271586554602246596539892141030403767577540879064506378005636284150787666031545101701007214194244504246171739420502089455814765581589398846237893373459811189743354493662947591901310500906244260570127983714648796775775942812498144780793650752907857859624268336644059075749249209055066059122297315557974863341117324459122083306844775007641789380277957525407259480778305853745835883092107456476394159150886376066819147870428964664150700928748661854162486564557771975655892345565619818675888584285244303154766342875390225149997027924243281140578919268158780092994495116373870349243444901404527353482873591694082509863279719444965090221682406982761020332910274127370228440313752304328300738121959477152146654469954886252445102497574575329110940778538764165000569391552393561987038803972163473379476486703135652047369506638048319614484740908122206996104159689385529445213807748988522964748092164161509885440050714761421981991100510630432468779678566477732764502561312589784348325126718042793946056802955542366040449376743926748992594368850798566978844108716226844542054179608483173093361567086328713067307347723729326594689159369542761174772527955188589921346844347497663515592325689285737743762871157191933806099220195426577945799997850405775861632597600179029272431992254122591786883131598022673150757854294996934919580595851640150324023636074863206166501778431618901359937161318226956815036930181154515243313981754683831506105373004544324078051137803738181934519143684726471564286673462898108946160262577169827474613052978863528161665360417580614707122392431995498117063232314305500558281376154461301494755683816013919450208546224329758399881006571391870062753298270461839038774880073163925883230929144415116539596497012779844222715905060378277912447618409810201835515833315423275479361015750068243783809511791172174990855788595347993002811986788065955711114225389504236836679689735605791978951653865039181924307742330154770428083365741119820399902445540356834976884046679893817781370943459675086002809211574013353399552577375268601300878600354943994501674328204304532515769064470212772054189889781874046083131556169876087817949948208678555483966140285044067574507136911588427550657025732101230046221488918398390092258196256053158421624786316610384048861513291128401012730768613742289227354602002644404929001463775815068501026656317479877799697575713186068625564805347254838849799100779045949812254181441812979791180215925389225766814992444852108160946520920244465074129760069174329905653480635107552548733706060358721950850517504714597596335602551853960305548990038385692932524374635363041896520449243391512818644503201715877754730925231152365670696171257131190664512334159286087189774634777315185216163661194597441717827948423557654621689365010073217713447822937474963077876438654216742351529014257154333859902695211969443708830859754440745493518886844187601522264662808995168910765670506531166558816667312944731336527795280983458550851788373987595860026287303283077681247407549344874153748055612356921640534539554574471960359835463002855584647199604086684600359496683357069150533714042073202985232277288524217455442439843021118830293700382293063345621651098250608245113064197847207413543850302797662456056374925624821230490370552250436758901907046728518200954353266885727516109137265938753999172934763898728736372699336833526213548797996873253194888610010041930024665056821630036151602703817247023957955074410769132729803253956074950215297551327509896915177338539529496245864376400974976662460659298317042136591230913398156707116818414368215396062944624634288871451980184859629917317782362071347570792863146950083580671348204475784449155659694857641517421103483705516776329808125473992545617400741979994744266322400904308211431371328560391080349636092839276520832043846164267108710130523390813383910678321070695486592741542141064719532309108281939186105171805627232388444048703657494983220762391570878961757187310295618790067230763399153474553834550333837574982599670820968121550613392444335211271960609650298747177499295238606019718066474267782840254859933884827417405755774172133239042019083510886257781766598020140287105876721426929645204171464204367741737958951518816949041801014007301811504374970754185222349662934648391982435016723669622953935568899897686138157573715861073647483623119659222711667432746486053079273442207491328149187646191162231242814037958699069861030481200698202716524821492846979951048570043974029837664641726509964949519790897184831700425798087134370626602490290291185125674740784121132487403079986921890494140034777648918492599177331451826791380084995796390712938139750612774856904841982061368889585840380406950475631525010495769763951912488220992592011897116901294968831624026390799135617468761301418091121307382322683120257202342383574302013185911980853723330394439591410280898790953310195137729177717884728111405109508921103605119883526102236364545439689670775335806918410115135503123515826493715137367195447973628427115067722973667159643666293344096580674490698902033023446025867633829914746323275250133530294399052383247574835874159892830520504274606244389502513419684820002958420541028576161493986197751924519695707654267538060443424785349293637919716785799111989251334280388266728326144472650599869205785059896444664415860936137238109950487382569091266009555426689503676390930889855201659236836220023214268012447377373704799065532279242453039168276028306901487174013721979864467116802647479433857383177232781160942934728344665667172327425312436293355432974735322117969883426658410321182097633142387654448846447197005024641316943100271901498195023735908943557369789553034804872280463393707650788462327314096887915522651820309618611692204324428822821895339613735472621207955772044831740850360538008362044942584651845626087363967455068497234035033616722680731535301395550014260082447596615312338380532506744707179104263968623679313037946836625141484843210306215052077638912287421346961039966481935372608582222101547765186420350786415265681426980146005589159401380292494633663970568780409724970181710475572296524539832494492451075497820265744308145665551417850011080370652637075484639115280912374462614472512022415783415106112663463793660049724445950178138336760195293268998059053133588102846952687006689079699210759088469291635523340825813581992259664718169138405796403364516634625733026051617454113495063656077449741964758267502579085108356723781369426350138178171035723535810712524435755222298215741830132151772248448410728080332087132551441492242911453453143982859750637645482477753752494478582700230867018003269604620427600620760973566391346332544980854730370971100628732173109167121695124185333184944133584815862995634406562367634310204410124272497027811751764495808543205320337342464581588342549306393057506541435329764410068839213743357419107864099821624513348719361799931878095919594271951804665244870144736052811218370989823608816938390512066627051009978819784204075853959714645123287815272255412868873604521388386864408947329602488486130892698953420518431171964160971355364651770549015360203666153886514540068874111642856526280677228173325101126998430882824183607573599779568348614845467102892707832189162068518650477787563122161961398485377121309032918591737617902634131652319479713814273105769719310948510732703282276518715805933591692775633131765452462821885317120677969687557488084209252355162916229140561468148912471343997975884470064762577857676978824119290319248746540483575913315992540369063777181723451255918660954218803850309629153283345690878811664814895208552601118303674030938166370378744086532692393704073675235648545774736322975677968807498035820364380495181104608356434528001902768647803256699884093960785714855186411725916418236680437808515976006342838572272091472102540539818688201137933843726287605251849490862375879351361435242417918491631407479363550371115489993499823496190157581121819829210017590837579389497517114049289977197632030424151861146994490504659534151607892001689659336780046112074293425639977316907869175773526998853633417785933379699602847735473012043182187996714902033630666912603493074972175473100386898945333885583976914158058130045736834479645537780466046128827726104202427341523497155031330186657689452912253391801370979257525168868478004665337100059130379304339092252550349685484838820315499033517337519573757386248574371801962635654182005609349895430586949639551539030933810167587130811904131476955906758691383591173235216018349064582168859479199642974933294027720375727429628967848281075514083988053132525543325630976062966505090282584452198482041926578477497575159753631737346679843768596622100591771761210045495654130577012973571372508397814869848593967915594739959145769739959051340402577727760037428075139788892398681350303100719723945348858350890310098948875645552684379109473562781402639443315721282907672621282427520260073135395661358236680253712758949207533331275628594179874630034175952740582027640797423872063000820822726887312583128604518081398586176018913877523383449798219411205754029235151784436133767413073566127958418397952421113231675253213475751926505238586979088797358842861853143823743059812376155938747167296404862532466438534780083563440680379419673814255572726676321312704536051881353224384346273894301951065444748996464312451443219113349198036793069919856019149363585734258435751477942940015476829919104835094886788397583195242283668271582434664153669024485784737539207741137378838818493591605387192698527019983417616481365555766725407579341197470272600068083446476175295835987667448100694408461728391469902683118325801406802561118542868958443013535595033453908594762064889967751282033856830166612944772295558081880922778589078038135755060422014508519468942253977440409598589592567841016132766079297198171025554844284938147771954393189089537910968789200989735557561248961804895221470181896312821843805618631127850821507726387467148185581932283352295426852660636123031058510178641110593183021297420426223347037246813132478281550438417632226078140734027085892078063839327659107480298529601857322260131355031645999838772523107912379792799270599832170629997454849714655419606067993219705868178019115118066098617276218077277093941602070987723097180043676604694054078301754369164526872246711970744413113555323069662440656773694234316905875932121513959325653181119499144039408368875202575851631494861321831031021498857950670630136011114436804123806108377569521394447174045159342388689786987996193101594525697670461331941805519211542961693741077602521793084512301235745492456268025281350357081503670894337925391439803477910889970153361961222882425833447180792041813144213230684396758950783261103600776637096981294597928656789203019056025659558388542798136831932802368893832217705096922882324040652314229127280596349325808350479899196528823326535310778579791137467242911519492117623158656167192744057614389921084012242115095861285443865355988868150612666301570135377419716011395624142107787110028922099813777852021047049673829759730603907215723487395709392699066181816397330723381002421888101580398683127472361693289643012902515874797076459816929061737568898928783107642665985720533881787932033964604920270144583196039052742252639470606750027733301634801290535186279609643840098163535738005870481452789904020843319580887340804076223746286940791270024454217764149188889542564484658361650194484069196875937695237912333068948213578354863435479364468100469659974668510390466944856963452465973927403898423614814932960003425685418367360950283903547414236127348071508686653530062461621894605248320286771619836774099475218600824353633287252829718287015107406587565299675504098876206106086015482046536764858809584934949868105798851796856296231240796194324360142717906468963137561716589456415332693043872657576588982862391023106509411903080620373938527525087109195073349545117267483994035124348077003892288904837683470612939918618138696940308793290178390833631686726917851298514734487715896356880478517388289099083845957952233036770230796338094460188179496988267399458075957092088103519482374601778563138864462712805589963528531880880901825945335316511423547602715813197439866291158193367010732344406950805707584804327986859564260845152803444186913592474346860472281190979342567426944624168654965600098277237473383799708926925744338786122202488800478397706778040245143377818068950481306435357461384891864343303514638905930846691319938996235930229160669084638762097733570864133936788487973410694083008741919506801490138905159367389070824542719221146595186229449320223775976114810899108150852270422992121216714208071266442537093026065423246249027896226795665319051703156507839019530602848691658778999475035433915703973659714243614927466137931817051299829243099717358896882838303926581651283757992359106234670446332825261595980035519789309727595268871097661012707452908908805021001796435768758393916297359001270753050808940127169550929189985389928097054611078424635759487611596016229558033956295670234586987820521551240014385800273560294022687447789167412800483777009971325178363244966594182405308397334788069046159272292491571185519307766529421236052581887151251604178080846209801119422493000971666912650839916915847213563264215719219856376948892433882935443318466264989631266449793198322972628359168966796818812272037138481691631564771104205575480487626737127074210451006327478011403396297827159184011069835706569160771784440743808752083354275943904459417011034831848909514664143227294323454193647798250461813627764731032541513114569097318216685156960315963915650593492913400240161845861646828855867812986442211936722084346286283874771547609054646840810465938951173584171716455806030195264899909793137793951894309829590234398635828866318730964486290019120397205051384605785888711221691562648385446646755732749818739504952980603036164565103865306024866290665889115083069565742637801947263812638374844574752135520936482693077308768067073018338700196165551296461619594986219375758258572640611425557148799932232297333369390293169416723718648032393226905430883899785463169207524230491858629127536728002229410160323470169413659384173855395293809525964731288463605704621968605186933118674945438001011039000075385901340412998872852762187499631623367424517437263193424891520611422189188250862506885691871590859779796525835813188293602440901755877517325487413597436897559398471590615859916408589486313354142529797884430943093477947080111482719513883632762958150452112552465857654015476316605353589405682822355016636032115941695901293789685553050155043597125879342185169772241262936110505271605417905037223493534699804564369978587670745824768539605529798826676570550524508693785876725938780976721693930629420664148352970605280323309029576929616002720048705315737949015788842401921956083353491758804301294354894482838289936609556300117800735073337088012032660009449927916255271246382454740514300416153334524393494451114511418338379626334823285076061479470490775663069483742173423021332990636420241322373956922251080668009489906349316333327465193440276503973230267311245889248074111295360278649949035542704262129382007026994169221963779275947575264581525816690918720638526896131775500703004603932212850424243430440899027155364409183902029987586643244793292426762031925507590109651161598294959982630417471918035141793149407212263638928879250162771552916270928934410690817220266519330377489938976063401570068598176676063976013034791626519243918972537442604648177402239977497240631928666835765992205263005687459119695670613878348839543508646795428826173728824246349221651756285909517093839367059438839955619604679065755600616871899836554036622847394464847806045470776992617523324459580947034762027742844047357196893571991101119778552526428075701144636214515614467980704932776293869117477253679267391179134831789041343587496046470834623860346624622658173906269184200268934727646623626042171500029056234341096313081770306163974515491083586174340759466800554266134085831836649882500162723161789042080050864764343194311471807077138518760378612403517489667495968110401678637647597494227104829029669364592584203029763385119791044867317464073858802583805163081596965390141870477199962248944718295132540756630407996082991552760041976578191795722443820593157905406667348551773020443941965408922983905464091080552869040561916357246767465253731625053260900001751490361222564974752544133177161552343409468356820254725263876723612604124731485087635162461821237926452311489184236666750685371578131791905974259614387701784363235137064266572794714177788215816296165782761662257330734465198167505057317505440258547170649762906481137189296949123879444147644346805081598351275348388543353947279172201412666418107770832777929344024984458495385846484599022450579090352402257364105012155360233747583442438948356401458609842382815538365271610264194268921771424872852265850449038411440034613450371111040181317795141764326281451467462236771957572254837132060127116693768578520627117340412100850849059153834683392190491009366566815541254299680114089354470133674970832634176844261766429340782307294735800671598199287395081773292869965183987218810857747685911362807378543530301827341329971374702758975843714471823181377180377979903766482629740318209027298813229887441628753364445819160644264719730886021861706411225578484416497260534756692856472486738520835794266030266580802393974575256651607085879870113208000033075259348663421573423788415324686675864570434322445091184572424133857278987087492726661401757469884811691148172346618662544974858348149890863119955756210346844665115990311670715010275295745734151925848971118627106208769659040228728491406768472015662144995650850879669043397767466953596071370735457500818039028158047543958489510732581343201006475377563887032226760583343070854938459971084566339457254177876521837392456877289154257448342349452814234592232029029447948966345099013573210317541750937993906263675803105212767788756402076622638480229774110248820088433406280814856971620738035066912035112101005470530015980639004766004548904214709848287333174610130564559702398708311815544229145682868625429887150557753832285409356424092267302198327416970276973300950754004170159817511333406078264059653535596379566537487070774361942726160795077659829748226475462515199788953765041038997503533877864091035704873996612264368421119865909984157588348349895149869578715238332065194961945506645204211659808513813432586893033754611118989975748622697464045479185599003420819786565535485431056842928536816242761028736281109870980572962924268531737171383051399597149759104240485502272909281283597519278124989717786387216070507835198831117390406039555386726180976597779293164654465045503950201151463004071136053273659624198766964452945817278629774833744574968268100126556645646549124695478317764887161880769950998980749466021113297191176811783165950526496825958486669387169992908053821444967279247515283265593565276956569573321118214889020082283820161845477244410395492503657301644880572946470124523809956828814395276328026950963298998347701566381314773234735643862601811710265725312924928841107547047668794644749697581827204174245588838482166091022527213813126471384488974550758649996185193687337908585838859650266703095978368182968362916304152226220364771433829091667228842344597060546256930423919385925695269895542191892708187203943785506769337433839868061127298047761685996565621539770797999026547119436536209654509619462671312561650534574451003700325939616879283055002755234187416345348069596590241423383876042684774848206957555228249956128643508386378221738300132107563415613955510459401995982242847783255515199317729927381562580212258931774103988183425095680037368509521194587402879536430209605166063867418051037394238406825678368096262524665501245233533514742195495785133126101494131689341400286200523662279855126289563943456177988298387059054280125206461201829414422247568189679356630873615866165020280129094868017932990240475943139953231198310035550913358488821636226326182515119149900322677796471143980439784522089288927365371057778592078807879269452838744527988758609845772485728778132478712554142286774072860516734115844958911923134207992300558493159313354730951631347091843532775040688168853081736101104443991383810289294436618428357784583336016044654418981551887420734861105484768159229618328206827404517261110769598476067299992229127209139237983556365501860514723016368457813966163644441183556380628186845086551775386333938916821428412581750281795456366512511461365227365054961091981039450004991759451304353898503250032975331982101043033607048267422703684944724553752413456010303347560895954737080900249785057618897318111947594972181536430249405366960385870666922967499523762351162604736254049394827335117103015543217018709198335314583878784137647080594295889366191091944601805233698410264260922329679082992887035845718211674004766302060981176645640999234793293477074827731007728059184958525488443714039647793756825092086669513254123573238473989669547031638302667879336163290169741553353746403070949602067144977458007198184075651869885727578984122581683781944033220106742697311902956250268142971200454461221594212659322595967181254866684648414402788483719975128244913447286090149306407735203848297819980797655455150781875795618364918061542417008319070558788647278807866396956591016531812015746349865938144148686411050553010137546076064795767627502976951560769505188917107231187341838816094365989520354644732863600876290252130196472252711967708288488995367051317929747158904318585629315212655626792622917407154419319917874564739917172264584612714575025316789551335477019504535828885609445639608447633431603618150363283746934212266353028587478299496245109312371313789215481526896597159250207574925899372674725106555579729089789541381253265845387264264417432843230635128476317863129036626389134704956877614250563273942635124767904584039969427756521311232628784233247773305577914918797871480891443360452426524930236944164401001893168359993840612984880454380304235271911460163267151534162507241674399601955535695393044177477746194609714871018051877580684020131064064212611114329184813393566596084684525270214564902056575757512541238679575260222982361073304283865497183067903942988145801087778609223930159143971816825859148453484295954807302523924242557745085158889679917976245834685373800696759699681222970446522097226064743428427125520422236679757251622074901037393194878178102763452769196889345215673481432143935499243352694426014239895611620028261411778052898917221116759183744559426151579211790217149847433623914321896208697176549934753941126951369826032514480750273037103887832742583246856347471055682370227508988970603631041741208575540401729215814453486128691959995101961691308286508556794562383817325544633857417047937425102914799904742716188403280262450833149495976062834305266386931155389015760837708133630908242440981543912831406572047059845433729476924518317725716011264346316380430378740971487934556260485822918640869866123555020371866876234710866038537737107866522073318914508623803872637459147134694719771504585509142093553368432050879694262354809784623731482616526944228092679601912500227090078113283572853913810370861460803879429598877494482340003309001970245705613242720298126235851107460489574761610280470199045090322454630583068056531962041323925791927189539119341966580115714378493303984519494848483410262076546715408558890861021418544660663105958599697460100169490503419484568383462145729852476686254491055361236034848489310399454022038784197290325885684794466950635989401118291693586594674013324980127043522642579537871952930846705738350236066720695544589742216273621400492403913060399295656996595138238765599015791584095552167149143942749515789264627032842642997502371534859844608637891228339127244159628359701538223352122603235661177013682726447864572221482287007468782708812226875930192278179710939008832387063214901457218964469937638348660091201087859658481796469647236149837836460356637827788296868554421281140805942002917862846275752734905974731527957565141215316066120773229408045778449729880583600977949149152224003554325303817076753269751731585155580984298794985732194669408030555568243454366415768985371970965787380278937318514181032347102544465109341985102302871185219131454533096633229671537095584861816554167244568917866505462231936423922218736557862774506057710232530606968067308449819267947984185195236665677700501143073434613610988834339004647139783177819127785956879324995033113580334924977387053317072378430933155278404983248122999564533806881931153266674995794312224435180848126021966686293886541535550267420572256327821715847555568554931854166897280758484667010752627444991698329392874659597251041838043563941072035902706209231725097504502713036569349502586518290790074935533769167760957099159692357955026530235446654388921056432811792900904804203256866093650630429097471111304120752303656769010375644684139332395648444768957109900727508288599058246558653023479090470011663747878793457440264010262553231861388721234984844319128427263037486922891440566170616892697117291741956880321751485107654361581219488674009713475947747350104328430430978176804552731579751390509247271032780095186524861244925508426504812857945559012845567627650836856556999437756146308726819394411461233300840238705581959189171200037795642590639171529297460612095720801783551178151152713938228186680785101846019478455013818491371027223244491345723607875605881129277092807421407233200744114818915423946206604615541362780494812127429709268254144692765639967279794772449267012403459326290548155122302056054025634326720874955157929723011998292628726138770770491819079419803969951547585716882135381282138684100207743597328694250077584471174960393592678034498271497302058553013627841587765308700975872876676109077394676358701555144994381498211717968226302145067086151804877682114886800020279188750751362942438316972838696874061979620359989209647844333820428838024755292912744450337677450422433573277144891288925255379083772175723394135956787556536469315162110193946767633146566878035772170262172402830742813139867824638764172378160560084961957776342113747426343609571140933676632288675498915345866617319805640290892296596176332730865552641041417733617520466147480064284545430833421807283362235808048689259962680553010747884459688297137841384637450438661749072992056895214138423931966271291545217525762958992340677436339789084477017657771368939538404507535778883758640690959913722789990238448357178929122913719330187018340003488058229807281231048735546720656209882797672820725230901581437442409321505585993408036820777944111945824753548610235537306225177625325531595869369731537199082273795785151717039190511846984084122136462533313935054078904548521139089590557558066580692413941479844376398605334151640337454861717901026469478370609704233382175484031863124139684931543902892635749123797521573952447116171787322930908659192556157805222564158675323193693850287014526573689280672200485544840234405529489287460544628064451074139748453513057679700133561879260587738968307628466064980642116360320065665855147768211090442518238615547662686800938046294283104122964195093549607063741991005182822427304798254685426491386684089546969668223029119304844707703340930818751959026153576806901401643855744176564613889782931808914257752725139701342555945703947034505160365753036719279052751080479251854489325365174075910039463737841512065136409192063696827784996474369927764931571703203551957740351962107030006397003030432875773692069330872015547611824904558021980724820681505199978068393034261638398683880830564648591665394589628216714118224400934334344853219136497236026895844617661892078709750275815929560424486289259215866801856772589441660526392162372677743545902136014557899616874204780781585118000121492444579035447004397440808049282065050826591859116888284808627867735043729594029320598102782983382825845482878456674860047048560898754645897795811174177594476685071639265063909738172165475150122089474045491237007270332366289802912023007338854630109319731046260492767836949218453128326774726559095773074747680424554568875189566542873404732965004804594142754091735782297403558807218471540903162609233301246631789963945801973513735667003047909014121708090339284613442327180012420125675823324597335551837860272381522901871179911190875254549001654381946757748022108612173330851898544217018429480053366771416739744215734033192956370504479737231852274940610320720756144370471635649163013640386639145224913047310543026127269385173035978081620370792763789848772191124965956928182038375338217328044348656293455924001434181649335414607528966311618106422166192798617572202636278231956784949119537356141793149738255344678228468826188535222989943208032324535260210049543521747765849332174920738796592617124394603018893901255904801988434645903633637432599373287452643696076001443135553404947968358744816027389963005545299296966494427314085619185889474403193790053941001290183835844600100965055546079217936046225824217502743350398276000396677162806120863951302763982297743608136989345616863465984516084486337130921527239165302013889797398818403842796660539338780922682408196919124806514162409837421001344175965933102306424548191780434353015045380482834465121054647609871406209016273418958374772796512072974683086640924155835217894217723636196258614377794146150944503342361631759352278936097632066717856023094405984427363535653225050959727596535076146778081645222980772661149229727497673808649729260445228903540690052781010695087650977987232089401363451573131014923636783894475202911358490278919419440882325937767694350932189730558137794926169422826097189950640011138940433127761547704675740245940117819223210737761830412795959390087599934952171719810579179256135227584466008849528243532242413714327762818887253506584092493916621440435539599251953333128593573758608931721827629061650713797885937881284622355444040688147376614484730934430367677875748396208280672215136863148343572170904995028409910062343705739850024441535398630934984267643233933082364253981604062177917851807921435442464039710763292333415412164445440450166571077356059400938505237053158002554710741291335009854427115705279228547076642322394785069605372438183156646863540881807505585567162752734354619273752268786125410275514896825351336935090830417268481544480546289550761584359017098613594382305450130538424535891220037815722552778056437886662845998811967055764919196324977386142880686787802070697078041637093671151711726929800602375912092176207426141696333350931225046734057760654515328204259221139052369972179048301227972122343869004368271484258393001759884890938269832715481337898386702343924536019005755200345260910124105622226552419965768459318931911074489814007139927483739488200654344295235227378465029414469056120469313741473178642162398671453502774561250437841112215044432164930287623562457602485862168901568064040377031961864292798123559065813113123904705976686734123904746700053075357144230408009948413549842235653203818444327940848439187718631625231287432811375475234986764587472908210101415320838737777595529750895865350075178627285252698249144118214625925965796059524260580733568163868793209012776511013508071196679013031736859878179754824072594920050101174005318334980418260523872864172935626576428403769372883666531161288904401257302209539036613158846964397782360661573733814029404827692721789314690639387663108673928993612072277283845871841692809060109674308299243689702657919584845886223048725740472221311754885211778276697795912137846548144115501626274840638070734902575475279916224978385238058889668291942559424025574613981550875831879101725505385936919180831591858042377427355309037928046509177536085825013314685086700870320932221370497015158882358454515115628101989176169605773341855065191435832487786519715698363020560860909130218040956117625348000788920328663866935330494817486440801343868645902748672280778922860286237844491070057023180971569510883229627197527242863273808717424523584312589345523873555396532287856199105148484974068452749053393265892918481296062960136866912655640952363031373849855809240282357487680967719606793668887287709201279653159127679849462240329860525854785033024674762163369166755181516443506031117531997950107279867290079248770235949365994166875234654196235251386154876006192943761790587108391111577353724620849124182472626128105329853203339119410265216003789465147023603500268107191819344460604313871349663334057424587273475535178812488288960287672079334430969775530440203128865834658935236323265362250310855258479345379046374961417588915708374145072463102338470010672821029290298511083086623270527616610991953691199637388114122168747757839400325113553381887712790928128684556520193320068960929323323195617392128370262962408384211346529116989682202229517681829300648543114241003198689080555141622456824398305977541547154594812933221720029864165819340296191551955803749750238123130307586724327565129670435802972243873211655836360752833669266260649085981890605797062947814593703192964744685963419705022043478698555973832403085484167077452495773456450206111989921915400168429492102147233097456129487243332604216830648093653762088757646191587906758549728835765195413802332750482376212246942419489361185202293909505074723279250556204540585865946781196759470875995722968639394144412518292798123695805279244178809891912864473173825020475821234385364400879808682565566490708904665234039504454486969276529541730555356780460488706187164798952616034628873421376325413071904981294145222283379854167430348348453020350201765337860663743922545779441853214052292250297042542939113685023979541312772439306546830215592319118669998922593408519858388590280320240492586970209236380361712837906437263372534834736625243026155506210549434573535619567722940678461666297506848696678860349223037185382744214674454209027465797520145590880172937518522145603543914451574768550977817645223769357920836597254866521440978306422829115603787068992145955475973698369089665095170631080471987768137273762671299634248727803464178765905760415501518859680286278645237298089128023437013056161169565047078915609811072191285952660786402414357440133298049011574276345951867233585894337631034018795196031454533186607211130314510488531413753102692529331790313569016642822062830288534751552281591483338636076280534207316215750193464131868104237611732285712533940548915168105718965069120862447474347020894860899322844061343595926358849259825469348088437613944722678342987311603903112151878534503516571733398024495682398270341162931555911723584113604167043604703279371815857999778243383106465558751260216153357370490825303614178906144849833867133798015183666081151730591604697843515771509858988162970965396882488591493012136262507920025494560489375260671574237345273338814021184521640153932731923863090108691356609516271153145391457596486471137589493050915368650015333364489119109386994630176772607848108947106989622009824098154684531894038672220301694254369526268568939501254304357441303514478744386621716938121452192249075439669175358826177082784007299947416853018248761969770070639835396665168815545186444451896199528479016034081684553876811889433577996780431712302980885233087923904614853486238034778295060122177176707214671311263572633934123459539797612684767352537815258623928359124861302030548926205307398748446716528860100846143694963377540463036984610370558121188823982492205599064598009975325634627293704237797859896079134452812099573073925653210103949325829828078037246649041540106642889431318906558533334530886977043814639382052920526209536697026121748171961406063115094057291453907881309644976895164518567762084564135095294734196295454017570872022339704716582479002494685266139788660024861445485794431218165727601869658274175617720129597183318486321257181677950575398925456296114639375824928532481419708994941025873909334421242193224164897246651567905247524584227599128993572995245934127199749499857550551718098583118135069288238272455119238332465161940213097241294786145201274970441460995185394672347561336203830481530615627521831434566193654037684217068042171828009572265961833286775781964945138572901143762707103398385089434510807298539787336593568929166666576414723956285160545697534162509496524659511187722746468014525560029998664918578991148426756903478761406639005419157414762144255503484513753887840244995242822975487444582814606325164180735739993434046316069267380509325283119999257736641610682782866681155515102653453238502803821983124475324897923523949007250291675044042910294813782357049455688942777112979587525804928205463085888153971604116279599690217855488684669040015772239771693231166852771787842441334612474649194065014595386826896342099431497447551631244266642287482794185192849077909506771207972638569686152873396869758184992514180686416485045886493347514422784618708309907189188980389221254567625997440525634913697682393243169019852873659710699323695497313455697250327031521561746383314833898589947114834167966120907890407800482681715384835613653050257571234803391591069662937183406811346006193157297038727176430583260641348486439432779189925516084002848609421963616732377017744288686145108504002224518028648694130330039185724149790582614880053846869628691548508823158525400361184053992473013149463457421790298303040057857714609047599189846212439476605073676020163077200097685981561519747114724754505677495150820408914982302580700954704518313404352827676496511850146315517105080735523341951672455076896111507517976515425104498076965417532363208157609858053436689320332024335479628022127438950128301541624319867841127510826460429906878257862906837886302891197638137295978956107633962058775272306113549144956021841587246082955551009654568589326017096974314166144975823853192159996696496773967280110642855033165508958920970121409603888656867828798936106193794963399371303484960916638412510805232482937409517117754770907650616703833772388301556528293439326100405253427251973608389314549682002400940763045896191287100021185629053469114819611873693632922461184804216946347429197550423154444117823637782517750836022353025146546926615349968275134432150817159780679628581160291625618317382524639636303759496274326903597707342791926893972806583332543708191791124744608519384572993604547336133241402182694451592305093367404473183189742240540429343816147418615183899033324269467456622321891054887163882731980278918430308965071230328287416167502806972907331784140806181655368882267944030704164244157892838022346913336349458794840061590321473515744071228548966357408300251971307156495039228009038515765499558285455355237662725048805950206931016255474279374011576741158664020141764729923160194738260310798189310139438454161842150770620135072570659573302420941411329276428890447259192668692001664950286589801431519312607788582596323776554591819417603088165957027944546769354421379534345752096631321176611324384126951383700244410644082237929977574373940138745000039799562281824049354541918940195023624857035706984329476823247204798683092012090646567775353496597405140747309490435870887829148122582097374071788190739762228564783919133086518594909005086063088763162716580555698044647480195748059376805681876291708142932354336573921763162739990965198856689280684855555463508653979982363637725065661047138818275984392868771354308256891847537518737160770363399764146810421223993015080687225745284850277639371473476220999106521095020524703779664997069160276096791908880164566568654625304938387227338089892990281261550542192219036869028559331145299019568249686952440775212165700722312398474197968835409904526740462572503623870096216429851588442298793973718676558239129864990898849547663341018560481459520218192796517192332171901925563648816479900007163406942729867490677552436835172361167637062835462119975001520330503416269881902623204612633417417901593782778056423510100006332724456099770261187622795925614295863891749705670450762167995875446367292044631927467926997011622947639074771526580722586506532481733507177380099724025381801584735520303924014280598888961271333197049270492223483094617368602705640933432900447048393688328013542497817022592495524435034064183449053094270087626788396028551247004168313085001995686582127038257024233524571575734706720564401284200950723210955191134132910024987655923019346683920558508090049557402191214851575320071375102650265381446584715566754472748660659565066675404240055597763521765166060902224901196866396505933985862205703643786293062734703877301616457137493422390643855377170057787510322099752146880380864671533520358685886226012771308438124697230240707904525174681050233870736117261634634699543486060152123318706207143357553314162783421858220048897512708780603247499276239126535886608857401956726829445010761212902116365427977424844844233409916337639644748804753913965028519607134217894219671112652084275370776140009420045144302271491109390869297380385977887270775201093739898515920518632469872384096558758774724134061586271485652860626525968531148890783934093756584081977253106391307389329348644831911094206198153439201585898038706660184193955205506403630158254528822654812720078828811687268450493616617789242569282657824846764870302621128851875583756506805486431629140296141224157324328353299049647836773895559934922244352221044441939070941965283144308553721061062530619290077020144027883084800151110684088175748139282823894854646350606539747545327060029216760958147225204980258100224340714022338965470783625964539966650382860148603707715606786639198953028899075943346920742109263258705014458965177042662692596271666527104828992719795723798826661399669101309459053696366409538079395862933310102219769975678464469396534004380739206145693688213656130973998092578153987834894983299564853188794521377317544715329150176367791937835093058605411928628052179661198181831093382698592268481093108760538816143480650925695738051182055454110926547042318084326811422906871504471964313585608128110065659182148355707623485041664131677552791421680014744237625068646373272765563965307136680856648992819479910923874461123906414081192476904527722541734194173709626174928076181039150272528295400192294838579753033849484321692193041262577913739862401740225577136072637861781575922735815125868457659474704090499484456127451659526777201625230151222932048182432511509817819510629685985065013853677844262714003935129292101099752748816899234016303182094689352462112900868874954833449456687551259054483188064921021247667945603304711489770337125290459243852944616405748508803029508122815968861936306084455862452785007670904666210978313921243125365758053126302674477419132636546834280930275458183048958776787081286315722128637932197768574607623685691719736573034446287809755590757302451441462999051013469908655795919916314653593862302313920325413293839914150130442095874368939798669500986590318644798743012864708436694519614623093916022349682458962342372248771073444719654396047821068178991621579348011877862539653874841641927036039688895271654992246118405579001233199534340670875383308277841710546201883062820144797578692501627565889049034565588358365610122978138861911096539037141257725634174115437641396088715788146395146911787654220385632066847351401336640657508187032064924429602440567833706672577960527111855569973500175961553458878995285132559592004955602590825002930229591156387275863710932629565344328714133939177708588313594321918720231534809839307242088690149583018065045546141044951975132660134189197019002971388796202412829951503206640107376064787031055734955240357035498964460997594692919786486982375363900041074180969991301276661968212935480421230504421729623744768176925680832639530659457544492534022961522635376948677701247137809920986881618757868570241653716560551820646972297757526135810691512452698004704111621576927044485333547888629885597672412880940418133292608719599305300703614746004544928047485200096492328333207495060554708108639783561186275333190265138046006402646539797300190623080459018567551160092543032198042107636614693600149565217507333637725275108676752812991670369166708004245565894996021497858506739100763353797713610085006029774403340315525201364701910310796104143654703531752308752288646897918082874217483116584513663220533674208832214576925410481750415041635518286300363152374924403890252501532308573646733709935672076510705706338403162208530511364596014112630404783841046828025617099180502097763119827855175214976953503656509718942877214893033320882923961141180774746667299550784732271144483768682965594844855407221908994344308998973794888402556560245317629435326653070562313673423518786383916758113090050048405670302749126812309302396276450510591420746377291549790401264802054055924045850642087791424663416580057383493361839355619547346602143869924991024646784852029766788681547487273783697126830671773160716392517826358801317608186517504638718098636286315286313726316918399343336579434693118005807521016016065849271949687578329705932948233940715655062405696393923610494004165492007844746848256654134411255181809117522605989806227689150231448789305439644098385426875751635536028349281070380916249888661367047761964047951487061360640731537027574772823150167959840765268753462408617177955528239637978790596067419696865106888615954423682270660868939404447458572041890376458462875011713930730776612523717182261718606978884404284469907513685817712456144829658862490211938848645851975397068828955547124722012233814961439048997227272627305210114229398644470096463986693951928019963983023685289915938154662152129293058343630594547160537177999703363094039142321627090549472052101573235594126013915144995278667937169586706668239915727680616709800999783073984831252159361929691418604633648039111721222848615525079508842883637965858450615525041257496445371240813198774892733471923457334683138622956231197782086588740888074737202573920188779725023296972820599619597407813380684609437508493155305503743096668324532152394675288629679255221745843404177784960280607353135070566321598003123104045790258218386971119573261044131188124279799537062605239749258840611026385518283252458770993330460769237830545307309572135510251670505104511933377860716482545435610350829406776325394045443569404503979440001948143820296099927680990576042569621002375994314692495270600740249548867292453584838816951755580698466494253313370482717992426551750655018788746043095612774673530699763251348128602713314369137922410217128700062705971121714928288991112248918528121329013774470712868140264094305675117814387513168283307325597847631635049501319447982440748482613453094467050434012882365199932511378570416989685898199155689467608194510717521674264320185166021566502298319172649023760761485269156722647168850718773868368694146278498715874487849283761575855940798051313819198839522160014412692047831856213134395187080429814631002458058138965207693879473073713271162066944642723739977504704709955884700208883740402470678762402525947440171646728227677710670777827180931010723511830682308708592804486211679239827723086604205989202601224285173976159193212671655747835124947722010667077089373898233619326312670119152600356874555168152502434244108198101707095808170077668353372697498988415132881738687340871447482983106029418698889706772257358277426950664768904520519494098973448751071178039914893351187839841021436541638895495258063138380074074197516618775418243621843916132247763175576390548167193095872121193436120730062590307271831859142006474879963916530962595479842104808476023551498331394898656658558510419688896985914221493160970319092112721900354927495136697605496218348477628841218941694385000111810739869673348735635678654706759765453794176902950479179009101908235197010249465746487437205268451250272651445568933479501027033776882429633838823689620277253519430584809173017965888965313243204631660286854827460721292565318394853547396320019017699508470893584624617414792691592543373683996276715716786685328449619762101628198025744602596006626542887973964948125732115287966907278859869922131787087609027274544725199487853305896573934921793570000452999374373243848945272858620573251425587452978164488754502615603142433423242289250834785069469229010442855121618605180559578242648712976933154832041133168372659518169600834030596743965949860428259778334118595061702066534574239707701175483523272487593954755936639761761373079030700028558947387321062006541819045934278182876416193022220671880028699088739285997493261658235105317957419626661195211013363472275731015381633003874893565621340378852556333203548948483785722569003356956786785432819202372277671969764207305539947461420746718734416561194591699929698080191509140940451072690405164442922373629795438659825866318659106612187621142509237848844958226807383370526965762775829828028472799169414512176783554657875443886975498931713756304530298900477985892250357596620852011064490725237812982514464952757173064000523161155264470006712042128233964033127958082075660349854613831030259253785458812501881551470204625697288198495876071592455676364611890326023455615934168010916767568469394727672617402032800177743445871048084773597801327223222509255130728010990658017023697969944602239722236183527122092971282326977457571613496675531112572376542641888079910742560906447335547923482872504160592665511483122564364642518638824668104171847626019405157647833052432464017610936845666587582126181189955939678241015077642980508123486719630990741301602626766265896389369055998349919955329384995488292176832267841811318731080179045863998858072674620163343629841073462190635447049639029523614962798060535802081563465280257110361954477738778865557984025591485605968206252900819415638654816911483188366731491339956666571856653072515482125953067843214244428244707983978308942555222945799324362779762626813823720364493841295622357132847373772270324201874664459236008435148170570436718606997603207790551417630362262714398899436505299425436810789207696529504971708985156828601731768759661006303471500925326366027258892283162155825612436348388576074668536375793529203208513983164002034262946031675189599496536435264982696581971151032728275009391197928056384306092557527626296211780705220509338911885758656645495920615776143722728716525900367664430727703549800128458399772115159665260529430623365429896722600700258480828233071442270192650855513652351781373735857782076833919804246060504659180480269568597766078800703701698708501984328553893296932793296343938708914078487115408489558641299577492505885800146007169078103400136358798459005889980803601658897737878472630774155195903721248161473781521184251181714748992310742527341246497680201960220127895944230051452241534391585341439790510633439532484574236259998698755733897438170589910440073726023734761501038978056225924132424258062722499468713948571204876147493409090889220027140396236028599995214008802845510179226815610199034037358402893961262861169012437737808738216548734977368955073829697660428845092678807370835124598190605108150343348562417433216042521590918729406411585597589428009198469046006407808381415349649007506834718304203593089208514869814739571275073080240955168436410491001485801287578742717955303954754247580957547685012953716851739810311874056938341304460184950727201604341766510271924040659619339110788810382165036515226590380881397386890483939292260600057835959531705613348178076943357167279543773173941171037750191878955642575080721595044312649680320176031799527340495964742964142603656630043009615065927238409379831963623951228863218911950128930090977250075227893907776162349599491082503019434340303032837256086722901221208066587735226719834869039470482989445673508132120702407747877589640380408066333764884899437771760141242680364822980327331970343285282823210588114978751321336279728909548112760189440169114781672814583277531945413211787051694621066376286841082570251985704930264519142022108808051818608780008848168190064760328996624266841087823276640244186938830628149936246079809250706172722819333639333550391743746745930529265576439415170799560839247621590337374403592924026518437965815606575614095818762011971913142354591502700873363431884593275013324074709371770814391152334841707874909121164524424582508996901931288810037822571855198943787430583352008669682130603372162751511038958359137004051982219150723377385476828124980251160194558390024536042677694486700732246144492206587630206789588956923468388802245415443870723366098273171999444364936312586673330490655150996742175866781158588538772370121440747781224304830863087863436274934091946905960456641958434727499254809330615836222635232469468616255991184497430543226110479229765596784657117611545641439833302612531512674022996681943063075559194547282701015786610252151286293691698308188018908362161730895144328643008940868243284301272210942673103173658502964727535860511903721497297607899834277720081270831429737130617523648727005983706450484792605370214050344773753355682137492867556402200372122278201652182648867533503086559087284357392891152605025460331851362525943026925778235727089525676475767742863002469772392202780422075895385293783414949445070369227585107282135602325649644784798693904189007450704221500893756553462230298228547487926898512813807733095850742046368421903545352599352110463182476473453897256375817708412489704995502387323577184078155526089435136094475459926398716413143616728224955923970413180537837188033094730870105078072742503702055880345061555478182573613357363561107886683861153426939817563024104946202858463057722423771003446899002474557722827259391054519493292398031915707570015617213277188967989970222145259981474097301781597483697148977034471065663645812445538444508751781723166189178009934426985484371564784949437206258776544141330536908168264213440121659438235032170815046217002612192771440386208155054705020241847516507299430735041252799257245956325003129521469436308507516513634484852043977712621049913369931762255042463104678817779989062773560496719183100995277721905308930703346772332319792492403786724828819495537025191567838846929675245934163260402015826718466427888626625276704028181543650097390697531912301218783294118265672530427677377523593099728918788236757428777131310687086308198220803343823485736217889951261200993990548138060192730821468774887743437899798208123062566372519465011957541969701495515369596152288557430726795992279384454162227741659578444844883479035775883977109113065633256309592506255875373726247739157243688977778794347450478433405003461922985918920500777312058944369816329825099571274753126949456652834182201214927573659115726771603399796146718098395598381685750143867824465646168853360669307416740626794885464681542592639652403449974577845725128187668032069072319806774576111617869885025335446394484206103252523469554243978841841879040064158184561557941254296920598607430307624017422253248419857542738288109203653121969644826182167357713971505659161616372260739117270962706828936076426766229808039837510743694499618197698455796889924849326086865481441775896671437868233352085044882665871606677172865709333514053876360188569168224754449043661538529820622468539021080751819901310276831204526760401595209199809934307396228049206310021843710089382790372541422747499819984979873408011755686918743775669955098096630537306293741704649980743559056165735270267136531690242816032639149938610130844470544250670758400783022325449940747400623170597780062345683977790975017157756572249164654882580031221094982818502832957871206734618262880676297887629078871203648498421690147242536209064393759046951516446477289522073862527217965784484575296352938919616922304384508295224423585009857889557448473183296157480725881684155651169670265363048588479555182176979171213446176163191342846340339223628414455567709711190516277114556849381355344545891513681718217876801414264401757719538546023531979256728511531930952111268133220347316378281019953884235967735845957750435109562058726249017900884621347022913266977269309081865107968689490833705653101879231478892861529529867582865184130498764544560712968307438506353781290219763941100249284847451628928264091963787318881745897024937745818712706211400060676832680482775872869361650477966165795529574824296976797640406034092409307808572384579270429859762034783199464879946640420665598443251586972735128821462262812895601987830240776770099726158799220001154378688251631700681388419680011081057842734984055938736817447022121911112303396379157716814315559170802332293351291759468568491745375799901700959262092214788954603797955948923162254709305021510498321576962927369472749514785354935508185141228876028358942190777817873357619178213245043873034754043532731778658721156434891234265956220054705501192546247361810444177347527599332427529872964489783066351753110295766046782156987292645216789585697496537628842256812752461858546923723915895393066656855943508918158778080020484425012541311852914393161128630384792453554210474239487400553778236224796953806966361710738628945444580278254843141941280204170335769459619115695280898772845303738862982300015882778654156332528869193785072044952826546732486714263946737447787381338956882586608207341682725755053482477318282784830210271785753284086238930008589815966037593165659619723010392123564499490772844171943347618646077850908482670071360721243557771237834088546466829877259672809974847011695490798021970449185806946664724730538014899616808782443934129526455076228343367170342609270136205303672330559446584514991816521130555979846009063750140883112531566053123840572508802888095003031390378843108529809829376361991897750150573897698527144395273842827896225029284867510793689117057834585595596249314548126937785123681473807571555351907736034216822059070002014495053981461409774225150903084371774753045438344677128381879644818390308252931482126284844813835413223782706730759015397813321018689067806303045774223950044515646717721719651228425260507244619263481806469006934636469898489207362571908597993880634994269005861479798996108890583092496418159029686144196449836417302697236055388628849687280758730488394994312212624371688126156596135480981295143678018942723154929289636705758332154178448656292232291536276387284670606071856845521041487828602131915190484828234569971344647318865085281906097108568374704549722997640574460056453358205966070071996993842079977088220338076160730137001443518913775264749169748259595368548250741522491075283113743504986815430171436070713757230474172991299113608908409603978006491487224003276915352091402727481041227164553578389343554333497625326009180356825949726718320029750926355786782121423917170756907604159591947324635307117802895540312379369056192028797726267078357390279666143436105570943732806687428923075568491311061616688497532485111311377959775948701144801138439232126476856588486368386544010456312033782866094898935883239244386576382295372046282774900653339788079351665327374619749411039935654694591957032769038075928125882721248345173325824181363326707311979782863683088949514487220413151251095044974214509794614360942755216003114202256434823080209013049190474619366656590366963128154727640765457235895203987555468351656279098640435845080114790525790141933980623542753774392713442620142825502993890252606631630426066464852527147230170610546908575323204514345618493004044988563484711392597872030832595553082177843952581046664299716700430836940472183888623814477547537345726946261057919963290275514801963964441987691495078252481422724002040107882978836325413325037554767805939250719565135644165678400515530863571147965453129278749130932486254851465827437977032294523807832868531183568816208217623429391259833437685869689072790173317608417953050269879968352799955414105998137823587357208194683208337415312879714688689073401633322390450224291330754167125374869329116327534741163519867985115836556402894397870540367949659473475061265772482793073895919486630843196682709993779247288248904855867160138337205708613634584206345657352832177912601808708038615385158064593311609419029735719092034425026191168257645554890728385814998941734043940271467743867607097907805584234948474996278362786172026915873404963575029024770395747357193843926125633190712083775184175035472758067886843089724013935188325992485618200761989792731595957104974321076720067646822842135676994420986031084925006704426741539092101398544925789440044715578860443762048070169637419961955714278918190733301413767613478190066940949704749103380900877681622403824641713978105338445856790308445804697071679686316186750191765503366635516854096234271552895032223763319298739989139627160777008654258238486726132355143340511189907879195187620785012104125513907811572233953562379110568858506999561132645926364728163926449188344073897241079304834022946896338056895795078872579981459483595370910999726765997061458513943107821465761941114720565975268802003237037119139243152382293618180108545644489129436250832103644324802418829766041911469867093175748787579173332890696828338285834211721916211355561597619283704867893819207316025519217068839861403637432066574684084036790019788408597436325615640134693527040429681774510345013773884188183285556046059109941204387519780305709384256063186939834519238648028141712676894960303043694311679670448886894455254047325104773813242258032749193607310192581349927816217186700301891784063663328753405228701348659961068727116719043685891081054382375201407945585114325568368324312318188011555288008513343065881136918702269112792996059800110700867093834103781736803032538223192020725821323032237170723053723674507804091808514547504519717802894219314834771640400834239906456469649182033485158174364923914103046205455053224349938576762715816480329400097852414806957871969421974791256842607212719906386682424893229913405315977264856895977373750218090180048425558167570000577657640973814158601926385873014547992416094407473512754635827953226604921756713707676984169625529691405287067047795760431145779573422001683590850793082928535221472287348610092460583199933295262786337887984639200431752367584047005400261779078038438706900541349909267672562918220426304637831382446824413366214213535823512032279649601195099480250737320733445203032468362042180787882066868863326386327227460967653482577307350031237599968248970579822872389890426785228121276492433602771092472271310085293004147979979064654667187410681915769375148898578946943683519234446007112587548253117578152164136575368673467198720007516733789123274482903002489513376429025772081165003734198590502885526975529040799656278267891554184199697040805395352861225526913595758636832675326853489752443429415121985221095940765875575186390674203836238215482844029164306568673090896979474027798578047239934858971263222571858554514237165502077689823580624975408240430519361259637666300054724608442165231555905454021136937294906266738907146153961531766240411427948389021647137516476210246512699620052925839485481678490709400464334681699119726713624904256007426792835062246519624434808921383015422033362519547721005846559068549911609303670272401948798619953209978891328175983461105523104610869347615848742494749440211799360078175384712203620888629785577207451962299438932224392747763885674635468406438351114917280954279148977657673959373769031645470899103514578208943132029403869518825804779654290911754661605818211415948110847701475653470027764542824714671707828365509939340292189945901745921144719538286085488582327051774637726941330364822555081043410561322481130701848974761808738484649268314856489515745938038911729451368327233198268465685153435805460251224494057220820703219533587344120489439522385861045253966393972184930200515771263798524045605084089270628271909062193279248461962706710141207172637552965523918899351406761058456307301359216332359817389348756138073944580853084043916223164330898164844440307169227378395981185205027500466516752849409503031539843594775430241047057811528496903231126168265187665175093752006897905209723909046406162688567500702156062785839057018756123522335181608080657196772518539066299642515008696678644277619505837820906741575754732777225138333348482321111455862817823533773396693120079774927252589246858434003726469277928492686319652378636579490721255716735328763091909077869541207201806075881928571396812725788561874475423451533446953156181146808444098291110209313584925673058800671755214956856672910484655356380123540418888802030386120766292554743827673846291111958338773702957130841283735850069938789717154962997597203882974647324660443494122633767068990838729233605761869494207767182944779380783072762732671948425935152219644405925080175679487868408474896986443830632044189157581104110354778188909315770675574758530187919108872017054142364504170238178624761920862293728774428103105735043604183379255978963384977097775523554052920501729834950380608839297307019749102093969617951555002158271667447049472063950369716004117869467135874577555541401542771420744685724998544635703828700326863538585546259195579330580132308508614344136266032212098863073140579700021238365659835096680446784732851399860944702296707206480360498135614888620273567488641164500699773203415713803678204938607130621533033769748615443274747316435856858380172764063875046592077730086715819517531013731685093548590338845802507586504351169937126395457521178706519727253207426259739239441045727415304489582805354218342296823899450562081887801506494636225624142341134261442505085699185932104537072897899292866480121378611401248211074302120446032586395288299238712221312563068530024839974043231550998127335115677369451025322778726512141738251730965387808945126156343598958134971934316367700240904411742601244724045506565162164272395885750595935035306397045852988427691254785750954078731829961485824050357872253977096768597642156686028285631670929264545431100522278567404502648927802194531121482536995441184999873972936422040624250050179067921153431535467829593694198063400434074962031992728511068912389061310793702127883366428586247131113155329684655502108238263878775941588150888228494194704478585230155245786826707734890683416496510632611102356590487561624083329411054539398709787262705787998373950950777005948864858551444246308272948058352766588046715729957171471918413285309100669168702084861669337285872962766437470704151030431274476534736475576080022502645164622271827030203295137280231745874363956060774490219765764885066241414365906979543120081832150555959703821043998379849859762222772040801653782012920542144957110254101145490903758276643905887773334880252359668074681625703682660221799901617669827842021161193170180482881961582067773065020454272291539079681035735302517172729315825887491150534820753557127626497324476565058738875354587512693831029725317421757739229791319546937226220063019829501375779083289966624668808692792212032435408944829349293295973456768778318531614978029007639767849000758117134623740323442421870348065352037865538292686762207142496673110737769192808613591157704644882734374901439820664467283260025840295496327310224028557772693637953135293839854808550232038845560294724341521929373635781472842363033027273183090263105385869352307486785524993902908098358773894545507525426709936556157830938337972598168846847953069133142030954601934351197726287634059857752851598557769680904052768625086062573133847221002944747847797124488572061773032117547199619589499123929461202614069017419372681818506695931813637234926827004177487854758498554826491695370695427773142732639774694975159197482480904572088681415729769677527353102313769553141476168948291753882835746061919793367740068177306857311622723458027213849966452339056451468666474300556993455333347537452714541048306974603246265513258399524909987020316962456994383389359537846662846474549327969767140488728720905137531121210982539660913853408492771929156005497952243586723957261137822932185302926739299800204086485922051965668973578229727066444194406254650091768127791986758386342293405639762074047881456826596390558848879026080268670748364280437299256504856928450821333899386082930273411995258783843008897283872693381359961060919492424645453455050072099692632912600122551035409641672906067501910695177401245488440432973922218929205211206943565663630435626986777782340859747635902116439261488733209092022776669957140816446350498410921424117082087346782696426070630334558876717631382289575457059051050772484808437028306510625979673952464855037223701581199665866040634073733638057113064379749662270071108554371240947993295478931447712138754899460682645917096078514237727137430567271066373579442146210484931659726510946375917619990251272572207578843117909086259745443490612148242026373127570161872236556508196159219429556967039648186412248059225957715611937223995315173117345677233773649022635800613412197696849028070668854814449013588617772951085624801132027557802035641927325659060076113823892831094696863281586418522396482353851558571035448949482929650421384725931990893805576576840837837211619251364453853700032303787596295028851565231622376759441574004818705725002170760350945632410528763175075897803496179074728717538655880968170212638786044639663974834175183590999429029297651842912484259745443692571677129613362851563316495677887131826925096653288288175534082496413815753319920795686379597955844977984795844489757070587688432424979280668045688434139471438715234428921827131889484834765351523583219849880076290423194696164038956477134214500835641316230247359076473905902086762081108838579793334494074256746154737431370439622038095866259985852147018516503023791517858734456173941564413258268459491508752403973329682751222174911465901698964865552876911704502636599694823722113106768517845732941904470512292865887474273599503592288729303654906920742510889438671121526714321955465474147078267361250877293228266854363375013319855730578277855724976676220306277624801539317186187007720614398266629571704412173357684175018738703347982830391191964035706306165869868066632013139703490459390241338225519193068814538876030566672936738224519148790907763358798058558535496752805027319719145937410240856214745408716023730851419516457355957127039473237054280453275821208886108005318923313421539715771847400301973433007583990296900043359517500489218430611359016633418483276542520720696250291818333868530511019744131485908053741207062933638220158096366074083430461423539640786403587660434967291355720368610180753588882517204580088730035129647080990309125437032247601960967256880567787013789329199112875747522238663855895419413104806915847234374454965293588069195217180004898983623595973431933604990306237456085193765611335635793044971860748011985492854180643579086711468493019701438365489072280109415152837291577999899666534275293847420556479914874609647330820172524706377892383317626658194368961181082039945688049692728564631304565966347975096723849098775577969688414554359741221443470815533061113455914892256259918212890625
In [6]:
"""Prints a table of values from 1 to 5 inclusive for the iterative function towerfact_iterative(.)"""
print('n      towerfact_iterative(n)')    
for n in range(1,6): 
    print("{:<2}     {:<2}".format(n,towerfact_iterative(n)))
n      towerfact_iterative(n)
1      1 
2      2 
3      9 
4      262144
5      620606987866087447074832055728467930919421926519911717317738324478446890420544620839553285931321349485035253770303663683982841794590287939217907896413001562813056130648742361989551149212969224876324067423266596922285621953874621042323534088395449559871528186289511069724375976843450129507660813935068404901191160699929926568099301259938271975526587719565309995276438998093283175080241558332247248559779700151125941289265945872056624218617237890012082751842933999101391215888650459655385867584223151909481355326107360857559379424168644356988805892732524316323249492420512640962691673104618378381545202638771401061171968052873214149454639250558993079337749040788199113873242179763112388758028783104830372553378956776992639131474698631635403592318398169766049527523470365775067845991971903958476530419618328370557877443728831536095595687278188136535874255961528052368239396098797700270909915520296477257449337496386440043216964158869797025960539307850266981043908205789164810126844405305719909486930540196091579061817941577193796914388142649901529545033700511196761537723321992911984637319290332263725820892098495478423635408198945460633049064941111931027698537027471927911062690313990295177372317584723804721189364511427905178136857822150332381916036422221580633685555154241932878964260108523361879921484901408275360523714171154532628218891905218752904711236625818819886923111271809647404471228704931682411384093113024792962857532782863101903587702191099392714060187195954392300190493679949589600313969267376351405608643929098427395200104486083111899853964304610758473277805554587439480383928476216931141758785031250627364405235869678559439444545227666592406138337486846016243289650621435832209315605503377196096021580300792698754457973602845403993921462211927841458267898134874980957060377354654918045444793008000882470017928275815652451786276451199637925745963061328280451266907720155464919652537995830833524781974006446820930880129957410807749296112288199085499565549310893971115388988153908811684545030381035984515688573254825193520417330269951810865135265587428530428871165742440180326205672339108762673923507302829080947467916299840992454977694170434544545004553705499927898038231431842130972614908743199239339049537463039908011539775745163363111687894512144470171171599034321325916810668925527973908585629534468475360907368975854136426617805540275265536695980531795741752961781839337939697229977229581413622884422740279829977295915284666545124027431227248638921658795003647241763610923587053531289708189255142940653575571661872389194302498469192576910707929001249173656858642938851162325932929971268708566073015981028382563468517866605216260797356369591713470804994044071903886744093904410162463016801850076971539838697051896158620091762261500022234753464807726619508932259165499658626680060347482271638544969762203749882434829784967867025874471974629293454271244798463297942525019505747161968798858062552781087953269221190309879654439254115418026636789004724541272121253497943662018997145763503523369967643185659604571680435276640625024148076205499536346902080926003964431314927427173668275389393026392328635534315122068843335610761770845434372115640889658820852405136637109590065139017174875317326958075025561929277217815025039734193299498885243764462790619673245800298271451436579611223597612211479455640754703221512995698918281166944267829972170753555014026296329897020471435909810439395954090795545016914714446924465283776735274343167533834274720996602409995665371967345799642864885644857368252021445104111807024240910817060673567805339770212320504490194390778981041095857716422179677233642050085309950750961662047685962353814133921289381813921259086794924054584412880804865753967455899215136744866406696751747407372480759721653626616776178546924271472508570825254080549477492826880974482677669111551245728821473098493755388353466763714462228219181498136190553908738691035862076038883721320659088324283410846324339999134692900717857569149963985918857751453397382159774774285792528647213470035291185723214997192088765194722778927665975818312843716205219960920944919375073862693507630188254978742421353751249622298284939174031859378058062106930498584624853523194092255022405607054500392441837105943277587823634623687560923403343239818886836040652096479941644523023456707104876018047244942130066318938130155889791991428879141258493822501488557974835976622457460660858724403111700636195120767246105635494441118490904754243647209488007186062789986946028914360868322544677988564760491876182487093444656344609202784063076301420375979508416374167343320110442401817656079876573080258225753326682553922015194762878618796083754315162957822145661096264686892462805920819173140907622018618476138406382879366973096919256168656087217269391421631739585893322204195706304285909130701815919295595732449478143143909052397474093099288157174834348320254234008185824782535694374417838936776046058303007470844903864272365958752352576364789609557125766681006667763643927538034681179525248480527521026279097719690528689992267976014652649490814337906227291723725516838655104885968652424303417785949340541159153480933307765407016373799437724631853080894642774773331929416549896336317798523713766705151588750707094421786790014833654371208756866544908809266028042799852282134466186935970514191284235642315443364609616097333676882489800825247297243685994399204486695865683807912151907065632872896961871130327409692196701577141592558036889251309840748674053253695711822005982423075097637063844514982147207675036150001979020612565735459361685280793393539514997474800281271988879965520817636150323236426770243663175319637221924528808481413546173847270528060523891440274461195426149133001285557351911218548539614477636412010045445103772338793934302699153550748213216921277698969261465133243126496679512229191291414514483089871282906025485541898252262897240467195186683537598820863310116296225022345054191109990503432711800293292483131545746409749253838720924889944747386536495646585175655639704518009085625548829857453118030878168826759643739525232895473502994399669338507727388671036351218810645021679308218785907605149656799905887045518671323684445277786584611049656430396633387484914633751614603182118796402680949901726119247287913539639164796775540142275304335166024898758854930487607232343956193104795278099599905994919395902021234837696938323972751758105173977355610809023870308479913032092767674015353418391099813487379113957226760803034497903289452025664393482921592319875094300430271253674758363143331725575956177568758420741689327609640995135775615758667549064218114401402179624403190329344474567660602726267327172588603212757164573403812755284962582160004105290770808335932928520976267032509724321036742734755890117047037973807142192570106133126748783057557563952549141456488196613126097495364890941712734406168593443603668275311711133874507839728491299497800359269382192667682306336110652560276671574948339869683470250530697512361710825893742007410426277795877640924249863112903534221750939500345800491316503160955155566759645151316441795912514538947583865817469925695758597657887011850763350271102143162051110901102974814123967870153277499699384519880192453715669336586856789609086835857089704412737567194682453243107336729566025999906911246440595023931719078520831490247287358117567132690605052529172953083309387423784797060740165507220379508804745445459892733895752504758121436253768037331907490721082789232483704931110573457462094123278452024889883483126756145627657587219800765228044336261601356889545625640078513776829880230014045345134456551672907296707069261284051939723013023210073514755738985512280209960055089435909882711059954684981682387113152167393041917659258830185777038934181830896804930404217534213242117692365121772507984617469648920566622062714129273188014593399973764659571070873972870924439258221435907812348596166244492182932062025584526575202335750237823799332229079581906268578226420245393404886503914275246820398703889912621798257535542387361588286845863422966090795247488138081335225485389572490345651581655651382271674866054262288190597372977889408563727666867063577611245500247157708504051007036658678298737282637483586028711482915084715307785603676158244779132010301687770180893837904829570137586440506950174313251462011226613390877072301427012923106597335452938027902081505504167441949259316348137439894315525524435189490183804249170435211827583008943379332361736225913939898702095671943678807374499391153173842336634038786990615618597566347025277087592599929755641969772019546716755712177123974482836921478914963626937887492007247691866161813360941504365822627120903137460405370864590521183924772867619363271364086683881861192138257680521396643314514897308095037986575786211662786846355478018984293431332312923549940677807203459750271964653887677188177159883533205550917663480801662097876182054735535311609308629238124830413563546668664688313771208198444155884447596718933408979803393808957076857410098564271280658535479862006982155296996709479570359645524313976194436632466714326936538693732672344801948708422352473688908179283627591972465743000159572095019347215134010102085223651237469703515224786668838430733501367807202371346594876835365839853149647400633826625756481265247649157859890019018546733484404758223804567420562613789324955386722632826054024577326714491045685541754576425630927213192138772897916125747954060131918972227986910477649349822420737830026037382449865466152471395556578686233132739567554856704804187010087872262192235991229953302957071530999476754874688737594246591815923444076964097253798846701172898586508395347415607552721809540487935709798434132989716853318657794470432181816874616432213250479807742070410205699552793667877615303801914202172579672389777503171157305605736510759281430693695281771025339633747239042764230461437618127391179997858000891713258654057566741080446385043569374045635189593658193493998747648139887641570441624410406455174326634096341136143216051746944478932799208248705579105803987010504180163876127167732419283800923998781362584181674256562486399344024213371821948791639485059980380490138046122124367420246301181269254608646870394541890618690982840036382318094367046008976136589135926603563935616506345461718799622979372098339890995109837422560270713748659893737168686264650653377296475850649186054579445782286334381201163851172474964309993326990800119160784657145401449281630389449362831390792541351837228996006671430870611598644303090377458396566931514546782787267819836874461221887120818681527521292724305375859434938739307328318714813824270992236829275946130153178691069218023293023956085240527232236058245985607967681886411486835997181171688505411933251234237830703401972476434851530393458704953738386227745799069073642724200868572871289657650404967098367100930821865179580952603014210567336139084357250074110490454666214912146385639324131875475161772963700550536059864807257285425139488600427538714951776562446276012372632440550102532675964501644290655958338879900774894011259410698045448697203796912903662584597126587314011589074073372911140344721326858161515669655380992946848204500421374559426004497123167327729487658902503107780229797956412465845347775476773693671392051408031750979895876045649182951708194417075194024349600057547712982354226306057546104313932654078904645738468156578497517269888753719544285982219819861271049469636972325876252988545184509007527594056415915094994979058821158692639262760593273030410243204070690740163234569878359118245424726292828791286065232780336337594328867722457833695345314514476044775455490953955378653786150143623679142070972303195451864980078779153578981697174250528611486221023772772296864926285404643177913178499197249631382364726477012800080240004996639808302669152148291053528065940517957586749293226377768716383742689968951862906784952674131085843366226864730518548707844491344592858558552434325049292595028930476059097761739570487713570744892423830641808574818829272237537548101222965150000718491612931858006123092345286757784949329438164753566004683235002020939887895273086720515264789148177006749104539079948057756817330531853164255763192947879674532150178479034799968949471487642582675777519665243696450028000801259798465330265243426293744993898602030773034122959492235103331798468656484213639027959788804349561997564676008617946894846362939538036669274964927922265308788480403704742170951394772010537147727215486042077291427665299895866828862735863315676673687861468257672365434731134498611209804340808283966647310965203613406790921394771001986101208834828854100647374091042972107422926767137574163196908915698835343723205299919719615611196624338887588560570433772409524249298831514292988217767977207591660470864619981814355455018281147978269002199358031832184656625270762189820569210154197227256631993082811062140701582108051495733697798658749517764783454395432973892041192818932836103742535677053698311186497875649933801673618530865782967790488492431874304217703572928985938990296008520309547894401791044185563721700311640914489480035682728041995154263665650177134995328990427905366690967014917325119830254484971832650232256676637824994703158329751835686111996607503956555088577801562878311702335576588489387369137545092354135057133602141645825759414264490780545910221936770612779843320078476243311766155256329224918629855874437477124994644797643061938634598682302714736912708023495201220270261296961947156047136660131876188961445236053706503100827289046945302219099596174274524178158055658406510635017734264512839541891814992705104452647463319192580612885838554102362831188460296123773158765865756301792332688039417699299145866206902465125947951931929706411598972748378801063999440715460344485800552465524887723057471427648345887462649663898659750670010457987835782385461509812710741685382485906676775038655179943893258209902857333631660217357350815164070957754831280562089412888526028040176279343036260852451623381531495358371857354234863854636030033721138933070138321494171378180645029973341857283817936539039707439995866404198458487964698124994051707609708826451310146334342111948350384538096768198164495598082614451251871991710563464484691390034522192453079487034597904192237281117740525709099217316494096982192768539117937223715395976013834766351714701366745835899620667136070108288535978338392905224936942223281855626247322723910497871737394396635052150512402382350085730339827014355693123427516933433308148023564363070331789648113990245170233737078950182558336008831819657006961588415594011904652331798971395712601320304424469954841822073115108699623635252080611235159276383186587090277906899355405576374839662918070654596667838383424561649935713948490507341493036558858701203745089819629618586364333445083872983646301961611957848935029457103887145534565167368006985678789304739477182287284605812949416635853124508229259634912113479802066914318416377963720818376868078599647171826279936306011206123260774416457772992456418305681932785393762218565943137053657265903026814550465177049960143825869518283474573424859248926768776505296369996080710053611551577822038587458544677725123606871955640475099108571010299068247746982817647831531654985416531498867343914467927246033351643595002738326401980037421270549780616320524162412733569778616273910705597314003518554588639015743775726435537489402436132014281197970534539010673522985426018483819559928273980230983486631522518623508452415419059605574247493540002419581636623219469122087679389277038802629744664762332132774690420979656331055572952158469786320068988558221634630165947305928430397512026660539363175507069752637078413145624328958256601317617095017622570947185366355075931625286953213838678334844515913289214396612692688647580196026785705330485950479594377919468385786227917633983215933641979561233445822023924202955602075659090562687767321653133688829925565880801385565200838459534731419499931823569978109347183776829937724818755306793961101206787439488491983141549811517461977521383047455848329684028200565889565401361794936754685891512301543556351424078769245003375775463465545801218712121049591354206417576893425165038456031953464904301521835174275861389893926836991127003576427477825535415343247286478973549651302456538811495667952863351823391059994657262128673654166372078153800687630086172809765468660527401091231521829249936907005420768041510318109265292047996131838881827433581113622088436564651768838581922511208851791548500621121993874610033492672223432538242981519743863191897637746129697513936499838233703981097809106694195479397168047339408641492786263923012643667178576885946623136100152966516582194763190971965923080738816531716584219386585323380596547203794040787982874741673968628220041820463219917168722040735323473315282569555810627845244384240146121366608188953481409744853296986284671278148080400633044180748952736202502965162107122470841767842891719228373364326354317925939488007887298195381870388624890815170057768892317297790163255852943393567084892957616175957549876551615372918340835821168302648489703547215083147604214305767163042857730325233433242346922770415612642500313841689847256579694021490141922189460959730282478127666603580863106896659440641204382728147509028041428940750529422525436955616888184839282257143339291479902303309813011826600745926694364726530863978599478733700278453491689029720136877044172704184716205861568857709934602877758258688202484486789139216244838816016148697819283382273943603849806760746482155593698498811924782791653058107690043414729426786377581445869688506473463338544703460387095406874827903396079031424224125369555786966355985695309969969800327606415613290638431722057919693329868558377652810921745490372522520340335233823012006119834742963427335005583676076287674994416046031633789595089327189272735241819834457186339636975973216175760520756558315532481956026339614009479494576411705817530322893228866878166212701773413760618489951477449552803393187105931910291073112821983339586153473471913934204470027796787506124302987239326944012856483877026032619027257284056990251162486153634457005686065261811456080036996993544534315688991378834226649767197687610705889706198865453888289971826338947082078861046546437371528931328631914576809054996476688872507767027136069185827431243274135217007487211683679354987117825324434945365018801680815860737343257295759224209124228756408052540248314699706786800234263583459911917261392765856093312566148734996164141607628732356752996491071669094311745334054622160626201660612366381186165067936981260643086442916232328585495578924081240179789796106937574984685930393028295236518471159305978701354618773995194573104242665472453003332882469610859837455492998637453579465951735804944074112338179808644026070822071432387656160396393516045323172118793890847876848420561318096158140959636918396523856673925675530075357695781645249129279398467003630517182901987380294725500820627994421955709894803841484140774383588796715136264752215405586049904045797066603635780913845648351489857315488816097448070506152896684845410239954443374294432764366256688394972444720599182794963128242340274010812138650592040892386838643534269151144597858553063971472103778300405465847349181078756499727770865976879351344863318680649420187274713311971535169989000324591125894756015072287180692373652959151057261332832862244507000569376059069714893658933803588456133407303799481189360058572593887690785459493800698032089084201520479837872241701460542153172297188156499502568979826772485221564933778358713587091907570791625694946085058811881470461937681309354813453594143953089767477965772711287823744818023707807477545150801160546371499677477237258951644435795826197597519696972890488267631759313285102316472853729406028934649561012064191048199257614759591617567526593498637083777876273930600646983001877135714569578261121782490846644590670070109342536858665167674529374964863253832822510752155290420425593627213678563652488813070550920507166473861816239909680125994257382829517027061639361890735832421013205031598373236417308976041045283523292057564387728886248662182911573756867194350804910100642738706993261050184200444668628160321825267078660266963376996382991537043054394967692784015303524420246017547922127465441903627745134976175997940821369887987810402438873920662936639216023078023395073621064556084806878993852273230759119313993497049619169304435358007734259741571268011167365285083131485193577752480419512114466885606426019281829508498485873052730484941884102146272252548722322700037288550202306348562313848937425747064215942467730302791459892240710761455185729758465639294285104995572363788925211521989400793760949557845347695169866090509212033995456080081727008277424334575714866806610273256026971940532680772288408681313491572072838600799670026783141327356945244324602499250001152138776260916194654945739621454129559888689535560972629491163895253897461839956493199931298899748931475054332733852712100201772455123814037280935511491022613591803644019610074049076878765025105477148909540205171980521281908788686825583748357497307140142797834342570984439560887227328294237838783699979014955473588672163220319239104206251264862524823748798136330314465543984188814063173061025124652635805331605324929803189567009540216906040891045871019255469397086504712341692450232288842230079665374751327856270414823709523299863147126215441162036529754951834076864710373073347115257641702681090882702079022077193210379111296349788868738730443283688861996569116808326273441574949790941713182907771766768723333439513099542498620775050029953608490861571864553433173933252431243655975956454648834060411691222103913513926281440896328930449751062454914580786719157277014291191865797286041149899038085024590979604523384204333074755499846815817810259413077206146355272201048745824707577279410220076196899160164409573968278133864283710473660501597984691445936275390773922514198972919347215330311154876431019575445011706514397000337578778438466626210467991730182686186052110844638514206375787455700051681026940256015766281358274712262871223553244650952219764503053710527580314298917827353580410316540840144487748411876581073746674099593352111248871521400572689097960268425502256976196872872396688983695178090013810570221149715520489319113945110984122517496558890294663621566989684466024229337876508063695902628051782862072942824247873589985261496063424689153250415895887207701165515125516384110567163981586233787524166948160025673551445750141382546383809044301511153403464940369594887107202081317562009459958796151610864732410752893598841675467324089877721995629043995311346156453810716902815361385310193027503093166320311193699860474989853748858461540498078742357077305985421788672165400542314585445241422550806608576093512883517929204438048196352556407477930537044630423184817302561742581758982646442164699129212780552365062545829741272494564003432283462438270591439197702352970262518206255308177069476764673689858130934014707162597998714437484149293780334073369524574927341135221987188086669627778436242787250512570900250098220235905793321498830797411335909585984158871178840946529501587616282512642880709484545759349822245861488228616291760275564192922315021098042024470676604176405383781443538468617328570433398542882088790208647406856460125162482913376493493184234047859202615120303500446250715092090491304456611681738596585005040402054755011792585826941415291511745672106108665995035257894407891302891453599297495258809138702602248492083858806320008508801261174083217021566695609719804794642905590100010803465838043054397947812226310976598271308676392784882396070746921056392329127102627256333645035510120191293258630319258743549599821209169736786041312316136710946695825121610805546590117124277043371533141787812178843636830917804204611317160930252441981155692241543303637282302115171258712500694584114514434411502437357518048156776526936982491885132978300251413377989177641879174214980634382855822002369598429253115342915874696908174077618152097460129524920648601241580350193097146190454908747046320461211187363260380891661539234833695713192836778742257344824349625424937979216734797294840920898834731636526288541222128700419429482645554168371321893789662284638142556842155976266204670327505601630988870586830254680091776141861183131202546542523047501050334310017342903897050471113111336700415235554842885656883679236919894945673845312993327267415142587004952819568521834799586725623303928189330713176923158760131760901616265941556683138506023349473996268663253546483145317362977991136364790466998137338090005126372761418742170129755248021594335568254452488192703104622339664236428636329581206451121118709640756109208468593941353820331684822246103355786355958349692323627887145735282788298833243529158168790224797561935652445847238043602970430436133371916323871129992470905661666718373362250182405009152327168692708163388620306895234620455736583877485697674064267364374639475876846360744974519846544883137883754214405139899992782658211997769345791099837327797232045415365751191647842396058560401512991515734125555768120256732832877651375372909642325440744761941322067357416229243412190785560412523353113423118725028154207096269120232822973618310720253084383346876849057641754126286084521127672965125401829550914575353004993521389485874585146424178431617993042885146010372283789817419106538636558847537258182545070197431631045890047081511124331494724672392594770980108638140304136895525946946409852421207411929060951309376150058997655426377704258310198678775918092380450919549974050118918914114607945238697499075780954045409430942561002332206708284894996566940093092655198706773566104044823213357398504682880307927826825647455071545847181457372709249743675759057941000887145043075212669819252494923921520935060890761869804851361368752709409585996297420127576391605661352484593972992094161021505586070505141578474167689782796377848447603315010721557064723808783956301135843338085782496786353952798145186016773840544985376898597836490969802622432817442199987562458063128389000606711923793248747117721115784375189404572799042241853489730483049664976137289088281393643312165996036239588642282167380178131260342302655587591657516117017417757710934187574813002437316436469515074450784361788625308737445608725150386385646425859155006093679563514545100002242012666148204619881038428842381359384100060796592738609895266080730393755113391150550783768931731839090585749765923423065699901837439859003438254853754518993891990549583473075161844682345078815551200913714600476528721151508469422620303368122252515539433121389519551599712219471743612422188816624333632952658302247662561547325286263883963462175827376262568233518954743253411214995656455410359747712475394858691000052585585279417698478875087018297043433752265770402718118619909886388747675753858919177174289004979434005891811638241945211982762857549544315464907798481664870205712913557829424493152457292091869511714405143772083207913284266494699164565711863437634667966070342884155977170440565264000563262902409322247956485346305718237260335018920831496922646774347869377513545639547319719736976080471593429535464035397607843696956948212705562502377293292804442923680613825688953867701232462585174681456947527456914571047733918976680853102255443515484707891725015372756841845850850419454449317196825659580109359517401278866709582071688145948751993547077205409290563659088167171031367266411778668879224803611659790096747928057103714881003073151416740086846929322723387147582943073310759699119576559988524211829138348372692090476084424706018247751680936570891199269876849359881600201990361557816186743189591754913858121201381567695264011113185445244799558658663105893582373073023797434062717677782988070988851831335176953277515289383647103469706195772116058722917193864839722048074240348855809779769835088226201816968207029459508570457503841951916232593942614189733697916189276580841680612743265778180238045901839895190462569225703847185944798372865873302204901486138164930588784959206972875593750558616861443952508103590143857390916859864286917472765621990195078870212307319517115411349357511061634811603637456593786084037993333203533187488432314242855462277568465817145536381033900675891306478764007571496147154592407414520346418886315483319523879861253492592400488661787227596154021200856456135862242928912538086514757541608704875855002524461318992881471517338543338645343417212958784941356064248412354317515693707687266445366799790834856700397931220808353457171203663295460014074438957245049399736955829529991776017965576329721466814905652887436421317067734628020227481358575090620419887585526195151894965583449023973872091437901605095572639765383637872632204574058302775387210859747012538383991734240722586548841909757127753436707774425692588462391063757244287935538061369287326699459909279545042657587375749710539495128880030928786305126763348519904715960886690571063414939496289989193614460185006475342381630810998136053326996625702435798540473963420398800933545757602841057776850422200872242500459537526471897042572915328818442673714990337368187739767508660170767959576702881071403812997987055759596395442243678831797984262322664028240670087213103897924118761525173518500477881521286941967044683587730925544739308396541678831989346129396086135675665987144981396390139462678144984974781377514230448597578972816719958419493039761767068538907367416959166139257774400037532930757782503177569392862981841759837792830119804732474126555115627522293431963926879942870016928007595682260701611272444666752500138149253070206397468568294759022625317464309406336197562845925955033134169776476914557275874686608392852715320790238202045497156232652661432245703514970393757624909279820551260475853620995524651978466188238102909681655693630664508568075808094313551377981403404131153637710010961727970358003474291087869116287158984756960879397734667771338616515135840767630224727762682825124153369570879251640976263359829635998604054101891880414702557961015011126611145561451046241475533232083238521797630708432512568871164770829287314703516789027005617615205135575359164903288264038077905223473331594483787480573589035257584367058572304282420401275575538223074166901161577868553086048774370631262543260679485767367116507700144292743463719422262317693272227713633584900517634834182126751784595247976573770306889629215454822122724486440444880275382040992721600462602230235886609734620608537930135151695660061244497978439764155856396024765111333711264329597670142095703525277330971657447424657932167594699598738394618555900972821798686555934517851750932746039654933276653676104078651155140788661306495168789804714303857534544807519914933338303605435855322038844713084565912366455332281981742487172714466319831725284407958605481245314348527716082365776762078253518608167109098490134629597991097629291817702415673959579758890664354671697960394264798833727151605559070481930170446865968086499149458529969623945576809723259740745795521025745511411580582332478172583074035892448406603475744762648008817548720782908770303736913590921777417959864158951623960931619600820596287718160078214319238068342059137483785673440846793080958391074580143244483829966413313018070408883870792485604818400480218916961519003257800794626450641358004477485636854866070602512826153857336332134921629493999796566174364669330125700709137931377641168589772910503371601521388187719889051088971190532213623489226722171289155761315123744920874725433040240337988827202526349468332879992607848578315737302660082811986715923532835453601141874654458391905312177355766379169660857127413695011689498742906677421416532512506927836696574431960853031214605497753239631849510724887216077831272325602364564326350954690079476555941223756770131034728746349503959672664606187206247148549278585248869439688666566628788366779046105581069084190391710812081719243306597184573788617534509368096302398918280319348476961544974217304430310222932409081035868477641712517891900313194794666075494233861228949365181769103295514982335436102004662841985069436228348670142397156472605145057700036454334105850363555093829537827405878479365179452476544581841823319224544427822113084407403256686659342365554644419179257923548502832236050974326220510972914981845162465642984781409029858811150747427105965045076383080726433549628293889147252345864018599492660832852465832266621732901726953033221907795798763778848102804037805118486602205925384102528271712390253967271198351022001037675087794593305466866406976564575082306145688149320664214144493037370876108435103901591480107026080365370090288280568850694303250123152042910600144464677299425507293751493625696625751610760570550123476123665497912151614868620732158532087469768265944101112285862451935945439712765444472893567339317591295908351644288971694008036685445636622708813528115170380627927402529061680356927648695177709645301413388236383280752252509140926862701407955461776888141615562380356163065203772972084478715662203165850163929384528598755414794167460848197486336143371111975023149530088124582515081439888154847237342922241581930856665098033365375340457073179488415407996193455730388119692368561470397502560757494129463992118747069990873919664611534478595048562318433017332360085397531013901016082303247610004078618809838162598541771874013887244659904270710097768679209109373687604235927253904917932113778326130346623856689686993360104783462988624117092540907150972758754822250707215667627214930806137227980443178928054526236744195748049588647876304775556131893436562081040094837341131395205635124612306048726241099454308444177286892530784031664482369851886238018737112258483361425829708869570200697172471829322596696646991707416016235600667698762079663190997359036697052805827185902985675441438307458940087079842283082475557280115786185553464079592645723162744068954176594452387731180981062055788847293053773217858824647185579171975598175146810631454014723108329725314662979361402825888722947757280171980344606860744645871059898037160576377043990196261707111294568652522432018194722658708984704173898798887373432695606949902878281743194018740400245811820747027847400335272240118864569187498272808452883847447259123707748709509256234695173603443227104633986891976532777346751574564150543798896198871412469798878234647703047180192416880836200599817754458406211101065285940675604048299448127025909534001764271860556307629964959420541583988952745798018620291961095360424021424885770240717805569617565406653682544317173984543511772238588224897124122175881686649120025045577956721522063417779721840318935655180394112804337294903469369359443821718138948025639266638529179754141722590476751522199084216458049321910849568388833073216463600596837377308937122015768206030108174656873172244112867246586221232751788082969054950056097492185318888285027151139806261522693922507406481936263097153637940667002233357154254963581653680822404915551760316430497627546013942176640245577475205493549290534743561620887543331490341686759000184268953118858278504311806675247273018109300645759803793202985808002850174831920777488963279448402333268367534942243661424936119591734101094394362854346432027494926372670737774349322876345682259484570401118980172384252224136967030002805940326891379874804265010641498265899856535966096631363746840332525127653126216066065740476138421234590846905835268371314674761680660408654890047659667681386254833804178501384352007578222147617129274932715396578870393237557363452095391507653479089309872717799227570082018913879674981891954781368564821906458548159053172411068400966635104470030007516561747706295107313242107335091228524395113119758687379990207824702380877555648785790161557525210595824463263408011747182616484386177817728420670893839431712797304099482427702305239823194596747966526711404999105138093316342673943206535145864072773328357526638311131873385438585520509372507697715015210456743419491426247266309820480800755931375824344139589513546150914807032573569745044073388436110266947014079870131325086490021146588716372047535446687932994981593594592680593888898678149582894609710959493776157188666204565315376904185673789613657704097945178149455997460165508599850365501310108600732884479677534377182026098799673483859520062990818650349153127125087306816482171006565762162874287482176645429098956976587031941634926436469784140505633154733386410845859674587059230354538719739440272721045564439426395501143271287416967538887173543789332123706603916136101607048375239575110806911307152335899636198738482630881458409164247183698119863016495517760015036290351093163566020886600489668144923796382246378589281869181043027355076033309125309906843265533704419436710335081713967594915973949969898397686079904546663854179008685819925440511539103826056160083017643422963235800663172488267540786223730239247754602888277149832909019302089035065492486798077997243317639210161607069269056066181713810401632577751776354869422764753583335616444669664352109314070757085885204793593487951341047249600402296072891856133299738531250070954859851776503577166273610348057844338071300661225056503546228413550444608832866718542752240451490224334697165468184275820838226143906292230250496093946256203589922783291755688877290378567159171524001326257319763148388141136077704666337568267454117433796349080591793233812654912738967064920956397524800484760387423178550448250042337389146884581520477429114539636375260357194828365244602635705663172872902324559542197569437655127771046486980443431453464471353262895704100568075082530043704621557351105976154814789315933767265199126186879975946010924918419075525109520427066244132801006176571215221754663393053729072497702024185040746998502900008844728564458385454082715229939316699141628732600634491390699488321517953077245382616064764995808993886463038253853094884520535924695431728933000800904186515537741535723092531178064711744387768001042139603329867534950081870941418837439400526161600957975269514345088832512014257288316097409439785180095191765049539000279913050154312520320813236663432478218128953984612341252409627540841274593393773799108774534113439233760920271473534827491875905392548282703167212630696781757861761101548327212890808224503988439536550485755613514277614920787602262234185650930485808673971392859844391695629746754444332217617898887756240940324907436356118637513614981988514623425589914565823415647253971787361097666102765792001220604436768854756408134977923105435602131755523144818837082575320661704736316131333984633724415894887937403012187944518753823069166934132991765330262374625862770277481946940016636810154072097635674411641310150961889719219743893237544132509692214764072224664010309791169683524064645128439253852854970565326265055768555483394313859892190576977537999598281187958415680145339769757263116954179660672594178476268402255719558370947698787125174386917226453806373579777248827951146182972901790791091046034275177850991814611180308884582553677885959891592833423885350348685971122824967215005460861400520485528477175782451605500303057171674030998570767947441484114320300094353627415439954357259405420939281650012270204106959521652812231543176180648276195602311769742391431445638870875741068342627173144283309454891999171041399771428747554137501992693985750777519389794461301146446921074072992924385232480517006290969017515369091182025835130186181172078506130706377135094980127717504919039873226917218485666237765743950830840509306925668982495601523285480436261830271460603189255438111760094124427793333162594536970573314956774399443670976277542684859240082986116400242003258303551457831123684110665887412813764578090698464370155361504467865002277149524919705595377463199651113842921704320123975696241711604794988972586646656928725322922391516978037558719896127557680720956149173433039168508191762316921217145815192947140830174346066994372965711861235966022629234905092052835844538174978735197635957304361755737985624572109410232309195851524457400184067249154174524837529614706976380539928792205936226905723271819738028817634118651256301152853700912966102129860996410172625830870441214544625988819808750185158225882414285971075250377159062710263630433137369768619499728450315112946754200625011349251312577121187446924242966883282591226677274505157539132531176878003543076965648236468963228335287184430597095634482360478688771886504794986489692898488535218064024220818804532813454087277303695062387474185417517181280163224532864419620857153717475196256356232758819326019442404229915607920630444201137010989618054989613807069997162841421692813243685983618280227996782299307517684517024386741343637461095288191700680400047131658270616578451881048798643150801971393419214718182402208968766997947895225325141681606689348638337648681383546677344824974743617331422877913776356167621014899538427178572573517370548542926880973772869929735039786278131542928436078527359011356215820693280178099474274648209640355248811941531252791989502733779120257929266281643161250512392150022589585468537589460013997831722808284221515412669756265216541061085289943577521652068073404221088189432321838940165148040780251213593254925384055211836661983786391341900292720708808028446804809812635499967641883691214152246244108636530364559002434644280674932537581297388883789510900071967292873664012739227720543459714950212140029548198886618758281764250888869589853440139494782242036671822185490997331866456724488446235577910255574240395357955210600136686298824033135738708674032341773443225316837971668997040872397565221900734379070618342474511928784962346647289227523108675346487917834250889138607354458262436744155911744572905357872778914616927637354384201654857070331943871349944556173631792078820543624576118416646258523860736191592961136489008281213768598306815609346712298878151125514042845602522239234183832231203913527950013116865609038136128799065503430228572967761050150902712845225672369633041442999426732676639933244004456967679161554470038601551085834499701122162984537467713610340946031340579944930369891885928961207837368539113095857364728778269147162417360840155303012790584624343053397405322132865819146272937749779444399080654693566950759129859904544350692486360225640771439103946794095860539038660461951080775189014536098157078295189795293064715754845443391938816106184131734490324450347269280242789042552859812853583387548128014445833643429923868036042176482067365381804303251077099956668961701563488064612124303077369812087110110152603933803118084284327052765927252376080750801465887116449251726523268323164371978015140498758804979872326098678078540687172993950046447066618323288565318225327593823150126596029567182605022131290564768257450057221850719052174677674844572601732571361730048771601366218282373552413397734794276266378293204733320741116891913951647656416690804609819007450637154645756797095351866556698098882682817386057230593409954878648911633086865960598161621549209739923109500924635321685918218472675663964193308143023863440300601348040890620388245668559320196522798191541910822626432686355783206968172221937170961354867683971354436987344773233095129771165565775785164133363390355756338949661629097955298424822698684231756951915964462899602400861488116992531014627889080518085713186837421175410087697818367968820482939716079501763743423930105162401437711328977802573082064314932047919549688616675124895836956906722595260720797485427886691216924299107491961809758574270345886052807065800936988809107993892539294383012970120773096522543430251462146894707537099193428648602107205668016542183531365829813549715633373516553321297568354544895005335335723593985560083198446713299487025703974431992165735180410285789049433426199456022114967615639906326538285220703476577037747486090122809666391182867695789355433664955538394011719189236232106707013204140393084789971201436784958989072261238005009957562763204867109434454768182364664422695588550939732290558976382570695584425702850368168439977108015408152516706918983279720480345963930203642597477149233272413546321946372214237742393643840382064782452407595257118334256660287958769017802191185329120517879114168233152659600786487944087573026550997389543393924390721698564203106167401870276247694405932361294256160656979998814045260418335855014139946020440914169216865986494888058423583673183908448429539101900793603759007427179218424932221557620577845329324949579775318536084668722663490113546627803273392768447835296988248182123050776514664031152951959804131690445953652423203668367872484910071163541858335911925126330663243556597195568388345881814113284069968927839895048485236669488144903618340113319698249639020990953129484686530940790383438180763033388423427636239718874038656087527340494496514243153993386520179593017697822879697608705722692221356162887108922631835872672179093283904114388667527587944188440552704050636285871376002331138494128431826984138236109889129069384992336557839815705077873695110460766124680385453767738362886134921207168954920330369883063799432782303891028333951731559033957035850546450727043654748549476542358807626870955538013609755284554708409151932109360864190646809792906438186929799054931360619865947561178455153699249017300115937936101117883052566003256898977349505369125357031632811837361973442824974574128735783581032621231275707828209307703930161278601681343802122095588295919516381581712203491519031223793165987633658763127578145373098213119116144157705442991351480444211212613290258605081290908060940262554926807676356700877522140974563096512506054333154339113754413707083356368435478991717195037545701310497453764689834035346888077821820439155609214923309161506361922938284042977034836762318632073024097905937495452253608790571023291058002381278514888818210293860380988552310885741864915902576779273554028768362578788715180034963290426650712567796120414825002301045988650118688697514988274089512734483798696534734072276104740268960930987824841459416901654672691804706390531571058656821354596964325708232085994020788032365068285132695670421800922822140655260502746523240767492038470187684924718365119408101336331687624801929348173420095024671266835381438051192774444123668279724547401439680057545048475212857828638174992641729027133320185029035554730632763155353176508089897523345688736625967484630319137117215943512762172957912575622441814338747141374058535162134788020829992272756506693225629862313759853450375308617445184861400993976103064933231645008602737142820781898294152317845016611122584771948630275283186714475695568970260600500935854972326609098423723200074253523176544862320584549283926149796800291953337412457345121410855597831802359568436324228653538711526670456919315231229925770188424287323584815829341319511863239162001321576197221221797369969416445303303077013761745097392560317664387683475421735262527882500776596937407470468944172842891434949007838613446302957441236987587038697550183380856773472900489394672924480033227743702874133767016908665647003942898884645628652811807860755263622464112465477230218407725691996901742200730221899893969149691534763801371144906573257829492090541252893397110571264967766767581909527921313231760935062289156972788030827201123135140406301512024304568057729819891734769350227012881329884798553945299162682901276393650991998105114986173784332817279726108160137486483381474733058458033028246661448772843563645452513672692008402156547298111460787103945063962606775128902022250339402147796822553244866910136143847069291248464133489070118339805655501990661614388221234823401304702706543512879862509390758181995800521500620390548746203644951222072765136122629012815356844557214052778393815604876727101149475738150780392394173351653939712951716792518145433268439789189987817991760463002548402207828892906283736061886866562572976460017981650589285224283560317179321815389693540491594909594039138736598418945349067026447998822386161986557698636840324298194522194368524008286132982556684205761911964637431396205714846362706907735741059396670097242989221928877686278091170347594285535069717418021866531419385838170923867759002835539831918937642687013435274181801683456810400274757618306087958504690415880429174879569949959861909085608690741901949453532868833295928457971454057290720047082624502094868954000630711981013874741195996938502045850196114260819812457458368064976538471760174047715943331544655618925521024129940024364044705443924998311312162922697063450049918052286784272806540301728308544561061810986933000892288110626075541858627637675380365434687580971123759142450514789256062284732981784001384533259529822982426079441487559738550162969676938138923838743288353301348217150713123600848859652761366092001694109734316989156666410701432837956630590356821682749189789598434676217575816730878817008380410948180267369429085141713065000485904146175157991091078241023118494769201665203386560821259924333871435190697787086971377383894424331901874557489516628019630601414615192747020460886547396777967336695693499976824057552304079611657907951197316014321619997990722625211189307382335099947773806008182646465761936669393961908248851947598494138399868006204199657911992815932794990876753389661500560071405045253485590544141112982785628277511099160129402669569785911907671639636129463859615090686132796213501484288850659218559440369372541566753727875188353720851715161447368157585148356094040911311708670022826394644214049238509975386842574112793938927388813468423138853708670087302512870134770263048046268322037913144026957029204288524548893498657003182123639445307567409934314539014368217846787392580522141559997730497495386413917644714572215212347330931531259403379588383330539980167842464246689139087295050155753763370907676510490708570461687042137147019548240769366316131695527055945415247391256155242072429056735793735824373413844439569419157481639785155796647013990928099289405114733068333510655630912600111167459491207905804909985645849046181250729921542723987499501743790921439724267640304267169643758855884168300953566736502324661412565448740044511555324630132884110077483411617394585864709994850105972244569550705515030646421440595645547409620281600237066469671646960584913673562903644371367973854388272549337856389927309388434150560522008722486628123553685423126468259533152563129741510200969060272118902025215061193558732371875616879923512298010884001030448426332645950513887624541204061834365094678201305937458631376418111473067187941709628973347901936363316540925086681766407063128601234503538500115351900437037436183383163165387748518556689042076427033441372364499987826612100543352148063422721015576824559913111080773140323986488845380533002294522815903183910031982316568355931789616855633137804965911934256315692155228547398512923420685519974456412992022975535257127210710735157578284075524244063046170582792742823345041285169823486472424838657275676666834288654864864063836701273941740690406862825000424976075398162710264114351051347707898548666220407430442883823558858793788938846899306949639472868532297517053902221281389636825925761601625423343957629316877815195172925755957619607768231109968647221121408308057443929607180941393637930637019536419322768243033269617699789701892988264885942230925462009098651916926881146008036376139338755900002362092795621097850685964897778854161806234196978203118256650570748837803829936628756586955730030779721521851401461388461083784801553748443794059396942807512534899728398091237803683710603810726597031464604989880883625299649731546644027471981786246468870203341840889866431174592999232798711300818154785055684789920028453396136691228208541657980558517581327375063500879183635600608629524976847716649652911869608366703109827940368271236495153691343897649115573212971937950104293164816293009030345625236976628596684183472961492745234952610257398390321949179960914241430222139346037482111098879505550589198327879839501930180151242022830337338463658437484377824891699135818001255672995994204751107756248270715921484509735966407982996096580062422910265114501042502955277474481686974795923283295714612146585789601903310718581372576466961683999289391257881692880043117700965218930170933997859998687441650865282632882474384938534573120057177349339198861372127615212142683637625603885226821620922283103206514944915889990695038451470577991541327258912772932657376921066104286511190533873007044420385789262303419007802334367124836293481544804254030683942965501132636405169143484686725221540547850816617309279818964498713104256825303040458720725202711776371376724905070622930431458531119990265247418065327864833972848288046662166320606329668367467828648552471947444475280196698503657597881315599245407714937307793119827745261128986626952142304686671402786413173086267342796372670965109628937340042667890323602050570100075878068238423496326469507686731645918039784159942882111300242960954549307429916237556826725586098300963305942104717028330517352366412884753040838290124963672998534651043771233595066056189872026813031664137337376966472663501687304716062239790777476363752845168658551217111812942797298798896080403450998149673748272149722074078016278177440993177932846168100689172115062953273973973863154253343496440444151611397403917515006425910989711736206534762974281966656908101638269725200611380269644735510292837148471833035213057969793459599202826768083615449560644703626962411546094535479011350070211961635969401573049495292696158207015586390191340105150580397864158833004690507649101803914040483098398046895803551894160469178354207724475943240159088543458564060339710421663908538155293750839833303012451764080475500300797270267172961905101644054244998971998636332345005880689243561253200905370286112134257840374496453525637005220910027962902062017456108574538057290945556117966378285327698723264034806751648689459871909989001852867152528882732965752258323786446429315685474524633386663330608369497995902103053139865454462234325628747458086160590666088444592660928258029256915750781775659425182327297606461104134712941101882454154031073869269718051151328843986631669181500539146162760998711219711770147742459116153775959728481900602150527738408876804662996241034802321637518618289152239094764224303455039705175878138621874131002193684400492125396445577809551108757021233265240414675006324550747057574347001633931998859824153954618281145718279281180656005950388885754600636292179624587155146073761966726654430452948866372678979209308938709088378144163348319484637150904392684953031977566401870957616153819523655525507470107635458721417978512346394441725381738090071593125749568090151291281521997633991825267270735838569893780665701119229067589510830233584631286143483878162613525290420850725354762754235041486837981761004663570045635971448457051004014032523995855355941618516506789799983151064088075231717711191862884750912634625685382076623616574301900851922062852285460429260211250582611478577005537071979948606184069687407306403046071998941771391254622299067669985666908586724024568292726399596980520240950519089907420096215076916112147317569352724933231687999195685611278670749591046647052565287428243846998625932520004249325060871233238343285408270725477422315686851037674637432259274751313190236218363518961913453448567200732644532215589450416353576968121317262773133594319675623594888600146029603411861335381748169112269929047917694501757460556059249527171887647996651790608037616483245053601176891175147935766193052679199252979296973889895993814766403127607719028148073083352567057509133402125717343112860868581898529258361616653587668151163311647007581736945517585277265532527336822844426025505346297203508642557620841959712565264457231737661522568218299738657255203102253018798003210613789264635112822198513550251554053897107972261309093939228662365759951154801978809061486112815050937580512113560706057885481410394100475904272355439990746152957396011742657798477725669787066505081798280773097619902894625212672891452587936407179456423648418501915579363859614928189260646630089689829124261730085700887546624464408689450970427138715175176216339001023202396501118113729182897913107503360179187893906149090929927254111040804233922606127893032701454970738830567038134362403698084661698198094016162045923365647749738722475849745547302592968356160655213594972885985461855142254964004108706130665965472290103471446269812812349081685141952592829574859751452217537100506430505168574572860925079098829491257689094175858872492636487845824938416795476278837357861427675687064217064131386849543174367573053431947847081720267812985668506722051387640129224395466871501471887255801330946934835618686570040171031287540185846229001608430979683856060380923190238284244305902882103791984042351918862738663614388029395951752395344398591150672058442318256220020223125487972052369118849067434505677194773472979371278406172456460690282754751606576650341746814943552844377332205668987045406313368895257188547664562191604398981650648192594299318835627577553142145560732894610997225311177838295118103457226868924624660900321231425553878617900017523075029451851500168969319431797670529078252473068243122347395656526355819290570275389347477625493243718240940120426315463206211526167020706422938261127512350183052687676380435190354680626577900121584724018893112583425324591939778950965931781052735964990307229334017234175821735752228322392966732280265986763149066719885190000059705746856656677540487238886120955354840578558877882534144360730893367787159069388984039514970402504476189878144060160809519137742534189773457443282082255076350275600362761359893300241181476819920672431545853046609939920309659395041151390847794506762771432160407971012818305258905061613469969222132430041635671065747332308281104830564785367098617217270465620016860207983729837381528952308276475301162165163243905139971842347205055406273308544616651813449093039912440823984720291639851027123270998292082522714769534528256947609390562567614865962448559680429632032548210155335174213327095140877986356305374136250593936432743184738343385173698528876239245393448230392680111040021363206531182818156319121608658180872917586941628437497562322985098044334685439800660994878576334834549578343013580217317918142700249314767431282847841582742354398461275859643984002426281551839722287206044571059342758164816122554388463981754994877784920993796626249066239101714199570212481644337625614352574609083083296648519638051274579339881745814869841619616843538038674151720122138854011976610576000431977773219467329734222909999105323199960636105423742522980945346930540348689327192852826484538024593787850957741888988937934258960283496407709556548997825308080969550004739608141161734036246467126060377046399584237260450226991737851993515318848319230828592968238900221931635703705257220118877289609857612901350957168868656069443413645854130161857595291907308183178104025597246522654167000582739267271379603339020016526551977840269471479083952282181684098707720476625286903485299753020748881527576998822401531972546176398046912492095559334055610215178422368530016961079190000047065255960932007126566857423983828690638557323586881079481033522755592451831848576450961271934852023801293359909184192405136123918917685391716568520490966022210312445934967410110170648044984608138065612502635037408703492283624519959771210986838951976554335201549140818640264026350237440030551134184452775893128803897285143475042192985604063375611395586134973635654653045096283934264193051600580253684546086215542954937793262534167957142891938184893882242948685476389178400313561866476260313171601958945301737185979862404877399323211505726427767245392872779613529114482954040263933637208892021438471330837059387755529979634254738954417168755818806656687251532591760437015991665217101347425208116083957801440701304390856003828450685195275510921197795615164332963762702879479324684474786362941123599132094042250929609156287007392099295149448963104938383116304260532551264472131120098018366776076253980430886506537987098395928459205910683941264355730668029114121019080711775796326934688944218509547235247741370985828925349613816985451860090280923768597481430589496484778327628589386851829797770749159214720913143795792845890770025032024279228906406372559888614597632249878072468504646973179085946906002096773402083936615180459032978727627149584638845194388689361247005257554029093537755433029065731998341637954244891222087651418519925157379503671091944069389367725208899171651961613467238033451346406096307638238266731313743786814969202247379460025889225797146308941360036025071528010492637623492074280290884467968377389905578319034835793905139296207476556444648657308093023252143074500784611928587654177697087599749393111127721283707752272715809773999040949904966752764797253832790610348541456322881346638337070673879281645052553477005249650415337681472239674721377164827932844359036536771758973161503029446221130836054201248384843897401356025028456319869726136197028159288435545795427367555460917666474318080492177494616130257186192437620365902028486931619071202655191174788108445896472184766345931191060268390984786502922689330341471173713928734675983106413710830747701818325742987969845108040003277768448507944307656873101463397916962334718189630130207141317500337464683495945718753615812798844127893491660053086811689884036927562550417622577661417463888967265906778029341814835458564699791057567110990526140387475889237428513137808046858539666401813881183980333975677436156828516324385652192144413052871537696535129359209319546437200185042757169239586596891876667933520573174244384759968829960781208596276711293085981803026062886540696374161377338993437904836066887182245667094389332099535029814992741587663756524511850387307981033955039518752529099984148056392419966911547842253473704024213445563768325289379275640832534975609174551123605901836631273023880928524960191431113754261299969801543866295612815555756822176345847996282770350623188054772609295485685086423710520127582028427015327455713385835954747969199704981894193808088241018221270100562297955279007256362155337376123305790554823729789998514496418651489938364099631407770810092043188178012163388740052599572925706250370728317993299524917588185189410642211367821078708060817533365476176294458209549880992552083965943959998836203382721127963810303848918399358096334044338305888425023926938869625621506448483292931270014973928389020022265125692665033093844803742473003939280844416741046061146802734942642761189589684308077270191871424635835691333341478079827975782327815051770090551290028070962348115002573907381322878025997871234571896393628299930049674390176144082270747983013773955321762466424004564097934355685677985464599520837850317519614648807470245088780372571640674524704474518540622923788965207848141583314535704280526891992708571297033363079667020350707517377916402201813449675314027767740470137567351408973916233176075058966793101397568895329909706591329415376985151832606179876132654064315712613190037103215701870536778425616323840820668747506974598588892880675400909510263236170733054737178182819416769283284052324062668364885355147894066116264035491487521022851632634641498553300019467557837334649878506894764801997823847490956834780705491712677383545229617662084405198614538344515343829302003354884313334705771375343970339674335846456753098160046837379117272842763292777440525417608750459239334785080565238255898808939239569235090177803116196363967449138387361553458857972026518014884538201031087971100737171921133297482329543714404800790014469209641613958241274037592560817409187666110672702914368265348481073430456672317069466831740121280953712784394777651111224877212466759550787266303285446566601960561933320094337650248860922705672338164639372017391834362844198440038230425464178219528689006461190917788726347713282742082673000157356629768164091563414791289141801161415217784039317167465571403224345867040726814072857860508708431619501429026119317588560058241742525190066428942891112051337683588914974743462051400367740982752171481368328284038606275525721577107725696826285430337225564535358393134223964905543019570239451337379852821342542732668153607788076998719625775738835972847734435955227786746977579703924720316974866988231708226622303639175731051672879172978123743377582828426312105570425747712977463522598597544875669717603159308173649002698825511856924969917984605258361381847800145826416934915235415742057659857024493936463338267653010008698512180477457182369816212222143107400864332090377461495442288151791943698158238906780427207690733439310287949527445736619650325887064988517490848106496223528218593754507462903463043459100164720664350426128088346609048132531647967404927656126553923579658619976834934538443571994261408740243153302170009269295045223575452148375473426438702679469013872608217753007405866478727780460175018871776455762924714409798677674464643993124459992177727238309936056350852922932810479520902017893112635898742878564998709657062141648762760422940392441604341179631932538909572256817800246614318083733200235970796716695384578716879991905023178327820105206341884668442264358560787391328327917321492527778456617645467985191173928648909031302232545988948872753480211892852155180953236935814112979578711795786074040657948928583187354680680043114327218214189584750847050945977136181146117641516699179013891638465018658834037864425609235790714048461597750669510608687181456042716144524430703008849499513273626873014249937080675256148965370310861120966935678288673162204040002787715410594576472505352166704810264811222850471797810693924868457189541360897703662263690821255061822615035198928031986409142227716930064281659735859787949880095616285602143477348468800728151737282364650928174452533658466474879899338225548036256976784001119303579973593683658720913994719638427075778747295135598541113832012328221563080241136620797618568796709446968661034489954010871246502794680485304490331754770392145763927801749447274030929241870131388388395516761824705398522744965233488887145126510325438936189889365236459879963244600991930563170656540826040454191486042645743743410949103556686674670755817383774282946904473922590264689674480042165857325685893430388929053935664337835315341996706234977620462199610571790930687073660794614601254211676013098551035453923422722648824405101996185634786180875163059065560424860107958913629512282838412368274284090032873434851222430806365303729590340847296145456170861461450243090828806136937343256639428456684416987798033454900585092602263973927421022825294483216123500733830860583320254681818317808402630708386520427703602880027309423364655230200248707685024632770372718214185631390655696309124502001933135704090193666275120983930011808715287065544057447050474125891809634115409137970680810372884729418560531024224163462735063908227882976084587588202174073499702435854075490058663395400903734522778952549314705632830189068420651593056671653932915905404224261755945321001700952467872366969336180115006533034646101925540280930281079008981581695423650828499701417826867694894069302191680118655507559525395857410482833765514062424001010198722435263945217847647304948984879260179031975108471312003408889100551403627079003606892240656830733872701351288490800597867429946082183593812589292263233086453203020009433926824406333125031539677767316452937589225630894731441143137946631176640157034468135601756950872292922617482541413303194930949109590615630615815559606077446324835567946084205023616090919233132815982489852451568127594400724925215419104351575460163744254801334474355727435462266839251411489165877381053824295307081813752203311508096188531748213265861564511769003919757532350497608707746037833649629475550584735695976203661266313247955825420741986038372289219033039719844836889514430276799703926524511884200970624977833082793454170653281831613502514799448429903898062715556280416788792405407277704586384574427287520023984163259203225338089687121106608978582440001203335403388768100265061894633641409208667724835453116333324647158470117194557694258958666978759124736825277466250552114610921307329120740486984326105768170466264456593616782449524482170281379578453272535829497944498234453850650150684884359269332795355347471581107305035177991745829020004406424285464817065439887867113640120464893597941807719141546190308592354223733140326860307639480459563578668597573783363221045277436467344696604298448330028757684361433255025857159090101182418331909647309435036829782110266334460939967852103615363734218785554960881628218879983846630441637416892531771084839685211617839841060480422359688394549504217593503512980668050389900726476983753816114371414547218699521909171229647713100027350408366858181735873010494506038435492871827772497183987436628374366145242405620277111858185878619096701774659361296754620437848439340441107458487266350350283826998488674554273566880682538685202167066214480093552156423168213167320924475017046129652569119976446374821220656504890265047127607411491295848696286914451337199933191546749945544168694109634284899657826774850340150117257897076876222851862756365802728349095785135571516996461150116956387730938955143873748856041270048136454842742628674114280391113390164408779012391625817687023480684030809624087410926744332486050560442931333476823721042722320477375561617262711679846158101893967070985416324651485643923195152648519557283174055305455593736918086123269426209516130855146977674828099003632528577605620844491436539128570219629067952014409790863585930496088851181938859461455125633907460465615674157967153052607075098037660696064704584055292302763938657034048918399929955575207442707759057847792114801255757300054404703856682910771945156507731318166518242983910575296002165000161520111638380508680530938483551267816149543332881400028891859517304115443975108954442434139236805332471592469090076613989808177618045016529442541417405919786837524614846172109624187103408502154469384527023528821892348146187555846048722058336164225880140993226159725486703407605958585332691601393603888070697279138145277837934853958083182366072545783632459323812546907000573301722490098743742051013336927577309270565194463174844383012178034862923322272679419509788563596054844933699932064110140889482832652124245157377740013901201732580872389323046326184790197849129412782752953234828322784889925238914690316666937505127455629981409388563731980745122129488589269153294239437733169425854369607328459187161115653395252900709440767713691413114719275941437927126359124782538727884131938638089042886360567591073657357608450602650940912202705308337928693891406991714984909025003139540038521022237546862702439718111041006338458194472452061526553412384012999780195401074282382135596377571339311720794336266631332357330442062082240763447285929170007377144878739405181145584304877472459181876547475063551100461419802755006318287289857609532757756479846578927151417169474306062598566893967563115488853158067646483794492876354138027637082793181828774839026569500287602798508773679309507056344826747856920554244930442122736912041946165447357705526967370627651054761836225925280387283512788044224332162806316370830639083847927073326334787360265746908392587820462927996807095356936118370026079880311465707366588562024146966949181106416083113484390069175495762003494285011665800208310700689150725154668435643638653243778929748133725295820748409234275979312138021291216331974048181394912625813745910451135764929187395517313942121458186597730128299521667726976959387487062771146026022308553700898612823198224780051135735680400889269564217877026856047568944871501166544846769543098100338781520790572322321565392888516526951414071637658641026597789197308833351364949570748658656530197630507368747031265670824580830138432452315524099536889905385161029459226595795680583982446165265122173341705358869062546347116882863237435036654754632821383912083490906347828262961987942722560347658346076572639985264511753477491510196471964390280833446996802448258931332033959415454161187658452205098537046362079640814358851254806332100444257382247273850974781106158588327476773281076019329100837027256543314154560344338710514282806458794649805350896657696133381797581724328069554093247599210076852994771437287326205271040085723807327382118701769798236151351564667118685588399051143824501607086237389734950715817538049953963835389082388142559063239995597866409246733897581464578429871265106024294813963196887175643863135191907472967364658428314586262308716159086024541551170314400290836170776427733463313331326580195800699745521067654952779406907344829923714301597557069026311874807220653363023057153251493318064519018574616089074724191346497203418390204679091482756755532543157080059310984642703396853519520396094872051771620874238391040754141122700940170147736002527342230966148046089842869557648857800770045831004866396346650099900994103477222669023202275729379505008624446294742202831493960935622245093699516885305334442474167003950176844841266486068991005263855159868302196404068177435582417059835189442001398826988379139429574671095986944395244503044052673106292374946748919943499020691967574704124610129947032393194804649174894687416714605981918118776390331016740972213289607250416969804326837078555796056113856061752805358105402784017856640902559521236759440716259599930888931950304938384816545098830968824692465903773557799759820945920233742274083946064414786848738507449870272912100037905276336596671696038410519837324227928418274414420927846043254138606518439778275252694784399558172205545615120420247406785922293588786752096268388032253096806246158353044567449319439138186079849080934192096003617792759022135899716708034705047097167922628647442741612738939679175039286102210195528329115862404306545204125938706168205927840250845048274731931452095898261870881795444696453335463754365763939127057538966649044712086524652586802404147425029808555157283730623505303606883379733210761110501219641650034935289466444959601877864656103438780810081711467778050749185274049456195692025649823259969556598474101430189578109918974555560322629415124709387436487972124022618097544643163674006328382009561701238329091882377928180696711710165172592711146387924473614116152501064534111021418295803990664402419795649340754630167151351977705280058498624458592439837184723023297193309960586503412712727487207882972434813003349061971127843372317219794620186778140801103371439779888888271998590107779537441853239797015628826874234761520796234019789459804237050044391321420945231202995022165135048915942149734678494287179786190225422911840507006064472726621858195543289097187807592001423101120714809231281384766824944565021118024409668800566218395831459494475341967158087359981335906973540512822922383457518650801982314145979440708966997073525949445178725008287186996302275751337092133003112102381589359678138462299511333902709837699620598244521949255795699283895398109029058508588420064638542352684129210156150344955921733862437320406900500397594410408890453106112068795127776202087708053992680419472596236179927048389056878395480633910665530491588155428145709307038799980817092635548201971972304602151204027586235076374295459402245337545732811342453696642829037302343883752937790490456486574341482611974571514750695785368999183452838112361892204554118280035109890085351094748785124748110950405090823486151632665391893766830043227314497723647471908811369101896903648103742085315919407716632253297064119997691836354132343204055485694531329384657889965862892128511360227411981263931342432672106133661768836132284616564629370549053883296653854263969357748315747083768176131106822688944525504761638892121377859664370096696308610615935542569685119414918739274561939437756980878828579236906432639570742493598230079891302115124116262194115644641644575470911800423980078876755707737479644250573183197765738925735147826743736569874874584623690648554607910968943597239550169783201556865988712385883160015584097027350329100395180906841480242762934337796969888251027353375418535962202283006637826381104987463398763643399797522560497524639106338757130409863476744800909774119043615024862852165116540613527063517072426284010999662870890158722442233850952222343076188451541326543609386861173674495178969466311755867480873003083194727377418527110105678442252973610818435010675021789618496989261304616523101466397031199848453893453216221601447249227571432358186433948900171945189605340411298153768361652559532337863529761547823873024267288456468155576838877807382218270781700765756627255051094898785139532020962753426409276994009719791603249148367462632394613003378986133777140035838446772574326597318066286535162632438396147033116461074882575599303361696007384917509482840033086387124460651235927246428935129970939769062980956246452166600886817072188794742204597201093722186901646257270974365098348901433847212336901959315415901183867723809525326132155010226268140437453964271637317415607760110835435316255436081723266354277460279371264236931300102175204876650895548010849399317331949891902818380997825594281280149516728795138156697788405686981081634044243904335594942077757205141119332405129162320800377967027098138691887617241019835011676248017529367714969319978576812934782615690098128677412105584350757254535461857632308151692635885185068195515600041431945788191529757028038239033079028661938778945398259368657052359447027430704728830191059789613311201795842663458015604442528770828831385063207711869687286743745341726155450015735668083247307968045262681948544535747318245369654325875180427319366215072583257114032665737648925745142269305218328079628869079425452782809291060244462281958453399431863600934448953661734753031669509571807568138221224800954788562976198233874795371896249907702878690879144565603012159846465245990742950379144915948479628260892129677157800450876585158445611121023180432118540900686920591183816231014013264565623041819522727681158914855576259098516600926553156146554675743701676217298131861442484384346645935292047826428401231214600036357411831909174464297101161681564272707323288184095933038952048398622774374646778112729953096006686975476176963874065463010082878837324125584432619957426013964290302418354139796265020573709022220728278992796955784159600991602361744706946856963563339668177745911171805932997185678204247606318766222439945867163165047353431957133617657365329871087240107294381487754007368333486937076189432898443201638767480130727469062872473729906131993389460272992837329511274102572648821916141005212004216800415742073808837696941897944408913713292844317342738522252556577966526003363829535652439008367545665453322689911168216206208291577934130743221249062188093966942662704616955675299177998625364153656125730263824604826492412861174179029582917931437574131324557644441178914319557568847096579068646808324572551928412704989257292494319736868250444849720255599808883992108527945181580196005007479895207445359828890063936017210121538083529540699772712059891337407516804470275482973565332682712295064646051627957053843431648750233089498860501775810648387001212683525075543106646049014886233603126868043564617504555600883710969133572152289792933332651478797651221703231533633301637971242275256750183830555084292500104733339365778843959720705843879768253881514362709448625223052434380135105055730113346208313702783311163344865903690039700951053214579550061577966001005784913047636944958303070811260176082035948383349202545745880769939179275085267673544350398428293767328345881262658058120296153172049545206272621846111258025815153111828357018508140688377981341829736141237792752947742845514502606688363081014983819657766087831946845199470951425115543028313076987628499519641014807033518952931202373274664536823332196013171908264584139378130460872918576247645012156713946797782828739577760073147263206820541579050524256329281748104049657848519876002896616225115529475141930324681159043672473699973925591972632203191875377804538156427222691412572477835344672668302541321424131760888957265170076577128441602895377540803064482352325011953679870436583405959957312795426790650254260950713293339208025211446294742942006147222203487491926078434967255910843969983591696972465840891238272897426298068269344527870300634055281913282084860926385441402393755237875073537114243502489070921091488148227703796823582660227558387321009171883813714589177909795321307791383933385383458270402817456032884019874345975309801213697919547077889249011032041530863853413165392263025354246587480627150016442526071571976398149209481265037853294855681985135090847677163282346703982014071522085123407029660470499436870111066790540531198126472687429484172654629682576122520447322198179744772157596923406718929609557502185596681097673345601846748857617254327699875529379066210614386324555960854309364859092166498699705567735248744459420434999986564091948947376519095990850478275493926885184147868836928304419114055704815406020716866024911447787633809559130724640848925274215385869574856397033394754364755075134151316415539239671252892506277300032558400751531707693615127246275977802299137714938218200668155711712223625768333534432391152621858186427015512399878774811169785500065346694530658631999269708025795042194747711638014780039580276204268360547339407344489508521512790056948667442342134066153905364367870569688114440654181525497864142705281036892940137873625161986569570466661999424922637391514105803683376176148080073947023165665920934312420020907112721230294734417602671356516185504625791655774184834054777301656188329437810887865804130905639971310099663513756765956887345077437183149688639208202689797773707631396840619189592941664824666396193945152610097390228807862488630343856375379187871165543180799752377088042731498196364336612910702868089478546819182282790152218774436969638484819861702050071400734911196566012847692178102772283224660508118931274351158558907902478553553065454410400072262709848431323626898661701509406073046869022649128754129079179680773867734638476246595449303105317725447941411465145625796753747256518231294859865872742581087514071556248104649069468448228986485011461856677683759267609965577496665796078808518253901511413799674962082659408067191961469703288147235169214113122595867514499969471649811393716481353579083945707109663935111823907152718203071028003384263332646204106962872192248057842291707642081161399312534875065512889598583437655203754458840121925977402868114867605622112070393362183382667376468489695447236024571005966553019399601242889590740237158501006460439839353833373539045293387482160992539931355869283836474474450774375459298366918665305467715821064889825768980167130394585618869218951464783170216366717692479283244103580436569419819793758847333605222255371952112668238995532337823927129389392435146497374322680415540558858874866661167891368833285161398516731436049273572291402767267781655205418839212174550143287230170578598604171126306060807033144464432524458104090544233323464736862169395574641520090399355004304096754745560237638041262826837936456433580225970772310825547784094602691806310580049950686358031213864064278214381304291815364394557933184392605772768973529276878923830034141131652695857478663840637346476018168247860808577770778685248386389255171463499165530351375237220024858714731793116932410017518341846953591184367413171323395470049016158421996309809467676251552346631953608140985523242937237357163006562334091718518228313138055112400523994168683342843704959704396740964481759136630512225074162628639699287062899776882676583948654095786713757763212741537002586109365664035293615565046653197101965799568420517805336520464719593290356893142748803365496460074880835356540192518604351564743156576251023449278736393008627402606435340939446148203337452467261362694544687105513646082013482639047367443271916364852519073299030180685709439105007084764179103325743122687912314986643117699631659976445485229505547362089343031930494873462537047013515438622280435948244753986608881047740874169440972608965359103587080100507971135407469105037592923310693438100841328906212054865763155752433197333734445649239151038869344128775902627609828516130106962644436870678364887002848308355235962499403491286216465352691586537641244695067092130713578113606117829065008889062642752554320545363002991970967472239772681596479946167860052448560606865134799346104664153961491108372359152329730572134865464119056959305424249283169844800231965658753617921008933445782190239500528450211327973612462785096319390736319655679034470172157648438078105003564092270111086564259281258497268518625249760187990575331305193596697417643102865825183340836283383368597821329953506061920240218252578492104300577322324926934678034583682595611054433422598185232162896268989881528241352539987080642888000944303818789815355161374967206529032734488116862850259657537242809885331339747755953121799071107094383920661211863928334202228262709526001419033195994318135616688676743233415979916434937434008145052658722312323759228777327799829749993132942403154076692708356381114308019798125124676601373038554500532268646809194161818938243487839231196029393022771089343140046825049994178779911160420001526350521167199012201009199164710402874121021436187987598978846546136337043199032442133305808772878128686743824301248578101407912102624408934865989787440200664198210821726385006977676318584404579284780130426613529837543518094121644583245879392441559392002179834411306463646840210788573308517555215512832596398801410790555572985864453921135469704941438558170038459158779258238355292951242489262235586221729424840193493544468596698965503744194320995902590044511093928627071754319643467095014610824338237737645318656342000878457866141335871220002549794291614928575719931472757663727763595862857708404345379578057602233477828098581260015309206121852185945676744307737404526621969515047621894530428350378730004288777334139713271377081777143561171587279452652954599007176211236189774054278056848236396538882924631141217129268572139175028833839197865381937470445547270057121225063451372794222693444318917139885253779345279074535972758910602477195954708771816802584141246263639533017120553063920393411311439886864314068260416603902085707220441002349180927398384664186100839727231697549076639710270474035129374993359559942369336321067095285497065724292423449031828226705682552674115331347091977155880056602200492477075669693733496319602661582963561933456819474215243461340701180570524370755124488225728800270021952239112542727844354077662612168714894613013714881464112432429013931234176805173370061814087925270251930886592148164039265949127997716446730784868569315009715361907680258603865521629341861188404771898577342034798937599247086269342831691670736260779983247817560200141489440570619785955128487587719027086831254012488616442661451522866637440313195784522055043298929220584654483338638370226954937570027608837515777492820986920227782880810115461312586048158631343967786715554255720055987589580749617049067240646643953794926350044392549926383927321655193592056980313424853039703953847971164951382022193326492391036081185147698200368114673791520938128589264272830184566255776927016913414320104286153841653285214654346471480441776540028761443438848304560312270748569530242551266694534917824264024995011488085946334250450785215561935969482110762537183344036029169733532030550430606359465390027010836185838710031196316348056570398929730298834154123235619306071764266094353462196621510679697281459718973183887253216780030529920278028308381592806710094108948469817777276009797657305800960999928918132918095999559284205889673944434748094600903233932081773655713688558375687366879428088591501251319561344160678769932384766556931164882257651070308398543663979624758546199952232332925909686531419699971455782938192267628329697778781758318570831911785403879600661905831860383684844397861200098503043093347708500638293899080881356783402003348099899608770249326768469442295211529100777482433553230311541820290228453930354087661006446875229059142374969897545084238166309239480915963834021896587970974112273864473884943561589262159820451036317188867992578122085825980702296671259614327005084599650868557152399696034437362938370555858634004292390394451476508289019206617842415725316634053878086935827711892861932796442158069181506377119746972705129619332833311566126313872159980528070364059992463835079410680621220132028740236867479671314079620025415241129514816622939296838782008171335065543933369600106394127448388798632540868440049558786265067751937956333225861695401254257240802572240395880678731783672919515015561593846139993379212458689809173602042518740618311704118698313959490590498905964214802919945696010191737991318529901221807292391413113079042197857096707819859632748931389707587530854059741217720620652007552835687046796925010334794420544131129139485651794274033227553955672205629299943722738912023298450096643657421053323964084803046825814352166779305300448106580363601207080849626973293099002825683509520686586080791207622506344099411091373247983862141728986871317153672174277032162821235904503790625391849208835094794803594727496294472839021621859658191109388773029059416356524254107755778565351635778385668789095091832448962451982549466917779419878488837723692324943010829449469176508236098706910227168087062210944203893405014851902558751219695354789017042714689677597732350246090410947338732326411553941969965104209797526764246743791962159340010796212967276070191560158803620357258072913342463516136684679900543490551289341372771605448166909693046961450533962800464978793112098815055488876002853650960609423541045099486736629699634336591223474727087187608172128445990183629530578872404337713708845886516396686769537084934275987030368838833544695391965319051579405728588086362369948138837607474343599684924682127592167263806031809759934904513504270409176266687166053902527358626933888493342695663765807422932576342052989901436419235710095045228989894309823037210717973439344305923629426997333777789586267777453655261120854061556281066290001631545556942161197846095175145124199746708058259742901412556865574732279245533284800198807328061242399206725018971073890498403586663486117495256200181650698984105302560339658982987891817866180451845859381165407565632862536853487547793048466972329610662689048281449713928407197533016253754582689298872124448113013311576880692465401394938111346574991334239577447963480575998975939795194986854033076420999607131107852261845743426448800553777633443061352113444708483047869608875525121326340496677880083359715091268871333851594171257574079341888910327748197947101050492601573994684424473806264035147809652639635015816552270736135215750224136120552143875649259437123619756053161879149583146445947109489385475916460942990397224587674844873498814862585940751939355299070176006445370584603518928674433513574364683433663727308012500274435655472183158910802434389329445592500404819483180792064708056661805217219234442613580326973273750580951570720318140945462418105951412348118853101956788925322628373657629137884985456937738642017420930198360752719049651671150797789680518919562474921655095685053423813649697911466047062412674803790510808855813570987444049542551201047885680862240918587149529911767893637444207421914399807862419420735512537484249601451339629242458999540263056455579232498716552251771939216911220624983776943572623052770900523686331838528031578258850722249325224821516801467352132474094236087040089958946601666776418808058843047292759542337860001483824222384213708517072326135971147676267202264396431086919313331840595133412938091584594776489238974682586030598272069012647004916787941700068468391801282753993529630814809873945258996152384575696016759057830710457869231162811150964435405978690276317657359052339624198764318600337590449532578089457514878842650821155823565537699833028517678411442072132834641444263371880958796665415147134748827210139677603349258423066408274733319061740101374269052758300525885944815253509120873051765198136943096126358472254930205105043420508670835824035665262483148943036258491069994426611645055935594958793885918196608366988699423844774308900085892039120670278997478692478006181452448274197914494195429887279680973908103126745753623206918540190215933112438118493945459079964536904851668300124415183094848616775801409609742803886079254360698295265391364673837801661515826257927569884635142620745117498992781756377879825361867212405048256585023613722719462695376425880584227240808314743254454920103991151185576941672643672163487677745486742143790911570700569650389580474958033839760200441111139271676902257797533580997098350909829499407581503558288078291574322941198187880019782457394273174306189485202007779061607554308946310247734353610394518696361066279243189788676971208190950284462805806688583280334672746881721638416506243480651396507936761598774912143905297845901212545552900121254065429565252460136859252566357052918370277871423031670994146859221764366183144747210869770662930020628713737833440678435768362543782432846678455303960284951119817642905652720412995939088223257230601906647174231004910430862370489181691778147906860940601632740893908038791449334119370888367091883669491665898725660367392470831889677668032117253653348403093439001898996849796941000643098744012750153840617233399847090097908559821749729184111093660309814916484203431549480285811304637287491409277640552936243464753685467620997498529665145030914875658496676247527182981821490935439013266375099034674149060245210659823519845654698637107675654880472468994199195130798644645039651895704986168043637816513639657863074542718901149338441778093131812170505540065446553312153054132845823008093683541274581233825632502517596436543319806020836569314354691601861044436711145929318594226811278403758474175827177769534670213497495736936174253992152859065325339327210070651645267182175519507368294775257457652139465450348332941896688053320355362612182639004633520064615544810154646449342154463072599419919333812874819542606778695663917095021482309831329088609697328446678746689281313729896004769537391418675270431733027587394828221986556049297484537776650404874517776177734247942296625402388743500944894317616289722471655971435729914587766226422805398321025471394834266789460971397395459045249050786918104466523115254158398665696188785126121442966036041468915549523197832453257118693663027763966859420760697670285425317739515769477675654376966490844889014524908703038505674210932066793428030700449737963455721416590368716273429606726376382274262385780465586690351948113243109414323267309856871364273881891021653399398121184171492333163065267906177089015359015444768926371281266247373790377618171154042760161179848233524338885250071253980522749403204049705080917771112839530597583343556929588761423483328023208658298009442205221804359915935119971908148511046706087245880803689399708186190425947756204985446807795252318931284985351366417835223659113412536050397734744252056509596301024638210401633090048823678532602765531332840101509162464973885613560514442647367165585230508495081822796236025194112275518642319619106149879391782871773388658808542735167061525102059603789566678042394598396669177051838088981224044134146201893178561296183253115566381056182688834199933893096751332425884890893080726997162669096001922956065976343522913523895529038901716626268667962786091358151117265297054614024159782725970768852790582588970057147793738806866033790763948004506847198007653948838548921370379215050963825754622915985575961465780050271046459445554730029342025521383978375142817903035217522761924182743777527548220340235097670728988092397888529894898035498027118949356628266830143354361637840449129774450345193731484245705801002785273489998598855784676476337883729945569447098744022655769343696821598531315076261909233094820377053011770490195739802223462748258263388508811686014938606538746310532215432586139124025319635732966818289883754578489140700706989963360684442679024962566341990073761511781221125773699337015971584467555310484439602258456485472580134685379009904989499148506199460963976243631177377220946224518393922231621748910939445913821066523315840687981122906371450242723182519381913252169469448555037433295818718173755728969092466164944362982599536262686679063118132664096783269299534157543409417093109529476682693681364205894050832077866704440825932072419896519572541068538284941787552191025034813745771592270472340354694164401660876120634270758798087857886169128765707625084188592450589084881305480232137036809408239866501348037358242884545557546549265525329431282058173240102289520835810225222462999754019142789101816071098159533788765661196124920059662863304451611438586916384631985935250984922207061955471318426471266421791350518004188928481736541556055900957260126316739973648682674526898216161446840580938685655306194074613439076163311279007124319229514972351887956630317459688542212219410431799826421003459236464386638629207250381458502525772505817146105481697454644596014280946070255379876446600196131906384987062626485938357333083612540265778606933208721135004563074915080850459899697850520252125144547009868703199201968639522971754530599553881012715723912157527708795420133516150725606851447571205440266341247374155018142923925578662000253059028253056495983459440542138319583837865698086973348186094770185081252965989980358535691651675439446009145768500604625580271275645221878430380432198356231237690738723545542890766070625469618808393604717850350263203942791757688488699765151923962001516642759097366960517228782881524933470459667727050658678316020062499311395387727875659612586356834861191693575197586230046643317527989881811825511812013811540676483532894974224073064931971296181497986975588020560350935778489324493338974897261170903078295063914818375527440271275411941689246310742127480749483149755290817757685015496976031991205584589128092289095996226489670257470316925183863909460959351483626237745602511868673860940699409743579084516053252332776810697487452329023607626190942220827204828738200510229672747874871855017418606478052884456548238135917265136635573146427628097158561502574452708550727893157506898546146693874662634568210462302303366088848123488334888662435047430093190621808234807705280053203150344870099226809886861070827843152122494178732022070801267780335755825471509721016695885124898240481571589599246721254326123491998974801038521349164774128770815392775190637785792007115963172382717525754827656039124802886249719979139625066866238495614190053275223653896761332621401317945558431369202278993922211938573611563999654139623472588446587949557171402003141340198346442918233000496762118308468465186593367719414120299124451572454965049568528351030616757521371458167353729851463386706111204798386264565832292853819676007401847272118465709092717072790301975029545251128575557272342795236855894105634298253830019725960299205862822773237251070611373859643220606739010401964137757116644167181076116292147839428814655486159798491819566326660860102295140350389973772656393278439049308436231386209117983323077499736002898822602902131996845204455340177077650107317464768172677693142862276383874863831251097133478780024838970284338442106408834810051717917419624523913218459640757766913670622393296619267582574368519622600909612668592608653659065914994783538380899267240601320096417158406975096798387827005083548019323349322147021051904891250119819715644286113002008163336295915891459840481378134104624558505291061804795733158629867084435084609033814406446964525274335094996807111344390002227861534008799775324953394043088053124619326267351793943260576432574121627638358933162877608698648185562201849513616805429805319492196739441054768770205236880488812628538095895715327343372131853843658866824267154389150340265930235923727750182462443997909940536167134850133566229179253486276402952909646925456439129312206650938086260245461196796186309754971926886735018993485989466783342931050912409710219488289844666645193699774171452822911747764045983041027927184179251055986652307567035437874835812034511157769973831366787497896537806296089365028946253827344880367830875074130639584776757063778374956139119031822419212403076716827345227973746005087712747325923076544114726874843585666468252078938297442854670372014118962577325718897217555907536387606292559711852898388265170156732167937064983162253027171576968898360738099599190818411330000733881178168595283417914208472568516806091827821565209316579405551174532904402961434289264481357413141565169020095448201570187706434904173899726402242351892743696130352858498300155242779388467724412917517683365275258706266175135207921900415052696051728722013461325968665378416699142157822983750488796106699622536204760336901101019981408545339829940668123116262089472865857041937227710227377441519601026758458583860357050099481033486528956331987048561685717516994303549955841433412161226143579093302094318588838027115740055487718733783675337154643601974183942997522998075776442872985041369143162461148626897368047354431528768002748545569340082681305693135433825239207155117857591157781762502305845899397428258806535741519059681047919226823172792340648295647015280623018954164649154206662622488406363359860716155123403850733373539137584117859464884826343256718374234585268695819997015392216598740420623061983927060266384642697668455494186427765555846489053373607413520484068704874483913345108494967584404816233930164093822982009543663483845164774108455584144692891864850745377223210257618121265586254487338852343294496515235409431703968632889870370227837021707810609139812752236593779477938953828822467258056553732283765473024500628491306637673895577539888248775221760300806026684700364585315162310044693324179881468365433221796936596861467058934791606141724189014771045484974936621603825488289971367901305114559828862398143976104463293351098902645972708896792587485832166641814613764333807757840447655483700988670636228437960699765476427589052227632220861328820533929414321634421312327020942087554886915579887683058934194389535444109605063326110320400794309081821437789543086026191356522128003934917075714905121693497022348992616928786097815608280358014762616501922787394448052127780088722383859850495986359507286668277838730275401991886834600778276221208403590236473062590157202065967951155306281387815336062223436439362997879358646404912606699431548457093845948205192800045309989407929677731882881706812395934792555979075025705650609798786038330222142588861953123330739218631786174034212296409758637724132020092224379603265110863122500079427671060889121109682547651859966462661461877321203482413301054971034041801955008492185446815190073327577795723567481320794785443445381615598180017903338141604940915719423038666392610766752534812196878902514809423073307008559627597381422257156029869053357520658253492353502859804038365964650734449281243388638405324635707890969025218409880290478408195080811055879044523891013594828971152658574643178663560564826952008105036481866693938193010357375289920947326570833770013347606781507562347747995663428930935066464200152831224793212936764470088164949508892069601359089810875902142028195470803297840542884045559734839765285944412080388390199866767275685781523207965045771484902343399258777434529874748236443970766451191416058251666299701387577161362893249948601019686625626613001629366361302417557074280789534102333265512246312757067865264448289973607578214403464232892045070676211708934821537142272125089890275928456220141163683851479313353315695048757821181457149101077751063185715232197067955250810264842665109121819564167292724254289070024605792876041354408993715000055576909264346923983248573645431677376494055135245783923283739778021486432647660528061380481351217281729478110085484453992188741028166269743695745892301317379624701700077657932030289155114349673673951906595766497046486148053309985416620416556590422090023957194443352567120490412113928355367458632040493266983776243528287346209372740188281917306158405440945684124566514573652695800750421285560840811865374566389630770856927819892272166449607006321687328709449490127849593749879790730734199674909272132818152561711722786616775401755303552498319140151368900271764572375023640723147306868256375796037874957386108844995480386610503140685905680336790769553644465634178417245484096337621389822937451585676084087088690785109392951612394523171253393316931103911283388299185842403043987835090887622950605211124324682503502784887448982521054986284615405137924026741249017023219999201739792584978153343662304098406974323956881422418113720328258560919547143294093787041265101852836941257780637957487473688199138156952213478071577265287451799155418500683597415960389967481229966363899816706506002653410206303483230050980274571810577030559879948600560254965624231753053540611900667622274042236989525461119769126023868399928520726028207393407181123707625347901387361578154769514143676425218445317413270316327780676119340721295700511609599613525230686606276796859188884171401451303804361294380193736412166996968533529480142193040049615931843287861080759922383441378903063438610078299512554925801934582242664385501154111428770810990070743304149868626822956105347088521266328117093249148303794168735815122589352048760639721116964540695650736217324174853173087667604268466436240616360705449822741231449596545495611608378655072274860323672533739858941761902601478997947418627788617886329195681955501794159180493120154434066921938463578397894110329027063789192658282725845276580518461179347460966236233628093532934879414721985856059054817674520763157551816268810823569282148451893837768663754147636188260268396708313092006357168057004633838607580054543975572805172277351755707916039611530072713294863491315031388917947673842146780937338252700333485182334420779359949191730466828208922417029553257728618086324405370471670062710980576647533213689557040890947317510902186497460670620209571591083268450070828800326257601843107737092647649086292490125550945994525775886434652600940832555862892948471607732936827274478323561950588765516761606420838836947963940967290998516409676699527293047183022384114634248167878517406558622816907327175052546164409867937181876549827631567770830607578749341051985636465109213121313234184197293830589584961917010432790152704837975647808542585789461186065426346202269586638871565798920869371561048478283586141207000358500507583803602142583279904219267635572265429925473597263282643305065064428256653587056007820178035447173981544189250744737696627815044507842526529774370169329260560496977795644815420009730097710281443342227350873493932814247981283530376430420267140275786548904924417301864781439556526383810884282479266081841681153865133917466846189997732644166922918510444369188518823815736702809032987165704921413658292223749713384786269841140542235166772993096850238502433916511538955891410252307548200054232561097166098501067162398421865819037731260373261642330017350638331527747234694812687034485148304096396035216515618227168155820152070753823313799623935514062779174596635085611490168358462713798079010480962167542006807582987735242262288418059535968581064610807396077424683790167719691999665072883923814259783852921622518475986443172294735857932892876963612494550771330878079980831696511849779450887632309819699075669703646095451039534480459936853595487124669062905075911117452386116664032223513656024985393147543526563301745375894190784518282591702122788694864650039593715030680112027551012277493935518552624541552966481403037242695652102466202616882905723741864249247558684950591638101047071411007483072583776819308707149609175841728309195664146546320791181114177621059078980736061571340492279209224814917941041346997578218125766525238079953252223928434151948759550579033782548845172987189387374944018422003077381717163922555763613856029570907672816857506116975298933406185341198382151106500923918428444265129715096524718820565879181591149417669104166011484021581249054131859213667997627897515183033286900336315668384692110425490968542664770017124768090720003310529932007706058258060657748448162318208631646041981897370716520499540221097172891774131169504215560925748757603604616364068233020000585545547659931406428452139695276808844013807687345908837911142258794382989405468812607055331226707651299666437973369513657569940597947466206805422185666322576664041406173821387515524571510299679297818943200816137676407351222199759550694498794976093752942595676693660231856662210226440463102340663868436139178163535666107726009537500819488766670623077607352538852502586579185158831366162063155600961085821323942484803873971171617623400421688983290944969346061178568873296659379221262875174731851922568248746437637352850757292994986339645867626046512797301904888173353419006114418928337332369415276203097315590470121839360095241353378950010235554048027055728122837219335929120649075364310202331095933636871028155140779626088071684205731811873389103852350836383651661854594282785591082547429149146170795012320322793804064964420416029390136905447536157089466942134273819312360604667441666619057295006564354792279869410196960548996907809841076908905276875897313616772432683882094026313538468406676693028805205899841715212050146917895660180187982297859462118896292489320786607765577638083880152761326976054051486743458850893620465531881669826159103178561481789923061515003938211095426880274766405229711717833727280823580587073287552912785205785652182929905956758728251369260662897078403626165996307545616072774789429518235515030441110197330028059747081742871359502675586385669980998864958365708289481382646844144648714929832501273284911334402779283707067690338173159971673923956553082753457274752690485272964635396668903472824489820549953365923303713553431600701422079345293310028687480004357684799282126347234166271745579999409774453524137514142060238451942514287040500531877057975556376022355031170403240704100664593926346348875834102336708346777032796136853826041669673809178252430361824373916256303210907912055723922418938852662166096721609825778537629555037887566279825097425785977209114775940286776226124686154177688386837594793407602951286835214354935184114778230295581795380271945336930918012118042857735454475070349771486237011508522891059010882693530322101943076733031630499436239223029838647324510067387580773999661461987105446307548731155222067201880592879211227911460227960365748338592146701914933455409522959329027073487397812842147931874208483262051190250515853606981955385425405679461165979555111501480445647929092889580629677398405534221225222721723149967300577677345825623859700107956484655544987856007402440015275574548929351005342910099352111069387963611828775708987864010529925822735884095432293336010084731927528552167205913963111486115830016818602259161403613319949016794113891989264897443020973695093631054416565332800388181624460128245302834978862884396897048958972565711842265907356817582505697002020559924408515106094683104925163530638955726193493224022393836575656150074165432601131863805191900723316024331439736535011781736981499438161569417001640881350319957433095755739543850480407417349709364401379627336871401954623239741738910533837246532270701640903126352938756090500818290386421038109021111836013818778461327758983669661427901695789850109026769221729716624908535497161594549195051440003238748519599812180697334656413877707420218663424200275860367534854355057640226611021267432744980905743405368022899623429173112435822962962078392390475904010084237227332552806710903993612181981154251277228651492286987606425161667524052537225034539142901962087981048560260277690138990886485469323472381383254385826704380225105836246661544595426690862989982337024494733463828257928267170564879468452650409367294033684528683637608913810706465588491219799093073034376201503657212908190338250492138793210373175961040878135129771306543802779594584340922005246788345629462805845015223316908025043931810191195902489979874353188546274448654703037172555945468302005183352002256305759567256241843509745799750662214976644199171619522765796904909299667819162092454767365219238791399253577322958318992037415493679655455559794705696778955209239313018892534455663367304951017238035933936090841838035724442671628883374793759236041308359361808373398904772437096379244843018810585785316733067378029577926741615072137624018790919449164801369826526233898046856878281148001319251850775532500472289105830539830693022238738199531357871930013933028659101914886315463702699562402735364882379885376202552611557348229113985589931584431095873308157298345994783558449033464329565035893611128163902321157814222798289654295421659586079794969303079241479636887242305642809461392312227730099494553686264591791755553427765826509985141508906789548943228850859283471182463650241651968024389094997136061582289648456368604156099672289623697285759564382585439827873878994850075582665911065304442998535615969835298001749973725230312520952497555251296539675466982826386465915860520659416782515741716234058226750360754290769744534578758556454687590618179383370746517850132231372546298625513642321945354859544035063261334265446499756634782899411523705531813722894253702941916069758862409974729594412804482566907683393988540008106315657152093493772804658227469695459980616829116903132982969440548414354125336254371894111725554131959949104620891742416948042000421531321881928558223131311104953945790131573638461412088957010425810600204674097373309077675532250303410569867647383722463080226282059107510957472237636056616343914104758585210370401017756177750767836553274758193950803303686904973050251486615793395164136673027129586540385787336169576379980721922920251818264894033085005195688008947863936105706025584727153624084985449599363148678829495683423294409757030918183523498220851546551297915738940597567683176548846028263461811818965549475426027530632450194806335353848474882710393949546915945041315396067734468817799905859124471869036380171665207259440961074532666003282439695739951864574235825112346515547504486943263346906884720771134734412942442867915043552966691206025037919697197287311695225629328341865484096162998304439825078253198443594720125205086934022091395155599251587867138168864440949697337140137998933168211816387840364458820659897060099155020095532168710468576845512231378271586554602246596539892141030403767577540879064506378005636284150787666031545101701007214194244504246171739420502089455814765581589398846237893373459811189743354493662947591901310500906244260570127983714648796775775942812498144780793650752907857859624268336644059075749249209055066059122297315557974863341117324459122083306844775007641789380277957525407259480778305853745835883092107456476394159150886376066819147870428964664150700928748661854162486564557771975655892345565619818675888584285244303154766342875390225149997027924243281140578919268158780092994495116373870349243444901404527353482873591694082509863279719444965090221682406982761020332910274127370228440313752304328300738121959477152146654469954886252445102497574575329110940778538764165000569391552393561987038803972163473379476486703135652047369506638048319614484740908122206996104159689385529445213807748988522964748092164161509885440050714761421981991100510630432468779678566477732764502561312589784348325126718042793946056802955542366040449376743926748992594368850798566978844108716226844542054179608483173093361567086328713067307347723729326594689159369542761174772527955188589921346844347497663515592325689285737743762871157191933806099220195426577945799997850405775861632597600179029272431992254122591786883131598022673150757854294996934919580595851640150324023636074863206166501778431618901359937161318226956815036930181154515243313981754683831506105373004544324078051137803738181934519143684726471564286673462898108946160262577169827474613052978863528161665360417580614707122392431995498117063232314305500558281376154461301494755683816013919450208546224329758399881006571391870062753298270461839038774880073163925883230929144415116539596497012779844222715905060378277912447618409810201835515833315423275479361015750068243783809511791172174990855788595347993002811986788065955711114225389504236836679689735605791978951653865039181924307742330154770428083365741119820399902445540356834976884046679893817781370943459675086002809211574013353399552577375268601300878600354943994501674328204304532515769064470212772054189889781874046083131556169876087817949948208678555483966140285044067574507136911588427550657025732101230046221488918398390092258196256053158421624786316610384048861513291128401012730768613742289227354602002644404929001463775815068501026656317479877799697575713186068625564805347254838849799100779045949812254181441812979791180215925389225766814992444852108160946520920244465074129760069174329905653480635107552548733706060358721950850517504714597596335602551853960305548990038385692932524374635363041896520449243391512818644503201715877754730925231152365670696171257131190664512334159286087189774634777315185216163661194597441717827948423557654621689365010073217713447822937474963077876438654216742351529014257154333859902695211969443708830859754440745493518886844187601522264662808995168910765670506531166558816667312944731336527795280983458550851788373987595860026287303283077681247407549344874153748055612356921640534539554574471960359835463002855584647199604086684600359496683357069150533714042073202985232277288524217455442439843021118830293700382293063345621651098250608245113064197847207413543850302797662456056374925624821230490370552250436758901907046728518200954353266885727516109137265938753999172934763898728736372699336833526213548797996873253194888610010041930024665056821630036151602703817247023957955074410769132729803253956074950215297551327509896915177338539529496245864376400974976662460659298317042136591230913398156707116818414368215396062944624634288871451980184859629917317782362071347570792863146950083580671348204475784449155659694857641517421103483705516776329808125473992545617400741979994744266322400904308211431371328560391080349636092839276520832043846164267108710130523390813383910678321070695486592741542141064719532309108281939186105171805627232388444048703657494983220762391570878961757187310295618790067230763399153474553834550333837574982599670820968121550613392444335211271960609650298747177499295238606019718066474267782840254859933884827417405755774172133239042019083510886257781766598020140287105876721426929645204171464204367741737958951518816949041801014007301811504374970754185222349662934648391982435016723669622953935568899897686138157573715861073647483623119659222711667432746486053079273442207491328149187646191162231242814037958699069861030481200698202716524821492846979951048570043974029837664641726509964949519790897184831700425798087134370626602490290291185125674740784121132487403079986921890494140034777648918492599177331451826791380084995796390712938139750612774856904841982061368889585840380406950475631525010495769763951912488220992592011897116901294968831624026390799135617468761301418091121307382322683120257202342383574302013185911980853723330394439591410280898790953310195137729177717884728111405109508921103605119883526102236364545439689670775335806918410115135503123515826493715137367195447973628427115067722973667159643666293344096580674490698902033023446025867633829914746323275250133530294399052383247574835874159892830520504274606244389502513419684820002958420541028576161493986197751924519695707654267538060443424785349293637919716785799111989251334280388266728326144472650599869205785059896444664415860936137238109950487382569091266009555426689503676390930889855201659236836220023214268012447377373704799065532279242453039168276028306901487174013721979864467116802647479433857383177232781160942934728344665667172327425312436293355432974735322117969883426658410321182097633142387654448846447197005024641316943100271901498195023735908943557369789553034804872280463393707650788462327314096887915522651820309618611692204324428822821895339613735472621207955772044831740850360538008362044942584651845626087363967455068497234035033616722680731535301395550014260082447596615312338380532506744707179104263968623679313037946836625141484843210306215052077638912287421346961039966481935372608582222101547765186420350786415265681426980146005589159401380292494633663970568780409724970181710475572296524539832494492451075497820265744308145665551417850011080370652637075484639115280912374462614472512022415783415106112663463793660049724445950178138336760195293268998059053133588102846952687006689079699210759088469291635523340825813581992259664718169138405796403364516634625733026051617454113495063656077449741964758267502579085108356723781369426350138178171035723535810712524435755222298215741830132151772248448410728080332087132551441492242911453453143982859750637645482477753752494478582700230867018003269604620427600620760973566391346332544980854730370971100628732173109167121695124185333184944133584815862995634406562367634310204410124272497027811751764495808543205320337342464581588342549306393057506541435329764410068839213743357419107864099821624513348719361799931878095919594271951804665244870144736052811218370989823608816938390512066627051009978819784204075853959714645123287815272255412868873604521388386864408947329602488486130892698953420518431171964160971355364651770549015360203666153886514540068874111642856526280677228173325101126998430882824183607573599779568348614845467102892707832189162068518650477787563122161961398485377121309032918591737617902634131652319479713814273105769719310948510732703282276518715805933591692775633131765452462821885317120677969687557488084209252355162916229140561468148912471343997975884470064762577857676978824119290319248746540483575913315992540369063777181723451255918660954218803850309629153283345690878811664814895208552601118303674030938166370378744086532692393704073675235648545774736322975677968807498035820364380495181104608356434528001902768647803256699884093960785714855186411725916418236680437808515976006342838572272091472102540539818688201137933843726287605251849490862375879351361435242417918491631407479363550371115489993499823496190157581121819829210017590837579389497517114049289977197632030424151861146994490504659534151607892001689659336780046112074293425639977316907869175773526998853633417785933379699602847735473012043182187996714902033630666912603493074972175473100386898945333885583976914158058130045736834479645537780466046128827726104202427341523497155031330186657689452912253391801370979257525168868478004665337100059130379304339092252550349685484838820315499033517337519573757386248574371801962635654182005609349895430586949639551539030933810167587130811904131476955906758691383591173235216018349064582168859479199642974933294027720375727429628967848281075514083988053132525543325630976062966505090282584452198482041926578477497575159753631737346679843768596622100591771761210045495654130577012973571372508397814869848593967915594739959145769739959051340402577727760037428075139788892398681350303100719723945348858350890310098948875645552684379109473562781402639443315721282907672621282427520260073135395661358236680253712758949207533331275628594179874630034175952740582027640797423872063000820822726887312583128604518081398586176018913877523383449798219411205754029235151784436133767413073566127958418397952421113231675253213475751926505238586979088797358842861853143823743059812376155938747167296404862532466438534780083563440680379419673814255572726676321312704536051881353224384346273894301951065444748996464312451443219113349198036793069919856019149363585734258435751477942940015476829919104835094886788397583195242283668271582434664153669024485784737539207741137378838818493591605387192698527019983417616481365555766725407579341197470272600068083446476175295835987667448100694408461728391469902683118325801406802561118542868958443013535595033453908594762064889967751282033856830166612944772295558081880922778589078038135755060422014508519468942253977440409598589592567841016132766079297198171025554844284938147771954393189089537910968789200989735557561248961804895221470181896312821843805618631127850821507726387467148185581932283352295426852660636123031058510178641110593183021297420426223347037246813132478281550438417632226078140734027085892078063839327659107480298529601857322260131355031645999838772523107912379792799270599832170629997454849714655419606067993219705868178019115118066098617276218077277093941602070987723097180043676604694054078301754369164526872246711970744413113555323069662440656773694234316905875932121513959325653181119499144039408368875202575851631494861321831031021498857950670630136011114436804123806108377569521394447174045159342388689786987996193101594525697670461331941805519211542961693741077602521793084512301235745492456268025281350357081503670894337925391439803477910889970153361961222882425833447180792041813144213230684396758950783261103600776637096981294597928656789203019056025659558388542798136831932802368893832217705096922882324040652314229127280596349325808350479899196528823326535310778579791137467242911519492117623158656167192744057614389921084012242115095861285443865355988868150612666301570135377419716011395624142107787110028922099813777852021047049673829759730603907215723487395709392699066181816397330723381002421888101580398683127472361693289643012902515874797076459816929061737568898928783107642665985720533881787932033964604920270144583196039052742252639470606750027733301634801290535186279609643840098163535738005870481452789904020843319580887340804076223746286940791270024454217764149188889542564484658361650194484069196875937695237912333068948213578354863435479364468100469659974668510390466944856963452465973927403898423614814932960003425685418367360950283903547414236127348071508686653530062461621894605248320286771619836774099475218600824353633287252829718287015107406587565299675504098876206106086015482046536764858809584934949868105798851796856296231240796194324360142717906468963137561716589456415332693043872657576588982862391023106509411903080620373938527525087109195073349545117267483994035124348077003892288904837683470612939918618138696940308793290178390833631686726917851298514734487715896356880478517388289099083845957952233036770230796338094460188179496988267399458075957092088103519482374601778563138864462712805589963528531880880901825945335316511423547602715813197439866291158193367010732344406950805707584804327986859564260845152803444186913592474346860472281190979342567426944624168654965600098277237473383799708926925744338786122202488800478397706778040245143377818068950481306435357461384891864343303514638905930846691319938996235930229160669084638762097733570864133936788487973410694083008741919506801490138905159367389070824542719221146595186229449320223775976114810899108150852270422992121216714208071266442537093026065423246249027896226795665319051703156507839019530602848691658778999475035433915703973659714243614927466137931817051299829243099717358896882838303926581651283757992359106234670446332825261595980035519789309727595268871097661012707452908908805021001796435768758393916297359001270753050808940127169550929189985389928097054611078424635759487611596016229558033956295670234586987820521551240014385800273560294022687447789167412800483777009971325178363244966594182405308397334788069046159272292491571185519307766529421236052581887151251604178080846209801119422493000971666912650839916915847213563264215719219856376948892433882935443318466264989631266449793198322972628359168966796818812272037138481691631564771104205575480487626737127074210451006327478011403396297827159184011069835706569160771784440743808752083354275943904459417011034831848909514664143227294323454193647798250461813627764731032541513114569097318216685156960315963915650593492913400240161845861646828855867812986442211936722084346286283874771547609054646840810465938951173584171716455806030195264899909793137793951894309829590234398635828866318730964486290019120397205051384605785888711221691562648385446646755732749818739504952980603036164565103865306024866290665889115083069565742637801947263812638374844574752135520936482693077308768067073018338700196165551296461619594986219375758258572640611425557148799932232297333369390293169416723718648032393226905430883899785463169207524230491858629127536728002229410160323470169413659384173855395293809525964731288463605704621968605186933118674945438001011039000075385901340412998872852762187499631623367424517437263193424891520611422189188250862506885691871590859779796525835813188293602440901755877517325487413597436897559398471590615859916408589486313354142529797884430943093477947080111482719513883632762958150452112552465857654015476316605353589405682822355016636032115941695901293789685553050155043597125879342185169772241262936110505271605417905037223493534699804564369978587670745824768539605529798826676570550524508693785876725938780976721693930629420664148352970605280323309029576929616002720048705315737949015788842401921956083353491758804301294354894482838289936609556300117800735073337088012032660009449927916255271246382454740514300416153334524393494451114511418338379626334823285076061479470490775663069483742173423021332990636420241322373956922251080668009489906349316333327465193440276503973230267311245889248074111295360278649949035542704262129382007026994169221963779275947575264581525816690918720638526896131775500703004603932212850424243430440899027155364409183902029987586643244793292426762031925507590109651161598294959982630417471918035141793149407212263638928879250162771552916270928934410690817220266519330377489938976063401570068598176676063976013034791626519243918972537442604648177402239977497240631928666835765992205263005687459119695670613878348839543508646795428826173728824246349221651756285909517093839367059438839955619604679065755600616871899836554036622847394464847806045470776992617523324459580947034762027742844047357196893571991101119778552526428075701144636214515614467980704932776293869117477253679267391179134831789041343587496046470834623860346624622658173906269184200268934727646623626042171500029056234341096313081770306163974515491083586174340759466800554266134085831836649882500162723161789042080050864764343194311471807077138518760378612403517489667495968110401678637647597494227104829029669364592584203029763385119791044867317464073858802583805163081596965390141870477199962248944718295132540756630407996082991552760041976578191795722443820593157905406667348551773020443941965408922983905464091080552869040561916357246767465253731625053260900001751490361222564974752544133177161552343409468356820254725263876723612604124731485087635162461821237926452311489184236666750685371578131791905974259614387701784363235137064266572794714177788215816296165782761662257330734465198167505057317505440258547170649762906481137189296949123879444147644346805081598351275348388543353947279172201412666418107770832777929344024984458495385846484599022450579090352402257364105012155360233747583442438948356401458609842382815538365271610264194268921771424872852265850449038411440034613450371111040181317795141764326281451467462236771957572254837132060127116693768578520627117340412100850849059153834683392190491009366566815541254299680114089354470133674970832634176844261766429340782307294735800671598199287395081773292869965183987218810857747685911362807378543530301827341329971374702758975843714471823181377180377979903766482629740318209027298813229887441628753364445819160644264719730886021861706411225578484416497260534756692856472486738520835794266030266580802393974575256651607085879870113208000033075259348663421573423788415324686675864570434322445091184572424133857278987087492726661401757469884811691148172346618662544974858348149890863119955756210346844665115990311670715010275295745734151925848971118627106208769659040228728491406768472015662144995650850879669043397767466953596071370735457500818039028158047543958489510732581343201006475377563887032226760583343070854938459971084566339457254177876521837392456877289154257448342349452814234592232029029447948966345099013573210317541750937993906263675803105212767788756402076622638480229774110248820088433406280814856971620738035066912035112101005470530015980639004766004548904214709848287333174610130564559702398708311815544229145682868625429887150557753832285409356424092267302198327416970276973300950754004170159817511333406078264059653535596379566537487070774361942726160795077659829748226475462515199788953765041038997503533877864091035704873996612264368421119865909984157588348349895149869578715238332065194961945506645204211659808513813432586893033754611118989975748622697464045479185599003420819786565535485431056842928536816242761028736281109870980572962924268531737171383051399597149759104240485502272909281283597519278124989717786387216070507835198831117390406039555386726180976597779293164654465045503950201151463004071136053273659624198766964452945817278629774833744574968268100126556645646549124695478317764887161880769950998980749466021113297191176811783165950526496825958486669387169992908053821444967279247515283265593565276956569573321118214889020082283820161845477244410395492503657301644880572946470124523809956828814395276328026950963298998347701566381314773234735643862601811710265725312924928841107547047668794644749697581827204174245588838482166091022527213813126471384488974550758649996185193687337908585838859650266703095978368182968362916304152226220364771433829091667228842344597060546256930423919385925695269895542191892708187203943785506769337433839868061127298047761685996565621539770797999026547119436536209654509619462671312561650534574451003700325939616879283055002755234187416345348069596590241423383876042684774848206957555228249956128643508386378221738300132107563415613955510459401995982242847783255515199317729927381562580212258931774103988183425095680037368509521194587402879536430209605166063867418051037394238406825678368096262524665501245233533514742195495785133126101494131689341400286200523662279855126289563943456177988298387059054280125206461201829414422247568189679356630873615866165020280129094868017932990240475943139953231198310035550913358488821636226326182515119149900322677796471143980439784522089288927365371057778592078807879269452838744527988758609845772485728778132478712554142286774072860516734115844958911923134207992300558493159313354730951631347091843532775040688168853081736101104443991383810289294436618428357784583336016044654418981551887420734861105484768159229618328206827404517261110769598476067299992229127209139237983556365501860514723016368457813966163644441183556380628186845086551775386333938916821428412581750281795456366512511461365227365054961091981039450004991759451304353898503250032975331982101043033607048267422703684944724553752413456010303347560895954737080900249785057618897318111947594972181536430249405366960385870666922967499523762351162604736254049394827335117103015543217018709198335314583878784137647080594295889366191091944601805233698410264260922329679082992887035845718211674004766302060981176645640999234793293477074827731007728059184958525488443714039647793756825092086669513254123573238473989669547031638302667879336163290169741553353746403070949602067144977458007198184075651869885727578984122581683781944033220106742697311902956250268142971200454461221594212659322595967181254866684648414402788483719975128244913447286090149306407735203848297819980797655455150781875795618364918061542417008319070558788647278807866396956591016531812015746349865938144148686411050553010137546076064795767627502976951560769505188917107231187341838816094365989520354644732863600876290252130196472252711967708288488995367051317929747158904318585629315212655626792622917407154419319917874564739917172264584612714575025316789551335477019504535828885609445639608447633431603618150363283746934212266353028587478299496245109312371313789215481526896597159250207574925899372674725106555579729089789541381253265845387264264417432843230635128476317863129036626389134704956877614250563273942635124767904584039969427756521311232628784233247773305577914918797871480891443360452426524930236944164401001893168359993840612984880454380304235271911460163267151534162507241674399601955535695393044177477746194609714871018051877580684020131064064212611114329184813393566596084684525270214564902056575757512541238679575260222982361073304283865497183067903942988145801087778609223930159143971816825859148453484295954807302523924242557745085158889679917976245834685373800696759699681222970446522097226064743428427125520422236679757251622074901037393194878178102763452769196889345215673481432143935499243352694426014239895611620028261411778052898917221116759183744559426151579211790217149847433623914321896208697176549934753941126951369826032514480750273037103887832742583246856347471055682370227508988970603631041741208575540401729215814453486128691959995101961691308286508556794562383817325544633857417047937425102914799904742716188403280262450833149495976062834305266386931155389015760837708133630908242440981543912831406572047059845433729476924518317725716011264346316380430378740971487934556260485822918640869866123555020371866876234710866038537737107866522073318914508623803872637459147134694719771504585509142093553368432050879694262354809784623731482616526944228092679601912500227090078113283572853913810370861460803879429598877494482340003309001970245705613242720298126235851107460489574761610280470199045090322454630583068056531962041323925791927189539119341966580115714378493303984519494848483410262076546715408558890861021418544660663105958599697460100169490503419484568383462145729852476686254491055361236034848489310399454022038784197290325885684794466950635989401118291693586594674013324980127043522642579537871952930846705738350236066720695544589742216273621400492403913060399295656996595138238765599015791584095552167149143942749515789264627032842642997502371534859844608637891228339127244159628359701538223352122603235661177013682726447864572221482287007468782708812226875930192278179710939008832387063214901457218964469937638348660091201087859658481796469647236149837836460356637827788296868554421281140805942002917862846275752734905974731527957565141215316066120773229408045778449729880583600977949149152224003554325303817076753269751731585155580984298794985732194669408030555568243454366415768985371970965787380278937318514181032347102544465109341985102302871185219131454533096633229671537095584861816554167244568917866505462231936423922218736557862774506057710232530606968067308449819267947984185195236665677700501143073434613610988834339004647139783177819127785956879324995033113580334924977387053317072378430933155278404983248122999564533806881931153266674995794312224435180848126021966686293886541535550267420572256327821715847555568554931854166897280758484667010752627444991698329392874659597251041838043563941072035902706209231725097504502713036569349502586518290790074935533769167760957099159692357955026530235446654388921056432811792900904804203256866093650630429097471111304120752303656769010375644684139332395648444768957109900727508288599058246558653023479090470011663747878793457440264010262553231861388721234984844319128427263037486922891440566170616892697117291741956880321751485107654361581219488674009713475947747350104328430430978176804552731579751390509247271032780095186524861244925508426504812857945559012845567627650836856556999437756146308726819394411461233300840238705581959189171200037795642590639171529297460612095720801783551178151152713938228186680785101846019478455013818491371027223244491345723607875605881129277092807421407233200744114818915423946206604615541362780494812127429709268254144692765639967279794772449267012403459326290548155122302056054025634326720874955157929723011998292628726138770770491819079419803969951547585716882135381282138684100207743597328694250077584471174960393592678034498271497302058553013627841587765308700975872876676109077394676358701555144994381498211717968226302145067086151804877682114886800020279188750751362942438316972838696874061979620359989209647844333820428838024755292912744450337677450422433573277144891288925255379083772175723394135956787556536469315162110193946767633146566878035772170262172402830742813139867824638764172378160560084961957776342113747426343609571140933676632288675498915345866617319805640290892296596176332730865552641041417733617520466147480064284545430833421807283362235808048689259962680553010747884459688297137841384637450438661749072992056895214138423931966271291545217525762958992340677436339789084477017657771368939538404507535778883758640690959913722789990238448357178929122913719330187018340003488058229807281231048735546720656209882797672820725230901581437442409321505585993408036820777944111945824753548610235537306225177625325531595869369731537199082273795785151717039190511846984084122136462533313935054078904548521139089590557558066580692413941479844376398605334151640337454861717901026469478370609704233382175484031863124139684931543902892635749123797521573952447116171787322930908659192556157805222564158675323193693850287014526573689280672200485544840234405529489287460544628064451074139748453513057679700133561879260587738968307628466064980642116360320065665855147768211090442518238615547662686800938046294283104122964195093549607063741991005182822427304798254685426491386684089546969668223029119304844707703340930818751959026153576806901401643855744176564613889782931808914257752725139701342555945703947034505160365753036719279052751080479251854489325365174075910039463737841512065136409192063696827784996474369927764931571703203551957740351962107030006397003030432875773692069330872015547611824904558021980724820681505199978068393034261638398683880830564648591665394589628216714118224400934334344853219136497236026895844617661892078709750275815929560424486289259215866801856772589441660526392162372677743545902136014557899616874204780781585118000121492444579035447004397440808049282065050826591859116888284808627867735043729594029320598102782983382825845482878456674860047048560898754645897795811174177594476685071639265063909738172165475150122089474045491237007270332366289802912023007338854630109319731046260492767836949218453128326774726559095773074747680424554568875189566542873404732965004804594142754091735782297403558807218471540903162609233301246631789963945801973513735667003047909014121708090339284613442327180012420125675823324597335551837860272381522901871179911190875254549001654381946757748022108612173330851898544217018429480053366771416739744215734033192956370504479737231852274940610320720756144370471635649163013640386639145224913047310543026127269385173035978081620370792763789848772191124965956928182038375338217328044348656293455924001434181649335414607528966311618106422166192798617572202636278231956784949119537356141793149738255344678228468826188535222989943208032324535260210049543521747765849332174920738796592617124394603018893901255904801988434645903633637432599373287452643696076001443135553404947968358744816027389963005545299296966494427314085619185889474403193790053941001290183835844600100965055546079217936046225824217502743350398276000396677162806120863951302763982297743608136989345616863465984516084486337130921527239165302013889797398818403842796660539338780922682408196919124806514162409837421001344175965933102306424548191780434353015045380482834465121054647609871406209016273418958374772796512072974683086640924155835217894217723636196258614377794146150944503342361631759352278936097632066717856023094405984427363535653225050959727596535076146778081645222980772661149229727497673808649729260445228903540690052781010695087650977987232089401363451573131014923636783894475202911358490278919419440882325937767694350932189730558137794926169422826097189950640011138940433127761547704675740245940117819223210737761830412795959390087599934952171719810579179256135227584466008849528243532242413714327762818887253506584092493916621440435539599251953333128593573758608931721827629061650713797885937881284622355444040688147376614484730934430367677875748396208280672215136863148343572170904995028409910062343705739850024441535398630934984267643233933082364253981604062177917851807921435442464039710763292333415412164445440450166571077356059400938505237053158002554710741291335009854427115705279228547076642322394785069605372438183156646863540881807505585567162752734354619273752268786125410275514896825351336935090830417268481544480546289550761584359017098613594382305450130538424535891220037815722552778056437886662845998811967055764919196324977386142880686787802070697078041637093671151711726929800602375912092176207426141696333350931225046734057760654515328204259221139052369972179048301227972122343869004368271484258393001759884890938269832715481337898386702343924536019005755200345260910124105622226552419965768459318931911074489814007139927483739488200654344295235227378465029414469056120469313741473178642162398671453502774561250437841112215044432164930287623562457602485862168901568064040377031961864292798123559065813113123904705976686734123904746700053075357144230408009948413549842235653203818444327940848439187718631625231287432811375475234986764587472908210101415320838737777595529750895865350075178627285252698249144118214625925965796059524260580733568163868793209012776511013508071196679013031736859878179754824072594920050101174005318334980418260523872864172935626576428403769372883666531161288904401257302209539036613158846964397782360661573733814029404827692721789314690639387663108673928993612072277283845871841692809060109674308299243689702657919584845886223048725740472221311754885211778276697795912137846548144115501626274840638070734902575475279916224978385238058889668291942559424025574613981550875831879101725505385936919180831591858042377427355309037928046509177536085825013314685086700870320932221370497015158882358454515115628101989176169605773341855065191435832487786519715698363020560860909130218040956117625348000788920328663866935330494817486440801343868645902748672280778922860286237844491070057023180971569510883229627197527242863273808717424523584312589345523873555396532287856199105148484974068452749053393265892918481296062960136866912655640952363031373849855809240282357487680967719606793668887287709201279653159127679849462240329860525854785033024674762163369166755181516443506031117531997950107279867290079248770235949365994166875234654196235251386154876006192943761790587108391111577353724620849124182472626128105329853203339119410265216003789465147023603500268107191819344460604313871349663334057424587273475535178812488288960287672079334430969775530440203128865834658935236323265362250310855258479345379046374961417588915708374145072463102338470010672821029290298511083086623270527616610991953691199637388114122168747757839400325113553381887712790928128684556520193320068960929323323195617392128370262962408384211346529116989682202229517681829300648543114241003198689080555141622456824398305977541547154594812933221720029864165819340296191551955803749750238123130307586724327565129670435802972243873211655836360752833669266260649085981890605797062947814593703192964744685963419705022043478698555973832403085484167077452495773456450206111989921915400168429492102147233097456129487243332604216830648093653762088757646191587906758549728835765195413802332750482376212246942419489361185202293909505074723279250556204540585865946781196759470875995722968639394144412518292798123695805279244178809891912864473173825020475821234385364400879808682565566490708904665234039504454486969276529541730555356780460488706187164798952616034628873421376325413071904981294145222283379854167430348348453020350201765337860663743922545779441853214052292250297042542939113685023979541312772439306546830215592319118669998922593408519858388590280320240492586970209236380361712837906437263372534834736625243026155506210549434573535619567722940678461666297506848696678860349223037185382744214674454209027465797520145590880172937518522145603543914451574768550977817645223769357920836597254866521440978306422829115603787068992145955475973698369089665095170631080471987768137273762671299634248727803464178765905760415501518859680286278645237298089128023437013056161169565047078915609811072191285952660786402414357440133298049011574276345951867233585894337631034018795196031454533186607211130314510488531413753102692529331790313569016642822062830288534751552281591483338636076280534207316215750193464131868104237611732285712533940548915168105718965069120862447474347020894860899322844061343595926358849259825469348088437613944722678342987311603903112151878534503516571733398024495682398270341162931555911723584113604167043604703279371815857999778243383106465558751260216153357370490825303614178906144849833867133798015183666081151730591604697843515771509858988162970965396882488591493012136262507920025494560489375260671574237345273338814021184521640153932731923863090108691356609516271153145391457596486471137589493050915368650015333364489119109386994630176772607848108947106989622009824098154684531894038672220301694254369526268568939501254304357441303514478744386621716938121452192249075439669175358826177082784007299947416853018248761969770070639835396665168815545186444451896199528479016034081684553876811889433577996780431712302980885233087923904614853486238034778295060122177176707214671311263572633934123459539797612684767352537815258623928359124861302030548926205307398748446716528860100846143694963377540463036984610370558121188823982492205599064598009975325634627293704237797859896079134452812099573073925653210103949325829828078037246649041540106642889431318906558533334530886977043814639382052920526209536697026121748171961406063115094057291453907881309644976895164518567762084564135095294734196295454017570872022339704716582479002494685266139788660024861445485794431218165727601869658274175617720129597183318486321257181677950575398925456296114639375824928532481419708994941025873909334421242193224164897246651567905247524584227599128993572995245934127199749499857550551718098583118135069288238272455119238332465161940213097241294786145201274970441460995185394672347561336203830481530615627521831434566193654037684217068042171828009572265961833286775781964945138572901143762707103398385089434510807298539787336593568929166666576414723956285160545697534162509496524659511187722746468014525560029998664918578991148426756903478761406639005419157414762144255503484513753887840244995242822975487444582814606325164180735739993434046316069267380509325283119999257736641610682782866681155515102653453238502803821983124475324897923523949007250291675044042910294813782357049455688942777112979587525804928205463085888153971604116279599690217855488684669040015772239771693231166852771787842441334612474649194065014595386826896342099431497447551631244266642287482794185192849077909506771207972638569686152873396869758184992514180686416485045886493347514422784618708309907189188980389221254567625997440525634913697682393243169019852873659710699323695497313455697250327031521561746383314833898589947114834167966120907890407800482681715384835613653050257571234803391591069662937183406811346006193157297038727176430583260641348486439432779189925516084002848609421963616732377017744288686145108504002224518028648694130330039185724149790582614880053846869628691548508823158525400361184053992473013149463457421790298303040057857714609047599189846212439476605073676020163077200097685981561519747114724754505677495150820408914982302580700954704518313404352827676496511850146315517105080735523341951672455076896111507517976515425104498076965417532363208157609858053436689320332024335479628022127438950128301541624319867841127510826460429906878257862906837886302891197638137295978956107633962058775272306113549144956021841587246082955551009654568589326017096974314166144975823853192159996696496773967280110642855033165508958920970121409603888656867828798936106193794963399371303484960916638412510805232482937409517117754770907650616703833772388301556528293439326100405253427251973608389314549682002400940763045896191287100021185629053469114819611873693632922461184804216946347429197550423154444117823637782517750836022353025146546926615349968275134432150817159780679628581160291625618317382524639636303759496274326903597707342791926893972806583332543708191791124744608519384572993604547336133241402182694451592305093367404473183189742240540429343816147418615183899033324269467456622321891054887163882731980278918430308965071230328287416167502806972907331784140806181655368882267944030704164244157892838022346913336349458794840061590321473515744071228548966357408300251971307156495039228009038515765499558285455355237662725048805950206931016255474279374011576741158664020141764729923160194738260310798189310139438454161842150770620135072570659573302420941411329276428890447259192668692001664950286589801431519312607788582596323776554591819417603088165957027944546769354421379534345752096631321176611324384126951383700244410644082237929977574373940138745000039799562281824049354541918940195023624857035706984329476823247204798683092012090646567775353496597405140747309490435870887829148122582097374071788190739762228564783919133086518594909005086063088763162716580555698044647480195748059376805681876291708142932354336573921763162739990965198856689280684855555463508653979982363637725065661047138818275984392868771354308256891847537518737160770363399764146810421223993015080687225745284850277639371473476220999106521095020524703779664997069160276096791908880164566568654625304938387227338089892990281261550542192219036869028559331145299019568249686952440775212165700722312398474197968835409904526740462572503623870096216429851588442298793973718676558239129864990898849547663341018560481459520218192796517192332171901925563648816479900007163406942729867490677552436835172361167637062835462119975001520330503416269881902623204612633417417901593782778056423510100006332724456099770261187622795925614295863891749705670450762167995875446367292044631927467926997011622947639074771526580722586506532481733507177380099724025381801584735520303924014280598888961271333197049270492223483094617368602705640933432900447048393688328013542497817022592495524435034064183449053094270087626788396028551247004168313085001995686582127038257024233524571575734706720564401284200950723210955191134132910024987655923019346683920558508090049557402191214851575320071375102650265381446584715566754472748660659565066675404240055597763521765166060902224901196866396505933985862205703643786293062734703877301616457137493422390643855377170057787510322099752146880380864671533520358685886226012771308438124697230240707904525174681050233870736117261634634699543486060152123318706207143357553314162783421858220048897512708780603247499276239126535886608857401956726829445010761212902116365427977424844844233409916337639644748804753913965028519607134217894219671112652084275370776140009420045144302271491109390869297380385977887270775201093739898515920518632469872384096558758774724134061586271485652860626525968531148890783934093756584081977253106391307389329348644831911094206198153439201585898038706660184193955205506403630158254528822654812720078828811687268450493616617789242569282657824846764870302621128851875583756506805486431629140296141224157324328353299049647836773895559934922244352221044441939070941965283144308553721061062530619290077020144027883084800151110684088175748139282823894854646350606539747545327060029216760958147225204980258100224340714022338965470783625964539966650382860148603707715606786639198953028899075943346920742109263258705014458965177042662692596271666527104828992719795723798826661399669101309459053696366409538079395862933310102219769975678464469396534004380739206145693688213656130973998092578153987834894983299564853188794521377317544715329150176367791937835093058605411928628052179661198181831093382698592268481093108760538816143480650925695738051182055454110926547042318084326811422906871504471964313585608128110065659182148355707623485041664131677552791421680014744237625068646373272765563965307136680856648992819479910923874461123906414081192476904527722541734194173709626174928076181039150272528295400192294838579753033849484321692193041262577913739862401740225577136072637861781575922735815125868457659474704090499484456127451659526777201625230151222932048182432511509817819510629685985065013853677844262714003935129292101099752748816899234016303182094689352462112900868874954833449456687551259054483188064921021247667945603304711489770337125290459243852944616405748508803029508122815968861936306084455862452785007670904666210978313921243125365758053126302674477419132636546834280930275458183048958776787081286315722128637932197768574607623685691719736573034446287809755590757302451441462999051013469908655795919916314653593862302313920325413293839914150130442095874368939798669500986590318644798743012864708436694519614623093916022349682458962342372248771073444719654396047821068178991621579348011877862539653874841641927036039688895271654992246118405579001233199534340670875383308277841710546201883062820144797578692501627565889049034565588358365610122978138861911096539037141257725634174115437641396088715788146395146911787654220385632066847351401336640657508187032064924429602440567833706672577960527111855569973500175961553458878995285132559592004955602590825002930229591156387275863710932629565344328714133939177708588313594321918720231534809839307242088690149583018065045546141044951975132660134189197019002971388796202412829951503206640107376064787031055734955240357035498964460997594692919786486982375363900041074180969991301276661968212935480421230504421729623744768176925680832639530659457544492534022961522635376948677701247137809920986881618757868570241653716560551820646972297757526135810691512452698004704111621576927044485333547888629885597672412880940418133292608719599305300703614746004544928047485200096492328333207495060554708108639783561186275333190265138046006402646539797300190623080459018567551160092543032198042107636614693600149565217507333637725275108676752812991670369166708004245565894996021497858506739100763353797713610085006029774403340315525201364701910310796104143654703531752308752288646897918082874217483116584513663220533674208832214576925410481750415041635518286300363152374924403890252501532308573646733709935672076510705706338403162208530511364596014112630404783841046828025617099180502097763119827855175214976953503656509718942877214893033320882923961141180774746667299550784732271144483768682965594844855407221908994344308998973794888402556560245317629435326653070562313673423518786383916758113090050048405670302749126812309302396276450510591420746377291549790401264802054055924045850642087791424663416580057383493361839355619547346602143869924991024646784852029766788681547487273783697126830671773160716392517826358801317608186517504638718098636286315286313726316918399343336579434693118005807521016016065849271949687578329705932948233940715655062405696393923610494004165492007844746848256654134411255181809117522605989806227689150231448789305439644098385426875751635536028349281070380916249888661367047761964047951487061360640731537027574772823150167959840765268753462408617177955528239637978790596067419696865106888615954423682270660868939404447458572041890376458462875011713930730776612523717182261718606978884404284469907513685817712456144829658862490211938848645851975397068828955547124722012233814961439048997227272627305210114229398644470096463986693951928019963983023685289915938154662152129293058343630594547160537177999703363094039142321627090549472052101573235594126013915144995278667937169586706668239915727680616709800999783073984831252159361929691418604633648039111721222848615525079508842883637965858450615525041257496445371240813198774892733471923457334683138622956231197782086588740888074737202573920188779725023296972820599619597407813380684609437508493155305503743096668324532152394675288629679255221745843404177784960280607353135070566321598003123104045790258218386971119573261044131188124279799537062605239749258840611026385518283252458770993330460769237830545307309572135510251670505104511933377860716482545435610350829406776325394045443569404503979440001948143820296099927680990576042569621002375994314692495270600740249548867292453584838816951755580698466494253313370482717992426551750655018788746043095612774673530699763251348128602713314369137922410217128700062705971121714928288991112248918528121329013774470712868140264094305675117814387513168283307325597847631635049501319447982440748482613453094467050434012882365199932511378570416989685898199155689467608194510717521674264320185166021566502298319172649023760761485269156722647168850718773868368694146278498715874487849283761575855940798051313819198839522160014412692047831856213134395187080429814631002458058138965207693879473073713271162066944642723739977504704709955884700208883740402470678762402525947440171646728227677710670777827180931010723511830682308708592804486211679239827723086604205989202601224285173976159193212671655747835124947722010667077089373898233619326312670119152600356874555168152502434244108198101707095808170077668353372697498988415132881738687340871447482983106029418698889706772257358277426950664768904520519494098973448751071178039914893351187839841021436541638895495258063138380074074197516618775418243621843916132247763175576390548167193095872121193436120730062590307271831859142006474879963916530962595479842104808476023551498331394898656658558510419688896985914221493160970319092112721900354927495136697605496218348477628841218941694385000111810739869673348735635678654706759765453794176902950479179009101908235197010249465746487437205268451250272651445568933479501027033776882429633838823689620277253519430584809173017965888965313243204631660286854827460721292565318394853547396320019017699508470893584624617414792691592543373683996276715716786685328449619762101628198025744602596006626542887973964948125732115287966907278859869922131787087609027274544725199487853305896573934921793570000452999374373243848945272858620573251425587452978164488754502615603142433423242289250834785069469229010442855121618605180559578242648712976933154832041133168372659518169600834030596743965949860428259778334118595061702066534574239707701175483523272487593954755936639761761373079030700028558947387321062006541819045934278182876416193022220671880028699088739285997493261658235105317957419626661195211013363472275731015381633003874893565621340378852556333203548948483785722569003356956786785432819202372277671969764207305539947461420746718734416561194591699929698080191509140940451072690405164442922373629795438659825866318659106612187621142509237848844958226807383370526965762775829828028472799169414512176783554657875443886975498931713756304530298900477985892250357596620852011064490725237812982514464952757173064000523161155264470006712042128233964033127958082075660349854613831030259253785458812501881551470204625697288198495876071592455676364611890326023455615934168010916767568469394727672617402032800177743445871048084773597801327223222509255130728010990658017023697969944602239722236183527122092971282326977457571613496675531112572376542641888079910742560906447335547923482872504160592665511483122564364642518638824668104171847626019405157647833052432464017610936845666587582126181189955939678241015077642980508123486719630990741301602626766265896389369055998349919955329384995488292176832267841811318731080179045863998858072674620163343629841073462190635447049639029523614962798060535802081563465280257110361954477738778865557984025591485605968206252900819415638654816911483188366731491339956666571856653072515482125953067843214244428244707983978308942555222945799324362779762626813823720364493841295622357132847373772270324201874664459236008435148170570436718606997603207790551417630362262714398899436505299425436810789207696529504971708985156828601731768759661006303471500925326366027258892283162155825612436348388576074668536375793529203208513983164002034262946031675189599496536435264982696581971151032728275009391197928056384306092557527626296211780705220509338911885758656645495920615776143722728716525900367664430727703549800128458399772115159665260529430623365429896722600700258480828233071442270192650855513652351781373735857782076833919804246060504659180480269568597766078800703701698708501984328553893296932793296343938708914078487115408489558641299577492505885800146007169078103400136358798459005889980803601658897737878472630774155195903721248161473781521184251181714748992310742527341246497680201960220127895944230051452241534391585341439790510633439532484574236259998698755733897438170589910440073726023734761501038978056225924132424258062722499468713948571204876147493409090889220027140396236028599995214008802845510179226815610199034037358402893961262861169012437737808738216548734977368955073829697660428845092678807370835124598190605108150343348562417433216042521590918729406411585597589428009198469046006407808381415349649007506834718304203593089208514869814739571275073080240955168436410491001485801287578742717955303954754247580957547685012953716851739810311874056938341304460184950727201604341766510271924040659619339110788810382165036515226590380881397386890483939292260600057835959531705613348178076943357167279543773173941171037750191878955642575080721595044312649680320176031799527340495964742964142603656630043009615065927238409379831963623951228863218911950128930090977250075227893907776162349599491082503019434340303032837256086722901221208066587735226719834869039470482989445673508132120702407747877589640380408066333764884899437771760141242680364822980327331970343285282823210588114978751321336279728909548112760189440169114781672814583277531945413211787051694621066376286841082570251985704930264519142022108808051818608780008848168190064760328996624266841087823276640244186938830628149936246079809250706172722819333639333550391743746745930529265576439415170799560839247621590337374403592924026518437965815606575614095818762011971913142354591502700873363431884593275013324074709371770814391152334841707874909121164524424582508996901931288810037822571855198943787430583352008669682130603372162751511038958359137004051982219150723377385476828124980251160194558390024536042677694486700732246144492206587630206789588956923468388802245415443870723366098273171999444364936312586673330490655150996742175866781158588538772370121440747781224304830863087863436274934091946905960456641958434727499254809330615836222635232469468616255991184497430543226110479229765596784657117611545641439833302612531512674022996681943063075559194547282701015786610252151286293691698308188018908362161730895144328643008940868243284301272210942673103173658502964727535860511903721497297607899834277720081270831429737130617523648727005983706450484792605370214050344773753355682137492867556402200372122278201652182648867533503086559087284357392891152605025460331851362525943026925778235727089525676475767742863002469772392202780422075895385293783414949445070369227585107282135602325649644784798693904189007450704221500893756553462230298228547487926898512813807733095850742046368421903545352599352110463182476473453897256375817708412489704995502387323577184078155526089435136094475459926398716413143616728224955923970413180537837188033094730870105078072742503702055880345061555478182573613357363561107886683861153426939817563024104946202858463057722423771003446899002474557722827259391054519493292398031915707570015617213277188967989970222145259981474097301781597483697148977034471065663645812445538444508751781723166189178009934426985484371564784949437206258776544141330536908168264213440121659438235032170815046217002612192771440386208155054705020241847516507299430735041252799257245956325003129521469436308507516513634484852043977712621049913369931762255042463104678817779989062773560496719183100995277721905308930703346772332319792492403786724828819495537025191567838846929675245934163260402015826718466427888626625276704028181543650097390697531912301218783294118265672530427677377523593099728918788236757428777131310687086308198220803343823485736217889951261200993990548138060192730821468774887743437899798208123062566372519465011957541969701495515369596152288557430726795992279384454162227741659578444844883479035775883977109113065633256309592506255875373726247739157243688977778794347450478433405003461922985918920500777312058944369816329825099571274753126949456652834182201214927573659115726771603399796146718098395598381685750143867824465646168853360669307416740626794885464681542592639652403449974577845725128187668032069072319806774576111617869885025335446394484206103252523469554243978841841879040064158184561557941254296920598607430307624017422253248419857542738288109203653121969644826182167357713971505659161616372260739117270962706828936076426766229808039837510743694499618197698455796889924849326086865481441775896671437868233352085044882665871606677172865709333514053876360188569168224754449043661538529820622468539021080751819901310276831204526760401595209199809934307396228049206310021843710089382790372541422747499819984979873408011755686918743775669955098096630537306293741704649980743559056165735270267136531690242816032639149938610130844470544250670758400783022325449940747400623170597780062345683977790975017157756572249164654882580031221094982818502832957871206734618262880676297887629078871203648498421690147242536209064393759046951516446477289522073862527217965784484575296352938919616922304384508295224423585009857889557448473183296157480725881684155651169670265363048588479555182176979171213446176163191342846340339223628414455567709711190516277114556849381355344545891513681718217876801414264401757719538546023531979256728511531930952111268133220347316378281019953884235967735845957750435109562058726249017900884621347022913266977269309081865107968689490833705653101879231478892861529529867582865184130498764544560712968307438506353781290219763941100249284847451628928264091963787318881745897024937745818712706211400060676832680482775872869361650477966165795529574824296976797640406034092409307808572384579270429859762034783199464879946640420665598443251586972735128821462262812895601987830240776770099726158799220001154378688251631700681388419680011081057842734984055938736817447022121911112303396379157716814315559170802332293351291759468568491745375799901700959262092214788954603797955948923162254709305021510498321576962927369472749514785354935508185141228876028358942190777817873357619178213245043873034754043532731778658721156434891234265956220054705501192546247361810444177347527599332427529872964489783066351753110295766046782156987292645216789585697496537628842256812752461858546923723915895393066656855943508918158778080020484425012541311852914393161128630384792453554210474239487400553778236224796953806966361710738628945444580278254843141941280204170335769459619115695280898772845303738862982300015882778654156332528869193785072044952826546732486714263946737447787381338956882586608207341682725755053482477318282784830210271785753284086238930008589815966037593165659619723010392123564499490772844171943347618646077850908482670071360721243557771237834088546466829877259672809974847011695490798021970449185806946664724730538014899616808782443934129526455076228343367170342609270136205303672330559446584514991816521130555979846009063750140883112531566053123840572508802888095003031390378843108529809829376361991897750150573897698527144395273842827896225029284867510793689117057834585595596249314548126937785123681473807571555351907736034216822059070002014495053981461409774225150903084371774753045438344677128381879644818390308252931482126284844813835413223782706730759015397813321018689067806303045774223950044515646717721719651228425260507244619263481806469006934636469898489207362571908597993880634994269005861479798996108890583092496418159029686144196449836417302697236055388628849687280758730488394994312212624371688126156596135480981295143678018942723154929289636705758332154178448656292232291536276387284670606071856845521041487828602131915190484828234569971344647318865085281906097108568374704549722997640574460056453358205966070071996993842079977088220338076160730137001443518913775264749169748259595368548250741522491075283113743504986815430171436070713757230474172991299113608908409603978006491487224003276915352091402727481041227164553578389343554333497625326009180356825949726718320029750926355786782121423917170756907604159591947324635307117802895540312379369056192028797726267078357390279666143436105570943732806687428923075568491311061616688497532485111311377959775948701144801138439232126476856588486368386544010456312033782866094898935883239244386576382295372046282774900653339788079351665327374619749411039935654694591957032769038075928125882721248345173325824181363326707311979782863683088949514487220413151251095044974214509794614360942755216003114202256434823080209013049190474619366656590366963128154727640765457235895203987555468351656279098640435845080114790525790141933980623542753774392713442620142825502993890252606631630426066464852527147230170610546908575323204514345618493004044988563484711392597872030832595553082177843952581046664299716700430836940472183888623814477547537345726946261057919963290275514801963964441987691495078252481422724002040107882978836325413325037554767805939250719565135644165678400515530863571147965453129278749130932486254851465827437977032294523807832868531183568816208217623429391259833437685869689072790173317608417953050269879968352799955414105998137823587357208194683208337415312879714688689073401633322390450224291330754167125374869329116327534741163519867985115836556402894397870540367949659473475061265772482793073895919486630843196682709993779247288248904855867160138337205708613634584206345657352832177912601808708038615385158064593311609419029735719092034425026191168257645554890728385814998941734043940271467743867607097907805584234948474996278362786172026915873404963575029024770395747357193843926125633190712083775184175035472758067886843089724013935188325992485618200761989792731595957104974321076720067646822842135676994420986031084925006704426741539092101398544925789440044715578860443762048070169637419961955714278918190733301413767613478190066940949704749103380900877681622403824641713978105338445856790308445804697071679686316186750191765503366635516854096234271552895032223763319298739989139627160777008654258238486726132355143340511189907879195187620785012104125513907811572233953562379110568858506999561132645926364728163926449188344073897241079304834022946896338056895795078872579981459483595370910999726765997061458513943107821465761941114720565975268802003237037119139243152382293618180108545644489129436250832103644324802418829766041911469867093175748787579173332890696828338285834211721916211355561597619283704867893819207316025519217068839861403637432066574684084036790019788408597436325615640134693527040429681774510345013773884188183285556046059109941204387519780305709384256063186939834519238648028141712676894960303043694311679670448886894455254047325104773813242258032749193607310192581349927816217186700301891784063663328753405228701348659961068727116719043685891081054382375201407945585114325568368324312318188011555288008513343065881136918702269112792996059800110700867093834103781736803032538223192020725821323032237170723053723674507804091808514547504519717802894219314834771640400834239906456469649182033485158174364923914103046205455053224349938576762715816480329400097852414806957871969421974791256842607212719906386682424893229913405315977264856895977373750218090180048425558167570000577657640973814158601926385873014547992416094407473512754635827953226604921756713707676984169625529691405287067047795760431145779573422001683590850793082928535221472287348610092460583199933295262786337887984639200431752367584047005400261779078038438706900541349909267672562918220426304637831382446824413366214213535823512032279649601195099480250737320733445203032468362042180787882066868863326386327227460967653482577307350031237599968248970579822872389890426785228121276492433602771092472271310085293004147979979064654667187410681915769375148898578946943683519234446007112587548253117578152164136575368673467198720007516733789123274482903002489513376429025772081165003734198590502885526975529040799656278267891554184199697040805395352861225526913595758636832675326853489752443429415121985221095940765875575186390674203836238215482844029164306568673090896979474027798578047239934858971263222571858554514237165502077689823580624975408240430519361259637666300054724608442165231555905454021136937294906266738907146153961531766240411427948389021647137516476210246512699620052925839485481678490709400464334681699119726713624904256007426792835062246519624434808921383015422033362519547721005846559068549911609303670272401948798619953209978891328175983461105523104610869347615848742494749440211799360078175384712203620888629785577207451962299438932224392747763885674635468406438351114917280954279148977657673959373769031645470899103514578208943132029403869518825804779654290911754661605818211415948110847701475653470027764542824714671707828365509939340292189945901745921144719538286085488582327051774637726941330364822555081043410561322481130701848974761808738484649268314856489515745938038911729451368327233198268465685153435805460251224494057220820703219533587344120489439522385861045253966393972184930200515771263798524045605084089270628271909062193279248461962706710141207172637552965523918899351406761058456307301359216332359817389348756138073944580853084043916223164330898164844440307169227378395981185205027500466516752849409503031539843594775430241047057811528496903231126168265187665175093752006897905209723909046406162688567500702156062785839057018756123522335181608080657196772518539066299642515008696678644277619505837820906741575754732777225138333348482321111455862817823533773396693120079774927252589246858434003726469277928492686319652378636579490721255716735328763091909077869541207201806075881928571396812725788561874475423451533446953156181146808444098291110209313584925673058800671755214956856672910484655356380123540418888802030386120766292554743827673846291111958338773702957130841283735850069938789717154962997597203882974647324660443494122633767068990838729233605761869494207767182944779380783072762732671948425935152219644405925080175679487868408474896986443830632044189157581104110354778188909315770675574758530187919108872017054142364504170238178624761920862293728774428103105735043604183379255978963384977097775523554052920501729834950380608839297307019749102093969617951555002158271667447049472063950369716004117869467135874577555541401542771420744685724998544635703828700326863538585546259195579330580132308508614344136266032212098863073140579700021238365659835096680446784732851399860944702296707206480360498135614888620273567488641164500699773203415713803678204938607130621533033769748615443274747316435856858380172764063875046592077730086715819517531013731685093548590338845802507586504351169937126395457521178706519727253207426259739239441045727415304489582805354218342296823899450562081887801506494636225624142341134261442505085699185932104537072897899292866480121378611401248211074302120446032586395288299238712221312563068530024839974043231550998127335115677369451025322778726512141738251730965387808945126156343598958134971934316367700240904411742601244724045506565162164272395885750595935035306397045852988427691254785750954078731829961485824050357872253977096768597642156686028285631670929264545431100522278567404502648927802194531121482536995441184999873972936422040624250050179067921153431535467829593694198063400434074962031992728511068912389061310793702127883366428586247131113155329684655502108238263878775941588150888228494194704478585230155245786826707734890683416496510632611102356590487561624083329411054539398709787262705787998373950950777005948864858551444246308272948058352766588046715729957171471918413285309100669168702084861669337285872962766437470704151030431274476534736475576080022502645164622271827030203295137280231745874363956060774490219765764885066241414365906979543120081832150555959703821043998379849859762222772040801653782012920542144957110254101145490903758276643905887773334880252359668074681625703682660221799901617669827842021161193170180482881961582067773065020454272291539079681035735302517172729315825887491150534820753557127626497324476565058738875354587512693831029725317421757739229791319546937226220063019829501375779083289966624668808692792212032435408944829349293295973456768778318531614978029007639767849000758117134623740323442421870348065352037865538292686762207142496673110737769192808613591157704644882734374901439820664467283260025840295496327310224028557772693637953135293839854808550232038845560294724341521929373635781472842363033027273183090263105385869352307486785524993902908098358773894545507525426709936556157830938337972598168846847953069133142030954601934351197726287634059857752851598557769680904052768625086062573133847221002944747847797124488572061773032117547199619589499123929461202614069017419372681818506695931813637234926827004177487854758498554826491695370695427773142732639774694975159197482480904572088681415729769677527353102313769553141476168948291753882835746061919793367740068177306857311622723458027213849966452339056451468666474300556993455333347537452714541048306974603246265513258399524909987020316962456994383389359537846662846474549327969767140488728720905137531121210982539660913853408492771929156005497952243586723957261137822932185302926739299800204086485922051965668973578229727066444194406254650091768127791986758386342293405639762074047881456826596390558848879026080268670748364280437299256504856928450821333899386082930273411995258783843008897283872693381359961060919492424645453455050072099692632912600122551035409641672906067501910695177401245488440432973922218929205211206943565663630435626986777782340859747635902116439261488733209092022776669957140816446350498410921424117082087346782696426070630334558876717631382289575457059051050772484808437028306510625979673952464855037223701581199665866040634073733638057113064379749662270071108554371240947993295478931447712138754899460682645917096078514237727137430567271066373579442146210484931659726510946375917619990251272572207578843117909086259745443490612148242026373127570161872236556508196159219429556967039648186412248059225957715611937223995315173117345677233773649022635800613412197696849028070668854814449013588617772951085624801132027557802035641927325659060076113823892831094696863281586418522396482353851558571035448949482929650421384725931990893805576576840837837211619251364453853700032303787596295028851565231622376759441574004818705725002170760350945632410528763175075897803496179074728717538655880968170212638786044639663974834175183590999429029297651842912484259745443692571677129613362851563316495677887131826925096653288288175534082496413815753319920795686379597955844977984795844489757070587688432424979280668045688434139471438715234428921827131889484834765351523583219849880076290423194696164038956477134214500835641316230247359076473905902086762081108838579793334494074256746154737431370439622038095866259985852147018516503023791517858734456173941564413258268459491508752403973329682751222174911465901698964865552876911704502636599694823722113106768517845732941904470512292865887474273599503592288729303654906920742510889438671121526714321955465474147078267361250877293228266854363375013319855730578277855724976676220306277624801539317186187007720614398266629571704412173357684175018738703347982830391191964035706306165869868066632013139703490459390241338225519193068814538876030566672936738224519148790907763358798058558535496752805027319719145937410240856214745408716023730851419516457355957127039473237054280453275821208886108005318923313421539715771847400301973433007583990296900043359517500489218430611359016633418483276542520720696250291818333868530511019744131485908053741207062933638220158096366074083430461423539640786403587660434967291355720368610180753588882517204580088730035129647080990309125437032247601960967256880567787013789329199112875747522238663855895419413104806915847234374454965293588069195217180004898983623595973431933604990306237456085193765611335635793044971860748011985492854180643579086711468493019701438365489072280109415152837291577999899666534275293847420556479914874609647330820172524706377892383317626658194368961181082039945688049692728564631304565966347975096723849098775577969688414554359741221443470815533061113455914892256259918212890625
In [20]:
"""Confirmation of same values returned by both functions for the range of 1 to 5"""
problem = False
for i in range(1,6):
    if towerfact(i) != towerfact_iterative(i):
        print("The functions do not agree for n={}".format(i))
        problem = True
        break

if not problem:
    print("The functions agree over the specified range of 1 to 5 inclusive")
The functions agree over the specified range of 1 to 5 inclusive

Problem 4: More complicated 2-step recurrence

Define an integer sequence $a_n$ as follows:

  • $a_0 = 1$
  • $a_1 = 3$
  • If $n>1$ and is even, then $a_n$ is equal to $n\, a_{n-1} - a_{n-2}$.
  • If $n>1$ and is odd, then $a_n$ is $1 + (a_{n-2})^2$

Thus it is similar in spirit to the Fibonacci sequence, but the rule is slightly different and depends on the parity (odd/even) of $n$.

To illustrate the definition, this sequence begins: $$ \begin{split} a_0 &= 1\\ a_1 &= 3\\ a_2 &= 5 = 2 a_1 - a_0\\ a_3 &= 10 = 1 + (a_1)^2\\ a_4 &= 35 = 4 a_3 - a_2\\ a_5 &= 101 = 1 + (a_3)^2\\ a_6 &= 571 = 6 a_5 - a_4 \end{split} $$

Write a recursive function aseq(n) that computes and returns $a_n$. (If given a negative value of n, the function should raise ValueError.)

Include cells showing that you tested your function's return value for all $n$ from $0$ to $15$.

Solution

In [9]:
def aseq(n):
    """Computes the terms of the complicated 2-step sequence recursively"""
    if n < 0:
        raise ValueError("Negative input not allowed")
    elif n == 0:
        return 1
    elif n == 1:
        return 3
    elif n % 2 == 1:
        return 1 + aseq(n-2)**2
    else:
        return n*aseq(n-1) - aseq(n-2)
    
        
In [14]:
# Compute for n=1 to 15 and check agreement with the problem statement
expected_values = {
    0:1,
    1:3,
    2:5,
    3:10,
    4:35,
    5:101,
    6:571,
}
for i in range(16):
    a = aseq(i)
    explanation = ""
    if i in expected_values:
        if a == expected_values[i]:
            explanation="(agrees with problem statement)"
        else:
            explanation="CONFLICT WITH PROBLEM STATEMENT!!!!"
    print("n={} a_n={} {}".format(
        i,
        a,
        explanation,
    ))
n=0 a_n=1 (agrees with problem statement)
n=1 a_n=3 (agrees with problem statement)
n=2 a_n=5 (agrees with problem statement)
n=3 a_n=10 (agrees with problem statement)
n=4 a_n=35 (agrees with problem statement)
n=5 a_n=101 (agrees with problem statement)
n=6 a_n=571 (agrees with problem statement)
n=7 a_n=10202 
n=8 a_n=81045 
n=9 a_n=104080805 
n=10 a_n=1040727005 
n=11 a_n=10832813969448026 
n=12 a_n=129993766592649307 
n=13 a_n=117349858496668297583751115296677 
n=14 a_n=1642898018953356036178749021504171 
n=15 a_n=13770989289188072635789270799554901596999795308252284177727242330 

Revision history

  • 2023-02-15 Initial publication of solutions