Extreme Digit-Hunting: Going For 10000 Digits

This file contains Mathematica code to solve all the problems to 10000 digits except Problem 3. Full details of the algorithms are given in the book. In most of the cases one could get many more digits easily. But for Problems 1 and 7, 10000 is a reasonable limit, as it takes a day or more to do that. In each case there is a function, SIAM[i], defined so that SIAM[i][d] will return d digits for Problem i. There will generally be shorter ways to do this (shorter code and less time) if one wants only 10 digits but, not surprisingly, the algorithms that solve the problem for 10000 digits do the job if only 10 digits are wanted.

The first code group includes code for the secant method, because we found that to be a little faster than FindRoot.

Problem 7 is an interesting case since once one has the rational solution in hand (as found by Dumas et al) it is very easy to get 10000 or 100000 digits. But a purely numerical approach is valuable, requiring much less effort than was needed by the rationalists, so we have included that for Problem 7.

Here is a table of the times needed to solve these problems using Mathematica v. 5 on a 1 GHz Macintosh running OS X. Of course, times might well be faster in a lower-level language such as C. The times in this file are generated on a different machine, so do not agree with the table.

({{\(Problem

                  Number\), "Time for\n10000 Digits"}, {7, "129 hours"}, {1, "22.6 hours"}, {5, "7 hours"}, {9, "72 minutes"}, {4, "9 seconds"}, {8, "8 seconds"}, {2, "2 seconds"}, {6, "0.5 second"}, {10, "0.4 second"}})

Auxiliary Code and Digit Data

The Digits

Off[General::"spell1"];

    
SIAMAnswer[1] = 
        0.3233674316777787613993700879521704466510466257254696616810364434317903372106728944319303704641024513802805273312171512843329551003343518853814345933849959100496203187230243755305850326867826084814143621008284544722325433197423289562208383036051806138170228875927796223889414194808897786277656720091636325480930062612368830709515617259626227109122796181848626492520354425805878303512878922713506176972504363427324278062698195459935937934948703377003993887895844494193853252470105126349141166869280842967050545084228387406907420047518022017247554109230583360447095045817596946489788630167768426091736144508596750494011596931816971587028572107158052888912310396674019547711228705979109046809875599383142853899314897723348536769454368361557868526285246345537463616787033605541989910530337300290559520490910138131952127532519967705188100783651118877283568747500960917691186552933459664209305926699509607663216838251160999002569152976749531082493203607852959693352367456372093026716239528268235600132382543392517175243033628207090020663208386221017086074618844422542940269063720600142473465392422373540996557936053703204816654826851632409400237764054524939112312211532967241961400446733955161381660989050007862821876311318211942530645727596175471296029883971046067816036632360815440790017195969729830593783549197633852783311222104880117569307839989168003909313155386494964793024805191906334974617859251613226153802772402439723860020250179468046811370533307672083773701140683223716655837765839787814941108734777566088946895812434587606346336889988114166145654187452293313709518073522080662713034536258837892358991852190472801740736625931386968837373178961984920057347189671168651396364257237343562548155052115695298702512436745275498316511555300207733939714954451335673555708987344531999674894765062212811320094542666110985012229393847186275321237084141028837234799964570421275199816602281005095794647044709564390242812860131429702409071856164200293918931720916884726080128517761923287087096060098217622157826425906692707084431421307976225711047741218052068861460440465201969413131050060299094018875873765455814142468327001759280594376369287504756067067172431540990557019758208901715949468525851221960441945164996372706803777467050081831786067414116607772389651547921956427529970327968385167224629566960595755307797779937184017266201749895343678971664577617250310098613879942882995622379581951212259885056236673071572825233327641917681293628266521367067748165129789298866830240362399886405036369764051024947244817431340973960803571052214933075291076203019860710772927788038050649314598216294227391400579631996362420287782920403294743696680275937021685269333106039269498297516147461271887818097220121950189619526482917138598182427391177685003886253994958338650840658167521243826193219676392117170450407790757652910997320550155735975016039441792725597836171771355079131086241520377121221276602637366697030007160906515854732570214939788342898298446417628583980668382266285839236554357071532076411560254061548290139703002684934097607303994659619383653841129619590010284751926866953276597183196480139880804883307823875493040286198901036815356159825931200476887578233512192852928709728425252734381355129253789015314070678140574817254554980619044062345818069314537745764489574722510352838042808465761064318496516513983521756735040557897923337991712459759718135061160771025545688927228059316786033456697401388379328764862439313917740130164698613169971116645935768075735276992703606768748402745967906568037318391424397016691468451507383374608073387259753433662233437864864033364701561952872805025896871257997803520394035292763773702657350393094131792229555810932765938642449279060378223411549907952224258983522795432540777161439269773527233746242840659055219726873754794399237429379498522030722286251496529333605316783184268972892232256681401268826844058852626409551498440734968545776233072951921994505216908082088079626518397758740594886845410128819695038566794015416390340571242930317216393016003136103999594921276782934686595730562109924590656464190028919837296261079706120996738254243794526377086037524991682283839210365497321963001353095106013658137480326065847333519983895792244550542845631676195485805713180772798477400563846501126145445410196055692426790470512051121031168201548545150348816434158773912503761478436698375606554570907298299340293844540484001777602462071996632105003063547096102438633058862642505593929757726502006350179413576447908198968773539387433079432113499677692614158932801630929806060124131003288247113783142564355963244074414255306221346893192330251183296245458791794248462872114853032123377756241620094755596472362977736708288128621160566689483197137390996371806626595374903662601463331352976649989224780546870686259177102109557597449184969386873145279179599195212729887969726915608421980614718993067584522683995713678299788905196885861827155228492973173400037455723393140716549294803549528595583011019735592171091024604327051932971229949852773157334891633909505110838305220291047054838197902926223274102345251892970646031803222127687025426155446143907093061965803139324825156032006169225771030768187772062785622523430920621513158353377008260539605904931511604233361595457343954009221099803684773533716834093241849330693449320604958900497257595330953553432617850439686360658010782407206384331468215893990138063611570372059687780431644832947042525200654959879934676048831728084456472276853101093373019498961390756816188744667586727140867055649469842898693149482550214096942883390169050916005789546670323145633310102632507773387539834322806595746134502901529559461931710787837406158774922032426845042271843457229631983774290390491220871469792357015063094124280725523260360405221593259956457281649314665047165780997216743350779124571576680021363369573769393480157281562620296886549697446026028677395597684251737705059518213031660477611155724686253450018946798312456712116924179861693729614356939688041295017988377501265650982072554661970658062396590004231916703508974353096306830153621529975989403386367375067525402998300333873349123024860382230880166115960322315291985955125449612539810120628778019038174188369342358315209167787194320912327705913593591677594079034819584138107767815090530136981542078816527440214825176211214990417759358328506998044464892789929822701256317522753942733351797873612203891232282509245566733681976429862969075870472140433490516056436866908013424229129368137146908177801675951428097311419892479182712209024304740365233992057316280167657768858751862848763872629328127289164551773276262295571661258584323440478581957579590197589357810758046574445642346982040568783734326807555686770283851007410923055813316798791303960833617683620931602650240862991633230865672323589310371515958323875525121865043926200319298388343703533066571840087581165427037769613936835823826869702406170937466709400445071498731726201384265291902096257109930110965204756339402894181117975127047978324998355446860552879919039121043375283919284698345345710978660645158074950388922162642398963650341627465720512439240739945106965947486143231555568590709018502340522325110881254276152882376362017585052799672198741951014530007697570677596553365555867771517772154091111071298285716846999108934070290061316547097072375026900827846711100757909506527278724360242584665337359357075798938122292424629634577188166254210118499002652203663685143551809287230879363900319175866094417987909719833784105569430749811865787848365463149299911471296925419674051132422158805698438264140694664000405522153060297791866521711228625335785065754611872763056499419468085097785786163290646042202235195763695186553499542263887104159796093688340383240920198108616378390899452625350253568421405061951687014998019382268253954416912534327676322027252459609269249602272470061735728659139818974580749596452819289997427341408610703282628288201841348087164714547009912416988372574625750547472955127199757959770321649423028566440677166185565376901095628334966164666427302839853445642871173443598809269695514009015743795730764798272952530645050823947595386321728284848432119670650370288936590950744353074086135916748370440614394598918090117101989495127371255510826360359927868626426635924010347616309454934954437028187598785341653869552394088932189076788671630764687793946538112656895946167496338433950345870752916397735106055202094051093940094196273366325082577589546960769402540441078948825766920206526297841025586267926300271855990025101318897768219127254369494957494769878567009898178978856404875346851680066897396270069597260513368154120102717233553987601294252131775530304598583195669944297327639607393915962763700587079080434497838730600960403813065496588423156739957411493356522726919985319242264486224843425634025133393588204817965259685470163495824692564909484781454034872722202373420628639006341046341840426769923534634953300293932387836322797759259424499235790643965489223921393978623239095077250196494767729904140911865223957989623444892570861327922568752922825448361692325308140318667738775564122544125889646958395842186822232631792773064835394697072314331298894926452731142631805305554092230426530020748382033105465714355074245038863882780428033304512041582761234917060572424117297860227471716439452789192703712698874086934861912289686701278834723132958253321348787832541257983280169109157470528394807927268119376550748459506327121219360861241532004026852043058966919877039137303687869547724615029814166626511840456198806462863835204749074651210539558019816719322457339041726253525892375278645853528939145373747998671375721278995919574655842031155091482697831177457285131754733196847371280122156975400277750677155649426183284318919885127451360578153355461008612720441589905641757544299013091509509884652495516765284031856738180704980374066558399915297755392650201215568079480630689787651710303758167932648807828719355671628812329025869557658625636822393976893711720584436749472972819951203729888914409745810942369912550377840550659274996701585700572022457007385882138074602070132869179302864238281998708482651396587275172185704013203`10005;

    
SIAMAnswer[2] = 
        0.9952629194433541608903118094267216210294669227341543498032088580729861796228306320991749818976188760306062973261905117220872365706973813827798622298601793010235848291712247521533893738542120285431498229185335785684074227094865917751175360454494126248540059377207153187435412618678932939065370898277321521957086460107640755534864936416847633880354053549030877049537666182655597845372132301107696172983755745990266890086631950960381276277304901538070152321287830247368879683759960540076469555647714594366427675841508779345618674365004564353564320841981837640307860213146250479715434914381145814139822346049514807863117802451128392368397761067470409823074045291628048357668206308542199842898509075596185774561194921097685645328452690998143784016325138984648631178397050199174167412232148536149610546541717872191638045310684055023361715176824988554011350882752638725114968174021384003628087877161697609551213966061439694662867244603714105798856782103472372787520292119130561712103294534414640292930589953264512710841527860684438574138908526536088004172748520201196305413372141142558414486352865559761417228275291024791402437474296127297084298117625569487836509521513689379543166434889402033014513161596561769184707722617975315670869242924231871593984105013987449845922686253939358602526841046725879586176281796970642254630685610450012309030204428813412269301958608329437686052048619372347629219534066089476970941470170176785934999403840925987533298875474953604915307595028497313152982878066864724326390395902853786630396589423895510707128320545565941264867662297007148085176683766032373048494132750268770401186763764961026090391800539840611065658393205461297915212401515769529381610453137476794673134921108636681434173489481075467499815895390504146640819776796672684219697984776962064690672527622456191561291341386099667417578522083481195163141126856706727847454471543986599348245860790709127151579827663797590379367499015502028798742578631317818823167221038294807405172050895977512560208951487820601395798609770824176521565153011837390397652862683897900382787299163667803275870827938968108628495326819072492178912640059424676973733713092892580867596780166846718886229634519257435905969586651406584634331237422799312780717755821065837940401929230647158943781643160948516024837784745679792133526657059505538815279355925541301783550703887429780114699259557944009622587102014873523658998862955748702905878597060726845981295404926978884323812941078739218153590832888930314380198562687809371449591608242752093595474276215427363937600199122932815818217126547278140136329122583107597004728037791767498951438378355205078000458630681385189449455304958573761492983499285669365132281546229436518440512559359897398031070337100093266722211953566110894614942630832478271066417257534370322524457062970836170099663996868673557856885862044648194137181792361109849112667097848051156020360537217921014387462735270609573937450365700421009584362510759750911724739483466987731115561193143027282617113704807363366684845803510889245744250318313906395051597233218909641853760436039415935447158019994351961337725528189370650236424802005020275114580950190334512374039376600210964805336314161180365060956767150897815132802594062290329159405009477993919126619549659263141580131589199595757409929624012984368295661335500403026549019032253274150218707017234245507940881875200103734984187399086983115135285892689707213151113178461324307420644813326342232997524993243828222633258793435488746918197965044577862835233285984323134817748553793773312946586780975995629531486617762678008128121076422950469898536818205604802830713180151281277149872773534841593249969720521096116248665580629413629415021984362888736452636550646495137064943396884188534434290697390995689089334756393708916202283949296240967424360356619019897699623264253681346228003431262671579219265055128131312637620592698901036197051857329248445935403921174514760828037365332277324173437710066997190096496412677720602511683880051567284665633539967959369700434661263343066006435912928813696726390413661304294663241302715540079687374750762681305498859731702661630861461937301719152960977724019590360297631090983193957200692452251859463991750379518732796682841210686112770173427812000618010295723421720482509600220959092231483796921690513066035719839643934783232115786554059470041758553503376659869175264649403949466371352666424838038660755648118825793642560201574669881289288436000624229484971732380831119703769028298546158113750852376167993238266242418884314243133751123353528923550126772303715696040514407315909223015836697623456578910285327781674818349182697558695511639509658453749880018968124894375300488601486671248675352579332793034876101327975432092406849514617962588639866667946129933425285988684415199184375852992148627414228520133779807359016618680884636384159868294858735166783505377091142961581334886949469643863375172501000768269612900830473416477395175658643479912327535774838792205484907756295108012645369386815862747018726462015421746466177459801929557907957182483570732422405611647879317977467882121028317248412667693262648778008406547456279428705821543203433968530244745857741816515547431638791162176635034139159501424671051604116572932930381034721864688749502744158347211440107342042554287336693069948531047872720216168337086988663846369366237347335080834740291235644851648390803830218538542514090748242303183846581599774907885007958012225768091904238434702397162403039214595955588347579981603309283211590920389058614153987827617423869728880280680441031833673641438951062018783442030889392118340818194643312479019468541029047712844332667131273113607148684160511902369422318226601718959367959066070319561899769361368403991666535329499792670503886973487565303918854800568896492265602024328859540607521101497739575578476285119709587470808145929906126926294964830051537563279551309067997745535914971636136230984806609936274262434948259243430958415077888938467618886468189789848842083858558099654767764210724146820824869256133909730099534187002887184600937097999071021318264095789154348764695127295772697224652165737464909078199694585290355107505993027463662659648706223474142475781050449357214143268054413900493359175397328219618214712801055200657178590582363627049238068309062353018086732794841640493547474687607625154634611646447620147188491899905642245922488345841428257475117831845486907203511978480019905124219462366202241180130301218802113505181988621397896292852361500403305161205441848158196535130763092161404427956312189594704680435138072541563279900256756003828994790657352917714986062925227976432446473967395224455127987467257256316976035308871613309572518647243930625583331754727703967509542190168325304967222063223351104326030317263107125485139929490334650651802160308339003542392372514384946418596192054031490815270341098100788457339829945530265931614767442286306701963519721964235811950686335528275849052003473803660511768478414417812567744745451155169324402363085778341140464243793337512960496939267414692204574371942889461622154959643593251136043877376260261182882326419487296524245011078188305812846787463590587004941627269142980647974355954580281398314050674791915430180529286599127646310544791634057990141634660110055699286088492211125667140237689337392024170230825074664212660220468303923728534310383391923073046769707327485795591912332395565664748595209787256794971338316347843769047835505803424727365868770527187700892450258117910159237113043141293539024126197535283231011873576273895814395734614816816811585451627888888924405841288745497154022881611194608364706523501510789979316301902682493213461061926888130396500254136658345752798354769800058443357330991616860630642542021930549082624344570151957149976551444295703787932703425627859328004098471559636570356761478938594380624877978717219454055909280747068015297754636371972840913549821742326049463208096628140221600912513977133337827102219885776169675195819735747529113655717804227522931708303527702455384552564699250905864495347534654136818051071276092138911446821713035636884267833416525021458684667279772075080390904429757930162863969965155669211597245300781444992870912459170582687583510565956482585446108708238463036097163532405139117483214079910312185730393593036936011835081251213220173980897116452159375994109944776144234136143146541622810663771183251525982017919718665935535020919496702075479406794407137858813244260508405358659087189330728323553800289650518413080353019520135010201460548930868302089222255442976088966300874096173155046694954532793542655463482333964837528782518119257621885907483627778614036775831299969695334482839488088720919187713673729988951240428883885126615394803902678577084369769621065373856109811884013042970272047305890343007538432469558635488902674201861485786101994384610940280143181380292181228848595609858506276761486123064785111633223795765781128106448858260028480023442531376613046797808410731538247565421601037603291509269707912936334634665095194047294745771457636842020982420793602522368185342459458284383836247044980596940373646466867510695283265933666411376592918189219060551777167436627307688900983931124441614778071760656948816072075050790846459081517203452249096970377966943812852230555238749201094791763897834820141320106947443558839105100282654684091975540977485170415142735863448754745088505574735325947736093303032686902401235744006193525237830953220111692040683258823000874528955767021263458664171628034105182540950602852306239110318304927722444963892499880411778261192154913216099847125232018372524794920913536852840404950262951317248990600288144578968290950756781834850099377699613851018194617447957077909623203876646994096729916123404129861994006531141696892311984364808324390317323139577562392978943159070505528015767209229703737907267950253679037518608320042512407632221682260302423651253460297988863151317065084503610244858243523154345067549710854556617402321202722261252822687889590927030755975473346921318953983008232040903553253955759706302499131321123666072957277134421329419200515424086353680254763962906470505260591039115306167282775677955`10005;

    
SIAMAnswer[3] = 
        1.27422415282122818821234063972507809947246945663850391770381031749793967672676606068189521687585587774980110443371332140781337107034873203689684677183560860062297082957415624325822189608066128846250820485366710992484957006452161261548043926902807588055894387353313875269029;

SIAMAnswer[
          4] = -3.306868647475237280076113770898515657166482361476288217501293085496309199837888295035825488075283499186192630891136430717132695479183570527535481485323493119666055496491770987805562739806177408729014170264272392227086207334639477551474403455597059000710130930484549790041257397877006760662403161597724611217893259536294053937533901074129148867476633116962279417362942396292658321079163381013168510632678554019900401524711714355688234420637521685431767309457909425768882351097148504853083520986326339983557947849154630104547099679467311070004309817910593652674429408839748633882190364165440517209476651683601753535141475760124791643629970356353417693895735350598635473642122822528688878749695509827898143628521390494115341245395385269727851257267362553188546604443742861873679538628389385868997963047779486318537165899052250504507672343475949688780439524509796737104261919981577990979508967297886317173392807994861717751825429547302477283761015961319823829914040695514974564405118425411424061122303323418884556485736566222520856320751823026608342705425800845036833507697596728209465338238941414613120085106299528299825023519889089340183007458722421466269942167133669278833414503272728278673578004837443326354484855480655640894080025173513910167291197997495813827496249602011929926721244617256089670865468288638366468135129976048162880156657338839310067728263645720825387545628107886103987829080271991536491825879534777950077295687507222809224634709779617146287178875313457265565432815449857143199587242798869150258121097516385474973713888845369120442844272495991804912134669926838666642763056576109700509051905797698228401205633911174384943442096347406784064377056565330087326887936783354542409733851368687361556421467677329544042429770058745783723398865563069699342148747475829117958703451439493849011443200087541823672355436615351343574935444917676205032784369989432791338543407653180158151048732883192695263168573732228955687661585961049921466863456092317295942782164383061646238257069421609157206640680006251860259540398735443026032887097504733869784431825891035733072537083346552577084124583107047954858646090518788902716032160343526949361642384690568217817642588768224854417505200744580027600004670177492452789577591886995445326811319000219204968040284634394696049539842767657738601130434948380228161099304091309898779662292465957564577346933755465084097952544060895349486066738143346710948649686799438935184967146695217785105811397333071451290421490813418544557432262591747084244333796041215019845577901805013345029299202869809306046300677554190467107608322813219580558452847803751132695194800113733261835864961790345743860072031248955156050549628408356538916377307824187704302376900805769040030509283826306211799842877615098290713417336081722146384840886122704650472780710500227937630110880496940228885956975725139288326910059461230965890415513429504223896188315528236682330127964223594936416276771317702365454852522507217445827566703803900233957075982606156889018241293725673290657006779816240429983296237477051419581852732883574606070014656952233292558823204513487911237631768524429073465848633044151446873752082141652646869883098516992905152653686792638433038116145307906060204052751040222349513920747252948549045328680734867226844492873853051585008056582565537004180228894983314366796568098022424569745074161453682192649113495276406073088325141921305135876103829585135229560691769626417129184467678842318162070276243352968990481335610293221121675500312071487542925442426144607811117710579272005264495114306930507900358946079734169291954878747615280281977493553288310266269566348983748925711827744748760605043337549868214747420168923830336425955466642227462111752433775624435275649829150786720877177362974370300380823578359656271721606556835135647452948228271721428033113393125893803547962361546093033973546778893282385393639411966775865516154981420514412592439595621841676749345058964802910298669227808729013195032254973048429356716409831764263009226564109513340894192264427962627575501824051084430310769300732167084585502676529362611808821868529193935278937592348298136697634366235699381672094877042967610356290771001868309482244300159711029072686618391367757422859069567147784564129666717806712443503645892245906008703188821100423762470009914440850701378886221703390794604617435788957050045387855887742659676810485656368675516773352621389361944989762975390365578315916792356791854398637601360892935580547460850189231616961716743150032183423616918671471087204872195505753831818489146600712141139173877443806809108911638922873028151744042218357435783488731028995610642342253560866644716861536810015082993052180613302261239498107457469270850137380819639329627951288538364226367350529928635693892828203174166761691819444367839574813270482886841433373356626667397968387599493396112585924294310984197435000327042373331791274417507897681017485994612664358460951190073419862369205839485907157770334327951900598312500560896932280889883633481947273029577589295654681837447192241922292142863049793492217041406412255373005082276968895139005652754492412698699349707743030857356545652781174493253516651843777559063386752507876944318877486019962796161065048756016348445741857980570883723453630752254710347577379925974629772354217727470272459416318115301629940341281152545075210345945838961808955311809560520957985796766714632539233283443639172448943991389769124636889571972379375793876882989085105046438605051233922110929318594993352413386709763692119173372347679846194114976024053022141443760481105528617032197494417084575914716921222331027687542093513298335686295221904431131141451838004504123845863051575733868229502985080748784299388589683289022362698975663510120870712884154609742103614360310104649123467031057624566493777594731873158234813682791400600397446951802037095531149055964033778519179553700410320845949762869689195550087852922747596610515880676219600181948739433049975701744017732022295942306674471684006708691977748948032110584579674178030239434125001240056891680598790793039959894668810561342797792173580293909419676602666051925580784598936686603631989977949134594921294053989812551657326510924113904958117316813179852649270916164228398984040762163266276873325253578741937115347395074050765941727614000040418523182709723036319917959971423572290733956465996652262015305761543004059630328385862021093167932786224448038254653278058281127395885157843220144333564183589722925204782770901453292152691755700042317949512867889971555336024902798972903180951267664156893293268830781264247363504609495745750956096525764623837933974612434421805288899429286874531996805711699161537333080739625042263157448957525403479163106856936981566147035588112713099321646811743811211579222372685812031348929428920688959940984781369018581875045521181749520334326372017554103161157020767714394540739672605400980532466840098833643513489706449469111725077026233381762376340616327409115676839621308206649827343695860634702607028352329696279687799512187106016536754822056884348212130446277807108658801042829761180978817564512179868992504134252230716976961100399086734688239162301195914347917849089670093058374480457015816664210762208316441437348107262210129003316529132101854454325655964529980544755871366758208079618302175524026695570074551733130719592288837103574562378122147706795779244009784287982899398315030035175035697781731182303990914194881195378074266518835484942741861861752001869536747805455167627543329652094948076989381538267919467473491324118063414743663305482283056422610458779412934034762039686108588749292272899835882112604236842376935788768820304743957641311802912415637503135021539428577835574287892291472337460941918354733930264834833303374070964366934757940624222395016405313094553260748307583568926376274674308793564187753353512231273927437665932159980036212605896591427234259133383169136731388424732409359392086368656664767868408060213594390549091432010206071287749218970888049621536895438887652147224521249750714805409788971672589666337934515051776091188438677499596883365837267918004232853709660538186703855533648228597385618582077315259539668364244284483880798334939210256871150834255516292378078695591348069885442192365584656230369486778368573872510712122002874270786982515395182374197698468290399643632982307447233917398278030377903878573613708295092533868796655115349206377568102962638771562348307084929579247160500621121037669239239348707380222169234557228437071358018233747512582167524365745643483058922678497138955107531209276315874013118784656734209683022877779727445117195627627000902760465762759713906810753766065176695813322787366692005542985812529648864659525299124996268540083373663623281603490070618131040543794628105655646406611707990146186413693864977733079339876574949590901986612940494761686732311367458191333553375553906282779461104243922251883795142647837525188954940597826486320094594827868897979987708475149116382354580058299145207004841208686114108835796167904855168310788114866352758244052566500563163122025556635118400206386070834367943698970308275622405346195809374931745549839812103295209407172418488515955246634642709941483275649353820278816318569359975393722800868539048888391711180058095830418562176566670858891122930107600722705918077688850356979599734109857867454715639501713098238319733141099436152567879492280582496383009285650887527994586707390388290347029583070449876038480835936405004232395129555289708549723403136951046521223066185841306349188473682745525775051986794851086684320165193913310298166103550180936362758406442817305408509161581894040088905694625573031506490254748347995977465386749421561704832956177532402640641812009420168988177129074188888985657027003281594290958580552541322001555662460599430801125493632354623565710730939730800597483309116405259436854119801167917089919776005266889490582254996560274577032530306816570654696103192161914564935533301526584421836453057756718823518165652923503527322641944452815376148655770410830365742027732678047887688091276606446790814663962387454496945630592430830524356511287044688847570734233104931628612812831764809859`10005;

SIAMAnswer[5]  =  
        0.2143352345904596394615264001847493961134072877895167080739349859709876760740545981694798847888305330590350294231623952067805433732450602500728601414895360005339943101711874921230436965036105418271309169519058385709130947645023622962199441943313314562280753992430221631293939287559829513577691370472781532337919966335357336079333358686883468571946629093352338516730633796748079048231605210967363810435791405227386629392474358414115018569146907239031670476800493143322531811233685156570593367181879954183175612817809230908574471043777597237401309375297990015775579234133216503561594613034527898461282423640486377887842119136285590941367344075947924154996368937101852580470490399044376686770794219220803036726854335814838203708129292243232041864186145985053897407796435818747876369635865426081005353055869813406345329739482666928749921395303943045004067757226510450109801149692381772445502046796361815801829767370911338301313963029475373052148023090774076156250097939651926076953620385784429050237875703026288757766221947673067897273598439342189441391046985621038593954065447199345951214749884970963047537286616866504783888909151201714230855417608391465535254146859778003092835854889455977327996882090936684263190568074777106127725314957506552288324100234777152388485518556250989514926103637396280374775608835378156091361734343419690036658127374577306837892847444614092841651139069576366045203818741338020305738595693683923837464054680528701187884078860378240523018833743175193983380055300958933252793664161924157806192906658546910609404755721061808360497420156107534932932125366053541174221555721956452260675274553243798777459781790685446854300810117135991473293375903228571231373924453366078244616298828032392500307341316070427363021099302713566428494167571936842328670469579387545930817137448829397818557098582046662602239486959828787251592478258621484235980081382683370729491844484513439866619234863963524436071283180186408516396465611859481117151836407243835222479216864048509750445194162124732258908517424590959085883853272591570034597961222257795434779636945903007861259082634642324319571270114850601706289654888411993389719093547059802569665150587069591449199486372308449433133418655460909464576249999321481397421314780704925901717976311148906572708339969470972490981367527231464570960552328885514738254097691742214597898150075895787613666505879021352204503149807666931649679336828515097674324498353954360121882972581520875808829603912781773637097105504625473692531418296936575396066342333359653703491789654069825770269123390977111621505585732907135897663713350829134582179067010423854799669312257851844460873134382418543850662292191104368894245254527083158892607579192970906844217982618106237442364309272432713661647532169633641048868939487406656019261301892007925634715051510778213834938008601609870477241036615029826973734162493708066899197817046707146043210624592462727321076983806549491229133223636385434017623353980001634470551492897097056442690721857228892775293589030812212764133832045348257297036048246795972013943205563770666153254849176259593099149597181746583541554327156122382343923423695124813653471134912642979371047410702446501023849320172581011047211334686993087818787472199052112500005544870967598183853557760020327520601121486655682715709332524634437218831027600479411480699875793966074337699083233004244591110287906184867398390985226438482141420673144836255768995996761965131636579602551365620847017194855669415902062777473108822215573486139827410335694150278630481027309878387936513974941579906806188675793620321012705614387555663430788154622196258819050416760291064046472445244892116821272644243827397444176668745271416566569021531643742938883720527700807264338159089568731072845774665085635706580115707086033084262634344620404294371057086839038620440503414636751438732314708164618496921340412762838280132869218040945957827308342536202288053424964683266581169408105279167166752355002357549800639009730471910001335592648961789263334915483582891719227640584067108029364637650845627079141649672183544432331428995972433960946328150388170507770961771264707295174512925081043743740905585740417714631086268152663664797112316035298375830415971556471582998524576801395149559449724107141636520480389050769190097485641763668508465467988617466905337490208313540491069872372495215731807954578140742080162853467536271670875282909203092651227121714395572235781874028067775514348999294316179486971026121391342893100799464044359755104312677558267868942582355605468068344938358231134238377783049533120471809205318584241732467122602327450815168084990152865539118231054857115340746402412425886368146891095833567478232901357618413484183430198219769640600057706775820515941975766223377908395470777539503293938154355098898294012793911938061449485866805708286703951591358737127601120067782532058453161915828296497876683679471625432348372658069385019615869661699612734029649499036560255762048308848048747408559516820464673154697974020921497605211782117892052038433349329680352869430028615782537417717469610766454486342763994035912705539348590718156028716638153442738142540486610315075537903969006086106321230747369782164234938989849010309454277099731794700425150862084458435455139974527078965929647020936939080213632313565237123024709342123260909706746891050505961406894353169452343502729565858169150711798374213430205160805010583149633525023874516804083353881818397538836452077650974261658523579787695349895497093722531718521475345841902335346515282128145981078837386153580316400015877763145335580158723778045931853510954020766486232119481302302380938777302963836551532192462890750706115486999966640169281701512792110281582596914456686649871344367437109370803821131778548169071745351799198110291944071605198176424150365340732890441033140902465916611963920195019844212767832006949963986262790937663202259816759121162318671111462856175831525494904608389030130580183819696957541110342290659125282738569827161576639735282927356966755637465245565647700063271468612128198384559487257552678515991918420845154032184553589334600167128377453844626962000438772862912681731439107832237166170651140279001418954543999401967394520117909337680364491780188403434646388580872977031385094287638144481448292912489983959563090767486014327005687076088119334212211505483892186542477415646232242404544979828925126933268665187244276424349541174756388128651901094633595679437836497723229685422695317719053688959801595817020879105016523827458781250060879105150609204839617291605576071582399340313442874928526358668549890913640650691286772361033685523417862689884397317130137509220646347352548345322363473353322790756978739088783677106563193141365891986922672548257981193130139910105924179624746259509448833031430031159085663869333875959579853519235404526711116836882723493247631498283240187469276223464124571000475207607520338569439110147050373800737841727869026666671003625004891854990796415611104412851806277464354374053594124606023963659641097120075676537366286920865707377133801705377949339759519130893612459128285241696629313252922228275630608851712388183098616458829963289113368021316989824257185416221394280665601258092635809200015023408173289666721082370306910906265779012708229484225818231020821258418976048908252398739296038569226024067363091635513000151712291716474818998516710414395180991340782404870130176629775081804300997819062172822141079233524068591797973352384841774358728277629934995973877774280255492728021371709272184546321028828741447675710914071188118554452839697537104898459973159625358955499249186499652234792598173360655767621642669916517375575566441549123651901703123037965503150515660513363641769665976269948521714346888119111507771647579395095524401724584958916037585502889277908795376572966638882265444931405183198042600850677520155897266224883264256554340162455685769858897216941937217591001996748069135282881597137098665490265614275237257384769456356891704975074636145906975617747711888782506209255599412110717222561131740099241853444128477722972977640136079411460694201928972086839779560991339110496632767317230227254000269494796871031412180225539363675544564817118477860928096738352875108523520238152770548147360037612209260716672788167843060912952699105644151873891586261803922776301907044973909692921898146184836463401795164246324755991349773291841011746311030183241330947521638409739253228239195441822914462987934854441110265390638299481578743125307570995714825007444508081143355839051583514922612290616695682381798207579744531995636495149581285744326187792597522503361171586340527615198390320797905330302394355132242387986871882439144500291508071215422218692714136524092658639138918413395455195639827108359252964915002511772223188668073172945143632038534391815342362043431546595594151854082606311952518747007463447446681861213518049771147099298293485402385689109899300185997530311561642738563661679937807059765690287384229481689108586928389211152650768376461054621815800069389588508272401266854641893217909993882609192717974391534749958021487439621019048904255790736959727062393986641834297189677698220163953378479668496180445919457977364718310245433157543962760644752692954557335910871370744942104141426959970812220414434378639951294095208664412131544105584900466639439287448708351907221837251166566468404073651483476500927150821035928324121600438440030749846774455598244163542687857052482826384967754257963937945601235876015331720653910727160320807106963669617541349315990927691925165280416529617660560713645754871834620367271641377495982776477128928635899025318176831999964195970818910002034381684462000868302606925933630601808611881000958770594530894531699470188245472309163650690524624855886720171816505654203831336225668292024990042571888062074613881183008935924325517740931732332411422269614006272671388526069437360175512248456522458702545251788343721342999515569302986598605067363380520103703565472672037827224579707204789625610250328390701329268688168812340235336560964717216303498734818039940336326164547409727425469285565587283079898615508709581139766802390106823329408132745917161188050995906`10003.978166838708;

\(\(SIAMAnswer[6] = 
        0.0619139544739909428481752164732121769996387749983620760614672588599310102975961584590710564575208786137167776216460354770352165761978623892076769265210054246222936461060219831086664501115514448011690543835708233305223558524709349617867588657932026192532298184275539832306595383966990297003792014502933395286379155134284131738195515470816040798760479449662526739040704857090917636453642527587617501936819066435426651304107692758964293794573588987003137369289949498093781290954998965767240826004285394185680689455770993799714914864077048261926330882588909861433634395645327769162520518043923682729722982085154521018424358323914781901695412732219391551677798447243492141835589958397651839202499799726537385901439899762234368301339169721991138864249021198624660744152311484447058718263380185231932636864014192129133616003655815874618760449095692927798091458615704902735926781777106775075104023322762716140151809132196334743230588554331979817269568734686833723613739420976385650392761584057273840831747257205271413457827176292482647112158072446219132784067668482334639630161810362325659468198865877545554150669015751596328287264500225151258938502096784535931012523997650078676251581376595207805835892841602333039839162328722194690164187679459799215527546173266738995089492991680942982613569867998455209872967552843188996501415404845687367753470092938701282059568380707285543772448350073078804292269521887424458873654814693804909010996735045340981169598908088321378113998622970897484897877286301189757300340894413021652079568442218676182323982245131041282580060047110304938045733997895178375254144591331465207118525142464713309449232070690388404663509568724089076089480313810145313641555005981628718111547371621635219536432156605793325219879349833969277690989141977261454804773398779649315256496210795055607489250133824007922250318446725291601317515014598923158376863947028709398576714031541608369746995557917594229775412686402895799478146031819230806428022527197242056140935645114695510191701467801083583646508912162053343480222669176461810125205912719721319467603657024532457564469245243820148383922105426035553584616786962283384076286958870613473718128280319379799917992243803689134559731032931742346334613128503782521848232551002342226205024031288117435874946459292301422639277458319300867574054995989091518349284146575195931217096542043873340161192158082981413455225891813235096876502747983560579024628203768222821130909527477815436115366181970351178197781252989316641909683496166857136289416611980514436833925471704768673863477937677833871566090330157623043873783761922083703755394578485606528024407093353349321705194321463526365322669959836658418043437507232592818591691590496902243032016269060407852052083764262032101966420105949429474558910840223324407203879865653261810621103183607846832997012605475489166103739116046991715556665604339104754649047873283939267201897931375838390876274566885211172018122283347592385103045611872374494056022496102557775114209362327549436311818387760390686678299004994398641230636882901387446922077486693843574969535417488203572089287753338660402717732672227490865481546847242085146855064625080240487124098493487004984260926485405363272162068138989271545168557355400620578701125862097743176756133593552365444345159333129582114275177484236217775862068859534499620339116313224892766312245054474189601386919331328108229047620238298416864033197870895150449874568053164719047730505964365472991272831380737483444775403365313659818544553256351381797435038787817179208450444020497850071668934189899364724576604093424987199704867665437490778118732592456475896597677212313656089662213584580982226257697465106306139189451556672975594098920023805605604081479043278686749240512957315955385902127328706730614785883506524023774554632983203051009973817076945037129518974306020999507027239199146456878573927774481712495690314251573042975575861047653329727210728000307980562755258958326874536198347791184783490747769216752598769649973759838877221236226520633474765765678486692460681904420430203193934845150018611522245554761221626357309513660854253927481170316975631244097836025009371025719970462424350572849137689828801168862540139773490559874591065791943581286878165486260462287223784715023663514837046101082892214507957423401896902749243561353934531871039184596794786163155532407531959164359289044895160806138126816385199376578868276040907543056174881351652504610196802672948402711375813553567810696326991273795232509442653645673129856519033238476739210742690225792458635314703545323170863660119379812657216886915977090256015666574012769580959788631651965605878027822775794065091324767262170570811363358623134151373043506813262250458911727775135935908717689068907942763164682992409741882234211379853485355158051339476894821875799555353763139087290785187965896337309171429545562808198826425172597811225837601095063449542973311217641404526042784290795480267684159511158000032809724242404279758556373308956627453462747388308662370277903371093198333391029142292856627024218836748010254030963542409983464869966366368413188246949183224376339172824498323668331875539631340944806629934015627070612427016056506069431484313664431391126101278752805382145842320891191548439939627307610481367638080139357117647601916935093498429453935083425821425250327553126677035148987023431205467828828691614288459369459314454043927571264079261922507897084400222567465520463789584351908167590806566154901355988027631780208555883690727028962697895903504299685256200276725143867912572033235804282310474855185571538463927296121457663718264689596877960741102758152118078760178120780494580573435119383013232159336831446790653531532154164032610185716034592745757166659491612297716911924879144394878938448838577143752769498496227411192001829060820995229495853323685585807181019846087315892373330727271830721515102151744979427454975981753688935068277456506259472146168269788722268644318965546052347026554188465730281658289224557526293938637505537092628067359117377862783399326355195980515313888354017413533724180380562811987252392551078890103359476449215943930756421608252705165960300827865195805628644218043166501587479926449596041175126242340147238298992706959221841146432490398938604728833258447314577846259455237790869971722101713461401224632694121888713974713435353540090452718393282622678094572776643476115638196610716070423993768018125157244230065404307755723657209587246902287104348212091104589574191249436734754461321799594712123628358060289874855772900750425605264339205334697356017438916033842491095580099839099766561710299534444415100240773806717683603788112399054673200891004406545035825791048236335565937582667728487560376579084233462237759390786836544550608300404517568963881360073076519993472958693199229495669685539717705696448006436296934093202747284763257717215761991151431208404730910979932569501031464256660130494841047332569846687373593241828498866897092866702357788571655188985461113355459120658641899353338606291099684139827243037328521902207059849627679175650535125096370084901996000269347831927320015568012444174448974595570413201481213243697703288872323715379467646563755037399066026469194439341052142286076277621716898922707216109345502722995296551209306128930811960314943164137557082117034678055753602483440001692655453096404373522634493412707845551320742241159383196194227956514117577984708664467870392682363404146942788331253927007513677033379128231856273518035269053413785524974865497302140426138957121459499071688723654282863675373701902044604201706177254898356719436571752753696214546651810369811442474453485811785446050513436078244895760814138105321015930021226704671099560881884301912770972304820165449688083002947438895883188324130165393148056550920006545705747142704790339376998691156833792875916598181313423625047627169071368435411865635626617310629564172214826087327082379676608061035610926386084916063419287406211489858377121095647735065269967689893436369692602184556261983406379609065476641797058590720448488754994264286196303219207133705329128361699792883088312200560282496793321783770828051073566035288283677849567165061393526479884574349628616914215591032324986698910719893974756499744140479002707511456971115597299345234088256392381117371130943899494440987733066522227431404560511643386835243952503417273263583738493635288946421290270924676916062606377006565828854016455133905859446314627599582245133329796213799934019746640135364756615207913212418283997999703633298497323185361577964635844387730049777517558878015075320674635668726611941726039171650275389018694456369769491606024821645962277016232722491822305358148172839323329426340591313562079011123208971797850192489674291522573286889414077018316514320999399764187389435816176129436026344947367166007390161267433234065156084168105794243053748755419295230023630337475629738082374121300361974312145033901077790503838769383130006122540044598860436415989128205058856776852391121703568100358342969206092860185637397189483333920602141880700608969942328210528830273385002574250339573573864828119300736298926901379239025116232323858667791412593362511379241564972678086507749966344895706028958051830842364267125549715515306564842104148684382081960140914705300282738486825421946804986304919837220663327290978510505952504519867204516159619948766463361403713433455191185838371802784366459873673565107675804881195251090511294115881548464843555327314631633033797932003309215916283074097211058507558568437576538710761142833793406976908988396086526598531478594978191838427760840396023082869007648754664608301075058510028459967167751560240732736907832408133057208116948194894988789729279962098330036673785014691415252969163837379180817619423994807754171048198454580957248801248751277390464521869290862055286033096986006471908733356099748326892782075236814510759911363767280897874349008850876578754333233050569669504657554621205300901469592700712112293285004319398898283037385657158983293000885244384389369525044159722449379487479375643036736529573734239749997317628467909517249120740888697019594074011319266393925848441728628875900847383202135190020184`10006. ;\)



\)
SIAMAnswer[7]  =  
        0.7250783462684011674686877192511609688691805944795089578781647692077731899945962835735923927864782020497107616324699847433558169808593038793560189413887420837214155085964162181967912114936017008005704846219858109957954060955294850946641192297140189746743304816070329550269357026200201178862890337898909122365989055906782239653401915722634372746832723007731628984808369479098057956525947690849249487995962755101401300574032192864322816196744148402613966543415463355456269040316010649865255555172474479034089216261425540950368245389360417996254328833428031345257957011293868778122950434288354797817269503392243262931366517810625108483347704107274098701421149000035421103341410305750184974609852461268468115599629503342819957833286981449265966067316083906515129775664888293805732896761744194082057110645736367121449837945834218802099072709299539790453238172810442727016094662763496330510690554139223036437934141593109043128247494862625315403185885587287625911707711339163180971109292278220273076363164056072532421712766584664753688470176254789061707734135676100352672020910917432428620739155801151782179584225242494622176632268722586021291450075972763519591930133762056078045947109785368940087218738371063880047725131003843943508415636971365616405982780055262407137395420248306155007616263163976554869542351988075069170871516679777286489974114659990428120448971917201378236359559938601174958114947088546650050354700001989092186104084302947321284953662542797221266625351212418537756844306424437437013843298414057465800534237020694709861298634837135166806410776236249726516431958405849396314136272230073282806763823435382913310242884432896844402175886790609315383712791534749963384778668365989996107930518068995879971487313006184427224714282765094771549438441039123760319527714979782558124999770902787424603054580805551915099706723950771272108727716120513697080629398375660183305366067849276902579433167512858699270772429802948581816105018213050675131216632181026607302961574360510961971787273320798369705250755104441557278645798078031115805075283559484884063463438080280929176285498554632968323312572677723722084551039158577293636648557944459836276381723486562634571828128621793862646971758074371353292041581085628858183427383902835931214391355755756028359373804054192952959531909404409348309567786701010582511512279508961928225953216019870090455583788657760490421944447939000320177858481512550282364162595799298392934148932507233762005777273856049342110595812970551047520655307720694385213272451456276512050123100041172024025135522516853802332701245510131312792568820756677001029245075125849553533187642452963013958005465867869352168914779050114078419432874583487146454938166907100043443393101525265506504592380100855994428899849868986156596826097289199554328495017918041142747194404048300578011025015496905994448078893719112539034438658728275054698941359801698227552534684390291922259756840216893510994638499818998114585732619709706073814612614246962170379885953133151001549001687347858895668809557126167367090026813230356526435755214083211650649399918383296416409608436138744544911375815324829525311733204847348514685296981986947018722167853529048995510898476122886651611488477919126933203443294713945257805414975616678816984353432919036265526534876657190247143876797691552712485035271574026582550559299747065212862793928212236493604208416507140086324840695399765356644171307344064391272701183769279779056535710773595748630748432237394053077912153309381993702614021689636556744498780528866682540559308754972426761599288044780545374949572128142531851621859286725123782003352702514955266474867543550309262961027759170421941024595169437610258494217062880746102607462879375616774434969237796473945185452264656796440746119798329263798256093511949969525290320434411485689833390042225588543096498600548826136468303646812500328621268315646997574829975897597062759061394928684434023830908082742766660903603091168555975529228632045258533369894372681608187821661634167452909391841366373653964037313272679602364639209273135779640666210219650765153538509290312650923001964043047859612693383001782833463953158320689368828520884171319819710699817761177979252283548716742295310378869900743255699297596498642262347458671520146255044622466110745575688933373743855806684325292215581684485599918305487324907649011817006712996925746658211741932768910908055857442353992467310227246665138723001667204642378677373519523514908520871499158957728600171816243986062945675732217093657947124265490163097711909421295066481239542615441624695094875930680003582869953349759085690794476953024534752681449477300850860722838332153725668647919172307071736603850930110788975692624027180187241233259314634335709254993265199610356723368549757483845169104722043582530809426435544049589189753064866534107140258851115454232174376258103180211288900440191475541756890923277912551035146043270091405273561183453732710240737488903416128938391334047174295698183652553153487716642441933742312245042536604419673561784627743455025147851991668955572784514949193954024320500234338775457309417512543078961511991291255645666811213806271059023954512529357795975220245581360310557215391031409415811163444330667108157758478125895560868793691348634609514003376977517859943480172769094909848701595861824789415183825426917265883985324112285595972715216181791709708554271735696968972298966090608968693936051366647424669111184700496228724824373661496792025603442704491221112901443580239804871587336867196598955037422308791207207718154576243628664191415358350416494012948409830388170849640768273791950275929018382014744389390955831918292451297972208832653817289225162664770240315244646786968410494788433704069713897145746834434040120662568495844055374628414076221132747140180164748235339525372321376397813211585564629576963085678155038878746578224272033771448481773753971233701310798590329701717966073313923204425244885846126482273367891048920173099563118878810971551315193948591754937635759388236481781370006075865923211268446571410647985055004260513724706722870307652570524073501368840509916723172306230148349079304306853264635693933002208709900565619607518475868049045854106368847777011446116277469952203657514414264198297748314864867155873937913585952019859190784910063016681967154636116963303279864992885223672986221507441621084236905090286809803379740656199724543247708798970833919236766658460162934840108263142549492911161392584078911088180783022914180717712018923400318529063416654564471091946677934847869661958827284652733199119087546099769634555321886174475235020430000691501053831853303885472964580111671005603943577790410254575014057558798467295901045236607928609373452866152455060837658866660285401162943159256558410222119320981638242917166267903669193486318883474902218725330141344549326881038344326428599213227493831058893238383410933336661041971871371332195949242615662420320375521171451147698844617609423640418175811743514453694983802437228671700937509985398993485814581605216582084067711883449303974482928581246287728131702200907803756167148298045383727268164340711293996559855835925934531507243816465746041503264338137093631263874151648117230862320006468170484690048461079529402316728354461280384107480052069015099624851536030845798360690569627462569837215444341389564742005070268086823543409839141863314374571313907556952347639491526929923810743713014547083508418184568865538095491560529743217004713920716232101606968759188537239608009446508050229290291996763750126050137829072528781052863210092892767884735768440581148990568585655025186693748616873581136877934837686029446549543800184717132511712126682541859108212219539154406697299797356761666376072018473881166336538353795690400739865479859204781451212610203445205453344343933838379311048794802429087769375319943694654406595258610963196608377903274048696014721871509581952664558791044533923578307942084528660676472741292200123452879844288975148420581369880831367213576686053457245149703066470481471476860671141395593845288452834805616558483538262165761727519241761612336966059970218948708316032669835237157797311260475259697210915104725585599267516020768608994748423078176316809242775741419944051803710384402167393960890358855191392564673574172662715417850117180327200496705168052686272631218263305810713875892623159512882259624795491557726425301400430028976851417319108513761530675813807721901389925644478705749558807462153480742087084896144414804533170996595002523624197601655572982563561687544443597932339085606312001281097761491549038407534172410647553272076224009494391099226421317949992707357279006221633814889196634294737072391545844511305402103132552849967318692988270708793134014213301791195463487556156041643860816204059690354225640977934311484668872703424214247859776053391820694733021572787298350069470483832163276057601118895099590025856540882258405443730733280043681977785009494966168012746882448290982696602755575413091767637979866483590803196031492550219674030490422511895920635322989251188977158156698378071262638842033039873920145429278260273800190367828020317804048512808418667508438151672851977000354004150760724777470431996778483394844923864244821717751929338414419078929448856215984968904991070419498595937583458492295966477355852792027703644272330628594564481060725133981723507191672434893504603167872494961600493766315050527623900750970066266363909302609579568230533761663140826732049143365636229911683436269159352674864420321639194268629928403620309578466674381025271724274687937613146898400038088482992379073950960364283500851901225199609305259777414290259875414539937128541201057334796045108698437168102724490993887571255482583403651746409696791437236717267281941270815209897676739024293314373000818443798944364941890429846713302335691155392288064739331995297571230550945479406353968981129590214636312235761923448164741465365349297520278177838300606032244811714283466681945953601453659818612682542275602526991769194116562979787689523594894292964243621871127240518726571539095005372324343473551445987464929278573840768589759128818890145763607905234188088446593242566583883411778064099736`10005;


SIAMAnswer[8] =  
        0.4240113870336883637974336685932564512477620906642747621971124959133101769575636922970724422944770112220240820086462795017695271506309413293353174848636494685511984750542577012391541522417644853112953359729841234663838746771228117375636354149021450168091528285318839767680026374014260225715814228017081930709105029084261645693765583908527851992514001227445395862935656729241464263748206902710078962219841610650337271490890884216442321486473464593125585415586591862911631980828791978995218673394684072803562850815588424025557882598615192583148508965643775386291923823052407525605403669951339727878160265194904014221856878039577521707631591514220670089919469051735354618013813361811857189440746429933847708887162455475743701828367651851549699597160794716956221693499865567617287113172182587439450450856931668945692231925312225293633505412725371221652840306782105120084223795301692807335754322248917113440410267511139470639383867509084838234385342566091953658123039824431382465566765562673405640641777034880600357506835751429058742440813143715404487008111982782280423919802090056730438486800709085836138258289662025683334869719804026752182208018265308981841107008994174170787954269772030635805246264126552284961532111679800801937767476460545842894086998695913302186234730854517194715035375643623624152797553115006960027521720960318555210401757187968926668972952078567738975595543898157592406302039062108634927969604167688215090088324983712522268044363712899744956161463819985855414098356323117222330053956072185662715592747429899797739496838484349753361514470458173629911682092069634103868415075278981152379485819729223365456619579991369741858122545559547727383179818245729594052385791839595949195874299702450427339041933394455364259738036384348034119584541511224959771564018580708759966558277971358475825792118298278823980886979160959240750841233470725471685116438510455060283774010115543186591146623175146127717067141235591283656558366890361186809907171784616537605642173485824034002034486117558753469853375500249635304295819692313787926987790300767466376119863080636837999913013445698792787436777593577126826418178487614891524773174210939183558955511617380467383131911757769500445898020570992585051675476932179082585715261547614172476318037765566926425365939144648911295386357609687390890897126335222943607514453872053030051741672916828381893460271780711207112962675572953083484293324294018412948728476718306672896120157359253569088425521254520451190264792863104316015049756561298353810763233085812881760451499256468208671469693993222567006279110856371376223039052134167074878696238885665022414619463930892114509992410486865045822877528803052820732424466691640775063964673475787728491377118606783068858722378149014855719653982168507143328711744692253095524836501774977698729533649878484970335815114763534163591525117888279754558857536998244934404786478923330953887985110680829462534207053086229163309217487884192782905176320745126212940271829175039953765979874632643096389840073191203520859122028113550778629220768620918730044606992609766340052361382896380756421238821490855541455424488682392088735543255518115125040011269950445579667689773394964307086901477831507685296265101604617223533967048527384063915214648853616700757947881845481598351299363870351571607113799353519563251517121888265746734616450869557324291717623579370400159517098780242523115442621034767017864014464373980018212683362777454513792501742542232971747486951595948592843909880311424980556075004084778824688958088495315854046338702774541460049462429867620644206631158287878262247872191471724543789262162007422334394738034971349559059503800208997877625009081554172925884721438326693935894714984936024461440465111563943665289406528850837051700242091730541132525386997499792274124571992433377750976441309500188961671446174604576690283104312147859134309778133247280188696766369295485506083552897183110721691327072057288432160824873466247439458079745335154189208687779701533177106836728159135548142941290572922633711571146552984036564630942095233617622699314250692824464821188320780448129112146005921833451978420980306215115050332941565789314806870529791050026064259387687557546220553539427590196732467800588192336734841830133838356029563533909327431350442468985868322491265359424391636136022113944839152992692837513351850474939167308827931309290579322141918054650239096698655614168743547855836615538817757712168423749450939559764502642370435228542399486795101468044619037212696522385386365415416039556814330645210047551785391178680477443366301552607404924629593707257400591333920720176753669767143180170160655043287197565664955135717878388025028074994142135654953886860134657483360657005217769986764036904435495291705539107126306188600944561897791106319408217425240090185038522292988217868105292483996225497215280704624605778969589867275388963323692882003950756065670861621243520230849140612793707315089858203635286862219144281255974775298857046067889840301883179526589748012595434759350604915984845061304996627850991290562994742921530325971610008629485969519883291601859055340937223496470653748506129181662063610875804718306395743217438889853177113690802841860608655456360641651698616344372125575415706854446966576186990137101231077980337995438898460537695106332369840836844439746868949263006628931749196549239913887620743211040729187217263464183595672242716317927423901372544901995820473372172338775657491137798092764432856524255264365502684647660055604993238672285755050542866128762972228141527893127379400428054513362325283517659849820346517482443038991985396612642342289356441035772836972987882121931308184368303989628708036408732742948035095981381784224365532670650910577767972103514568217367850697577140011713825208878300763140802738229387772197493191324632567296944321368714892144353993220708076805203772251235308912882312082164771080365140155348431781540713341052021861654964308922603960144956333703635750345464463391902536606570850367079344919417564872348351118894048968219173097203514295007647653925044509988301146340493799384453178788319591641505303069996926381456411839774052925030454380511873832720015499783574790471198858228829261335844098848991494598058154785925526563520915101457486048354770798828146762939798648287015664103764109554676855723880360461325889536050222732015216712063834871999428143194671488304412378946322495658488301576524874443622160153758122718158352041565105683359059829531075257415908245931404186327950262567971331540001857773512854123427563748631296818681825872899956580523101709210369602835705550843783657270351700588096792958901178182122929652651770705414386140897896828808159981933860236489826295863115748211323613684839951254288165962779247496534714080434514361664229928259742167340080431148272902138848095485407988412385791721101469717947076302311920109817554028749849208326544248460859370661164512525623453779462644929820347109963644565456097566562292937191906345655082121872013460949060124052325606963724318744988893308434316229582554717415079478579234125185417864705877376604050464429730645218995201411764579913583475734595769026414385272912876465162269762821454619815615943129125594828249618983481998065896887864701390352645211734928719286387213217631835149362319651448654259123086684034368697945727661451911669356485950185236614652533093501972122178243736939410787191456090446740821474219164536137297821894546582499656131335527820330093407676395315924954544027964835879768023120931740773578230337601331812529161623947292521296438662825107754954013471331188123642675614059150044561611386178872299762567203913078104396357001469330090878129034155152022878882414106087219076343034507625391061898772393141242814985643987475729120866099069869139158786303757925355751963081608794939949806666838013201725583984910789658687436602447074334016304578512215463855004601512961160171394793647689855027867682020308978745797135538854803486370682979660872445044832444602465852180396606764760206780999345397453097723780904702621475195302650478784661469000937196476533010198951928201805747584387475860028340279063576109225842730701608888160433075452549510057567274477423585091891614820488101307280109758658588348818712405958497067301830510625756732249368742279976363095275100737627013950977617572835262794155772302940413928590062583461263468357890482740586786350046925929340225072591736233994686078924291288916542438300298729102605550865166349572875259570544163917667563127968758353803483442636899649946673912189354283119730632466937440860842508635685340792262786435631838436617108251813124119370649135597693332813321637388638380016007962292936428312660088151779392356678771422656678765639465361344567212128905439935706287241667213372975174130114179810460856723760212832887222209289724417622514794094333823711292917389756434435585090822756284495591020960954917423422643794535206948438911621374839517080691960414466876847078531312324633149249270940012002013719631281032720584271505095913230172329657630663682558776093542675289549369334894906910595763816115080628672650224188932792234125138811545843672681524911116889637754340423078159734515440787408755509027734407729263038452238527905085737120772065540359174218972642787832678317352334331058209637478414756467603277108329814365185988825807449566478577273322462952913785367861542515746980164330366461426613249559554172514077348036958351602721199226095141422109566510059317338685340784065008426702271315752845986665922429438209380019473194759028347907920111006097637501490536253415805795774321550379940945494000838606682324351381895117236318224701936689663176951757272135791111836702235313032775185154854112795957874012397760771614033288539894311543329549228221733888858544539336023710941879151891738878907688549623072980949138920844836374628644196146404069141280645627267884529010010505716134736605468281968687156665825678763567732970231162989529297384436913832204199670903529812340255773995063256915125892764623170572932369087020408826668178172020948984884301093464376146475689116431823858134030481125043891490371461114040649315754843453979377254537984839522538954128566377977`10005;

SIAMAnswer[9] = 
        0.7859336743503714545652439863275455829623954590618668175812318070989103971494123651167706337659944952717893069555487523097434453976328231115694254880769738288343687263560683019450081034391856308333471899114887489552929865608364851119059536014213560546787585656444794795727457950770440886142182232929240227490137469664121234407303573835857223469692199461075655164757742854185490478045667075901259212597653361653726033851759220326202286761388189410249361268852171348232464382536930502088177528534760700608010799199681146029021044289659289299248757887983208607548669287153022253283610707080081517658210195347686340826397680455683789677645002482011025888594483515350866186076893014948195065686070835957213607006695324386856497048156616595841493065168056458760372376332891680951666192053835887234612508323769889857037764937479465418279595604843167472337983959661667364269570227511360887713000864308255018620409278924018858390481394628069044993643049134684412313732505868631960657215150418540180168924966378825596503280888145780869622406915565806927207903454567705799327761008298828478475430274018455726431334101013453476943894776885648544890740982324812651227736220660846672945857756617685963775900517964672458559116037023045420084695628188153229066852116003435411002707707576432852478146016067628290072565289239176604143902060959993227873406880438552934707640519071677979216529546787197337904511191031847641276956058165034455204003239779067405637112274064074800744786398543217015858961425517575351146110060253037285730744832995090642697012478070252908203837792453178216585913136606296778973437535526768599444205785537472022216459778515423450411806047469911455111403083153775221344399751932454685782686438488699195061611531040489884298408945024463087291331120476216771967033888479485677022059221011954376913987843113502755084407334127037802987305882320766579781322161084739355245159408102242536762997141115881270206428181930144034427271492695042296568770499135581163259036024233809661707449457068323219250032489286363444715929819256785554763702830781039278857624289178002621154532951848675800889093852264923301956330908542961161885381292808401852547149362591807444616916829943752458999148335103758365231640271385119175888006731973188462688575087643566325506296025964331364734176032771858578577430223235529283575469304484830384395244614904760850753048130022412023974076621906246187296998910951835432448293722844395655364237194841501168568785583658459949686517625289070425093938866318452174548565442864480728445917646355264578792052928247936319777038665947437591854184836193896842365515553842882849107028957938579539431921703120261023511775960144002289871708043962040573371806795262381406950731956972563136672018028496457109292153272843413678886578461029225816261290688804426847975783955128219525749268394589177178191622902248837275525963498371577162563149897112672121942085310590084381349885507481943160808434096904564981142331795876520093026168888102888506951340401382364338736858610555927763726172460005165578232223193562614399288310323017321326087668051156413400228975250547800274667281194143554004367066249224664585075456093051860693676030997866442661744182407100919852582765631502478812982458076670567998510597218822595549015670810495931044852413794386620508239340895311637351370756483362237992691704853902766337972106228031795722572290228319587586620814974474025387300783662656880365000557561673439999289388117251137749320595224960065947867651098898660489164646932761526849547348423039743929160573288902739329599785801249707904178296237912829124328903194959061479153043860711971522912779369648397884702554662415094933232004160004052773694869358814008675534021264926551406931574235149470861199437504907129795455059812525529110513588205358991282975081496843916228945746832925116301365061093719897150234859945497019775382254752953186907504987768148355098181002484656614632814817219690168253554430086298243665037708472824250442422529837972549061932658908425996691520349443696005289874104091219023461376001243567138814879138555048094798382305787956304613820358328123492210800811369852575597071846040620693687235639213421060949180923265915069349936341665535027391396009021339403630187034591718357708797829117642945282736287722584145955579742096432445686987252266937298537391904060354495395650645111983849123161088877084585582918221068519380627613999151527677333555933321261485873670637228723590464006632090069747268785923272650767512501259899398455043356275387332520989341938636355128059664051001987150720858764558849373477874605161586011149746733105835710063559625148868543183119897067633348792260992590515539375427653716611252574462129811948772360310330571876461876790149979917479382539360778537019306512503490150881245544235808764521304346559652854913084084973072192155308861645308708267654505811659079143671535468936796867962641261626629390037666813889204024024548638537247780627404297364624373472895607083331474379604464361786535186301465820906226773737449867825987413180454241411659726760043116376818710971503303322793758843775849262429611309675096225254763932880187391698811314619098334123345463928914654239875749306714126609592420365078931921208171633247376890457506477145390525976179535560053838582291475564417021816674499563399914660636961700967451819581457844127192134245462118773207070889413673216824827456984029378127065252834066898739320208146762938105353656953949533172583719651536295548167556220847314007450564616489735902156417293856011427029996691350007304690919791533058405684847901885971438146742510182086509409306081377497512468714915822914000695487372162576226945597836398756495142318527524216367885496018050245235669096302689833913139026184453384264884036961286330421838903100995939093161860968890306643228206881518467044424704174925032194621943962626432067245663387925731267174094925131435911095242124687894486915830088696652565114349797051546703194892221437169400054458653704006819676773008486746812758208010045595318857817691930528498061989214552695741626707576004230112700967362078056287484997218203864265818463587061488098261879628995670922296875209190869211081752239631588986792992516652722695099784839393471928325136928044203323489554500481372831093294179067544527240984670671881073841841434331674578533134076770686853425941468279464051512399020113224748843238037621919460484551917741907990145482330508025275598994342590388855425464501726471921285264616433030367433733462376216801234220559478050369686808193683657350909756737677993406948150860491649572864627841310532753677706648815462477740681688906928609579659834791520565312353763510656834868189555771552265873355647223204108591314245686962241370339229178243929073533449577664882220081722393090542027057635327604622322575270607272526866351609474052972596313056417904059493356372955249464241072814276105270451290640207051434238462633422228910396808846466951366634097109148929255594941865550503292029833879563650823025152710147233328715906274008541835189816871126339115990503791010347366190944261020439704764989145275809570261083699774173606719559106996661790153411926820571593893878825695025052568590692515229749608229337060338141640697790605407034528356210274640465326591158298180700637994875353064514903419356207943873591258807516597212098516331434670634151328057771892292909248296232026232716756166605395794646084086556049613442037524949137390738531905787080067156994221427971886180346793969293847069953055807778222241836872860977905793790689657070200188025853124228811995852286522620357592399987768610920216211129795473367217368872872850282613084430645611119800262315121580999477922037741600690515842680757534911271691849839938671076815138858018796713319953002267007461535638607985653348870041375854904371872479473907889191582872552551229991303887386499605210313359215899992176809391610304558700177957593439405979619384416951407991375689216595490633565036628750331547911913561383071164938795239036095181408176812395009963814930540336781062794331560521443686121596463153165083696177456271266817131903678865048802525482156926458644059542166690828971836589817011867228845146552582023899924801857246846597115299612337312707458979676973245081365432177979736015356829186686058685329912334282656510050085549670492923297061767351405045676754512356320563461917735526724311184659689103198859255332083973839087335717236287750513658036752618901124334442476523704815745498076874004344929547022755184691755831710988661479399269571900069814376148105577309937493488168621441910726019195051008849492836858061516243459003013431324295223721604830969155767882923683439454280755931076691550947163055372688990888163336276909908792594039771571603544063237114777276077259672543452238482113498929149426408083132600133182585082775641743697092102032563412837134511651143606712505085931456359202464743425774942016361700116714074791663760170435301598909109010569083935013604469252484919161232559099518387316307356203381025573387588543205842720344009549580833378958764949219405781161572069836262972167526963407629992737705260964882183556424415140908927127927969405511155101977654362259542470672473207690885300382203617715130139128078126273028070095839741972805817342811471891072116079258974226730071876726201236160547469941249378073654089349712716590794018499839618130390970170199943451952365864462368528382582892032477207710697471250576798297479833005486612616335995592429077310316712627980742282458735125804638024923881801102335532390704148454756867261987183703909211018577102349258752055997145525179856344015118361011489274870418676224547796194934899545804571039477272832849651474423337358989249184079495262642903913261144972096460662386015652466157542203067184811644029531439256692928228193919788679752364476642152770925979282016334329347981862568110517749490810398188648106825351258026649883836908767353016575511566786718139282497935141513753082026466671847395453929976440714657612346058622947261992174612900035322667103814805435852375463815006719979733274925469664579104109602356353036662703440031296383050364413660482636313827146326047716780805938858914994098783`10005;

SIAMAnswer[10] = 
        3.837587979251226103407133186204839100793005594072509569030022799173436606852743276500842845647269910153533872778317803831155446602429138550885041034413877481608759295735796764777307732929517401839843039313801647910072495118120094152068053195973521380985345213139877007765078261973149390177574688899884444680986326264599208222786311389993223965825814541304704619981090190291217606459112130890215289906014907236375669781752076168480680111749568304944804326503582334142694662588037282616205088260638809533228799904415233034465138660464604211124375197538698573260649592385738647751091878362605260951809030770838782403065485925222816074543104732274423855154209677870238512798738694200199010744127977152166211550202822663804167331538693609358255390240890217619916497219471784632602586337758107419192413974681745158181231843202203416063899323259130536841277358248845315803107318121306960895103874174824948277934396667809339607256835394109595081240644109257599303818887286219444623642574992600922947153363285561594410413234561576168439159723323849298274286426095614228204368580596103720831320116505192647858535203580383550335399911132344965346268721159322866195315080202716531494746883969197031156638559930537711922238562772098876560539673874560114374142911118927007360702336221969006986465836181300080104493979430379344076972196311794074002008411441267235470873574082940871728532497524058680105397426967852028356484411547498237394238272629968237617924876537506151488084048607496766811382294672025424183758713790799797612096004512114486866372894443451021562191057055650810806509182294987342950176404947901646640978669051031078447037902302050326935184466633194574502329979031396970386339603363674811197881317038539581900844580793535304986747538468397452668120417079553563143557044731000549106457796731301739100773411291577132797387505519706994891932580144301452874832271956807294877003716312687330907907768144468950988074506800747710562305180610619504394110799505764116331178996792296904425730696396434615012080599821747670147667054103650292309350185221094016841814082264504710778219053582962795403204928445569098167050502102595435931373044737407598970307152101749026321612258088558063479927578538795542313088984929487177680793676721232506873597938610053565725343612019160514672888163476562357461892267742562444134093531036264125832596216278586756407034330334940680282076869468291826022134500784783170003612329733637932091968916461508813209501879861505369033140880498417014229277701908240979968449629526065105567255390723669805054595425462587678494011619808595666402178651212479294052673066131314797629551454135688098941359713188772083406499746128519361904269350887999267408472501223620141156901939324333002619552582481741564000247939335941451680929560679576207373979226496328666777334841431497518121559818311584657839696986007881982996805711861456534161085907665447718888907566314714098778114424445412719048706474400254089686047600607798402951347927245150249241323337380811852093691932359665561317063769433881045252985865903004760791420188480031300217352957707283773557320036517547838682085575954189736713297145421084686831444843145157359618903004577463108933492838917012573356937548524908083798078618658010879145025683842238483998715631957814857433773173968805624455364302245829494036822022551871608935133584324707453527065483307492297299500534747272663485573342292977535173019527952110343548187990674508238591307980888701132140950534941670411288873712478612083370459046750174208278553195031963087351817488716026848714520295297248639288625849407257061857488367892240685067769215796911281891087730797203465034949261778804921353823266553921507638356310925138892202864794928336966721929520138148403867818202684308845653667723251350110583529908784724899352644315837711372661733870127786954277212193300266296694552615588958821283238123891768911407201832396112414757576535421445873860565378584567047579319127594191539120363149470011986165085555772153831055509793957005199395626137962005316892220519768617051835150597756906035312372146253854899670260768148100082522901508269175753542209303071770277345515555023156529607422983452702105098256991669319826838290212843505178046529171552177431187363812661117664261422947055355896434951854789081596724492213414872607486002740762775744343864583179828813397932478801886256001318630757698954668337230667455954435813903897508569961816285010657229347894759847396562159686552534140922488089175011868572744134524619857138134251287247570102289423146915960188862441136052130628848935811528853021028376783163893153697790092269736591628468843424969503283430130727425572643748429650235180911118511455483172280342192858070496201645914395274687594542851548408983355239060526888606974249989486355168791046756051482887763671895134747254857700954748857805415565045841866455994543331967825252070962667716294877429811377054900124656381966320592785702425900335859297494544525829794185746956431500127375059433137876482174160087667924670537264468381970823986359772032422294644477031044277138892131072679862278708494075281281466178302231634825756743730680389256524882460565176613544720102439914664672482113438636033277080140561441930515523557096055129071027732299307155198421644097593866134740966195106623257458512310564922159914359826203143078827828615798074957413080844428536402595498166913482449910523689417279301206729608283012622302322437148064265734221173403190670196844269296933165753948576894188412292801023181561442056873004161768690913817004977555660195134662256058610102779425422038965635286900495479525727818326153412517008947182440718896432723854558665869330500541757266303060721685179679902523669478609601756020609288084453117304501250452060697282851510555003124983222394314101198471720932888487054887794008921995659789652675982038004383045643773070316711227517958124550415683092938919497635196235792819976396889249372255543841198252458570868258922812743021161446465608773173140229783484575193120870478754447102288167134757073719280900658460683999875765463520233662111218914594129992591571653761652166678024432684352120007160013942660102070829077376660756727153651058302011876006059827741353607223977203132107504072559904407877176609784629514398045063783977571842979924412737760983809923766217768386612585931531371453293521694808009238031235077343725920428498972137513539467653609654362377635115355359237940203276416875319040132490989067233556853988399322854267166904602754783616055411643897911072011412675796712616812056119007523057839062094374415903257788461425427612412592043606890086229016441887522805295436192736946069874597875692819283292532390778722330472810036911292170458180701087505394520277276112200442400557683977621115772363310527124210435683415727269816767017939443814653652867775494661904204806414168997394761563541473364322719513455371135979271001954697220692740594892286992508929883348358061553953834985153609656297437977726018062848693581800576871038975943421649434085564408039112734705899992122158994396745780453277305467098817509225262769640616552619221798352847153029660558818616450996686574703580810211830401140533389897805149369755801669625385961928272674365966066215379006690142081844344841967366638360782380512347683875255298240803467563236316958234157785666378213828967507778718207675794549071678325594450442258931864344998836914514246377753487135225201152746704298284544550339592673819738913388464844214201963033589882556132964755839533819438199938034596497331087304273118934514275686903673777552363468643436725408654971952131255985963662348306858619743114285464416698996876345833712253100585921934555344629936905987621836413781947976948773214436416348544752717652898603376689894047513565955119669671125276939038905430556919258763111899904971174591716160447881153650520565204232831315582519400824754456559823564426495189546574958988626846930408106245208013710931833140190289019614414810926012306307145229787742958380320076449478194072128066724841246395068330067189704159925856640548643198389417259638647622669072846319417228668785188792158597015702175573091321600624263560436639501146738115520876374626314921531179392482023360657559482269043473898886791092013817458065188060997556907784078199143167584148956078078115058622419176523792922437037248951640836464531566065316610650696529921111685417306546616806774123416872520292176928450357461080379260909614110621801324527486620482483891099909307861072156369419160883463302609516668998709846350717454971241555497695189259624757704461626392194122427388875346690244020506864056489706128556744865968752523851933680928341624286434961925308923602365004198905507240675785369319324530830585226896480917333188799207277754763533913777263149677832826976287345758934250235244961667409044372545707407638363662520532189137068852551559135570590632446114474493824701839679253928468535508032414968370540613428636691994354817513354837478729627959297833920963126199226024265556739996443550803265951731863334772229894299930428057983505063649891033950568507830599200643880263710982972140593300618502650579776259252574273064813699262634991391218958585591228280979061196725506713813460471022508076556322248062865698699802875906186171132416392581420718442489858578350209083514402099312597815095178329600659129765502251534206272921424157936553336408721615546617565837552898546144684280212490271175159693345732548471642278928239103227101539230883688200606512040992142440280999447954322376685914967578462986803818832354466053564915219673263040057404311622046345131138291662844449616418106005677611396484033932828652442422577553803860639604080501119692808172061591725046693343812401678963375581058317570317322631663310711843649702109092088574321690769158608652927041474284625355408528665320999643988245699563185440206887014259848995764117554350896411264611916797348047667628278258153498183854295384879395502723379424320769290049903147347253582066154760655665878080369798864298310001479338679185033309592482986741436391110691154980137772710458249382877865830679431630184119661123636131389822365758127570525906528403815916946862019870949937807954846773853`10007.529522401097*^-7;

Auxiliary Interval Functions

mid[X_] := (Min[X] + Max[X])/2;
diam[X_] := Max[X] - Min[X];
diam[{X__Interval}]  :=  
        Max[diam  /@  {X}];
extremes[X_] := {Min[X], Max[X]};
hull[X_] := Interval[extremes[X]];
MidRad[x_, r_] := 
        x + Interval[{-1, 1} ] r;
IntervalMin[{Interval[{a_,  b_}],  
            Interval[{c_,  d_}]}]   :=   Interval[{Min[a, c],  
            Min[b, d]}];
IntervalMin[{}]   :=  ∞;

Subdivision of Intervals and Rectangles

subdivide1D[X_] := 
        Interval  /@  {{Min[X], mid[X]}, {mid[X], 
              Max[X]}};
subdivide2D[{X_, Y_}] := 
        Distribute[{subdivide1D[X], subdivide1D[Y]}, List];

Count of Digit Agreement and Form for Pretty Interval Output

DigitsAgreeCount[a_, 
          b_] := (prec = 
            Ceiling[Min[Precision  /@  {a, b}]]; {{ad, ae}, {bd, 
                be}} = RealDigits[#, 10, prec] &  /@  {a, b}; 
          If[ae ≠ be ∨ a b ≤ 0, Return[0]]; 
          If[ad == bd, Return@Length[ad]]; {{com}} = 
            Position[MapThread[Equal, {ad, bd}], False, 1, 1] - 1; 
          com);

    
DigitsAgreeCount[Interval[{a_, b_}]] := 
        DigitsAgreeCount[a, b];

    
IntervalForm[
        Interval[{a_, 
            b_}]] := (If[(com = DigitsAgreeCount[a, b]) == 0, 
          Return[Interval[{a, b}]]]; 
        start = Sign[a] N[
              FromDigits[{ad[[
                    Range[com]]], 1}], com]; {low, 
            up} = SequenceForm @@ Take[#, {com + 1, prec}] & /@ {ad, bd}; 
        If[ae == 0, start /= 10; ae++]; 
        SequenceForm[
          DisplayForm@SubsuperscriptBox[NumberForm[start], low, up], 
          If[ae ≠ 1, 
            Sequence @@ {" × ", 
                DisplayForm@
                  SuperscriptBox[10, ae - 1]}, ""]])

LowestCriticalPoint Function (for #4)

mid[z_] := (Min[z] + Max[z])/2;
bisect[
        z_]  :=  Interval  /@ {{Min[z],  mid[z]},  {mid[z],  
            Max[z]}} 
subdivide[{X_, Y_}] := 
        Distribute[{bisect[X], bisect[Y]}, List];

    
LowestCriticalPoint[f_,  {x_,  a_,  b_},  {y_,  c_,  d_}, 
          upperbound_,  
          tol_] := (rects = 
            N[{ {Interval[{a, b}], 
                  Interval[{c, d}]}}]; 
fcn[{xx_, 
                yy_}]  :=  
            f /. { x ->  xx, 
                y ->  yy}; 
gradf[{xx_, yy_}] := 
            Evaluate[{D[f, x], D[f, y]} /. {x -> xx,  
                  y ->  yy}]; 
{low, 
              upp} = {-∞, 
              upperbound}; 
While[(upp - low) > 
              tol, 
rects = 
              Join  @@  subdivide  /@  
                  rects; 
fvals = 
              fcn  /@  rects; 
upp = 
              Min[upp, Min[Max /@ fvals]]; 
pos = 
              Flatten[Position[
                  Min /@ fvals, _?(# ≤ 
                          upp  &)]]; 
rects = 
              rects[[pos]];  
            fvals = fvals[[
                pos]]; 
pos =  
              Flatten[Position[
                  Apply[And, IntervalMemberQ[gradf /@  rects, 0],  {1}],  
                  True]]; 
rects = 
              rects[[pos]]; 
            low = Min[
                fvals[[
                  pos]]]]; 
{IntervalForm[Interval[{low, upp}]], 
            Map[IntervalForm,  rects,  {2}]});

Secant Method (for #6, #9)

\(\(\(SecantMethod::"usage" = "SecantMethod[f, {x, a, b}, opts] returns a root of f between a and b. It is meant for high-precision applications and increases the precision through the computation, carefully controlling the precision and accuracy of the smaller quantities for efficiency.";\)\(
\)
    \)\)
Options[
          SecantMethod]  =  {WorkingPrecision -> MachinePrecision,  
          AccuracyGoal  ->  Automatic,  
          MaxIterations -> 30};

    
SecantMethod[func_,  {x_,  a_,  b_},  opts___]  := 
      Module[{ag, pg, wp, prec, vec, z, 
          mi},  
{wp,  ag, 
            mi}  =  {WorkingPrecision,  AccuracyGoal,  
                MaxIterations}  /.  {opts} /.  
            Options[SecantMethod]; 
ag  =  
          ag /. Automatic -> 
              Round[N[ wp] - 10]; 
prec = 
          16. ; 
accold = 1;  acc = 2; 
        diff = b - 
            a; 
{x -> NestWhile[(
{accold, acc} = {acc, 
                        Round[-Log[10, 
                              Abs[diff]]]}; 
prec = 
                      Max[16, 
                        Min[2 (accold + acc), 
                          wp]]; 
vec  =  {SetPrecision[#[[1]], prec],  SetAccuracy[#[[2]], prec ],  
                        SetAccuracy[#[[3]], 
                          prec ]}; 
z = 
                      func /.  x ->  
                          vec[[1]]; 
diff = 
                      z  vec[[3]]/(z - vec[[2]]); 
{vec[[1]] - diff, z, -diff}) &, 
                N[{b, func /.  x -> a, 
                    b - a}], 
(Abs[#[[2]]]  > (10^(-ag))) &, 1, 
                mi][[1]]}]

Rational Data (for #7)

numerator = 
        310164074912141247697854277703132714599604820348726035588743994097170604515668682413904605437425282666100054677784938901368629981601977608952785125225185864065413481442119206073343897082771239821801110606899493331919072938020730816781706796935420972664256264853305300197191511433562702697712314959244547786277432471823407022737459816615218662391636141519153368726209701260855408655457488102788489119853235310966868301114279437563902761225846669154507335264290387573264214682424308463810279198399457577449322706460414205608889536956727157011575727403423350366540182817330851074688645316688396233891211163232506811970814645336526476924664162653372108434576219190130925166178663106303937529118249309195373344467930768463455449738631085419205834112119461865922119443887298378306142700773313615809068535919866009234025497192541998573611909164797767235382115597472995212646456686073863115997893260361145992884419452214391541893109715735222708254718666739252110468435642524960800467279532381562616260259651147033759918217739822314670448785911456495982264679698429138895992134081004904503333246440825085699810613346581893846526613716508413301706985176990949104536981811798529204550815407849860532836897082282689397934817601174427967892156917656230967299364776195022579686715313397018682706145080854323335857072065610802054883193501948102208394366238212243020584375685049275902629074627360151378245828010409515998522727102819093983265371271972072972227020423644284507457205962330840319327442930705325544475184516695012104162888203686707760913663303619731446662691155572042591683269688725598359084805103034998692633650638654882694953277961592713464299263747001176637846319963842787277802307441735226636266657454287311588506593152115837298052164006857528704740491622860942304038619777613093338636117625270115694622065219259824925065096604032046232840658145367435621135758077651669412868259453902420846434360584108433305897584981618121680797681483649272521890381455390475033102945091754458199540217376998757461979059265559018900486793447805111444711123366389183882972833301081464707011078058699768082941872800453582886403857775598331559911220614628991873730820655006364596756808811723705936687836460591764035945435856349643357476144851481785646318095242983598193237945391239436745315869605691321802789962238192419857883107766738890742450151494226888289528715163118340873864444202334328408517230639870404849222835327754012149056624098119273543275256672019978226139754969832319281486841944644213370615167188813076250478565710852763751700024497018869901057837480732934443672373529485469390600265619830261528147578050465868011015949360841103564425390462772441515891360093847896626979880082674831935517036498284616560651354859432490951699769530636091440651258060128026390595566969273219375171517036632410855276074145152941856148055146474337481754224182778046849781746320760133126070506925462829556107222671580206857987123256211118833303381447665820488347362094279123324646487302067639101483162788225792044104455410630491289746341985564608610735098903482860578233363279120378840496979696051305522915369342057098982220978784488645870102686498892340938231384336927691804972276685186101707004190927335681108249859376428131108436095975795829188193128467133247484102450963037633815975352297778037656901802219894695802383014383771906910684274229622241158419246654565576360357645707964071985733147937639260822745692901182723248579600198092630287238338317950808875447769365406093647965153497320925765787478750824143855971363032087703084810250647893247227666911301113191580624527761168153130248931298949274877227029150005430331237514817077797727384633000446870870512104934730594855460192511510119570446807596472825944348300513383381863682391997050937398805665130542889904184187114843472140182917689709150598669616573430364477383784922352214763143043171880201484798224395247144299484137299611708396278663354446894239425483225088672732588395125094202476289363948456701601908262824517629513329265329380742996115052177562456299791162168500714956047838989240700482472933232365380469358308999495353080107057081781178507132463703514185991458739301533485049398049647209333341027558709796798165700324187174560884161890629293010111483280919282544207886151424918978585569324047873203406956059049252663173955491858967314430962736338753313376197190495963971904271470306954688607533970453740553632293101859557526436790878506190708315810180005687003527807768622355233976561857773706745311485207678527952607840752765876607784639827835785225102661616450060148353264841534752338076439399776437325524623882533223094404305767471280440463457174511637972152182293584610238487299643059172339878347338967754593138632369547444019510792110197088568790870938201758345318615620676901632989305997676467289313598631765330779232585389956853030008108994713358088308951248525582417660932260019270823573357762631255971308957307394125913600871855100788370336627534797017812385021625799956839954990026198634425136628394320914433358715664079292322431583077548398155870168749177750788467679562254196674981017186016122723156786361060804264454057136203226565519457159610412829107356273316168590394346175169723826553881887860563942034774813993746415434129157229765508125320881182291586197620732525292833968739368694682258898375803324764764836259729458407519772451367428991134113344231913123909303692309422937104377602233621813684852979080219579298371856623024955254239431547857417343501071330458760969290739179772183349913541523521395650641669123474999488529354949075059204474188034737813117488910100321128058629060086048938977377299051200972579508253962066160349147398972190600571253580689509546284526069784968160581702819074612580118626870742933790319992878049183904573464346808409739067624794714435248311715925294442365626696772664229693520384708905602951086993180897412263166948928314568230532053379549056969636514779607558319850562835793621185886409564660869249654213764488649795576256172894127212006407578777782276947504790726441211094065978576542568952790334298609963190833333358413506946760248237354290085775207871129603567316850380813946402854652959191539926328371283012625982847765824690087683408296036457894914357914612878442688516167297587854592982897140122350106078451089506907551447701194282837186742508660120411566721177058920549729465235155152479710304790344611225811523735404156350009325838001609944512294994056766308292359629218112617214093863859254569823069558672426531389368426085584297018853510577727408893610849920267707500049407306143638014173898271656563212735733028620396171038488948192648650551375467823946843629505786028111233069752439555988234046015434379739078227661752278132512222300452395816917693458153675037324836355848225570151002024405175416470388679131538937911578175602460426786523555704263712451707464693803590772864288266060392528647561442563123106233511905273632641215519403793436121198248895621943288232994634321224936418785072006112229571495342515601780789416435427852589159898074003907883839825312586795726131595618569278000849509974392644678401401263563097078734700563888292561207631388229544196115709848080274508997891052276431991486070907446778140945783183074376501775090286588271491254629884845307652987025260605625424946624834132364455466152757331492756460429715680631444527331276130530237247714742468938093674107240905249766733699302262514980779111389552118625823964497841075547457827363102560866404491561844316710296015903589572586169719611637080051946148827801396012581216441284712450939401058554006195888723790539600140163334728448087657030734468518363699520549796558354303311350187472224536031618880177775271664426032056936693573452926709833136348233245308340271301714558289384036443823070829123892050157791414408726928452628283280374809031668384952614325380359672517162931174397511702365341765726589653742778211296611290877440313262430344874320041247281485405529245477576792972310567918268834026620015875802742578408388178523806562420720481480730162759584288576984388563439985449702027564922189647418062311460654614689607051241385380251318070887234659839821233450949701429640936006592570300339514644594196170866188672901384386380564920375311595082074973795471157766726320491492457020847396679523137124510627983656122059669207731127784242151472356831820456882280237376353822255257161325084137947311463265160442127819369153586328091483566228336417384952193323308717277663004370498267009236241104841199865453051925298031824245999663853212007122599950670516057272534336726599771651938410188385556663988400986337830835585346005010507615206459331539733524576821606548437710267757252826849333564127414264651346089568570034829876847264247208874017849407986254008994547023154974368584282611612739377499085895332758965182487872584568484794298117893002693610826265322395471417187165760716766645536583897084324953266350871921330733150401776332758406971459513627186534390517274329781813745893448176265805389562130508235199357507443426267537470610301235033447941948737462308173522588539694792744111044757546591985354293175188913444947683066336743945827099963268949453661335956502388658847949345024387300164453195490588424899150309454221431236242098747853464441898796428238281588371730520097175293728944532983059445030791759331015480681884547856512977587681150716827064688395341245026843711123529631265340744895352296680293907749856169398289648161250836323158292989842659976839242044535790685527511689538372671982081083506891262554564084555457181132289347630274135410251328802016350648251169819362592473206090698484148766991097831618652397703072277133656650612152514439921803512129986397372502924704474457148246114613528915559949138078545626525645750658972267886103636312739441085526626172983410549507982719584367867581205343010400096202732426320945705396240838448079383609435970828622239803706346825992517478676534326452110173293827149003288794365820612619364567252453976429391756658099381430008936778446506645492411712619714069632747599919477537933276267478086293769629473681940552886462866613961491131752132486655917308706181124182649506179448294901436053905034697627637124918244994265981230312093792386856428406890337731304596843796526319777862319291397065537606383430789148784457317497356234302707888357029768687768471563877163997197945622038299753984082030334913013760405687834944061685879385762350495676383125349130604815271073345509752288447906306393981493659020020107163342147496085771387837819773647794812670306248911506815616146517265459007143891608380643407115544889583499675637293735926267078668825299439691158676140221214098326367232966994544737045182661070852411468220875909851148569661641845450757877429226298258062751895454408010364675993571511455622168492325086360740423384775349299024140901023456077353943552482447341074900041903162493366078039796151749684372581882763993856241715363960421945258799714356250160348902399213908849127314388547718246739715074032976009764967259014405060037133542696725578784135262459404429841708888829389203347004399998727178388222838130380013775984681948379692032160601931128122815647298384140993045264077961680734194665703239715307886689544609444054532398663631718206048173714944630520497065874870156601223838183378004036268695222649115623935695052986979143391579932121722205324356456077597430589932177577239866974053983018453451392434910051389882374617056300901139948838595989366871844288951921199672396980808865946810885575495919133822102443922283476077039683440481226464845627577790131306923092652643377748894034188370632156055858586214648877858899847651303784852816429077967791076549505071326267004604736805290905406533345237760342458746853149752169715240874022796301365767048862611544843951619207034102937722360282898611123434615722274938868228392201648163575041953479795370017077051501734561065267935158773129684691794452015708403091798701133327292023205326936812593655524375837574633335689369781569231914125448495184082211771074705677362352967782643085323149445908057003393642565180560844810608349225734518007966586608390935469994544763618878565639125707850163088520313747003594410001002019326381609097603928113514327528635180548152618049012410733256352900529183730931058967758699317358667404651388259703160979030792173018973978904548703656855033772176977962860681425278443499265272842787213693142470378905272921143367103955470350503346786261329842845223472096475347539076020462241219298759561460279083381256681665389590128151952835829632674189977121951149678473502928041919472584656722822380945749448424107461758627668222040871267972355168245418103187590972974312680855184064372204738308458236300515742565066901807132505482879389544218325329259275750661814643676660818785397875969426935114956161993085349450708415852896090161677634682805514747761357480288511061872953312682824686023637177664689164803583011220559007893573650139331772372307904684478448604183687539793095216189925592475889305378945261457052466944278218155904378001032440299299982679296783247328411839887991225579535248403391192128713421948988283328679864330250324492652705723261721069790885107859611943647604636513285792944119745086148164758236645671032636483328369121565594021410675173594676355958086715020240541675153813387595975052948055409647425858222334801640481271484408231406440671301653360393080170746422128202340190826822257657934033398906288037154234069938741535596676579564112944892898812773596342498694050359924006645782989336478754165574446419581146043804991282405694968893677297295522458356280796888680807044915084547706321551632644378104586347815821674409158051252661291609556030345209228847670483291189168262709324316844849266229424179836256768601811747237510341403196895282228481697088183368589785625144879964301835606240984625025759488289485885591054469800901783799761620583390270670115040327758810635126302901300058569255280534738178130794018409432161412910418978864779384444954879049727136612510526940160603990886975038395411085126849949922524306848969355494251077270018273666500603527921443235129808552197466210550430075703574469767940438942462507542762312440776273662139903174862867489306228906212975343189507986460410763870034815070603927039505413917591666337041451773440600408811770913215557856446663098149192995871979316239255952413667337749366565396387925784709183156821276506431918419805080678063123468786845213835071632527108318429310237646071451574088485268904514037580163009142312336276858402370307053133861303061301479621247175238978596871487060039635795016110148759062474125938512063731024718622851224363967764587503206545370760516474138547255445238658624731876463292518583912428559334983771696701178503970266629266671293613497991884205315832132087538644357613367200861720491903208074734549097626171356988188541286515570385909731777292932916649960655903076259682335992136436990276709761807858655540652339476794351042718013634824506853244382158250165437663433824751589082650389808528853960057293810375877933935055905908936592946408664224094630519079975631997562163894896441498943534154777537989446290391949099072427558121855270157690810453320302662261799665228744610621525513397133225978994480400877945741047447642124098008019412381704402498363552632326731701571644827138645350305677969350880635205301033191760443011942857731630163295541749486336081228676835171499008925434421438056025948968294637000898205118453487433034368223221768179665140074072842330185406743080608954764373894165234361937394221212932964175119170458371290633524460897653960820332781267452017902255488439197429295623548703152502897180175250195211636958839314406431176607168470703676675634557166075230490595072504461337344397826190961495819243959066828396282422972210006822818170557269240653697030251780298755377171988622903839946467161948374101959835418781791869102154589463573995986044247127513322492853168965149044728330063939261286240954761006344180141582517028495214375507518972796164417329433392392875550935391801902671298400813872947689358239554109998995555024046115922512538299096822743247634497644380180535826044404863853581173606553628031901129019894612181932129966211232297193524542165708858406704268146231360114885221937007905237043449143158322063045965937088687130275193661920853646427031551517392697798048519037526073996035863349698948952374404227326193013195269671558126883394754142987044504810262683468714933338089431930699226348528655005453379754401610593187487613313498520203431239978665683408194329751976128696204122639794516482764537892996938595332639041059973967641396814466522276066088563694726837389319387565983142573228788922000368448263276701204327312628600880992217200509008542618517042306014020545888289265373156257881097282273405882074146895313802067536542840861364029094401552600029808965004476618192162340467771755455140722304971217867312734679465225170725891843383746140440194801756768937358057681586133055509666798061045801388695831539494161186295406252978770538111056525011323233217171627163263387854638168689961453086382246391004100849228374914262819023682384767309436429190096712174405228911384486264503229316540605821419784284978374109335579911773452312258063134245344016655537366050538130999427524439393855692190011715447437427608930211335257357305526067056202812080965701561838311076705430032130842072470858848235064863284247251817178182340009315168785216892381541237294596330980706512204996620038944805241668260267025664571223328075786740863497830518168959667604543141477095560293013219405677933515455991161890472195238755738645004038386121671315195203117526948745204814484964666574651169267434436986125431180572391160716776650647635058242793934753771742859245497341047159678606059564943212505434540800285744869717022133418110039487798495024017911237365887409295578191109200317648013907319162608363827495127356146760542781272361779550168962486473740924013578448502300352696951610158247439454134227146087303026035247102249610807614478984104698806961795141416721068158937892815520238154840600164762300622332765019995320584040915100270667894572039688937881012652598404100504522360437925325007565659034309806656695096811958381733337960584012642624911580776700090471963044181443516342825406054371376160713793287450231196974417323534252086230812922718731060194213294011354841162808539943940648727750960791679563284389330212198951054385093120438558820028210105790808503404463880292910352766249245101120701108159001244829200887500098758329168979112218909079854243523372870523291594838762446061450198180509038187856064729966143824837653244991011579892623319665841149687257256762923823969899373876451497098385907803742548880863115864213826524470390433729324661240184367968182701016539821109000618175636833439539248622588507882527455888409610122091232956787488578327310558378889892447931525211383881970936049921448020244300519180516082741117139266037349097778747418275935153666738745326066411174656861605338010553368886242623388773433864427730820926828901931018423068672961488008991990797863320018434309160500991424752123690520142264788586769292791738137260185562673635737545512699517296066851155642746855617149634359725208591039858683410176131412267931488935144620911879996697311264437797600236454962582154106457736719010473605362149145594915698382413425719609049055175379376004799415865968736162746919288392245250935083094511417486706747031719092805067347199539134684294442367657106617112358313633916009581214419625469396064624010611763766810870368028166086646980608744484293796405720451194881181195377920824163925849582050945036984193957317610781791601238246023443911755886762957005208454952131707151174600382709831992647797511865373999895715300970066986944878561368475003638549631170883736748672745031205333386005213103599982082591193447967099334751021767840958367913125206405482162558360353518111698464678011851141375992232716345658924175890488060536455450049640557364998750732194243789567872075744707317605577160808877645899120086817325430951571141583780238055815678223791253540099519375418965511292207039301124601380676136611030878928056133559180984321557125885027494291940860729856723644004168598002740991157216570092023807964225447660001311612733481174505390837960481464269611357806880000312356082669312592184090049310863365159975595929712849838927071588968187314687945458995051320665383706431395958943785780218968628356290533835590684463497302883787233096713007119217395985790193325309153649267215219355550938144964687388455833887123541219201444109917271043942135045266533408088699763481819043711303659950917896981772602771124456934899209656241764429345514554007800011998713006444277984213838208585825238514245549073290443519615973198087544924279754803623955502521142666713853654062566623272196035590177811570991674230884086528786628745973577726525614976107392315889890891359872660024516550951254222963678164421431653207663932393494848567466186927564612308440279368504693310719671680932990258243607665705169142681845674867453542905800269692081809405121270671219296621242891887694629858650616429623256972650116862252672522968484321583305506452600052465130953942525926173389354671966027822875118453597394212081140848435197075461150678496187619271589393471092864419767694976421636245795813927966453999648884570662209610303348109261599527551700264570770842964480523339017660270957976371363599646474384187618856679635828253012990087528419589837282024939767169246084517697391218519608354899279528023640937756794531805360292587295854007647225112220802453854753169474633571134508909809482753589797100702641274296819707968177174355282953027563691521539099461966888726516835515612297758529298041777447587036754043968835430026678080202689765848694998797743651364824888934307728672728847251373856777999788249733208182769519872691357061912282840499693038129626881201897192556548772579920711122782166313107226338656911186899664042695529520298726306150388395960216156667466248913354509079338700972919417193194495196844418405734052593099927911076733369987940786614123233485210344372840038547722993257848295681316393950236992245283435730068497232325931699061357052211660932540508972193654863256748003376646786547615548421946366596616316494201952789778495083941221290915780162286147293863241524081667704144361263830036562982895728277970074054912561164310262169907645261810595878545864510549355328411751111291370665830871649078353168011227539637160289793041105076663743175514387754977590713146558194988757020059940132555546947228194406894860439701866815341657274182935816284049292346997989569284460484684607484176984384190452405402208025119565435024796689865873496959296940983841437342668893868279061570743412323523560349812359916340142466943593978686289652602461181075196884417817550153968353271929845413265633887859191459763307785514350066975534293997502518664385790965141755307219059804621223103055905176029209316287872790015363027014106936742373315578030379110270453991477995214943590985268711640700762460010263280891197070331214394861703416850045701860297234870717247016095613555340946828642435366041886350193848285247128365029044061320792283657639565803258772880616771013500093424326546713988839152431748414649159423638603675370764714114557321997703096513872059297589492530595039250310825091804840531688544817279189937465571740248186936900584191489397323733399643576226833354344459775203419773407037686175269188113017465975073646486768851753769115197474093972082077631687112747840802898985221983044309270134499178267769968601376031587923878382343533565916119278642410596739708383146476488515976898879415923068064382969438284547614217334826801771457574695185118165138754749592999648079270601428600347267913800925002665263725623118415815823454237542922900049370639510887666655773582927663193680803990945966576664230457839062494997095726598865993136886616215484236590112304495815922957357500710769140475051186664707702331053031702255384940990451395526821689272416267959851362425660720239957361500489529949373991519485646042876855839032163482338288765336451600543352872539063241546517562811422856826858667414041315174611312661054198963412240964372953600830187982449061044560540198283504601440515610067159400214564066533745747827722127088554051566847588152533396895253689955146392985336773510004357077701587767190189455998944400743813677193018775113211840718856203837060447580764308220407525670541634229527347497073840328458058606168822647198157963164956604134075345360583347667831144758383308139174744721664095181996921789714496075931411652524074432313205678681377805120214480954524650187044231463450215431994529284607725232637678141799530513927220988248338415387479669636376653228171505480381977008018485747709107669981474402108290748645543289683942625578108455119671515923119366775409313903435554150949250617652907124783531902975808883775258328417321676554076950857648713734172341327279711967797477888997096315678806289029641103934697402696530069631065350391617595661704186638864092833899058770465484272923615762593106137785899866134410085294724487694491900532678007158670318297719521133987370947398182293173812095228071550661258834566915736336393374921669262001951796476657187470235702338634189453715139957448504566676885247492223103072855866774133427278406939306491280406720827513594336639904796057765735345695638581599002098824090072839164903938104754728381737310899369589972440901484798609142409600350130167413605094948042142121636919627658192374135015730083702402798447422921020876500168891871009164542017194372059314411156418759278832544060211549609888185494234326965961927347056302115247611861557585967548493291890573412716448868469941858488713849187009289144445978326097424531044090404119447560658543860589730615036391090298825612244512024053191174643315537890939695582044815540597592630309746662185495696696837391532184248034332672355790301941279682358901610771872377956274891603244043431227789328459196888240259830491147726367458547994053106430106267486095381094682500390529367909225156644495386614220319815943321585337671142996438073240196592685863843147798620117117982886153625864384160684019017863266269151049033711114116486810367173872375702402860496965300687219774602134934048930238958335597700679909748626531815380426485151742997981540794655260943516242860911454963568249522824157640222219483089347869682990871633535680233701312465678648576964702555601052320360734261270030196668848337555181461345388233497690501289662754527455490982584831941538226749291044794731986705386423503520669010803040424213772721050622946233527926072492497981361821063184451084083865895110898229188271734389325054028446362433955613099965563533718705311915322800229248978953333736631089753933114134910640387103107689186809459492937943987998536455401052242218405769192984035917684106657763271814468820320170664957379871681587659792698593395597769835703053609733223089267501615215577916133794667560605474741109394642730294915928983217648053384972197069796321296874227977453071738427724700276073809636577693449395029020048376901800049687926368786519502577320625546074987858022383400860134151155418179931279753120752915244916126371884228937667315499359501887878014952075212197323238307821527661197408725998207761297812987145157923896193723411376650926952266825245223370961209626080868977268893422538637771192090665486571799578388811688840093168843873282846806142001045037076328233478151156335918924776303204798942452638726529722181682782867099056015208073699711086392556845841146485198483731648193534915390590270994149101101675727222927145598749676368836842508999286174571308293276628721871974006399917017161450699296460846503732448756671636868452827132826617742405480982374679679098012401565630956389027958987013740348186576450557642874711439257584762337170865324253832606717297941253653883976169285884150816091720073800540079483057494540150770954060211529529975060167663297254711358477018182473977110052807943095639759222073265047128910778291736710269133006802638605710572783083333712750933293825999226759607736350377064708635392224905775873958238797421525998481643598759751109633595130191306733337910432444306339207257163176406301189153406595123371522861808570148176475622457021895908092003799375953206517335449022596440433817490190999571346763544688469875366399508727560291756539516437784192717787153982550182017446724037937904835402987092784193149694751802548928695839624987121506727795258401139519121631483501880855146263964848922735014496264866965379247130621353689027138711454796953632637807398015871220891458814201986906853094436119801167778559750447124655249308445368776087173623491411966442365318531031827286563751696494357740102966594695930572311565651140832665678838148088802797690214040460927037875459357674716600202944980500317714810340658199054097669636990257989800490364568947165964501037074014167052717061997394502770738431223616577773407282787863787797883417871382231821319296201376685488677792704283202429605777081224347961021861622500669921646144996735780012923248608631469208741393792101254000920505536273968915625422051645761800592478282187184897343161540391119036412549091534538813413922945206597432081565254186052155640675582771600931916538570148314545000006846418755915266792652773043903802101813063026253602998599461060395134135566483140900965268790809609186437189609044473601857812392591300587311099415848917039240624648020401874640346067934055572720303689961761764118386796843665894882821522999978586533885390810581000567712523970146412319470613041188363750411480210903852587692276990974595200104639025829695663717726243102658496205241964662968270928887208113154324394702455555352279252711314149734980676508788875561012586361642839846279086729623802491838257997981315678544525864823681091177922726878220822798756314770284876636611828437677623252638695525496263095480954628138260282713946887432301251278145268728429344712004907172541550224353154973971486650030341484577141024722097682948851842801237859759825248956782932005348830858653257416145891214243978958412902214411891600296172159883331967048795591145771556637716347786761335961155309907480887893961097181081383776066492911972871699438495093264078804956207747925616025698443723109286324245061741704845424855994703137606992810848205631835177818060475286391214436810212341649727331424099086115530609963290246815458420154726862523726298976819204135626581993309483192007858569902707425320792715542706158092296409899450595064929923360676580369918270494378396685364048500683391610552395305542875881346168561775876850907491898882590580501297010749288218329861761040681410465460517419297670976102299359703205492497691806200096240317496865767825988810617149669643226532664611425777544765733185957561947569696253652427782360285749675177598390920669700288194979195203356079421180216419771033816868070601953280776045524933253727181489092382058471863379605230397441463663121938390220682090958292711813793639531151674274493197405601974877542793930218539792839552690558639262783711797292027987491234979564701005008633034651165537601226644743654540181613995201216596115855585262884853869539005266669886336123316218433303772496311468949178033916209212814268391559715989787643561695981183963239840869437572565504493919324721744155203779215636496238604180199132186855191103068907647629673331629250856874195003604598896305614467801626193011663380955382490267248699768161636045233291773557703865555331547522629530140839849589311173063244698685894411018818363128351936206534115246320742229507237587307033125113530296712421514840557415258243733761310343997042951524467114473338247966643015963879749009421271621344170472326299160281457996870745523253245278741750243527384626650040084712573581130503872547837227686023766800372857043408916131057312054738584941408903639918653760053934925666852756714197394574505781333708057028612498563509493697870206079546835220078599522691172357869015521843545795980874785951896328253250225450307073848009304552398798502458775134983696157936702169408042858900038912471510197334338756999517585695201438017561054413870076216612077154314651370016003882258357860639351190721148399094664773795988075638043762684328537106011666115066187717747372201852444991956988525599056149849332395119374308081482111432180377712124185901509385154707509018970519262874928679542419296914026836575858337195913509899021666124418256252319116140199946216123463907456682571970349705281514089568550123800697691109644780535061075004054496228062174534660807080501564057252565546520370103326607591277917922216473446448277009015506287673472912063635925058275496387389840991016993407583778988074114574908826001654923827096033221584037964089119014713587991816024723318189604628688463762636349964601382128172605714492754348911570490703730806571380726059254046080928155415083143072925256863732713294551168896097275478783756693945112065545137766724827779498901295344202065223395202530248363425579321108392439057841330968314580040568593118978189039967833812121441744156875608608988286834523953211816619905293201226713672530440741143390826947695797044840241627077042737918147570224564718343436246144575675590966221791811442657754627856381970116091444117154948889885673616686592518362429939197676019002772308425608738594047792252420610495534325477327735690226376760158898072966120185686899677846773478647836700717564261005165007952781030735716522169465047553697239331450257691807662284224774157286007123875537985247557465157786332917041294801835152479167073453861211456739518182362978996981718899487022036350416907366939362486362681330139658162798082768612768863131837085929804606372858244797531874271503583151792328564487651681826818531609497706568578511763821267262611972537074732834799320379543580685329937151229751535272873484195361210417934670941014346842812616327215967802133378527251783292692982474336622462305221605660665564808833901870248750652945664003229703863939654474694233598898107622897959640145755428722499283141627594054011079578504425723071284825329056918436135828388643196293509233295742456202582136078298667579628120440031671328839148320239752791333236533431261314103271005148746424995557148677198238126026247059395052763071285994033558279351631212983067312487702480998926840252444562354490791361019838515394361212539382858010246634472421375130987747587256153192070114738544271722662606613027517771805877675487747209373724921428340778767266375423309347248800609103455484763479571269398626235165799082837566343317412745991194357120080951830561454877433919834029577818096231423451519853190862100689802973971487925224401549188169996683440867955663250998450406459229198322993583239482705157487761970549462456253905305780076707935040198191754988091756010450804813410168068606122598487222756380986670611146656624252170775354243706809263262084427306631283166676743387778057753153853672635086884357468954733470825600464258928179513970617098005831073249647333182095457040633636929350135554716692467360866355309769349920964403821922912054982640806041913516649133398353746110572604238030404514891477604733487894827594973833067706037754645480201667934281140884274113718264853906463298643843294346334090705728350385167002146303074586855101314492447632693609993310476628393724322779231894007312626566975596920503161545801297936677103890969371400153343491092065125887414909126176113369244219367028202624500863225809014861101308554841530574428543399934245058506110202763291101350933605899355775532770639305265855054705878785731669633968273188256083998445009218629459861176335296082344093917255051237365098652183526421147831174652418300775770182300487088885334740713285044836445863772063438067027050444557162984549351623522358237668157327558956267343982265943934589152871472206212088239193279490660899923071736075255933242450115139916930921278583564302411469732659820306153294179992285395764604658246921916733855553611840875279546058118715544153639806116395549973396197507948517937514103877043483328600825772237110733171085004104578711515501510442167985885455569288517784083467021683721111381883308304677390722506701657315791434049535688920966165180795392842213073228084795160488925656521312328770015989800134005575812188493775277986578663855372062247414048902131417638447516717651358540626384079395957292140975547279656203350729692608144021802075892403896447596344545586307062966283592594027206598387519962527231563069712272929316166255221337859710442092459387298224712041067662756004374181514540727528461765469224518908855444098512901707785281989731778336764532645054898895389674493488871820359755972344755668326423841131253607501943356710892649174742498722633218136209027619795795514828091122570919688042468698722036723720296712839590454086293625680702424944429385497922008676505673203954270808173780361297494152766289443315090976897769442205638598754289637258420795087918522420418608709405794178479631380544898728988196981611005113035730923108817303358861922583727673998270858205775920498422513881920124009255056538714951512035561990345144722394611166700802712545380871337468800258737797057175712304629553230940876061054620813515398978944929152826989836263301684703202713600540112452174868067638947372704356082240689368324490170309934326317775748301633396129979512974405913330425043123572285607838528571101469869153659758544732435240991494283508177586598017050567126602169971329483159974680488738756948868387727019320505500613544120354355668085455009364740928363516361747011374015718400085670917673189635292605476130193924268198481888770229520478582002791017986689717363791446403738069710338130934124049481980298014894624124947876661644687236810835025308163718481014412950449296775259906529534608812761369479268368146188510855032757609711739724916474753121747038073513168514677228895810713663842226894729952115627958418922044553207117632955241806592039956356502565950816104419180995554968059280741788532030758134573106855638073098936958085095155879414440880267874983812778739558204084490282368595304588355818126235847536883052285026910355333080615132502411614488617211793575369655893295359801895727185837764853632220858799451883459480226204847866154665008946584563871972689114253213977202069565568373769567437122705354154747711707852916676921651706302694111849697057195430984848276055380891929354662897538327031083056287564607231950133490852859303462480402952750508429845869667995410779529992030066484572124987077544963056243549113510017105659947556246745582760024131379767494971668073353113749681363289954530785596251192289679783670746571341904781688313393184002493508374460174994050608409674490137299810398628752295169561823981830721244534713419587338894022739904985856842620755661878095942158067065957837493569202507971177022900543213894231051974401575616488062925549658815316213601331983213886993091591133848881187703041042265774869803660741826465393463542728509686924950113407349739183296490103533726423530102034178649195977126398338443531187850561871460563793322423956906163189048765779889658891300969561298778688234789771007547518236358018426052117389896311729735646597056555298396858351923233968323043102782484718259127996818793733172014432112229206048163471719945406085326856663181542720744834738798642109653490060258290499221707905624893472393867245278522943884656697612417305970126865805881538717222929594778020068611079199510806725536544354795521467317560910220197849064586500059721937079439855693925626545990348210381427078395816755785608474858038531767972848138499731075950238125653809606927510102011409446576323380682489655340943267684588335197560160667511746841718973553823987817711410468454610712699431378626966758164946609876606969738136473321394270113482826178651225042720656418305496037244387323180541511871213470318356334798177579045980899656794543598348779554148959284271850213779490361819636954197832937539545188776129271723968741149707779099094648183508423883491120867337551175915090993769559585660908101714525987710716406725079123028800366755403662143075620032646344956526450349651120111911078858465071191131713674135582141247308973947904878107373550618381478763397499513010410094709448967502514058381779819529968881519467008283667747910100403614783427085924732449641277948275817201033366255433175351575462339871399900824130655424145531909495794693048611520361680288415978600464904432559587038739110619504020757950565032730407161775144847938522895991604994330085352820537717565469066057742698888509431569706953766429918614883511471637476839056075368868268494228857010629239493665900928342547277806163989176890892199726618164167558254501351849608440211013039645411128073845607586188891698771102317800059950396912439922158767194047915907927058259066214924148943160295242609229050681997280828892089213927509792320548111997180232717360034958866589214930679965555603872014460024240732936258496050458202384703074174894946610527677152866202175412968889790059789754311443987748859278392291780293149786460649367254188377081215127748996473137503736382986074933877975072532759842665767092589790823850851996105769340087802175031007908814307323088652084521531845456859597012864473614729717408443578167009985606632174349649836529231540257211864270339279059714879280908147630857733912170262155292472155351291867821870138928118851720542788815603676899942301736371216434923677738822531027606919249920259646040747657802321221199437953425972039324898954841484785047341781523448560667767021139935144308107221317947876832281329104157499040534810990417363852995145717156629855419550058166166163600681000276022191394266825811222173512189318861931022016874959035881536613777019706044800711655408133922927634658374166599250720123638381302976223319273913825877108376749449574969699800184172613171733907491865706502694926163620646609042474077500379928274332946716952567841870568031222746306615487816421738129448568174133760291154558283780378371827110973883327837748097308334721186662598231806046972903879369825600857311506008399002727510615920382803972576534942331062766133267076587255287714336162664611739426622530186848198806180862182702191517023961926253434098338890237242220518624892730273394256943098856753370363309629821669185450406949379583461622333221084720335320350712073173640214928610541831533598920958195307610514901057074749727085419523549951984402868375829152752900422967540510081700022359722406778615521673520139868931627200013939651929246849518493933462793324948742326642878081454121392935655513129074723984600617582565003551985382085716664836017455834937288156828212421680552509065967399061140884356931918043329896757713427576551279791725153130459455287475447191341864284027937464198702221330305772231652358175976276211055965474890163102889448654033425895078094776411307258072490769330794774863636814655206985406975725703442462987808052782665243713996903193912215875422132170569499774930935489018726011769767828329257887707641797611014475174669179356775477902667822341980148091849576695844828263083810092693791978075311118807498529263483084780460452738935836878580454532728102251924038349909909414152698765723515922176094913446802541135377874073088962751469105789951917619762049422535621695529878636416772404939728988141604307803467836221775420707492831114561470420383557905761411456140947734032892981255856749936408154835727159186279935862331299893461788318800357741548069955074657876720935690529427044130961870300102269269274256293768182009202476492326419224572134364356000821789292086966855205619980229936347860162223296945931493735658976661762528042457270428499986490450485567658464854310652974386511009963353030787403294002063117967951429310302453597475465495818150903112428448283364889601223136257320318736325047737323644898970755853828279484419651716072322294475413611372249525806920717519158354726237731373825478062888276277311854553795418308093721608034452124899891169757095633221519747146777715887789809007437333533478868123398802486219711905329963105898004981680386591477535448606209976553380637811018935118610949946946948186817220711322274343601970386333254958115952728474919772928001666470577518033726065555604518026838555045175180038037428912535698976970698924569243820021907899772279582225721214460895242011012460498973839010094920062838573548010734132193063853725037584938237011356660099415112853199968495954438070159183531635037995583837672566025908790174583470025857163074421368710183011434105857517532374923896615930831749914115828112313384816630882919384155941676195387899687876453332510240380228109027262640126217014362538144647268987905745539633257146452931670290484387933516412684580111350811223796255021306389015073092474068670387972845649368047973874114113611567562413117701613753415986102414851886132156170905655129096778293785733082351432131554895018619360892275040828649358020796189540216738798422532589540498111633177354566749719484314855505636798953057021223541825102210673362556192070409427475928405155516683082275717708921975069258967804193144825790585689241964954289990395057311878090473116921748807908866711623832837456760616849684797766641655251780535614488732868255364788525873662558689833104747516512377466985026321466066908992993751961509504743919128178337233004815849786561293465328300732397856757470467777350338585544030193901239335579959043293428449047337481002728360190033428395626163127226043009084860162436749150801921735386540027964466767744474683199212880258112564131034565981198413160985041108237476315890210057921398589483930525819845864423773882199319802498788251615623426219875744573669761060427402656555605602568635363627841130500935429104846878051724765550262053505831966443992811149836132744418386154749002746951624311637238097733551794351957468710537920394610772636422414123126492983979539950640316943921147192232157048629716016891975000339070388868224898725936860458592528663122317656837011229602300442765295128214127874673907460706264295632703338266930818303798519354540486693157124335784307521776896766614440561134529926405356115955066330650578558155001971850725788637148837092779909040219564664349220692174493653098192001340235168569354522695012498934070977864751515275520866537165292119683968765055859458356074563223118739547908674647192140110530338210744993278634758180820459138796267609750927003429189592246547782504785115542459734987397739917872988129492947528020058795342120760102625483213303827606374253411245928882310697685100687677647580828376471039111706285739861641408615116560574188196443490997963708561287386952237687155932538917534391324577611805451611169715571087779230835238543283647008881708283257006347317085567422677456109909487174541498023682959503582272642639277753625899531415085249421988375292571831442183614476207565441007547099073649045570205503332310235305423403281500200392456483475223304242310479166500120616254708938133261909052532083386648206359502021662655975344595311953512613828439830058605574795242742447362128649289325242071910005200157642098289135008238839783737880337668280839900120857972537599524196128864912882746193977165449032451097683148108274447595531918391885183165893253793495512485882069898560600640726478017762287654992520857301572087206506022200374072318872793487363627264514797578974841683559477289858374077105292405316299951294297096360742022055411289033035349578568209289520642982914881599387905911187447953977888534227823276336369918872388020298281383809421296956101884190538122753208872981776725349652577054165536387981281011141646329348109963033764306418325065295926664622180809636715185249683687764091796883848008959770967276891910334402129909363879813114408033525198119038888837341946983268449738240994017842061503644816439348352547430428091277569715357078606328526740986370227296560182284703369440533660323972387081559574150746853595741303823920011574617934014183387948485636697682818898426368234028822510353458294796319931224546804790280499677636649985345032090036461183506480494715841799882663076884159185216479706273401664614260247751788208186889488421025860737589525723703684597213953392012678302521674362630724048882676024172964176543745999513907693220262115883663330010342335071043081731063447055800275179987574276015622481322825718988063994672831950388487924977269850372349288389866235945252989391362888121689189279387107500060580546976342650915470515256109147949285803571320543814326130084471226687899886273598816304135958831584062599594015399933950268695896397396759724176671620284581036817477955259560996938647833380688058722336192543211610473795086713870717534649794384795228508660508909694551173036163144771943653767553759034560289140991296302068660761248455869151145466359090062707084427472840265603572144855281592435764156381959433971888559561960015284657185477020414314803102822896227888567153563413116507660990931369493485623883945401299116905516751424238110129867288980692081303249353854632782266028977274408566528307288930038778111239066250683634322585423821847055685530310326064299559285877898129146452853410824551455746587291582329871466483767058367100691648130101893231002971259983924517126192826621363921470287643316450590593070863970504074924138543030496767436602694143124140821024240326476043084496402984029017395385158136698225664422812827211512053763297167914785725251879829408788483591963080986943437155296707894506787713913403698169681862253685610446802054866350982408497896341693233481532412117492435893850182161423433568819452693207413251726951275986500443053853977178574359988641114894817507908301246239590168181636643461481547974569604252955072921195035666912220987228665231810227023574232363679929755151145801318436983596673862244948867890114063737231418926001557235728915365094455627889537415729790903492610931459931649322847968894224484465253397144699457304658729081126198316554163785670061455331166247479858730865189875435732970479547346973835781793589933381895131529483963913083814492882954453078204899563960359494183311968865249764035610456958739775227206184305314796100026393870541338184743863612752482988859960515704154428966951262891280398770319835284656317369511175538406463230928206838413929791021370191771428900464959168110129676367391782893465741533915294685007953302921565356684988385481753807563934911005611167939223520642922560127327703198743387477392045548651059949444515443274058165724973861981987861856003263933262358485423495022722835233109175315971129415968811554501237726865168708323945534901811943965573512353416613960101342294523826225584793719851844551457147098426793338092829320199153361920216450990665078967370867041248824321404562482044981120135062693539130027674271210623504060453375873161919937868070408463659989378244211616595604524877179798613514837056251496873020036679557166300289781928792083454830965716066773875541145700338230668646792235740429050836560613213043522421017346308829401860964097954793631053123425521501101181250796864239086641060935171158238355807476405686755158030516254237489634917175121528302199389790468660950492771176787619444210033026971950803595316453861739843203154094977733726363399079691955631485601864363117177086232394101847029617352760165640252146315087738893576230255203097571773081832069621837865822848698821238684240764706423318809003273642485885268244799757198521914880721915686631794967350113097251932588021610720088050724304425797893323421429386173569146132631858576261550635540387910468860547830097350149303787250502668299747259450402700832872254637600950472781669819918280651606765488192151430383201229240434016804143181446351990935643596504031370483063329220288439826778185533260572269318876867579875818544104463904704195166223971106030674606543054584903689546892340247046360562642442515197046496245795657956397572937229135912455193820946996683323043983914494280754236298114031773299831989525684732949379743396449282591872407967974735200966501121332979607684088750138379445219202980639026986534295495810407664539184584251111701834182996499879045602672518825848609221552303298061314100823168509912046209790832806077942920944645965507867258672685039873986464571014176237707465604786542121205293074687686830234105724172950161829362551604831770259396594451590179130020687807270445831981883390533069674989826150330523458721905949414471618437769229786610949411783784658228236932406261398655402380466555340085688901886629669352434231365994006503425401213908996985669685670806958387104220247657289613097050368250022775828155266620912048596446770417982068152679369750371728148687015100363491534727461635048940156846249311965724124622573721550976386433279127155044319018934425531616707998773456770132120429615148639687885823842841803164055929779967245117895885900403106193350718870506002811342563067085149899936038143094309978192624568301999900833865949725707013150902811617573611317952161532760241758690376101378394264390364033413989044861459353417385666658125106672490777584070748058780572071105796802466094215550233697178821029027209958026099201995415697171207288617076559747798607371419744340150805250735008694637545260693695655084803931680166749444807871319584621190869019423441707088366376928013875076473054353932265298271754851181095089109768239658394450443663807305774378138929204313756139461149472934282699579326877213044296062764537403636381508748213647494962604906611927941523469439085422194527315505087746636850845550652953545004425787158800124096904949281857046640480703386665102746429550162511798671643177003539642194862369759365548510655111122120169519275787599021642163814534727959111322723580367267681155008554771677248781516763932758861840499955231975307012050394441668459437090952343345289383116826875815062778536089918696120995592718806986629859311534408503577509556014709961077510274654095960930949613210535148088067862389728686589506023205518353779384724818541456857928955270389108399695482541876026109681978644158587521654148723750401254180502195101645725820090554059231532116640111873426481827061476584717724039592168909925047366823527249970324276106883579768925969524116656119420798171504708572525745400367989823050131468070616250631387353366349657351836503440182471800951148113019780834682378446560800798154571132091368187079022207237986471125106969277591837994724757989562046112313415352369170020479708962345444784454225727036329994750474615061119606551450028103994067968661311202122074265446695966406993995033965204963030397534708280969271811092790547130828798683833074067687655654163968897578327503970250223410847930353280051980003670513628586247881084346974427841501232597292413890356036552893840018766433070322884826204518906748274688929161357083258975019444997611611701567305878945139544032144631328900133307403216926163749163216635414003342829911748244209381391321858226457894162581894555664855207270558652979522375651092099183921987935697775748057015137873779165272289485555943456396587668248891664715369027226271442781219726192440002860912599501808379664377014108057023050237447487906440690658939503299101128942405031272194877333598142800447295132708847932439748507309683758266815794404358347508941366129810666335681516874747178935988708377562467130745323477829229335019401862383588691440598751688102421114082684053636971020225072577660335746397972706980868888635578392106823707548404668240467627747890325968726992206111682503323853757322366219414048295164705457542636330557939770156206684606208086277878315964113984744538325741277469826541814436181325109657939027873483671773490039439300372583127919246165323454023852435593002160565632960979304757932306736288102200063477399219506870955129569258759145878285335342584654097839148985095465841340851127184751406128810149670828483207812924050243233422887668759586362083801012392121091591024067439641745977445708045562326998934775944844915994199922418895986077064957621341295679757534288610075326410731916380101306027270783357009033373085933438956082959454550712144552001260861860298927288344560828513544692011977881168921437680264307894806428036697596228244748261797950877755602125905276509556345190371961069975843670251475066312140791764290106708770196226230480733123788799814619849484463594962498262931680838556266550301380166078748263202884030836432413394413247712966298338879055004774539657863948958035919799348128924449597242411535449415063696121562793183865873861886458009844616516856514466217807935406586571630743549977313780610826570907162194549584224995866235872944267478943820147711343992376370875978515691587343868616347440802761867314744870775585530229128157250537471919207144730163183234500482717412680400617832559788500097283347545568837921728925358117939453466937033589295211121196296017237236377875170771296193929646262358797447062692853452546396406295242342029828505322663358842749783729862940356231350765632276068758651372777186957675081294456524800337534085648301686914471017205461536414845164085732142120050106994203753321907934219550353305303000111387552583041356545199368420860128200210137957735786356598568120361291329294883727281844710447612261101810472809834800412304647524338848028910819975272669644774008661382414981751173557963289393338313025303166206597156492183665617474997314643264764896068639318680880854804054844505093619519085595557877733327918191513751853774534436137812221059874152624633684955725663499035947982357187411777688595941880315397205779407184048717782989674305680377291883025135695553728655138667637010072245192270028303568387621935520200620976074323822817723517689836393829652014047015267857403328514271832073155267159202072920095561519056841250903336805622849461712173807290098227979495475487291963687070455224695047012394719606963369187494464774496880935094392151792366480045510670627681469769410971162850349188023136470714804895276689145541472920149419439175797745937811523656401084362890752241461499266011702801697281986445494459519558259221755473852410253003438118586682866565730813129482302578104589278380422971484580013839928622780639486154012902627776601525999641319624967208387018155916033538150849825250655656163655589519929893549996855459492203218004669019654500889308162467710199496570838360563202646393945733573603406085969809951318859676807381187605657069271596057138588003809384665529708189283979538270200723964567252287816626381115122536767366389129650420824458639535923501577438258205189252912311989727257724463711575852431721319702251279630934629984257804524713735879043710151511664850945216986298050711792546644239351722132965129061535669798465712870727522532249257706050537672001819598311343118542450016847110433017430446444326994983186736179648764945250921019357007420158194349817568117533757313364021619998402589757834700051859205873368801579299536760082149669611594896895350702655612027537775900048047049941284284707169884907248341070522671354709807944492648346086971491048731955457642979382903333152108527614851605351110745842403641966634691718675883130103532480609735082501652911081165404410762818877640778175065551984989592203424226327356712885190715317786641888777770888019836018202846809423662431096191616516084944722753855648255776637416538876169817795977097277585211110028611950030395815322304945000239368604675603652729794442351535016881447909128168492342748925538282856133718199340907075323342215481325973631023893059423599694158086712089263793151762101436023926167022066718609400897361427117485608692921375896075474128152842491273311223134969997116424085630377371897281815761713371634677896883495312461509484335515275545524464492881056424626465333497384368936257655038983333855088134221381358875040183863789179569106951811577256193089124182443359352065645564183111057819744287579005422291652368904437822709443027506244472288031943952738618998294011459846198954363365744086854110989813829030100600065036740472740219533969676325048105447757711107227834267570170282728566144073646314571702644215031937892886988610558997078820428194794214569673113461135075101626247311703919116733435532941675919931322454790439267978132101592770383019527409541862379950811312545219945942955626738837062149526413127018578181777720309735856621177858189175404665815321165122041758134283582189651044752660331289750785781204514785516367628201092723029192378963455477682442148722563247251236383762870798902697270359978577018020100507546153687982442686310447331024360707288199839164742943350861742806940875218317534701544371867753446218372040875180660969269305132396785031507321120056943911674067307389044220762277532319634378475706928570301843587485681753352325008662078699500518178056551697645278623689082856053250022700560387027239397401086010209419800844650021212485265197263485203358110145969634937916782872171717686709727654462808404025280298946987215410043234741356946910505427641006474931597034261377362029175687089852748364666107210513797086349336535462155935229808477927209144483767466370694097693936899605357390255272226520144135541759559340829597986045843180800217176864300373959287294469176787147131524648395983147009214914661870241127120241559093545545859471863072524373543487786601783351261789709229851790890972931468441161335783194448437744432257628075384504790436211658134107420291804486581014233026331551482771436305889632045208705155014208900996521078691272638871334054751342998010495963414750923201970943367152166571289564457092337293375564703625002258777306425749818299206747385407346729354939066959874522203398671699657342355474105170475607317321681556688907860297647805879315036851663340350501630554344958693298217720986121136277007982702711338797446304761715896200896437006336692670310658483432058889914026198428982776163841477349003027211791337370683870349791917020850400627906872349208988698374407183221098628455762178434536128333134415343688589118923049016172407269535463210572928342759661045329141971601928187163743832262453813641798783473183569624774870097692255900165749165582074824019620592362222552704843231262088426314240952733147149925950610843596704902001832790999041966478449798217040265435882451438219096948862284805997879736666427156998938879800962290078613701775895923878013230346830121563133853398895825458726810385232898041985106334583682494213657604804106086396828777518825336185103840229609725732043394809503204085127291308077712020441690138440146849859156743220403407526467069330668518730910473361715038200598790738273912572954051193581790559697385548890947613812266953448416817069307479346246847782376137839542815642389770660099858966084173899797662674827568721771760997781858509196354820962755278733662601008721305542119732745001150855179201843762876713069743153227672466473832793634087673457010412223833943232063529865038238566724021688120069014926983116236539553350543910656204787608873357599749037142053914056842613331086574144497407713825370529465915030543703765219564075172184418195479932802034420172662016399723780405872920335243742018259945214545826208305836798505736481631989957623390971889364994241793210817375098741287934687044618175012503423674306161621298458976524683418078194780162708586607236009072618128684872169838321138252625782720496762642619802899567589702465060618364033697553704531202423767268343712681631093120310763217333947071119348329315621553912988185123501137579397217533096225843248734160926241808274773779295994231954861905057813404366578267026653239415283327989877128741370999097935152915316696494314681987845767876655772696463109107848532845864119304238756676560492322139842522377010970497139066571613433604188936341908770973319417029656160995861254983848388723696698008314694236272229054354196475555035177378826960556517986354716683107058846935897520908885336494920805164689465464788118352226219479027039824949245488505608559123416318283386168000867477347054326075525230480624964049506858039335176189094415488233376334967752710792418555376954126122886938592888760339667169759779997473208855830650634976076465770555690033020387889972914970025623386159610077962598908881515723191915943283591237073229365259772065806758880438539755066629486273850879047142798494474064977007455980142883635810940616222022363288077812573661977696032709925974269340621895225461933951042210815091460330200746614895980106838383833070362216354308756746313640621878587407077093491060656185076981043084054449215820034965700104939748480959296617588702976587214077384371070600672010152493580012684916422591147507434615037233664227631878740375502860473855158510320583320527202896810276891930661328667458624154010836973195705114053241392207223780853002130301399926737791153835813101608508366706886687538202774604122265924530323647922468147421022326307560393715416217273266215354924478512366477799108905025901528526049078514883660486465502970092738208507500354579756677032595503230232447604352953488680407522125088926625361129071245047772161641740547538458043740276273109338547157268933555482440042746882495394029899609639673053218336083377481738716827624589325103788628996613410596715460031852687507346897370907578492259179753550993693109859831257959528672548531486409549083385899696432570433182343837332557428409949340489355131604741838427069323005008227246236044870431413747944115188234358848212668798960933515698323355404951993773813147166169191159964971166571662747320414493907154641365992625693718979873289182767152180576200996568657449861102447647249722695685049038181145252084032038431609145952783663096594074685790388268115112002392446453951710971656072168464248197099405606688623571072655880676604470051344311600679578102450165563648575390530513958697223603246827340471548209867174103658410712004339760750423729957587304188270005295869348218137236779238563263481638652922459864137751308480950650884015613200975956580516522896823142057907894695835419645175153491171920036262420036561803313601234529494219977557403727527892554210143491282313793300829494872188529943324068959887386613579207438990817944270085053439549745517837373968222170758601763974906370152482487543456077098147086882896625099879593968878175982686976617714412935746403644418864630931685360145704221907407573225774969307021889108857384739905757119747390687747190219935845991074029861879359825159366257970635125685756223320836007722215726004685725248795413217133502115700744602657125157786385461626436839226629782713385573813558859302834310232595923325414769365394744002359466240659443429916600120788039211604612301659516556294572822588730818335069522970273425698000025552161818360150562407757371820032226633344375004597562469209839510016297933302879795666451011821813886503590698503347808290462244006707661529000414324096098466405455444143636641901518761992441142369703574617213689847308339415751062515606368981400425144085189524546665292377376879553770807879258806256107018018038999640209676842037193684946430292648531363896282951594486937903823666893130213413838406708462642567085519472113043908546623116580633547700037123282402591938843909733866892650213155002422316890357460495215857766323271213144673516436070046518046315580988003984718931963163736203181334890013116100402923310242833356146227744014792008637062923349320054182204685480222054944473609621502769466170628228639655497662920149745164072541181906651236873773558363144076746774321403476990472608539224163721684854416233572996981597665756858227827892438327469973988073621862965355788702728549535885589839471343986289011111984745236951481629693402943350516680037532812344173794998721899491356411824857913396816268917082947503054935593420540889655416538468581589977497522487360511668938136610714394156377941937687030864642550093151273149527077583738664770429397075889644664270943348254632259870832746259865623194049516224879574324183420493800227126949255119023391376728443391784882687503264796823131337422120174343707518900948858342057359988647093664064261288273355889125668713138265058366801753232699708623580496821203411796311970177873700817683857643505676691463739735098585726618598925651931185972124812557716432746780738703314803896632223718694895971732735741163702807746386186277329789840699625956309162792623410815898470519826928166662968395737209115315936276251744028061874709020131880768603499943354481568411259459427173048654818388007280910582933113887440694061607741512355646911322396142914292288388006172071202271162609011951457989526062896515847989673822439910037542421777385612399936106726178043246909109776092834566135559751452367155931833970720442644069460380781157936274746563793960263575878968800040497553043541150206725857756058531021526968524515814527159129992065218201817781433584816063158199296663788745032753183840576286199939655562932778609975516857023222114475415661984149326943235446987470930453638590032113527597334397700357255851595774903767258027964485097865217630368005400603314035428805337978680997976712550762650365095800159255032119638134976495485344446552785016148941981373652131446825977483146545350735383901142079463692015615023212576924694923019976118097509858211825510783113735914131385358582265005144039912469396920840880448118970411593318767731459053634473971854252408145399081904554880860814895700103951075923314660895912633150210644537383829781361381181824208756083747028862194375546004258421565726189905412791708954569751695220493558761273505966916916420931905658413649629105476446483566777527912793090574504363914173789107810708830982321043569992995634034901342660232746855870134636526964452541177850771051660242811240511161430750136197913171301268336733083719546162810593097385128984812723807869650897011680109700607669575779758766214178748118806617041101289298938778112253311510118933294493721505573267018651230922254874716471439152430296666017416981648175321993340340519249318013067391810269710058473688866656408268574621601594604321133809959681470746771250245960053011727638731354127414777072539166379223810993211542557809138822295978604372318845641947009073356181329545852898842849154783850033817805186738565538336574473907033918294058451787991072239096121466136106779358837759795098054453747063179407128597330154672861593666732439749298185063361988123549007819120617954449670117775821432727481052918757468940843546162461513895501079071637258472968266444263588531607882603250022843428745562925061687184742864038248112816688828877522385338036850786366949483167877237540553489661643936267956133019283017328299655057963968409889200194161522182518669128735118275755769135132803765375112424941661482841257433613049864678084737781893307858795779368966701732667968902716834947221840087190392730532761754226411227819702926136159783469046623446199762764874173000141468652784518562929304804262956225768979933861678897424032308821463760435960186045797875166140924551151154025578898528421963293430785639251529615899671249971864059095787644674134994524875420716671708186151812269360328456035795145560532317211742679156791434348271100447016907427861568675425197545449164848702997990634506164719590397180046828139139594319384464627931029745108784672435462151958999838439395731630910259863343602443525560772140179049650398168803140940159122444949769452256321596726089548021110631517110761707597306501594869855236573430982361163080256678412307162785361918777993556733827762116390974849779309059184862097079528511644392943221395334205000651382975093299153382577212981599434015636155433021705396976879844513142522316922032637739824269323574564802984540305271374701224880340710412424544560045983799734516771155843640673318761361791336845972935296798048127838286237549245503852138005844229810161505979306636458184333856013651910747078675256728022160591344196349940002942216436871419945854278466677054402119699699676646889483780254085628605489874927828010549241869801875599045360214841319354689074521739814917099338489502676261874207589172401070407455029317750792199315086280624069122470672874371877615275668446238951921930226470724457284874574824878754300670595148728285996416138143440470672570418718388433150425445278926398984354444551438086056195342624371859034016720755910654399385436068230207392701241681011058011998650093309842562965544777754399739834918106478531505293124482888431991111873158461704110121588223790846178018546663198065073989338241388066826970896755076134390689480841532222497116514361565008345659396126180977670479635523455633509513584470351564259919096918796395813500421103094570371818637397319713687174094659473446074683402979462113435502784514699897513490472331546233068355753303644697412188785225852996552855866132610342546477117213433344187966997461507002136479132660204342322442100280560525157526784712966845816170596749107436360877637394295416145802210122113227295745574163922169356662320190609242776773709436477193122408534322437587574503353400545491784027385999408450060295550918457231306000646953227264688617887135856278758245946639322096852960808636436216643483454226736089898823628621786670871882793506069571918205956135763262952579127542422213192819001434757471045374307955737184578410309110856846410048571857980741210375241612563172284865307576817550944346162040368851200171792991031405347069135050806980016608546698061870173854245016126724886096275697880396681090540045623396678347054818311547348119062097569089945642788407122109349568476759117502711392327474967101135657392414431254199160132799256230912298179881981553532528316968126583243966532459042474562618808779001103000629269388606664631626437184693206746722158314735662597679204375879837977003983344684629481305339907022471525103365656501581724273202744447250367997130720282601233484183235619034529650008405409780518556007182498941502193165998797954373466732693325023749808324152954142475017684181402145819774670705179190459974461733254371534692217490486859803913253668187485656956038095791966190093618761387937649970088557933528554293952454101536082298660031510981576086574752975895722107204412103258752399241955085405627321225741973204658266047520973589776865810634811335048584353054289363588249657632136126894825732887523021056720677560430697185061463594217483152934494815574229472697036375416530946995007601519674778220770032403723197402790172566883949564679009521091936780851909846378275387312073424767320238151729240592013559962334069648333374430156000365242963994960632664989325595651884932777178624383607381943468113311004775614449816965576145247494947515964575932271551317191778771942145654276994943078990063215316934255637347584617423131845373224171138038036472154735716869392341716581911812071703233069056602096978734723590405286584969709031125289650022415711183912844056587151361013145861389177456587918403912460229178804768522398710818525881694793228987440239665030669580355132971163916334783063927353134469658400088514813768582695652617551827252022632136295877348492928423703083309618433662747577282309543615771942545795547719211897111791633015633988263638567700474926288350210169433491972350380172950974145063427651099258810846047753917876634554323778448532298013673074078702627574091917148031717979225452778520952650251908609368265072568618356528101045197887156094858789341681128194568368369701898143091190828131691534044626727146131796938477841153657058910798081872205171411273680528984722405019774362622621360711734963608543210158129773212842378439069606921502465645875542853874986187234087909796707041699851418500316067681979115340640425695165759992430548335097412025440551936178910570330706615983009309995543654878008101270539608573936816004940394054132006173794448813883376496393871213828371052733152249988406991762683599331635927659941700755464509947230359928565861125090927626423768512589572618640264298602569455479045666748852176871277159666079347323881853225599983477096532373286447604273365530318620436014782266117321367371631267731587855999308750489182229301684346890977001067651124345274751292226044692723368078661266986260522659389061088010684994172935111044463928427213125501141377662956368215935606145792620285788040184023166146540113631347537190947413155759330153889669967632370941847523343707994277654058832236490734801525109318301304762620407564906790152099219171244531549223454632600914501831605136671897846648307047512538428619252126055192468213295341318805223050941399548198738172532390784043222459891963990401505675437802688810386253218575092436499575567906028283087324140198881686011005769800859914140860164076266347450236189349260257571472216204557763961611719392506586405602253279026517093522645403982204336451352966498397125426492913802084272922484272796342868108209150878147101485907022224496304482804751854424391445165938150942642213771177678660525690512951241400764303244731441589558580040584080778211288564348651486111232291755029791972150651010575011801888097020156168014105747243644855418912874134922017310608190173700243434756154603911971051993196343960168035218565001610100537149357998759742600962951348711001614486195413693685180435204443419884436422655052562851449450127707606467915568777712245754907702591935930920443406262843939394182518867881571143919528046268985455236996197344001495062226105909628086423371756421348869360872655221329286864185971221062511935853009600352172864446968596517878012131555221770617882431593862173120607873398921976348864839556463986212821935812194305194598408545121717319238593161691378907793532766274473981507684857236011671200818723677724724831784375917831143059594973036695555860104845034117441909360697990607334142168740657683475469668908835096565030489268951198336868626028053896242042808715645938679406705726844274266873893070545236546583461008459100300726857936709362878263394038498034959924319088675517037012780555179639595885626900035943315729024233211305012817241375122634858482936130891165767250089457871081011977460119008256623929362511499550483942888944565205194770941955929301124302048619325786860209703761497312393589315323804758474853640895486043408706531456041042206550220900811052546922302727396862220165970328779018851191903872452018461321969065997226262989352310344331091124803159386396269272780630468757287288212187769930985060631050435626620755116958663192543085416825407311558966372841832545642708051804395573243381390532948599217058912643978087239169998333516405252907737765161959120064274679580948966019013547368319633304422710071794549096532282062997382026225441248904288504335639039581038954128946640963828882366409807233200434403514438466176743073233397470633962123971200158886303309490876577849295395696367485087710881182199795979303905211023141376511186328087222513517253690311310079893801043506267706873937494635503796603706710279873858081527656476675223643181926044761159683773382473193645174978796796140179897248592939231694471709671477173032803472669111595306126464149572923553254889130199486479741725293534297054886376491434498487799860845080045041818663655937763785551695074141306156347012403017908576009202655913740116740585991955259663939435612017910489865387634637369383345881130398829660896884619917386392675203901221768011483064703098061867262679941756765746194480146513239899614086260912350124908183938522328286545607593639519929046059615979665852912343199061528353295199048635611997444004941832194162948215432662683696929542218227880411089329133337412153335923627955294196802991985049683564829321676571251518982251735168243651776718347276361347012154288544181335363274785591006497253052807350666306972127721957609486987548567784950631354355761934680346950532034614196286920570981113493567341613592988534200368691893027726898478077903245958435117844115052164647525227500384225758749490243361062523233015856305979448535644424388526402045683654081249217075556715705972522045251830719798664061785550872272910083851329973276190667946831515657848264759751778896041434686107895224062383438210789744263536150606563711795369330115543866098602173711334071199433638795812078761403985025485687378394997264099899723755591964689680374643463006494990439304529557852779002132920582583491201537188968070914903268517137529762060304512789489337330928677106242475747221486412211053742310295834749657880160853153781784727512029712698120131051087084305681160652296519585216963489353869462939695713902178347394515999225484822842678854911090603209945323241391525328230194877676593447525036570908021469547850440465074646429601747394130865656202429052362424925743857563686274209907549587595985064851249920813579859426977994272228670272734034354003937114569404315531860963161182881505577294174414446034120923932930467204831034954495181806149327810878360166492740531709619257430653202373978389095180793847877948914703089540659730169297873666353882607659348974957276245270754148927921006734806695922868680631743154460188292930170543429833215144187170001219683502333346960825798906504612417070143575994432685374820426177510750705442403881412331639360138759421830290016579085175265152045965581845190682102802206263805703950440323970982323777971078513582196418879955323513858307535132909530846655799160070372834307559570956339461342306588845357359093788964408321658137832529540151695754662833059863947713739345815433700598617156231039985696029641915334850975135233127984247797087984375463498321498749875714510360831388259620215241976762847383720898188515315756479568492804124326652932539822562552868969018973601650431843663305140421692049715735127199864325759124572012440293943016580215514319384004124062116750906060627521320950521749658068797267513467597102109586920148837922837977210405142769414957988432635054188357315030777999584298113348322127258014795236134009752788860591785625385022155826321186005817016529089732964455724954453216806946169014454448480108837148540948961091559359162121692440077788923571507854472875413305325382648669730389607555672191941398494426653789545927879469552590252680176468806918071669054977469741387915103489298758605213437196919871213820614747892700526756261584497612312426218394020481545623020038963562601451738598850790994201357288777140227513782796656247096175903948251519365512481538872201749675565925273468014030132846945421333566075799880683704330309840549757268204217996977796178563405404134396339517443732258770806382399957970284409058042008968569622874936869195377549148984208311879368725093349206305750862218271611994602298575609677076649239677108853743928303085310753231834427814463809869978313014057942966598161629439913526563647694360896506244188391470885119689123875596709020048153717311059652520310789559113805589043400122509449675998689974449831956045986461680163602181790822147774521626084042205670764304514966893170463820921575372984036809661528747548860207168320389774167454055170075839766808032262907255846362854385657117319751743192110509024337977315760210352320149890606211327670119372985647912692661724432177235000124162613450480335090577259307066788319092420443513974980822686874439762041059059372588491582564601344278233060662672974279025732902455566257069367579567401834788479577700669001401159574238234127735801783990386618280676563455595982446928355569658515571899661980678890233860874450264553546914951928285889258752503782841622974664919721498868272303566549447870243819238892644224205830310347833748202061146511125871376562687732093430539557551950682889596649771029788450438042676220091016029613519811883317516638018046352202298910871717373853268031257826531490277695929406635961176230846753476704689805479308962598375478799796754085079040967475139638985878492172511239017554316790027680568924366563986359407105753245545942065954390519193327132942448317357552945338631224827716555899481313294797224439311050584955131338048851572371649530127819926907274636977597402126951633432807968050333601937509299095761010311961081168184073105846054202054454391835544136478687092110145406459437804188779565012923877728748214141487764786735884539951876154875778089926954091215303774110134788581436044632127850167581578918069820186111945492461042500661042792292352194755226040679397153907430500368713548230573240185769700326603097383334352221138374251435154506029969752865642590452570879223631669115918994409832811213679512099607845063774124548890615863272741818788301302422357627285899671627029998437007294652301064767582082549117716027430507947888814140604863708209201128203310421872373603054412922362839801585872218089726635935765462255721227237609279969908957216230633518025383550938425142156522466537659305071386648386877199471913234344939345609090023121447823071987436962434298325475292214869786970662656146774322226754649498253590633488409045831166113618941749880051618805918725386275061134232045040034335968640012318897442134808219211306599050617699862818191042792692596484740489164854478249277194591483510363036262040095643662280698605560465314670473324628455495168902214857712456912618807016578142028911491794885711460113672228411092568971043122446094022346507956128137746245862875002194680395545002060147997878598531652133528450037023710440478526207827833540654650244884544856514490358769305031694091666151285900490902875916297994320619914430736212931341863474960064146208167534631520333028475107621743532394798026905613127120680592092750773741889155430254715070074978702300922983098358154843281786651791360368684895732930067821079869196821011728779726826341499015219506415108496205105320017409488141101857558310859126998864331268648305583338448480147564182138713673258214403443527235385051956946020263370157527894516042231056430092350917491526981371097870687257209887787702637758650050711941165629350834057953557319569363332404789783529878885892791429057865607741072076495180825668549450376775107208828890774474752186486404374943652791845854823672334520425890599484508223681802958862902052478170421230052107866567564865866476707751254722209652736368516303249731092869747995050070743828254993373611520081040995959208965653231803574442029692989610260330677313812406727062050183273768920742192541704481448729239364912808942312001397705965900472116318380544893749164992058061467732150663309664274721385758158623430207272765003642547813438470874648356233561006685674096852605477298459225224491110954540280036913832519791147051367064044969607234392995774997901856279182180247060162196998903776482486700973149104233465662159625804978650078215464039226934835674615506322445672517667151062011758524263517255708952605179001952135166879031679120211088931578403615948061333089436067936719921826422799920279084731753444133941602878800759893803403801921547189968391246217660762101834931454828042151330138586284352709375731723675740197708773272632850624208866105618741894455776217303554147497582540111664014632609124111036476974302725405851019175596999461217895408329358314128252679651388483687832430594549793496036079571261921451430047760790953618904343359543613630018436039210512485643553767032489371018603519488859568484897628911185596021699081187537647125352278552249355877277809314880185921705444546127766695543927505714201563062630575039213813512470296782326095414882467101054595608417229273454249131446244462755632515168401470073000119015550759012670201808374528420910498171958468701821501059225587156880566176494835268642218374181775567682396353684505332162930000037531239280678394323707957597960266537078229420651960926042238912197363331348565156693768404098154548918955012732981736167528807423642382162813568335398620563354759177506197318388375563137998148253807954637194270408600565438399952639444361927321577304891786194891796552104847168022538811566810067485176137192171945426786937699225068991319101845720715804817066906656338365647211870165835542648249178591268999908363572761006384914846230064664480813313795652015304640176173338392731877402294245449178438633246419948412170298981570466208895567414063120490006912186158868568736137232619668964455874939095643315047601402915159344352424228890125289837626431308559543955860032786756224657874583411224087778029547025075315454203926534760240140100153346212810653883425784094617834324108301437531487781832620527397396927590967404217318245108588052788643280130905302267853895205844234935775423283301507719380638498863034744132329114609266059840651261311448269856093006903419475234972781211527686556996644370433227014902425397968969224945623733757459664283705386417349896722563580755504532723401920180310086943322937162361032470634041211713462862601464593004703120555094222466466397050498761693056722473621105956219364730585543866743647470827950981893888509383330942787197987280862227588426669396271369050110958983916970984106888546435373038646160308368985531077576785938619362615949704462390698598796428997822025858679401742588597974465972920600880419585408307741212075376703986076956136705299428705298578335171997393996854047969508321808879957148891292248983605511808100032583885420867798514982240299680203755083701432313665308429959179166210641594616629391637126595476869765508018637500552817260145660683365914583028224255380398002258659665364131733512797653648092523861234473185432521681959079443488297493298950267413235518110407164646281048185116509485804577162743614619127953898497824623831186149391675426073509555197780011028608883849793013003397324767662502465189991342330029557646633525205401974036244827636858344921001925411700359454975435729508337533610518406422761848040694646442448676234081607914580931431810905620324934716085772820125943696345959068074590136240835447725545824794969234045090407758523410912190718708500625492123366420804345752808618373688196810634885562871624703311280719516772668786002581696937185428519110259971380363934234377462844662447294369341249778088755185978023106536551209456551825380565173523278884770457180497400405254456746784046487354763791600048429676583351884231200521209973082524640197482753580128239797105474959523849369502662758819670849479103970748525646497087340523928431984950386583308911154333761101179106698645811823538853644999623415029831108600160429371941584697622952930910371387160643594507744227323431503722770118527714852414846615951986697612030833075510729419297555444801476744316111340340624648774658386973700142836291225299400432522846431923893246951613814549409438657637896512827905828003408451392843368435064956222761633828249764872649703065531983312159842831867935344334150207725280029957641771794276890153516823724638671492378586330569541106701856437584537578625404590865588457882979585534544579843467520692430690447019798418544532405600665379247490398394906103504407823885853393483500342041979750639430779662413599970737330215338471253724552730865228053553184160347623219059741073959051205835990015145345005838718538697823048426950968265660063852437567028342131317871683854233998828612744468111632445343610063444700753559577066246014593492483530011318727261084566920144091939951620716427849552299852498735642532629093807281784686778594570612849419159540225906264053001902757039756562406512250065566537212996285340267203347637003639776772798554949380502620403367772895940615185558854720959798786257161092425430559793125881393883957795108988847816209811574588373458712184553187325406364675729128670937771554375206665425918441281675185498338230199064221848446127343051462944475063415897825994771808125619297202254106732605490834861576460575807895169318682164769936846546245427196172984933838171253617646156601961996470904011000769911614558911676172046444942846313369202371827342473547037682370491365566023730877960783267322206035057914485429249491114298102794526539038254801724112403213945481893310364104036958469780857985332121460814813145500167090068384194623619753677887001431526374875633320815160935467784256803793502229960750638825328035432030212980297696197507670426124568482381549992076018518779461472574467678228663739775632833654682631231449114192993331715227180697361366598927276975384516201448510800959534578943067443124115871411411750585460227139904127868699874044621247739791139960426093612130575668691765437377459257727847263670997745748940480588341515451491706793881865713366705335763421180736016183467023923285918814102993866732211915144496291124167901887171872658252210946751584539862904637350211965937436388911274120763882742450748996000542989763666346690762072828491814651312485325267867591043488678769761783052923620694067183406907476191639178405918901070401917066194341673865290272670178846104530185715472345829032274551026417315004319873249827775004803969478798836060421993219681531927674629791336568689427418653220878504558163798386839253755377438580551553652980391064208390051616839472562203693436519668812836017353542357907400477897859066981619082026992060621975660267202840816006527356912817610235127229060623235671432475358859101891267535296931034180709185286501246779755242416457914080327822107274595905698951691345238749531977142858385212205393695523404012198551366670864565327468348711336556457514541702628733643407368659463848393557404389647765169598915841955047404804736012294069540493001784801070056189315568960356151927616458889009592453754962119814175885184020413061294681387512438045795453135292420273526396764325111191122002577575740819024696963057431734963153726814346847362339899869274590975892470864779424744616693756907764774814428707436860362619361336186750046806106858209671904626408258320881980677265825278980406731427590548388520206983125428795938174310252590634109061971457624522859187938896628683969840230532538009869047207480089192944246714188928646247091787539914354430037666662475359274547254479151268943771043192153555919526240653139318522608753200460314046965578096700120831510955096296361582789812883848674600850444132756751241365131549965960537223224939220128868573541133653392481171066729514641701657503722726232280987477612788939896938412129656036364230473532904877031696216610252151329154861963484213183364815269454244244684752654943740468855825593504668753078333512935861080845430614608158676238891145063271184620192544405471712358735878128238728070397003938538614760350462356853118193638001252831248319691039441839150096258387254977592622510999768371965582983443698369031279288536018900202833270637543803381288212981362242896648537061986129741204955002275070954475332241302468547665201481248113015863803472238499304732217598709670801929971324755089585329390360137377073925332115913729080331255830713861104613865820216459569761415942577418485007422889725896258050002145566090303324379711779008946424935128555883609652179329892426665953640640466352213034869209072841213097552838202761829774058967832000909451548357577694941820224584603533573525585525668416683205030326521715444501017803573851001373232596903834195292019578022774860183532539985703992529457849609265628066251947721639674189817791711192068361670489132484292201482844500058250120286362532299834035881118144571479478592632100174955937039600816171692778709846296530222299946572077785316243993159068324378703570578799510419258648160300373944855891833064068082334985795403607109186362151667585621417474092412990577486104395548968697961598978456541718644168779209845193883322833858062952814341967701407190938632841508083167999141661555596934058455110363182682609188278789117838535609587770977854852110464445320302692414519004691688696110641744682326363998186553503465839245669446738582894373393677313951282850515747685034144601971932523471357958828464038710277699677020563238352589492308050631587661572095104533043324684839532049923557179828492272954063448270504018949916213262349925763727531143950242558936398086709532389918404470344064024792275173574348272293594180024592548922345740667106806773188694165322163963669918320242968151013127174317736262703698183420063826253664404580455600484295198400994568719416579331011436328263413990472640910674868554101991895929449976690117745671801779047524419780939240248302242635603672473450063537094623349822442563750025960713569543176880626212999773065359715830018790942535373124698321184521834698824366946684982315518246831056094419419570614125622002037453242085014926003698045980785563564515329928706404379128147376378368258063878879838775726911046682920364715983690433579274822607051824988841277986040411585708206888338910704350715248972177939739543163773188653576827463983986146515645745227999076174546494866036519745423644684965812984513010131007796761295386473166645204344515224685607137537143736158953572221721298086903073847392902122395566376122046692480022971506156601385215941217222227925512783499378270116489140742111768612452414348339355956237043392130005880955312295452303339245053257755517793286641128671374936753985253601588540155380759725828366814685702134724844093892783803885409512349404786762597981545957341739705679587792505394218866219039453336020265037777736299584932020356561422976041505937806769303497496357506441649847316666722895442414656673090478142774363088175780833643231620280928214361963004162707985876751130035899437815425379875578717551641105877529251267981962946445130647144223845299308449428598690443614644888183503795392213380275247429130609747727501451365697178692001794466969238756734916380793761265417293835146203993195195862738995780507573349626191209645774524293392761362392335280415872021062415514111826189674590380115269660254923070437985608620487356415205774707785516989693048621547738094068265889500215699141585098604190123861203638917261631114618706627577307770496081717025478403729873721538206851744589803081154708969939555641100689867592268655409013366809409510957570297191066236229902855400065656850211625221532278148990360277465194832579470856125723171314893654849436568396339201290142060689518914821749480194196035567518750646313563006343616210247731938525813063417236017020926449566390279703808688891117099212906802810977540862886819656778139632130918752702304250815759474092666203077983754837173147109643814848049737315999227038339612296772447931291179466711409144097919529664614966046406301384042764720236475639961131267502754704628893400261417103625945782201444757334433246846792213351157157312781105338969397065009855403672635060417721456688219036010495991582700194627349918394628696748367156250160014950217440374054417267736488432009975681041094038097663762553781235236655452745068009684834547520558148729822675207408249639117263497959120616293445848625873189591462545600245708257970847725402678078165154112476756957730694658027195309333113967499632782419302990278525717906020582011561486561813949872781813041567797535441084156380438404942045639459179230466343755073954671560580478774411964430012933816456344334673126711506546277573570756620730358184969976740904766850674408360509108211438190322495867932783586676686561810097528905701254923678721737207198603312289187417983612357075;
denominator = 
        427766291061363837464860311503340610556703214584488971234147983630492484022529545030882390203845095333317530868830339192383246999349823969781801354034436191301441709392290468545458332924782202573229571484338759575734952831824744548656588760105087217985637941913446832752751849380813627184525607083284946888378617358422268836836288030397712801553021335459421324897596070720199345195386174884095639157812187968484874935693740896075904186753980066076498349801833873595330050275227249873522019512845273360135487099412299855741941874662755446017180213761007059206847038996323122056825523762710984154932754987183895675436503998972302714011530582623651547084764301251800402758402618508434564346438763553607219804982053657176267605271170167493514296378584924146895659203245207943176811478220424110224711437259707082076402005040681153123966968305361059229786673197319010590284884137028272250011857986249823186481807910746187654677747441137217085644096549290638278129028799745484909138965442900749589885796059614151992620617966310210148284067669570967485335531392065898673032175956767066424137616953734723050660443215492452387378042158488381107026450577173032103055598929982295393903027573097660102967676203000618706972667475321061239455220253181221188377152671293519764202135462457519301113053188063380903073775692440434453827890823752276334769081874329253950793241984654147712403785846557612792657259008868821279218128674581514298009761545273211032063230013323953689462833230662691607678923826216805653799676547530211785845572322474957199397547696870856307595377988051616802043946821507067640168020382201092473231091197406419294799172669547561297869688432878291165790667979054886257398696351671214734593646105723615557482544022456558325393790127419553043746717821940035131301613858553344497909414729852130272001859870882424104533710150981439282948897789150007576264480295427005552490531362726426242792198755459404757166306593018504108213884503925269669975828416675556410518735999055060570158200751275501344215807860012252850606066533634690556649511673873161247166801098493461394718599550385783877873871338580148205769058847119250718661220298531888889937698207237410234030086220236053503627839873657166906173445457049422400733434102896003687135590766263663496899109064526353810980277808683959424465149606822252079201301814459484845077457329754790920099833370030182794565861741852848909072468224834172502982214856099092968216926409227717020286491964249196187153412135973809941063611661962491351311136537790763804443993910876873341963816784579666052079161496950955998490109550934309478993514435711354041106308565546717512268152878857347889423844438952150859210144978750658254575886244722329325486298136825832502159191062885638683704627048598488475694204725976671625638294145075629273232744185194785666555092495665570610265590204034916283691960153699268973594131471448410826985770688114035879748365775755307373802101538127750359245692617927909029845094101072848871425140794941534627360386772974450665671629015855372847811198186062792410022830612220846034447269843409206993943304673742327621249272081597188312549446105622465150208245974725413155467335955769643746937309652530981668212201765350536236231775448200593714387320480923426254576109987576221308532122146148177590829437313021923262211233378670593975036399505381577926895502680239187363631568550071220402986857603102253447931180303512121701851356734224182342411938891979685851083979559585868817886827027285682569884347498462415375976690435007358019862027110970876371849827252357864939967158984519069627239964211530750467514646917854195038538726584699744481028718193558059714386261908061468121806064791619823309767810516409354974705784593746078881215610777964496174577663461102337918222449379294703073461485757624507535476743287966550089857752495724112272953924221236551645550393792649107886738282236837003744482795501967671381608698682957872545099059909700257622026277405328989251932986311378156403076892375395138190804626960172601525001663103714004532766691242348201956561036765917483369307060030571779331572196065788660652847104130079492515233764039129092125667946327709681261222254569316644278861159103046679333044422962537823082285926405620052724283755608572030094216897127327976205418352170296249656837850557742881376570108241120946718077372481977345808462417838471626847102335598859054483463104840375283577322666996107034097375650434702034820065974195744432994360289272959738870201122218958753327372728949077293492368309338656025384192853895295312462900832530430057778030656389215933929269071440352477200339186555324846103259882706127500423979845404317503000219287604558037872903054667169711579007985078490490448318817886983764652167690752992559960650892630061549148234897380628823584895510962394431987853298250947680787041707295955179151819048729664730632355783652702690806079365829575488327272175560537697045914968314225789134329247574174523269739374899578425524439524353691385367627764824792806544423997260955636316868655659386274220217826531635392548228704563622604895821127568009133838097042740828887871830358773788782569364839340718728560936341070739576953122114753811883261123449266830373265429307544950239322850336772773414249348629101919969567684481114879362594630126868643828580774333151864177288052994822807284119934468581522638841413728802838145918741359746915060753995197592505487834773821890107110181648926575897910706574218091014603186137505596084959927814571941786182271116626398689215156861167249729119042778020538881454434002194005728779133767433095946941140435670060330349597558496633339216870166942112088467053534342558455259237157182317120382087944786591309583608919461439434388224304710504290269962011817374800914255780782408132357133008056741664872348500957458087742174193071816609130276493439297040295580203634561983047780765685292263009886389162814884104498466799365748859692529022545074093731565328321366945995387392158658619818225308854388335622982187462206703209883250413424291346218157528838070831004636437350748491311623196675131701846717662376337208380612143659231022316261191948478255942791651032545870251246259266802019188958336926386808318856974273038126281224381820981793034978199357931716509900816274383059986865341332252734797167101067463105709803145734372444082295991785686523747221261170517016207940812214760287239934241099346714379051908527110544228961016635494310991465549891152550041455192680034482671187847904469793246189443277315707031737691097045072144022936542101001535164280509417711717666947166902013535546114924645806535434297937717287102873492116829474232432300697313469892433601083204570705914289653429021301535339887748085785442052579694772791915094926242585458876340403490027891825214166087230293831245495017702765442698051424980545222386167477487866246388004287930389699298597729158770032803064516818970581990803995449193233333614953284005363732012745427549745497487494600228150031875504005543746763881951289836242563522688392779949220325341336013995797757502734751384830793515698473340573170403240443826333724234272294382277261488215653003824152280523322899848391553703943925546550342597683187307062351404046935192083139327810586762237871757541801377169678222468116900898277776331628355818124110410601788942341577041630434639572086484020499289034953109921847703063463728464767750567634074832662890654285843721513338580251182127313898592844472018852383116907153238315903183492220942837759369976518866631891988758326789473485839812649831362052768967590483717486223075279319992942674390514489346035454274973336771552541077897899907080790816143573821256383010696107109378664808929694680576048743868794577543846654808444325153281757547652325656956204505191288316220729054753495909222736081490948570550620966229152216794081806415694016067803471689005269154551042655844617991497405295481845503353759616048609604709706871129358390230244649038458953903367584299515404028028945294077664676753978902637105896206454105125288195328555665205314355485209190664826187719822768957632014850367569688668502824329090621282987283277130910061506480108482010694091452337949631724327437008000215031090098395753667392907104085119504081367355995258717444842056071473591574589420135473271626173437452592360631032652752625023692125623537518970891043255168726349444867971640621486449582787641853379059162713581326632364039888347553845475498684906334593505891817104376059757726916255079431722034740446506581035380720406841406819475327488757800262891131115631763568969604485221141885378096909559449119307722460905929524205567403623229834350449614129235263182859538209011273174210382779835935607857704219622830948761473038751019053692436244857319613670547228456142507666770871120751814148804271701216460966397842786025591483444755056883895180589680893880152490841404237367481965682395397189447550088123194839528037704241582633742715535910646266726331785777548527429795632259063064056162726180260855182597589247460532632060485627489080116244724702894754035637782688459392165837140437057055344591562062666713607676770209096123063630213528233858252195067462748504472950787446213593183617560357355126857319672279776968075577926385990978224094018910657845826840897324212652979284385198524588162623775710995339946688656460723887871191398697508681881688837723233108935580535514124145434549516629697470965198437321571890684485055369426639406326658673163166032973985522971795923390514764380103372696079486240040329553658878977014864374525676712806106941143103550130525703094894824162264248331961699545109079107001676877771999057234202542980199598087134755547607658596260015779050546343622210193879941267448941817947643152419230166738891002862063480839964889432950564438534623423392172965709241838979862716940888027684575419347604509215501393372421469510151382244616010350043462969636591302598055191501725642740193782375626639693003769893284789154949072353750833923335098469796141020223213391690458910168662933507598062432417932301245009916329171950226519783423163091235360380786951562794307493921110624041281160151698782959703449111965731110950993064362870673129297254818636499531090307050527968577883399103907872289719412417990092679472568787584712835202803015435483821056998363243304073875677088664229485471232988990821640516565484379156933026731748080342415602345988156648126388064842018413931847445185998948316183215938625641835216697659828131747109831843477209852227461666653037659207750021359129593643553214903238179439387065125493916279456148961346854711327054265178064044313536321248699690122660691524725264757269743346613722651719668422212250570638247068327275909863021638504333616755008985187687236004339652778660657880306256991351970048278290864550144300449705240904418579556108967561275502298439041840410018394792925884883271037202280370190351809797654657017860398577017502700576260302162674954097076084836576054598662261711512187619429088726087670866610238829623359724515860414869116305700967624613418760140796466855446465585878716812414532305831375745534091895262347765322830057345582610563153798441503353751059637602634569855055308368367005518770475899584516104019042739727844795244222824671454695849038357126577159749847361285207962620755125284422413803307580993548167887778262018460699115510027272726549399997424209781047051121890938438176283632099898692551391213024090878274514180855294024508403425853551857956861344483210037795832236584725095193261798606810459443411655342729787740365746472484305850509843938518213692865612671411213885733378899758482616940713023125586241500173703812763868498208336382333619064542413612879620561365622661304861657720308483083417124275057879802752932264534016937358216712548472541426770084210989030172855527550053464904944216171597374337440442509358377573603473805434373005379240498785398751080883747094750658202594242432798489872107021898652683495618140078578684590412011566807093950950760711869343516866675678192210970238571063431170297873576883106864383074047264269078937565297524879420590590179424147961379245771709339454827513398980380042465453757223628451129326790937450336132014480030785086331288084057579783911628845736901672408867930546978215795234889296679397263358153173644718143487239607671511961381334423406298787273517284225770753556624583249074917542138505573823527646166676126369579513349857559204196671874910998174604026675616420307191152529500043899886246329388344988230557984730416697992181736342698686536205399693700623318938737848546291775262774189568625480782775795350856914907094158789844061292303149095922592017455995660500303095433284754461686018352713617711479223409607067468172542152691361598087255833794605240485227267073585055288063606055506329122684777526016462375663481848871301467219094572523517331565572456301894806020680358179628878002601137107681491457916426495917156572461338279013727525601357259550408801371289049141879483307783164558472632472102460636317343740441215210694332799103235994963759176009950937463235599834892369503566141572600981338682790221875544564739081392487582455246480781267070453668353028325989525829338506561104388132868430990480768409182211912772705523247841604600228474004629711490377459801859774375232472088754432889714902246588366385211324000598438114495360714708148308531172206023648747128557646822532376935746034517188717967894513988431511788473296626374628892859462503015046538494638473474119599608353143750828589074492100443040073038384440550912769640532338008381811265361485869108332817534246271520658062341414775443893653942303302810458537894515115301535187033881090834819284277341174986350885352250586079576110187119588964588209294062778677122918391505551859872188121660400923275297031632861850699525005918599340381952556025239818080089772015613678455251078554703306364815516883168831554895680373180254705651637493062492638390022185947524380068143700359431624517857376707482762771848887011099275094619833218952245774232708244698089680171295644784817305446888185985928469628046867564850948273765357077927287032162422921667490747934189479318806427622805278170770386746276755354313639872911596648661550495697820056485339552430871154378910467668660286109386613225811830774219014628104506204371968789323312922555780913820771236369271870539412366786555794197090357497033385842862029101181743161152849716884542664735810395555681936175267515828305834681857262593212494037581242622562489912157127712022087439315320185255477795840979111702542452282568181043549003325395416196951699088519638797130543302618454866644665331676695729919733958672321809521592499831262115173890043692438348536974567267887500121482095008162184628844634820301451237144084014786520313743147793644476405827468719175097904599887164701043191245681374455548050764511251836151357651201252243541131105628736843663275577381329090597568057577825206440367260990360410444433111901900690948406373735499540280725412875763710541171671035548404994215024946229685067485542027789677379889421994648586645337132667703590237566776036637736148467474508992925104920364056464858249836632235957832110778985156614152299017828013069708265732853642158206405693794198270903075532031311411480736086453604370820634054416977645596893644025550297442174539597916224916935835507188340398347932763274070614967415783634770245160508254850934777541874602636580649814443276802048089771420736900815337299881376903157490637233935038525941838131969092591954419458930687253171651534733470420374184850890383050535551434173487789387453705501140559916967876375957547523693082028147696135527559940246120098444010316116239322497212546195900762426510859492460362745049826080349760525120033450468366476302032462015136843164465487919127299320975291104682700368897046104150287766644128189562135439722825510520384020262336578599153090166797371667616326946900138919078892169115107601156623603236647142211754042748522961367880065645571749932457590588301779295784739426904457584441599192100523569831244698246322860083958542386958916665601162253797699081670486204157168724118947034726717660125266422779088151813069789068543076140593528264932618145200569448151157333733349078107457239062200752142087565591646720803745620316958850110195101398905916637897259154953529313550116049255762199731047490056682155084818476503534013361665052838557131371542504125067706612451775556391081637953331716417526705726377734465398802533256593438640553236739048006019973028420628825216357298642221619505504891960422057260361839573848559587724009167439972418360479460217058069117253553025937662386168204647658678227603021136197487090605490708875159481982156834478524866699405147114126993040672144618380974702881930431067799886700201371719763166034150920893483602747186989771740809848767781225935447355779355941968141946968718293896536167286075395947125021622145492950537898713730839782675517363214456409843082695151688672793740359763459143164663777319488050546811564502803874290760059098918695022116575483379908964323591859687856393552240101510191392091390571513325477203526581484538768413410141202996811812112979692089976803181302519465579923792984613350855746588359110851429753718313997981659515179571765107459524999490836829014391288079669969326311886062097067030395485125406637136829770361612293746494574275798141779449470222170115653259233661193051606360749927228888639219315195328035177161689135352418243102211425116402798162727588527165924476350784867449681917322858337176711316199443402248026729406299603819697746338134404290892954072606193114059772743048856753976922772440177946685818414058736920545493577352668546430677431569816489590388195538530035728153460812852062661624262576489947457989233521841413056947801879289919300084459797822920558295029864507272093064716793582202102619874059576505956057852694485686285021295919373123690977807728680179702911728841518118073267778960120849335731546274059986487115746063027701413773668303877860208085701286568149680488232608013381196012412212371321088347031459944063415650972972176683391849563956591199735135912318149954130042867232615467119420015628815668317774954451415105559125074797428465363228263982177392896920755487905246499444230421164242548289241060556756731504716603400844139428197286548431801855766080190631684384224730062858569977723744525963869228257763778814258548459506465969504433725906314008041944958791339021751431949821115242424654577779131767126660598177946172539514585180805816631263522358646855313152344840507708499879932364574207859400562901630708689498647319702012595174828315684142166805234704250022666230119827622511603143776041255242741181281117027283927720642271690513702627914383948865481204960359042673945150247485463146727018188942812539354436887053973206944472925296338318014138207150907786736694216670466808818786393144912794856550768301776336750281480878333824529133513328808634114567054021448022744260630572330973573596919471131274818604617506358582854992787130456736468506140738881515991088628950248185076810486678910633824173303032726199349302899227053333230177488597502874279277652878156913796857589091495940299673985756969709151635225467672036598624059453766569114466312137185925996203189350790962368194140885453406736315452919189211813425486782190841035997307699920983809812905110545766421473753562058271596993232494890867939112259750343471101044061732553050957643946500260052489856395549736559379692771529736672929244216291035335657283231967375390156786585365209097609743900360798547229581097050451985737868025993893693923035669302350977459433634128292676485434520253300364573480200561013816176845633345679041017532110005526657076071314738659183879393882508498591681342702283372089907587204864211122192417267286585767629040307368342293414565973683843745515477533996039206934496506775968161180476295439066386920655680766447113831307068254415433247761072442299336015717617985078268152953778122096388472453486690070121194622059406966278742863271201267194795266446636419751986439017338250166935354056720590358281663075453760753683095046806140147771289618348436252150284755948157922929238534332843336319881530728307296961230642310477175727349825398138541185953939011287506653235619795194585860980261542391698841145283342435531722737355294614236359256973612966241013095102484035863248736191192749141886045227862497293927923658897656585425452194802197269911191907209023719369988359071487328987860795876767666849389918180414598386475483491260995589228589655227331374682045561182508151466343946789652078898060178509652020577714767824212023700173237601846297646300480405370425210755967157552040858929261932245455823835503370938669954908830863779086994220457773541898979441086433709501268271790917729636362560808281362029466160046775305903738166668941855255813059781759189254997261426919643965652378470356847779804606711247964836090961989938685596583814753162301978756973417316419703598263875263957896781037150075329205618085567144204341015826236472636103953335340086979970404494630224187484407340871894904747863331335222970681837766096293829599635851399776884396825305845538418660152406950174633100048974149755545926630799358610669240568337744641065598774593081335154099655630060152142746588498644021643982107245497321588010878748196101313905586577588571842256217589206750231132992208567242407677858221960225375518884921665237476461092658692370599143338069529733894140006316554757066174882271095516479617677192722244052458743566250995631288513881949499412980761307598002738857346256668437225672339817093261135947629621114368823540357243231571557145284662092815832948325285209609209887474742644876773529016014246747717222003678924439956517299007978485467959311167035220050754254009998876567392445272718724916288565230637939381212496303558074708860619460196550726721481580966921999639901232319380759935125042139915860437819205377933333529157702292044596326076221192546010852572852191199951217092963966799998354226405633977415744428214029186304317693080870193137325542857239168960258153560664975806210392356959892600278014566924028790314726634973407252378223923812733101366337456907183037025845416921215643484255427598132972115003000776787453411477838400758887324734919759045828533520731619868402832165694888125203683101172149254838189073928446257724912651180343182768542905122055736057092286842333902269578420606856449820700826132091031157857038699585825667554006589964318998826178576732770356882561068424637350431660342450814382106995497449397399836692266804280080688497426503507311569459995555767257980571536519056678763823395368102629843978079767243188978645862230353908797547295431708849349958263749417056707062311100760341729924323722116021004134871865738436983381024443424752112387439295738783774254513279385639078989315645871874880349423830556537154327320693270394648037440065072390202572663336588813738316109619859768681788079605820569015326195553142631137287141976550845962292444793287134350759285017539053103629083500436227080917502726830298118301250202701192444548818504760632515691138284227325469762976352548618219002648627397721508917643154691097003799967023730041163309879643450959107847394627160734486688138094583745863959777568922394886118290282201968079236368992184821795997815356961776310685999971093340910574408679726624097409764150298103885718933088442849832239651715452141923716672089306731985547995419623863456607929968548897173653783418544609369903731624913451874526162560581504120879101165661351123624651657404555979139572730098299617694491061570750642913415367476549168028295032342031519511570345076763541898255100411215558901127656802752467823826146494994158091924917217232045812597584377072390877410506993318836787227681297415958115239683231575600001501879812293274463724610360308377701647257571093626591095216147620753774223219794443638358155116734905450748279050784357715551634797773277968153093112034680204657469891423733006177649534288463476477480091111203989602424749366695687509024717460808442024598461906586991516980302923415082341511358963197433061091301156859807763258329834684881301352847582600916554922911615377463907004192890806053395085118071382045486066526104999243261572401734039703161805027614996192284970901782161953566874696476957832721288283695892553349426966811099523961928513130877479919065922477128049134382071751095953230031860472329682203777178429152973070464109637668198252447817731971639731413403547031163825461487396338532459232334791462330321927708820815802594868976708044207186133257569887538174671601298305712414161140441168286763765600368600016578148266114254723888186438008282103657245529711931149164863549296518278168478573549908418043487560932910490133608463911249899230890254305691854603290798068076058555620099618565135642875630506880650996406415977248932669752590419914547640978982841296537804890347048555739153277370384741897748796347772630167559213308291132225168273535021101212687449338520760047673005768218297520136683120048702864784610348381008566734482706636480768083139803115393741782127040652812158953167234791476826866845125450691404751293893439085298948759036722819067891373157137543376518036269608748516827932230548558380713013258949998606562342500956117789505207566526520907976499218009958336162752452017795156044264161277750232575197971053747080427555859807712475093913976197921232643543869218744950158900599629408137370381284759137480188068572184645131520847140550699064509027500159482969797809003342209268782665975852269594434201585693279168946658679154974710949999189547772886866018505177501198289033324930412472586614358920651418961542710857673824536602128796348650649161461595149676622160853963581291631367961339947773489636074569738427360688590210584423107803713920025605427306096512915106064414435316389342185521091557133198424438176088242700981461477001387600480513951682412523314908200751147226164967564740417542225753184777031930995787556685688891109279052202592136726561457831838135620448300843869880954430600323986640057304842562986987542147529159863749457947832393989092455758054960747645851624615087041057857718103358833777100064535529367859695446563258738698448528535250579817607024412902025891896291036469383760673871129437670554847604319449358088298743822607098363386300342215209287543755436428962303493793084032175514178483018068823520618666715902530328548447393856300236978148888090588948094932796644483063863082957462028122444588477275335242670317216114646114230086844440189898816189133657652590770512713081458267289762091297640160810763564793794095015924556043044440616966720254676208670390279271873418315583114055366050717324549640627590579957186357875607910563620326161593856700464061869742208668068330090143051583215377194347422824179545606252754323278350246264983310166564611178445001835439869193023364903509511907645369470000104735651701894479331852341572748309490654997888220219834806594874280190923933674539811547335062149096604781281356661232281388502749101337397669541448338990338235813974692895131011440444694104795057514275059830651876942801243740268337078892804053121954265387816204998339451879457261479152602431216566453185076176127570932828983220092950102544848715984177222569793191783779579018229932442026503823672362987737081759359149600473908074608642934655053325739986343391566811743115506014077284271906053836429587495199788968759672623013143776978409069785248357399218031574157933474405941077176467093462160332823399687729206405265220088031520350248139067754488369712309107105456055948574046624482617562896209761300427656568964480859365609146133635543898729460552811737664966180608631909752806082996489019771295908998305780919944078234235112211137104447813323010919595759381706238199527327500855985707687626474575601940337734533568019979293569430456507095032204215795165906341262851615834009837593478071143865359704562012095121498675616936930223452868926209560666601661132412717880034695099632712835096359002397375835877811161558377828838036792739544938698517221634880780400901244570103277467193079898671945193462066761851009878682288004305498462663909994694127210219545238197193260789791274683221067055690221266523069981080319322753953670769593820826618667891861736962019371824005764032466891826107966417206674717862874013087051958619896154027075186133486424844403378596585774018270245378514314346452926666901627990405076019546740153432427790251902469390489709129282456560727351447680443868616034209782353671753161525938201462597723739659682388074113902697175260797309107069364656495754751402550571942276907651025282608057339799729791277634122321182424714384289959179651867964381039258152087442662778348050667423698419403928911197982384501642639047177944389349680262157618829088655170108379531747520960068678660675848317271037295616597904566836750621504389076551825508346687414635964225659440262155111728310651322682589726393141490220640098897008009218842611118772478961965099515034076863686870974420736638850163966616725826197075068819075946735821577183472093669126397946365820999442862087241861443675624937073713314494752873962301970779993913547741166995193365975245792767986833924161480345980491978636545597151475876025518559677728171813464042051090749762920518262791265933093108120657368083053030769068898476201433758832193858753704268138609428547261780728804192061761907250510400898444615969335461844103116574947305017449291965775171591423618081925538372391745124477145382858765475968790393164918687232019863205980191900928145369157322523070224458268420756929335258961966005827949956121593730833149922628471219598004821602659924816518031796547571556330445473099993097408463857939031228013657687989604161748585572332081854779907057721100999924028528785236669785211494509056579427588519732830636365333876173580738091226389537443033288589920895142420778599712133979448814487468208849865487953103427575127240741435954605808915026254259286289678888389136408907111521535442268436979387674574482074913128656530321741846177581567715938692629784987293565333005839157231565797141894760571231167045502946916522175091971090333273320421139719841235546682417927702371016900680394495607864859950600730901264776549943004397473761099280228823589177358056395220541769026977609319610020158316215449854851078842886552403963866394092309707721818504359609757558641356164080760620900751305061877825007071989134073873005640480708997894578255689882748371275134482161617269596622718878935326706161512242657891780968005213655044804119020550924034140926776173414536623433388917495105455208465177552493171124605197926799139499034225191243353578218170756836736946688867925876400772031431456716795500920305560470111538442166236222587287577639681569158644235151149649217166478015418142207404801908658211687964069635718670089483903896692951313804617575323926421798616802894249720454816920432997453177082411874085623238006665077640440419801604042232397484465985357483795989120239959590055264264512381630174102775279377997841405158761392712231963394243947152669267009940584459356874155263426322520955098371900805501486614342279901956234648452992121929609338493717909771099097028174629017220546459036459249273555073079066787438921897764736762012880103658224657055945241775998214032311027420855683481636825226028160124246128766506827133734310416381272956926812550736239317671082146807102799076494432165005493022694664043238806761653822255956479048957346308269148576946351764479454420262679468858651460724897972697615414337572115149251137249358808628476404226169850239334167208497522395827204415335099734624797032211888101264775925015899704002710126854553430839033814846238763100444392278824124910284998831687223368550449490003088433566337549664437479643092376189683915088585484272492791963517748823707399679528148844463458488622138897451635221679908854819384431306900728860581881930056477501097021394754773875763225851101548947031862121613166518076449059112329005732748088763310397328572526604893591851846094437159475222363512005802849249648254984543120556936078129573101416242992401762195000658930412992208323961899015666257590159160575222273143242606589280634679658995505974975162080703237482210889203752639945653073217911099983054477160698667753540304343775552967282164593430794524402986055741278459838415515002860479370363198155797937934976444395463494903012321542733564575439391310474233289881399188504695933950626607448663824958731107842311520161067593817523150422937246859531352174166366896351357593072593513483177737843047536272567096025081059871589293348307378810527004977928422863762428330708424556270230070901906882420410290433947409705282977913339614158946929606845176961788907145460402276158882087046426539760573796661159064518827978903813673265242568580979754684623162583635965952257687814566745466336056263794780410336613729880583511254659525221184620082175868593495839424582894808836629923471279974256429756704258762694008838289675603996307108082530760013986854833481565223003360303867025490759140442009618466649373100701988487625182446904813259528041721928740060260472929694286746353464079766965692477870816225281355801088588584336805670565297745359191922830996053444106697181294842651247200069648768418105593923478548045320284209881433047566550169203864422624465081182931643075286429201193740023833015547754401974661244453050237289928799230190154767738029236609189363276429397072692884311280188119307995010250032007779447059204952603423551894479834390002434538556794952146334922643058105536368719589118961273829912169036282354142030222704461064515890935187673899254276385776428879992335903875644471182958402106061226841619775145933165849170823187316350837633117056246318267819338603647986522907868108445509746453014833412577290990872715984694987966971395196567408954728252189619026486085879247405080885588707458456565046300003421745155102992388730969118633048308055867622465997322331090751513373190757958726635220554852505815517061274523843308629258995044024948390311557763581329190594868406823507105851982144304146060112055716555896454478870680747806085400230137822224592246304567706997686974993879324667163570755224451926250171713789132343502536528691890062356691697566522872514599559777702497015754572877574470161475749134386922449920190961690658062264450185689918989765811945384889452224048434888264625789112632815082387009458286234880555463305819994700664561250709005599691220558132131933727693078489064515500843715308813736939059988298244071789976746527881408776838794761151808984479500928016195420347662565509487905759433413776389010539535473141986376240852177673602923865314251403544902255710030595492620692218438377145947385770064010084674823815724642089948471137692003483195405938195072397152253908981417252639169862726498206875271538578160362384271860386887387377763658166277870948130492865008101062089094932023838365153963905399276761187163140455608872207023668072578119540499994584020200754262896493940700531534941167142855759316386869655446077561742389765011893547425640352128918902953555329998818744654249928090233664150776678736917962772118350702467769633954875026693379385946926119270896952660766122814488909740482277543030086112077097172025727738609523706227071706125697299659311299697580369616379299500198699593246478029818436765258593618911138495372883494308580317270830762038651684221611214675456253912932183550186082323274048884166140564010828379504184407161745166457540911270425988267451987659367907725384080354051653970535270421842593603513579357003555985747639257474557473554866474506018555230443767170497489098749766808767934937782643495834998379905702155016122086073335468364332820338641220507583404658261664158825124255118229881271717094235999558940524330494794737586130495117880331539238387915614902632601459981707189139269895162825656623545083939334175432584870582752672076151975550607035399185733422033291907046347795090985325306466687390561647065429471311086674682612374153612200666654888444360623133711584013127689647947521609117221229950428215582695865215163676265494490152745742216994320351585359362839203369128002034270534613219926489241826862007363603087148838792840208286206447616406957085866663899048226951885601130956293766393894381773940653922395135859600727111808998103900222304344174338342510020868553490465434272297907673183030975248175680565947543463739405715697252368841326932401094857404472149162592879450145188298641079421321208672557048499509333733144556993341375637586573363182228668593374050395979589870562145059002520039554429968661730717160268747111200158188258820877545376320181668078246932462277067324572966502777688335655119349479143715656438121159629893577968658965021539719224233484752638926723547003220791420657039532324791487759298298745508579752467459370937281053201732317298544443478917750954942267044928202915288157421616377597473738819813592741938542454571456828537062978294519277965093208025448932854189915888190799333897668263255120664788094456994777963529052618549825549839557144718683317423809395540988760976812383208921611792681943291248919236831148237493154341962723445047957624530474080191415152873656934329710255176082320118367008823991773963348260760406337839169567292842885013104698941698345233527288134005105276615509941366537697831047912783969203930506013420587331409011619588766867832551853368842733118425637652107384900099030420547333322893391958325574922685840992555175591779044585990260985480235874000802746595854213024517528179752221706551172101351766133202854851807202405216928885894002462699879937950753667279314803772138067507077605804841010455045116043110216515873231101742590369555016245671119198186059767786885418189665307014296038483838146111954859276022374842208396256963104581342127337528963730017971151522499323134896379828953958167805386649718933436430591162633046546264264731434669261088683859769913791933338905466595764716956238565977380172629847058114262212786543342256913642962513780339813729858105089889387097520037930600129326597705300869608556128229074770899147444548918537628999752895744667393486301627112786621245883998595820809944136230783842396806803493720064747271447931000721381278468907536882663126733530399232739495133473509436384238697674652753378422085872988720167579542383639833347464539663475972276600566260934467857192069249354601389081487590483782876222037834311980804325102851462539488404185505459541485372087210573090483825138561811553699481777342122976426450707078473285837897049027965662531745362283175738356908789086680548360466779752606157948563943866128546470241720791420462927801604462435021279479505836448659456739774315093761730876908803508027301119526812078914325865773705713722173765331074973169635151560528863645943823409365168900154929955920815741285906897732693261152636181242619799801750107443453136752807618686451967831733923952801107339262492136074749012424632993306952226296816642173786655703371875525198683309666643012211638058798858629789193721295128926370976343220781865331945302262332873342875208387187881018910120826644622888369492408671745240184038874184921461768268202908709163509136861766217737549104630765512859510279782152678521596194303078753963634543105576030092542772662773658703752344383462650183614225089731613629194442710726745045733256899081141283105867670866185612132390746796266099244927782662688322705281542677869432049394679872953492086769301376802510422082957521924754906535304810704456388790534240826926807830220172310829034328904653247533386719056482086662506216741210125318927844076618540994896138336707437437315540057726176610033785636449272719244814322644868472157281998750524105992262348704234719811726830511219441290640251262266058010023954805963468736774250595708504043728009266456991070364455487592057954941432459872127251864192095307324877727535299092936297575463885220528556217577818604756800682381192345781617838449922047885346140662501931972084905550191847826030278387250254930000695881909797228754067184309302659920948716186805534822033330728498548557309703859951283139655350549629959344175338674724720481801360829556199582644207805044039760577974245562402467905651911830441730474988988963339189265916235054049435819981225336408175727611209799103985345608472857727409786443974928392767693927614787567103098256313002704941991274461496321926838750111725746165407363539280747882700510855305942365292878183656580821765787047891828149091267896114446725528495906087750593383962936118895357020739111434873412688262174614627802576863344754873526466876972167834332319002467986197522997586423751445063034204050603687853268912995884731231622449271439321808324973563301962230265447424875769515945745066600080254511817922048933303064025534125778293127265611626255261388580605627701513291876030839054076208129387431664991889854108068378465698508085686779218310840832624128443167098159666775932365886241068586073250003886571405448375035250904220006921280207961758933488736027483054429120343593575264711319387981711616609945609553100478626234445750572625773593554034217513250944577093238156147595444570708584642938012569146391851780811122560351933985316063719620712707528379533846644304850782554510783482250154002601351107873422996929408567907110891554147490174157811172116937060560248948541136930801246785650660833632209802226362472160049140936403101226509951760196518234749203112946013384028106281098353861732028098512200124143405779787276868085851632160484672114695714101981828482882304493547786889981708954175695513793601846353020319827624091498466623173473619764600154064153861091919361254317266100616244121235490483040600422026520815333184158101382987768299912647369262371708606076484863899033752092053303060940949950298020921850071032323369659767188398448576773834283975544904945588984810159988026985426800157670917845507011845955834442903919681665480946146210402224755289375397071382227393482596150495559047729350904089836516076303604784976855292105446013866504429511018966934016980342514990294184458061242529223295455077934865834978440168049326688004757130010947797634088638162019907792098206633871090515118312489756634312530677999515620091725799727547422106629351547237047953746601998019584376535712809763476847613205748880753573143146860824691267694018509302303592797368343350641784267096389480444045598559867578036674159927446053357000600533266585244003817210591569094674152296020830780293956264092138267367287518144505662473843227770552806310818395073641057079524694498794086111419482662076137582574782275044788775480463888772299880114858140962151225672404979192630808602306254086004931864878016515991543168454869434359192827692172278709708090036548090874789113594217248694968005416346622536710223177756453862676881169140980846747649211074527800285579979598837534373320574892520930954296734222324806105864900924657620024011101324528362084616879930520916468986876393157693085222691100274323780119353537440796799790035858017035981614398100483961650791916965557686808132849546681515742126061986867254982498271690165191719790831452671595704526188533048078606977824473844719870414474336835392210514552107287687098570535473321211961945442164952036315960647691350024814773621377495795276198553044132403712210528400728438302567227654416315421073039565789329636724188109344427341511576585613514495735982892794313578077460667785645930299765673464694802678553637918238177562996490784772554088035180209494962236894796134203156603021845268603767281957268160960432313914174672811587550224618847976923403343043224983198066498452003811705226453538344468973346252937496327310574401908316161065674255239249584888317677864293470006184027168620290674444769267521337008044667912472550883832026382630577394841798307227196509617845344500523200301997053772537438069383933475044224543143023876723459960687037163664274404721035012437622448126449382815878710432146279052762693708129383512746851151444681076288999327988166495490338126603776535394806977906673261688987242053155337083837823066259714621722842773406128972294027033766710532995039534215668753509814555363457980663420378697211618562154101989955328956114698649724244400979641707357953960270634261534864856281072700313786870011579030648516875447909768272618431141660617335666368451255776799575713975195356729703474136121397823964304771104474665093811040864447630425840838510539973718620666809991670449032751627186392092954640774106001407416067770419243666313769535601434883913683896142909657876432287298080750536174361082596839090518779825503120159139191935058485318086285259409370402674940427588866908101157981541027655776425603711528958921587797724688450326904283768156415622446950244257844007584023752618885550202171726979593591593550346960186077210227442549641310783509720264259463596597694700809096228343839381288230433500780239506658732101857420119247932215762202221401866765816808585980612730832316062555595473334079209201824369543329888471190578845295420406600171280336079826807129911045176710198257906393568964079468138946010192141791650126097053857615025985159274188889106831458480533906797476529399023172280537667486674300144411671398845365412420827257392038206503508704207704441009337569338397475943315243622790889557600132996387842552141489259642164918436897288023064743053213205582428393164310236688915317080879418756922660555097426469514661888052946317493163712206103206744628345371273254558913610663109625367041278739885730366866683251992304527731941016908140331324349191091530450425198231842355631741114658496108822794770264823408188669830018862354960761352777212701524011225587292128064958912215466295094736636086833557243795908653874434754162774447654629618483646240286984297883687518067895985910220059187498868643168778885567952836576816761242030769661415212440768741721963130865663533595995968741539616928337724922892738773537421994376752221854751185755020413874278975430520827921562948793707306554053382023726450852353743527512607049989960346770968620850324379932128593152865305212741305618732732709373544889275599403721992517463801283585241147981746484440174611698586033983660383177524234857033762144452302264994074036466154963237582071085067150836696542809464120198893023641607433221807658560196158301039413877527793468979090741861531339970710919992756685660844831025816842800812404652666435555802434726313223084362551163583804330278596035070044803241266873379608624464604732932547840770550149829609946970702202295512870557411617159656212153911660161679021727151691942854952120029010891348026162452602934197118898331060062047856861928843825696687922877623335600855284203107787829711065021451725687630299996420101268690461955410259190471869209112738763303721759339521346495092681620062417033116837677240355013326994233177350837272311042349305659756247540912909452451955560654122781137188672038218172253159021809170603407945164099863775936257385019074117499054610848163563354158199695615100056230025888377372946511688248259930211560687265132954365592111006628029803671608518448426616994208244514019453145323215245258117753965692543913425696913432582459166014058806450997918340417786201357418092796136499303066509481167552041792817378740592147485389501153911744901078486284936316804252111057916729577186049529504681781077544063865691562758070675000655731257516308559151474999765539031406218857728619882217306669200071012523842045737420710082322834443292921897915685547176277901933284988515788565837246930390949900929006079275207047326472013809565804016355531041802563701807543186782202740163538023702215043347461116865557454521413402695485624210704119691387762446813327422854590796705338141204506871448790595108513757492902431202109148792613113561251604838242020648704592895488735967805873365024747564549356486929627961077876327349387604745763042087719756228692609739977090969699207008128737090397932584036040689015255701577975979053296838080035566473763473545991546624626679801562820943046667936287953684621842728536670873795434909396665018778411286866758078988639565644320645402925606487680496292194990662822404633955324345630537199563253055684144460732711011284395790154898485290048253502784298902116132673861021500210586253694222539835825802395440131957418437714530186708321312504776237455739404675342669341104475340710715135340662339526794062911421256379554129320769330634528772800055852890783544612498207827946876603591052221746805236397753151486031230537397596408241049055176208484902569149669666158585848073392129695035998860282047417276381451526150803605390827210856695783379335167380108773800467632943220108077553065847548583335437861405038515355250732559334525029753111979124518222605055449096627683480156508900604081325831214290625294902962392197053892196259875099819395967745593402021225926243002586245428389777425108191802693167751475821341188965805665792275522306918858064433043457569867832480340412807255766392047397238628740143183383706212415362870174475795470452102937604308608235584254251984191387840943744470103086667174280490685251275850598462288643323748459602573435759021697246474258169828489746591437827429230558701710548534015903973587338663447072940574295740408602738545151503541283619986850497618888020155463448116401560188248547614077134925279948392540824797452171177912332894321638889128013827361394664969488641533225519970155578313656718761858161978142159935485894175475916569329409654942899832353572937953397477059564407565311224861776956231047855736484123523915907671420574533466414664874101545264036185785427209230807786827351853863180640636091699652844279400900685821829559454366587271319486173893025200193561426475642436195014193215716702073773355462546137177268179229251213001184538593515432567203367426865708311919409931525035215602394291410374868972084773964534862213535944676531974361601720088068597508369176083911090143166898238446552649280940960396107038022031175576445464909808792777472433041689375211502931470692576430621171881095977873127709308139452283670439511862715255196133151672072174802119459290698328595635630669274634161428133823925431898228705441798977285619581753398995917327150589490142686040418561544819080333059306417494474660824760635842494128942026461519430234878275980669565405959525958799156168222577994061129360247672541887557940493873259422872762557314329957794290869086157771621488586890470110462311321265566049966323967243998342438469226948053587359644593376893536664278712145927450658461115145540455834946307445833291526813247114105898899438134740050095854613975500139270794487591803874508743140859117162760065961383943239325966026437435842599298828168438310123286454024119097447060620846941591744162606006334035106040728605435351752715181158148684491832117281904862062392254412884919161147520846879907048329213932692570237521834924634280337107616136104568446678916072368247532998568113717803532172857034127728707907018358438501331098841624185824566450771752469860379549563366293171480693985571067944896066795054415658492100662547055673367240922622375130867854780306289311899070183543496339646847487124688308938152737753625756379439926186165750168649978119029986481948977853502691405037809667778696144832166050968653235969523932581480928225818746455806614725215183665495151448828183466505264529877933156432455401911079784578215783696192863707496419017881479087703506176595409351295688958618122565290442365666245657413372149181317568691538888150021131132904947325175141828528873161484430779587991557805841878880309180119716542646494420140183113710907448348600472975025274487039003149988128491601209207798158817439237746989985432344651134675697350723746420020831272806278221251256261388499392395424399051782905465203231760415002719568530781042258871016986610238719464906808120573325745307382782572464646159986674093844321325940781957031035315652268782123248563460843110336432096232790496256588103902914799946495131176420838533393584046058197303941485534308438583376242496621620283670561411474743793917130702058947002550743871886402876106392282873472925786827355433613780625504174431008934206572165783647587897864727749277204180021199629433356113641750281295451459096952964678354280203080768486695151967663626496335717397141085268132838081531751989983957839575904886365822738845582515043989833307363423624893879510909412326455143845358487598408494211644749694742657651924839824923158564514598820401418728598598070321719474248835500193714648791102598716636393977609737446796094011826231370468781321284463888112312472135650440746580166659428942791324788236253977553188608537755030309288884331382435774826751713019650389131042780050501656048698580695666826709519394344340421214475471811813964572520769349912360072424394168988503613411208941564484506213036121903229019415022327224555669805873674391835293032608682682553157407234970211804076824840630355856086800830398288333555101855201718444053742402458982202705293857650605399425330545831830666755342456425891637216151959873689728516727121437149032245978033523288624446966574264374092277142164797643052063836631951491563129792870849711062611272346064906497032999246459079818407405025767540136674360037524050733966412027508291766664877033489357100451370727043702503083478546365079284373036694357597190202814996378787754591099660788384676044324986469470078156807338378552366168332064239296388031585851189903508707133679838955135568006443132783256031392956072739467880235229546815799896043681497249621839866331015039503831036983793418173430189699598633612078605242994441784055474984491545501593540904655528800347143601569467116122226883508353199206515455742219712382935931090365299681634554337788317799428456402884353577000015121745304089886532850437568115605845510835986965110145960367966613115323771881351321964018911335583425459865296315216847899918805950645837831289208150642076348089247649031608238342123031920316278135779009587447797056218882722361057741031646688366368820198581458607846879558126538210865521269161977254860069392741824872526090310405158875532189036716210114464196550576880608251441997019874469147409570093957790485081898403801369150771362838782147802740096695078854171119330422134952714996372691120221837073507226716500943350302438904224712133372557923199939775002914165894125604336299783772284930805969282918716038149573856548287219894321896162341792563829502320621993650050527823677516884747104811900738491138166486939875935093378425727907058907418451398094787507447994699831319685048728899393830761647244364670752823940284413657481957826427090239189788149570601176854660633051111459833884066984455716422286716546884765028733803923906239675239434183199240571527436107602009063796649595140056953395557533384864665387574259508221023935731116554205942406172129179144995229056312465031751176188892926024089593170695989234254184711638623610839760082004168083083002114280921155417075465048611929652226509598391327759988871949582802327185076571761795216925036238293023026830257649703802307068884500332736031538118650493730364829271231828760487556412330722864516758166975872166429350375323874210450645627705316700380758639470733257524804694828081959507884170358500504497031981782930474840462241130288560289360572545368957335042583436233739536437451098843899513216368534273431788932429134498210762712061514917876905805024866862472197804849859531900293685091812166180550954598510852198653583211768187669929125777525419575338722776485099684764932588538656832637759722773088164272228210343736059086636094966197560340278500057261668731304311888268820940821985440392317493940610066641215765325522376455575926934806807260352633312638784563925074858098556584269597695645375686599114971689995333751878414855565894211692400340895270193954574700501371268031532943518724141429996220821905771118903924405782701084765115774647335898650656721143731085452937715255697553183030456559862695860888020695878893130612672009543594390016945034944313113654765465038121136136177351333144349635881833821784562207695078092064770606449093402374393957667799118257807028462338576051864789785678752393479502073190715276215093856471406055544870999364486449848206319043994200544705372884321958292267816345868250324368430779426676417005319047039500423114948310856824184240250482691891986218626133236663169069355870207478769714255052523738590980242472334754097683854550930026558772539672688758963587598732738557513970645986709340112152276381019918221033715070303919286443325764049620111676033768531867406546141821819381087170605824912319145757115200434775052856573014542679497770865112135772423343218243378174862818601313499913058231727199044488485259480156298449052107181579430137952330590525844112088085606104450305654960296995694370927467915577045329990131366949868036940061837534160882949794346335103624577518141435008964038705297838039713562195408666164561389872012871235306277020517965869032483078649689696957925579510999005052785389755781925628957220970927980560688871320324074822867024980495213237336227831455644885361637116205178511150476801205084701212931152871036650104775258163023951762294488999256738313693428640223527310592887240058157566934507522953768344218489262652929176517137062691511371733392059690953155771533252273916445119399257009613169663396000720792615269005378414521464452938728828762740117738577580857248965829164529174858251515288828949522141992732214126333948483323003954039488006440974550863549526362659455310795181425951019427531247836746896450358277074003642119486179531235648460758668474458406873591107821232414902319259259271286554044618455896738245213268778214154431173720244140509733144991396991899409659291980070349155666275672743963354387478858758170707237511233774098355431424238479171160209631009046639568489193934600437619765390556817206269308462308507285452184314540314657345365204023820802185712760609683253105142441916497502142215908360550228059616552230978139641308233499836845915852330613858297369622863533553159202790385354964593689077540266204607456448128745567862780995772001800894552081167480913745786145885213768210263415933968339446692557472960468907724224265855553396700113242062852079234248894153377621321858164983083773154685965386819691624769680100707524316792132867022485806500949039637261240366643759526147724661250356467992095745457758828335598064602012190439592870678887828837957924563298646868318258747959073680464834163344676972135076081543116602403745460839263392041060086956611155037373038054112412690620172641203252445524817597410503578334142394888148258573124490905478806629514591560934957273074040939447933850667899690163335810128480932700536707316740173091452389499242069405180576309669537530450960649465935589330926379075740064906256636049297485013049986334976151157747660514746372088551112500147802587909022077438889032178436950098809806575652984486650847302312093364879703463677354640837560053109963755190904438049560096305960741127566754022432940932936278760208290899148580071238293060157256698077403277248695970485203212594222243922553714079321420277031195747964935952115057610722086537048652122447632918067059949237972593299607572022525248679604950624698713454846354438146174289906953919328766429436143655713476696447300218422184569607069160921923782208374962264098255105182176416253430368443998326064867805825899974355785784707895381658130143803497712200976337049243304514327033263484589844141858205381046584615680008762588530867753235815153497087745606280528500680139634153555235273908680560380304192750043086809143989960495510522297007098893718704261728739225254360391251290460596832617857871352090547443256632499169771685177787471506432598380049046513952752143570996518423357497499841841759253891137915091786660118769614607799898174090565237823484251082254717071348759648629009385595909736979168839888715245008891144433297541494699715904860346426917243519071419928360132725222936450864211068630573924323065738819003675863310704792268362312556805237007313796165851451669012424916872004758447402415314390480860630540043170875662144135288277344550236121895219447353725468435232760722177068650276307666353568801166859118355003438761452499493788235883118436273139967862168265169534477809852150312810216182747151564723143211949835357415976314910318666923610148184657723371269737863893679294761298920357238602122745965164338483448517883875592535249166199180625572875593673686639053417927351281629668301298538509167484172572030606252786755870501476325946958462358906583781783085163285599921566953897987354000041613455027876206006505831294343528967804636416210636154252653602647445568855261672165487468278513881853556470907313950594284893651932260529568374853623809785608201342136601876086161012518732668798305171461089194939625590253648272618567898900201781570831857946461902727123812573707275158584329097505469557991027170646502767670570471729137395805675142963043113120662826888020213225546354471370134199881813952295627654660746480923579263152108577777947091803982035964525275350735485314428089123965357301968109442715615516129126898892936575543870328950475100043587286681559578368734929628367766642905335331973993854537319398374374825540056671164053875782456924991996012438736250430888497893641290578451979239819695754669782179565371489733506968790853644746659564218630752103051444370160825755415355457605665204020005062287342623829433093913170330383788274336970245841943226062998618274989890474695783369687539793579509477083241432412880172108639716645674972498011229311983369941971420941533872723359138275736840017391551580320105980598870730807497954146949985799569095094473552347461980950384941596512468879111751085246209852031340434317269183836075583335946852040252843678120746515549369860075546409131362282459642670756146667914037812767968940644514087807697842312860765889077780407283780259072193823461781480797108008499423919114444180456897847569703259813134775825311797146100234941027698870674928064908476695038301505515279714826142416824233638059271858534393514721984902362756799394600959480951921665229559087167797846409165953346817103358457975654128534060987590657721251644189610388185537271763424688437665583217731516768005856761323796828690305198368468689788349879548313838967438121459455057225428586911532849926168278326461814131665178518352272104574416392849722314469194732673185649567580583833249409074156264758584813014468896205782226449307645428692714283388632445561352645533711218081884876256800784336899360603649067105990679786295912926789799784828437687345573749739826417762220450650542469751762956618280722829826678370767080012718748800778001275423089243569056380577066028436133621418614038310532329104752523087184999586041394689009049172523998034869702112238915502447325601793392375579063845547186323515690318797772385142777251455339486428313003334189551162894673172633443471518588647151615883520691235487747053815684991749009738103555035830153714076191008484490582974695798628765271803199804115898896671851425841048493235834515935232889254835248724962562946269229287250149098382205591107815252000359125345662267720898338363085749354867380942350561753865194100161657997842750850031516599835710577129884821847328736525056635937584156357310543909125217278539821455824268070685709022538544380355678217255459628640220416885958061341392296488449515995493937914565141091443164307947179627480627017543717012956901054169628555128188358973587389636657880718892240520724673256492648733339681314753225608625901972837288139492363523433516255963332810663697505548382922883518018349756912424252821039979114991996944337343958138555224921647902337200579285089034960906026607493176567920575105814695481959567584982301517174332289806654854612522642967093840686851907526367049123244863746463978398373240733018241828925426052600544355544233837545686373308579449366225601629916336337738331524293589919273810992742151516735568618988323124292813687701881363051280862686326417413555260323940951271400985334288430755521389180156866038138232978428339348709152987025435873471198178998073880742989416512493508196920785181885771951392701103123164397195014327348840708288151684003536689734187556158669214014034328977473990103070680017474396506769827710128284606991972736216892646728302774692769375556830641082517113397861972495314048116075847864128218724675999045001298762970222287345395248660346006253576746402058787079000383298295705525004774545729227803988927612965244532681908363799764539427688414215545059657192967930307405485372883810407790005578234817940388858639760016309011805045357563909150078837492245863723025299370923729918299961132702508215548826635809853346894338364329554891046037122662413163909971555468432480814125395986615919216190549668461960443131887966627578711096903469498784206907741727220326727313974380694685692742210357873027547046870788149276469746647199712323084457734452392984227441345900523329188988870068495082677193261050194821697062523629894166444383399964577849723723294552409129695503465872537023633364106679034423710818384854889630088797178935399158484127980926267064136630036663642812067749077049150643966459017225512686880686382284879022187285507857571926765587578959325143081823605972341334016219748786245972069641650802796177845738093881993924639495786135881470894408736549298496622074926075414451155546599196810327801960158954930849827035469876174749186701148975409239230552426112663043165133153674588421004753043786733627488658466383767575640934803546886054475563248832096550047466322593761513317321895100558492700094381956559827905262802902006076347920093665459676015503690859098474848695585538972177632368880160775761819891071831985336688691247776778440490494921443500535361132034564542837221464197906286687703073641011769327030576398213141541178063149858654475665688201344226976603637002131540794333315225170112190859458692966680836558125850035515353423409269755232343053381958615464868702974437850577785941323482423956473786738247687434592890828255553217501686664203384742935754522444220859634620765134023635037211399523022904317904300701318978444434224393421363906590911690873579289164680372683058043559808657664033776994352137001745419919123662107897602384540439193952518735795871457416301202012783510627164778140661617129484410354852319162714410970646210636141393545516399111152371014504109161054677443665277494525648873018033129162122134068865559186818331704459798519260394825811574456385497605756974914997493333205066284210794701958937331634722192889391591277765688761105183095915694698144576504536198792646893034556207163169964781305356233968805457122065023870381594152127775922984258015168466330771529490331422985035005223578997872747904610463553661479590753486321189501615133623064206248439238022817672318013321795008589379492124000175308884382123199108989455823270545980996839811176978290407541352742693615071769038805727410399124674078967514033634940116344485527803850083829025846144324645954019745205989607826956516054516499274649074394632038538102782783495254384862858735217732184764161671706159688175758292428877636021265948346527387451217074715885830655145539516826574408044053315996391534121644919387435503761994152603111960991411719405089670534373471828942564668840925979660826168703205575056000543949585559709622478466579300364916809202519581118968343925032818677903306514502896880537885239370662214557506760137376658709439297720272605805518329549717071966708570550659848265032035673001659179371388455961917852164513372451028140567349415577231222065988290492449205137036327666912604944202133532598579448445745878990225694565472592363878157325652282763645039706970714327551977109375849232986525499143649021993038494201727130448299526110822983785496531813423447718460050305648602830535408517666127308405478926227027296917509465962904433876433803564141167294099314683336333767575513402041849400399556233944091327167268316262400635073592384016976569838840018745201586568251164692580883560852299810781040022540582651018302436630167098853981169235579517798581729835162403238152605632944709890927037052449043716841608504314804130563125043641281469258732590849659178701185855803760048039253420827571153507196514954930739231282810814572464605665810459252923742513493572058894075737188483324356011662163090058333442277983265003823104000430891729016204747767571328365905884488712540078672688807930205981801876552456951398213633899106193402992065767036558430597282541147446850940310495079238902366239348984968326276457373358465270463001501621139436324694795047781313138142761140016234795688366214136249087658659869896259916850319527784286535547465325251110949555346223732870606969067578444422829390265117647819824490776703481844298487725603971504660822226658384847777882972097069187864446402738396840888778713787793139366480560864931060688150859620848843185573933638730756243593141917500709982338902349483274101953263871509690366480143107629067013051016209687410255852933339495787518404445923565026786269519028027098438322762877854965849190269883298317580571127792966966654466196761890297038795865141094467799196538968911758800130675871798941320885164490113594954973746139983525397619344273290071288081408789416877946130848142976210200603848892027138730165061918268694187002910844290704886917629360313964120691767623342772677115418414151731120569882411513050866822796884683818668731338141835907234808831559893175282753898709882932341485616108012328709000686964722753107583636337094419907965763271779371252787497333941388914403443090077911839478314046800101305162334276151258677296878342773435663114197180031060293290519952768271834594402079239090106094896341807075515835388309720699459685200570466579602554256050367934768657144204727411427452449306616141678459513166322434895499243400431455234038595689235784186988755491209733827018185122913238889804223322052304587034288924547504203590899456675450924584710575123487893009516473514318176507394849262543523312280358637380633970816637659331016679641972148783327519387940502707589930170609394256428023247811874911452353959069147776822523825939494851888726914961119020733368785869532494831007519383318213299652909134203328955468212844339576723629727652163262920958306144282266427455691223349975331013538525116664201274641727456700446258023711677312307095629471702639901780007025460645318500096893708014327392227482129911329724033058712776931754656659349946101935852233459934669553996527346705544459133689938259952500769380703990961106784047767409223904790005525832693616571905865483046568483995107555302032090268532375601617819783808339187843398654696125209797788798123122934785448552054854840770678639835379201051143585609248427580403424144282424552202843780794177382800126802674719300650979071782581420942623606954699376904991422755760319129679470797411298342980632052109271631657279317397918340192933899115895417579897292033327770851065981195299858874020143777066975563959916505353580185293410393857708696682119695842500179325246701608493048172789917140142228031310984279178672784318550269770377097243257630209030343486699472855411113123202463367489577445236643520790275332515806984670059565458486138728696649429902927791649966248006726589695721168682268896428472047153044491798782242362867129983533348821761665870159235559353060137757502361542631332830592487731624194443377463797064110438503175245739253375937647360926187095399809783620683500210250541008884591781080767172845805827876933259620544661188065238593377053729762728845300573470196997029181162263047984017777228569379708624230046941258869496647527361747734948237904338798311923827197485180481557283470725641240308532022565678337779117817703658124727753838730247923234476659119024302955727175187747518150867127621829218161635435729075116953151428925292147330984496979173292152051207025968781626204889266963494338550271074350776976083591494646304199188615425264563703300693358009955692061583508308631476808148349872195941093104906691281022529454260838511051974230981038105080127352439585880418374228404999742559647145579363128597798204844260022095419017547470956716724431670879660499062029184698199960958011721040651723411446152677314549343014589848016683033244419635507832183920436583545460965944781001798677390839777058394432653938214453580060414804192989773888567930981269177633009169125948042224141867271017500658220306850382734736664456901154089105721848736728403146696936218345402957775669554230069209630289491885472753558345626465548263161982312956002438343885853004108296416299021738720239287971583616172507532695354426258725703105136946396352042702772647511034048094719750751785274896449164189058928213951893209351424431513247729412485520727202567267533810528492404456930410366850247084632152334256610637539035894914439837643388840820502111295313411743851516977251416419940407152555125363032174420269696693369319329422969887993944644509009899971964959988733896055860461697367402162083514656100132883199916223002304993134067764851413091265456334198488069744248526255924333496179174829938479381759513199174732195121888068162049343330350178991908865063132726206983914660853921813815458379565922787002500915331712544625706088993801630051649179600642734499456179824903763703554301837210461148196135777789055362147658151104622503248871701448087705439280105644512563884451308425136567867554297954863457333506081640359129733575891550692824977375594774749306940936085793742474099533719071869237941490138871777195922136662143650873043599602683226860894319810890246674549809281186812500290209587658700609701043259715763458852029264438463906848381774441568288654463452076336429889934597459686794392047740900053406618925263778850963892770293173301705480839916878659881260054266545742056591829402068184592935511600234834702320901159998465666401602738481132451764493596011869381934505290496798075326031162251517454731032423334858993399556446104935359622962463683220419272201552211478853451012878441139731299297477437780139426105611309797907793052874776313165412106441892645189967212862791795930394690896323122755456762283729644225088381909002152343886222261767882454878972561982639336603371287144116836380209831348296208463702052528470879745497002107607177338950077405431405393412577409678141299791503911132155389415775757958161236494081568821325552401080929995083299382567281207841011726491105429992887845596312874293576103282353380123160817580688051426076254977343624334673449249599436322490331438692509229094587404703548810022932301202601797560760800045930787837504031154661424744527148367363180909649393170458649794305159504722159639172150759952955084395455084466600359874509093763858376960295200946866151411620908001673941096955521960574282672829386876812874764905762610205436270742349134579468080708739828563386169649810857708088702070294735722593535958704670641201728454285774827152301117080021911706261944975247791505400729416083113434030330802084488269400227932856777894442708822227068071157813641957208621735920472029636786730073210272316188685257055867544465945502066265734636694803352264435775451412745707468952300287306977510033651979314657782170467680428237226882636112761641548130599704006479043791069267122050319456939325678829293558144838376246277715977900832771398843097264343605687531793360877685610976174964775360429668284287457485325827115721003532621642363854904189052616649000982395721849154071809074125237013881086443412955176661280605646662521642400108870268077577439539667466512274053674375378538713399841752301326571020417413421758480115451432338675951094304744630039123685516201620385527314192506579177827967975016216631901617904495646497870491121813722038555480939642274611619317821491107362248111777544228293818712095410917512134772264541729130295846180737624411962820798869084992931922815086944790723921017562677182416784933501905564075567765752191226097107490374602540421775546978493186482568000683437848830188207473172544689003776697845471966861063061210029024819456367682809164817290902714326634196137387196270937159743015624802164556008938782121448592754179616580598107486537155258312733861219641176300116256598730232613080722474969727694567633821137030472698822221825966482589987634372058977312711713694482030838033096528061777205192289084539818946787704243943692003378703682054266803704013627501856043368024653090225458188322259242680182601251930256425610767354449680228276887479767953062306574520341940025731062693090615111448767133214857376316036190946079147391268773402780828965160522539702454702072604071786819180560996358993579200431128055582618739964130472925183667346947530612304724146241661598270311873243643650810540297924166565869892088449710123908985071818489902963215413323793962405229669977907360243545909639694497033592544100614271959759896703834648567632517465540369668593974874250275766471919516054939176011221800533841207453504908300596265719990311549859629285886255058994410283028491384461337042597693682706341825109627995936832044918093083301033188377969754914617684891193989490137024651144582057236075138798289823126961640883533081427991178361127669779818260586535581131055872713323370870426637573468552297036554716314439441813714398981529030106107129078369235990281606497543142748994047091977081838216699812087664915780241558179148037642318686793494509055901124519984637137527042602761606069857830057184751782386396738237826061894582165176841898775364628919561625925596638825266104074089377317783816812399985059000119320264343118758695914386747454697090193913528357893870857952897335212001095516384494180080701741918133468823318585188792983323459750688280282921751834728701385871108820831147811733796458744055519154073477449169322316594637643474399370963561455589096895458012914835988188606660153894914325803099744859580852698506949697535113970037331124127269487389750339530962106076763598559178331301427100598053567395951850192427075960285798752023949922853574421754712646100620712725984882539624378113529406719528312210753372415822642694058625729415775786948389637586726826697731714633015625961511231349817052667815748823671913407181727575252033078787690556579532625179869152215819554211469931164526100558070975266081725343879201158152697664280146084843631727480330938459153405619958452564868261024062223368537432594009794199551142896697039002261158144907740180568061107461592940346417256826920997243190889766654595949587791421572713314130638094668254645600177468797847404041218672222260159687767255781324563373736728918168511140361121589375870337797008846221388476005538526095090426908520033744798760467473917410497829484145513987847957602349481122426608927793702199910372294485348469753420131629917082400964111663327705305466974946350355639492738646528083490140591332156326111494270267521043131048810464516462691517144867043563694007043274405495297677174821908647254560626384890197409608419847805281353376318926394428125388838042104127460949864587168200617525416813795065798864609825045169933576188683712770918491300528650841734771059135059763699546420303016678397058055624313969635344373891988436222717081680944977488495751648673439616409060177155127148985305445897044537001725871120766723548119433240635700975139141594110424652800752830796315406683112591950066276722555292104206631928730425774170194583924884251199134218190818127160531405056394552621554366976744350072786009372651399819729459247201500416220292190249687709136096630840448379041101373670601597067402158449617217123342411711203174052871833864761364346423221702751862730135601067277857665309566422483380003810092912253938766043263857915007914445087122227434341333905330162480855685188161284516122563211197551886654000888648376862780810657547040800213278563461258786421771016259193411458991122848488213292032569006497184702790970742111802967548299754885662440924857900874257707201355344521817216312892234430149971838919147931037890229139824751374695689558063430198207925919289669261692747389316038598885421466913035246278748079156408009937851404055330925305781302334708525556770724079796904309560605020939983909390832293427100889122836384567525345099865395990605528434294257139534025822931723756872428131290712094080917666177205423245354647911022223111149668862728854963995545683449475668928683924287210836029641132287625542148128418030854316582409328156172150476223092016651141937841127460688796510512046963565945183764741369176959752980945859099649406699687346257916555850207703053133469612482181569311408656965789862793505292450162672914745663545774237382283746378039148205529012470077789631393833565905327396508562680268231565101329223495588539870134433364629542614363561223784041701653466730136874148845548797966011302878712138194444838176558523759489880903649835943876565446614610382171478123721999490457761285521643100765468333622718103319518493355366156282820437974731130664160778236374437403704134366300871696884209192522657606911912021260836426961404175204124818226207199875033035597264187144820725413702234142600831091825776442670108920006744764321861851223326314098246472584624276511479659003827805471164780780047610273374284669071716303969011630717958571454567038811882351076236151683772803168765667523882579446046281336196511409251874590157075555988489231629750680631488574130089037238988639461810377894509847687862455257614594533480388452188959348105306415437644860534960434931219911918356894603999550229802142446972186088772870193224898645956761524444598202288840914272121594572229729333693344050785683777472538927282596643026361898162689543557548728619268153868429313722530452219061326816543478209269871219294685480967895269277472564501340647017583660812674031415121061145857050209902983688119089027123690453891313117980676692003938689421760753343808423163112683256727023468737317161292698543815572360901791852146331127627335420593832877599703610238402304392573390979643569145242391550980788630665733464789065171379988808224374213370887302509652526713415591891615740874043843590346817532057044070908558849141762924161776637806217422437147838627840920774425309390083219762670762222175057965988335508818834819613568644374092612376661171133748247084717210205640331626763851470760120716885078748131886218238779869727752779811301691336849899329319136249850690070262053450103227795474584347919744214856292686614430536619075886153433347018561845036466989155244791866085570507529599169362967341166039598150237300334513252119841061092915071419102379828447901285705653423974721052407860958552865649172559593009212221751072363217931763499347150356163782978976281313483211138423225858394862247296457653466021501692371488905137846007743279964427858810343243662017520576284536263348962342296059078139642658945788711398769614625328093479903035215138660969765112848972446031232460617082477342618460077070139029856422910408297470561115075430618751164324764051944616259667183248429944211841368545472963032486471196199684271329092662036667124858689305015800216189418748872732906527585551859836241126106911620291052709028302198727913284585476450486952443815115843449244024820224448178997126896948236725643295687269756848163145780522118382202820483958793647483338282010269349704522344526628179733713804865527243117979465757160722111961460032862468468319175555130942868764658065715454159701805561220466448588083167642944994284650666816701277625986368290305614122169878295519720947695100360499144024483011173051678097036815397238240180574091023657431880248893093553879122212078457645083473462043705754013958297035836818311798493520369971463456466182410431966002224157204160250714514547369617074499663584453504202334091237084785272868846845791739012705788651652026527334930884401534480939368803399905949697341173738287780282065324051017422009127127570752562927274956353579759239938580488970373017955069264988558832013601456438831331541423671877512105326721226514421639764509111042789655507709543992268742370885142635406038308451388484191296911203925975975579499234905960132354894087541724022611920884862240404624308431884803792222546835364076404106006105492803697826596304876108895774429478548557409932753514009411080833138097797331698921131507466040788734121898202858825899578478134781149167820733284669432241282571259073584342568880536456888534756489508565042634039147395911102703774809009056779244744663125393146318702132275805611684251070851501735073160286865985191348093845192407549808619300796040532149247281247078223315403353111095793476471849772775841327258574789479300606351676991886530949321066895476489124002960828713081602593402084696735652445825555302760579169966389316109834965808922405892351725137976146046023481088009304840098290349421071033861699614695929352151197949576785078984747759340458896546262802736842116969580406873754167393404845760083753999163755431824916351403576231120078851459609132901603507764353188205381635208958615475432615318904132748542454905111220312661045797617098605165715972470656722501093276666774154928501235474455110132551166831769583729646051190969607348973985035028406176248787173512633933356980905415283351696541970149444423192000136810487493874150846582405922539827709353279292872424682706973248196930532096208787058600375048656360772885134573674614945286446482205266453355385168802361725215412348406911096991660749369814575963458435297657349025496986873478188598253467822500329944359725283678341249276643088638685448209991165815914847127425860500956566931315261039245944228455288696752889681577657011650065129216754725814666769348439218887060875040517886485887227168639275457893429363353663750869047894572411008733417758771798264693173256904972256259386919781924223076848977177515879834838904400419124873612785692315751003660511236128245536770582735753266363658500671756852229712606134491309205085565543993341823448087454043655587368373886697185509168755003503453704203248223225959519041483988825047537853665202999580359279623912194076510985695571696962094611121859366556239121865121004243015869256263734051005906291862195909618789118687590473234000675286232287622681615252746928967986875777975220321445517127666904980608453302190281038086143564205062904333030812632401215901744548296981799917661975676950780343309478689511517268395535322078548168600015464741631297618677473087084308242593331272876450608535888748213904627142978435913523703807854461787862843143558681304906375996711228744147665293839827405754693079622523983319926629558266626609339406893318083561632721643756623356935311830460759481833675429790197247471864165045535779130575039215931304954744971773090248254508303356553696026334370649423254302039763843071156296995171700403142274778118645121680730982493031747264778209010360243141290589543551183561688231319276886288221197868651049668374485233198550486559438231753920150059809949251984767945978265141481069889857396763022103086715669230622673074988848851549161452979327164166740549983028572033152226168461016251935529043696682333686726667500213021158772985764260344976857975156724207011170004154994957655068405491288039721046268013514451733248815210070899756685774755298362168907945091057065005763053046360808720897659920316962066671330521479579215871323621832621242328285461079470852178985910565258845821729489276318942518186828999642011925028912536106973389194566517684539773697736877069470362047424041020759057646073729187544516875787335017668158020861731223584888459020543256996446289569595118676482583668064591237600409013978397423340193852505148747626128440144212122721827630467593269725376328002240822140889291851009751742733866426580216951526475007484167874347594478171232273710454220408451958111512490628211947298102755752196812045913540355243719605775829889945494551982001827812486074999174080638772822956308082292972866637212603287428987863884534031499731265874250240500786956490788706802322292330335109350672762895247213677268159027507633037418488547622429919028193239249224150925063110916091780475038032647268356582741670814042619220924610932922259635649989147738236340091832301276655240901793343174721325254297361041470823766120580934998412422845924349558376938611944803199373487384743959420082972904152647964226120298129977233987002689233656660451040943204506551686980358464300804993069792009838512271009762282619633716202301223414222041671273089611124297796596299282916840612915530472204463740876234137371946545090945875731955263961366056223295518793038999134607931559123406247298671273751844803465975069304094981752043618118084901897794269204546618107101001468926721843218039986602334723025121361057440373769361096585687541585571453702985336335541082388102136110877142949633294678754331516456592408334716806776267202422179882588245145878312120462771541738230901145102795210179080154802765782917600105329499467054733416661408426411037568333963483954880371743766427490963194073975785194775217175931314125945751483382797816770424622693036931229185818865398180195790868260521132067384264045648434934061507435350604669146831093354795561075519496150667096558002931063029358166109598158034484446647965620269801177134891298389949648286591290718461744024247938294264676244699557609747740957349554128213375148695307241338620290285434565812833554464116529415073930994652748767484273016607632240613231347583229410509752313875783192564782715203929859392735282805889621646995295049066557412962956911159323914405048703745404209732259199254327767829833965110291907901697068536051573909827828853586501481257696864067897190175670879755763751355542896514637828572129301540337474597488175912515666448835534635467957611779475361135157504913019040607723599499986038788972438911016757427289088241014326765764260723909119878113177326685029836510418227994659930527713136587240260942650558024905361195918978717274847935068696206798838842391967219194407303109490233368860313446187291068082933942677841130271852297162954466505730164254026082644183151153808001435145728941884396820740249622124252351658052820215334693814811842729747859975322772320185781089041532363020265397058797921580734258422303477817699395726192891105397410264525526112449228174278438120467008098730907049070667629225635733668429540222255087112252868830121087117621588391940004964475115615392020301959581889579305593403701595130183456356040021535347978352026153238644520029897325066146757958065637695029714025788339579044802338682575634084324757507407342265806978448733066442653260430591309687400524678200391611082814575951766607008321675029558066691934842639713086245438425236929457572160690499296960313978133536124735312691360521994090117540228985739363330544630583520038412520945552538662396451559782851539596798054719130541303506256316501217266090880337119633246511153072658307964924319915873190842800171208056814619067796902217457825149618170696119216394671546167376467712881076127272863451556918722266870911582313096015821597065614567027014152531960105472071202697441532063669584322720302268789347304734347580198195006086243422034066659116607722775439249224857174275705224386270883311619812944997908499611554324051159692171606437363129143034446918112776494547812821863688990945798754102436948718619460124418438973373879159371041457233069257371205777951885076486580775673210068425854268788977592846241333347203055434658802811014561109145239500066849233512081581067532898275470415774610703370142924424239766976544489102551885632195701426342337207279416026299897436342757539656979266794550150905476919375405106010255402042690495968308959925956451694915059513210935621372679974104260192951899581240081613815977514291700470984012084037276936247856845746379927319367318467546516674649491616477716919440651526568856677867221209167352772330030246687767365942973606698169396310682528916131583767191216875572502942335497561076254981681857908320854784768464138617563684816173415729139932879114141624325323470512626067880930765110013564240813547737353524466359693384754165924786603031026871125356631599978731804316009988019856925905492179145216822659598555095195297807609812568942150569675584665681673736785593579000981650112231025803813653201613236847178247534792426951465761020617547369789325692481438682500774738427085404858154498165240656002741883941176919321032075740136271763735698707131842171993785542300715034598928735316726653391457841839446814609826405875126575880019168790009803507938168012982796853527043668020527016958311922670278412714526437303315980073402415220592675023916608759801279779205348243777454030571754914363279671333804609667772208337998514521169998979004773588439497377239533321908961821174518911637336890663834411206502237196783229815501460966139292477670437514552272429892276949561979340715208256795761404927205692418792158543665779154570970116148325177739162151285523078254004362760055994895392070422075015109972916312610517570360201119614672918483057115146806195915981386641120494357224460988283441645506342166228051099987607017835193132368775948014220863645247826672746496049631171182498293908751506461160574705483847694898847371885150957148348008944088648704590664065201534315876719989040342945127753000692665641655062433576375071261644692246554185404570189577562355859316873269559452673639599673392467741981419909429134096872492199872490282946361362536219407281702015978537551951546202226826677710271694627069906545561007875241870857382073456641943301410208969567372953954774100278907102744699120365354800594992726633499350898894501005540378374380732382441716194361617221575252452248766118540652323746469860082661839086087621323793399393625936670281596898941401228164510860725168143741440238395641034463926192352053519807224834562022524769681396062584225385679579386761792165485251193662921195426033744080349408996957342838151625659220459465029499438540534111178058990381050061045532428234941982418611429873559003643639915764768989242716337091139209093080810625319991623196794525817996569671127647797541959107730240596714191258360777714233155998178465887556715643638610953073742119820471349727211496164714056099651005794369997328426364776044164745191181032803114341317725709702903361740495198974695883446598096630560188529356994800105520422197330263232647107144040507174384363571721859255692054311396616245317445624925234373053836246901812831340485458496727021579713299728932689058320814332747595626988218359322407685340749888642074850642281341306807502881812225816553714522046581803654939024993780882317435135699494644314483776066385928021415495042122676215499477610397295145333988167439652591832094786389862349072790876830764475082206568750565486382427140369076547650810444310456263464316372425338515854876344083912511146015207397346953836646200369799377489269588319969422979990184241605321977275645599171916282045051975449772764056619194259274451205545067337601875905594989608387122394857932125040103294605117818241439456225399532749658401412617464669031897623154763432857732361773090967007957187728393062713273185228470366020975048502734049201255550838102184461020926757459944790818075311300155918650021768630426683918919890540486589495597401853644830524055286913313073578934964580079148208111327362499235268725462718062774694644818019810569791254422008321361172662836487784100767935533615540154514285490987693279599046778701981763933342858902796749297470933870039923956814531355561771330858007990256215575388863093871412611589032737973532965943790578449811482935479397311242766539559784412012594576072480195941340038890848334346164299670317122931558113144104124346701421824480008428018706316170507795902221786680825169424554601381967653534281977123178258507038389566610830015754514875977860548072174443136525204529479820998296065605151146454986880012381287033310342637017764344601699968179409937221969517594363605652728530751456769781818601483629506686512778290149989976516638550672658531688981598816978329213564850625699587922416977216412466706163571930875817693937556104866786323433435037833509952942158219939852568706887277260107584316094499857934949220854928816073670070481710839309005966289736750779447262048916987603282594759815745022651185749502482289055479195594961432074368444650669544212692179204009841644394517384810503711623764888555657374369834755709971733954964866771565036269796747790218060608138898125495920022655147759880837471880714885730647518127370369686834198000905870191598261741807868881170739929200279196630169489317312917541221473424968985041401705093552027968952512829178537310193970792719171170701572222947338445381890195117718270269907220079864324946158376904559661981872172610552964947595306363100187885411627296358069214312290960158587151198859456671552679253722813218043060398973622837597844755670504041833174228863736744556350141044871911641184335845661213632280492730343891142953400346329143927635347271755283153504017099407148040800103818716848960338057890827318510439377885472724516809935645867586353215291471205506713475458592694385001454412891115222655691716359678560312574294719533332359099724965826499340538266996361902436941188091155912174300704891510518027402255437222432731761566047913486153291085414563778557448997483209759926287631683989628505461111162892450449754588447467288610968152156380576775733793168044590828454424080765299902165540955380175028496073838611776716085443805818031857049168708437869651315513933479253881449573896147171601695061061802612708888929170112180836066039166993927729731277211634244615495350933750517869427624661150827526602881198691262325085920840971990405254796606005597081010848536241604435357362283405118320986934467275320565659139733793265919849633312560306777029356336447203509021216320397020968319239983587735269093478401606223619127134852683367898216819721309525748732913835734222980122653164301396271724999934685317543736095593933805931803908461090920026236149835462114191312598753537521568529861441162145504129068154106981405812899756407322247045186020478966277285434920976343302679344041464816244663416893576382067751438806387663289570133593469475674668550014786851387608624851166668816018503429353755824586325790144133065193436166965828506553638351329958307464882513970738692984651599939510039230045762514194038343291665388551889804011496907346656505290996456990408299255107166912667135097011152504468731717480752074271500460345381767476256635105336487191429261144311403269027303453894026020835029622137149442018712334017077251827745608311253649818479718767597018718192417782718955393835731246751158420046257707774873758202416087462279138805521103499010249135950008755059108696809544107636381553283834478184235822896337724044833039668187317166469322286956591134524933520913818071333815995251057607811081273335551296745011121477402399683285332505792228684249260196900730456320879983958397072643939107703072259404771457698142829807013006012935182;

The Answers

To see the digits for one of the problems, just execute the following cell and then SIAMAnswer[i] for the digits for Problem i.

N[SIAMAnswer[5], 20]

Here they all are to 100 digits.

DisplayForm[
      StyleBox[GridBox[
          Table[{i, N[SIAMAnswer[i], 100]}, {i, 
              10}],  
ColumnAlignments -> {Center, 
              Left}], 
FontSize -> 10]]

Problem 1

The double exponential version of the integrand is of a form such that the trapezoidal rule is the best to use. It yields 10000 digits, though it takes a long time.

integrand[s_] := (1 + eval) *
          Re[
(I (sh = (et = ((eval (E^eval))/2)) - 
                          (1/(4 et))) (sh = -(1/(2 + 
                                2 (sh^2)))) + (xx = 
                        (1/((et *= pi) + 1 - s - eval))) (xx *= 
                        et) (2 - s - 
                        eval)) (((xx += (Sqrt[(sh/2)])))^((I/xx) - 1))];

    
\(\(SIAM[1]\)[prec_]\  := 
      Module[{p = prec + 5, \ mult, h}, 
h = 
          N[2\/\(p + 1\), p]; \ \ pi\  = \ 
          N[Pi, p]; 
nlow = 
          Ceiling[Log[1.53\ p]\/\(1.2\ h\)]; 
{eval, 
            mult}\  = E\^{\(-nlow\)\ h, h}; 
        ans = 0; 

Do[\ ans += \ integrand[j]; 
          eval *= mult, {j, \(-nlow\)\ h, Ceiling[Log[p] + 1], \ 
            h\ }]; 
N[ans\ h, \ prec]]\)

SIAM[1][10]

DigitsAgreeCount[SIAM[1][100], SIAMAnswer[1]] // Timing

Problem 2

We use an interval algorithm since that is quite fast. To get 10000 digits one needs a starting interval for the initial conditions of diameter (10^(-10028)), but that is no problem, and the computation is then very fast — faster than just using the default significance arithmetic of Mathematica, though that too would work.

ReliableTrajectory::usage  =  "ReliableTrajectory[p, v, \
targettime, (opts)] gives a set of {time, position} intervals that give the \
reflection points and the times they are there. The last position is an \
interval of diameter less than 10^-ag, where ag is the AccuracyGoal \
setting.";

    
StartIntervalPrecision::usage = "StartIntervalPrecision is an \
option to ReliableTrajectory that sets the starting size of the intervals. A \
setting of automatic means that the accuracy goal is used for the initial \
size.";

    
IntervalPrecisionStep::usage = "IntervalPrecisionStep is an \
option to ReliableTrajectory that sets the number of powers of 10 by which \
the interval size is decreased after a failure.";

    
ShowSize::usage  =  "ShowSize is an option to \
ReliableTrajectory that asks that the initial condition interval size that \
works be printed.";

    
Options[
          ReliableTrajectory]  :=  {StartIntervalPrecision  -> 
            Automatic, AccuracyGoal  ->  12,  
          IntervalPrecisionStep  ->  1, 
          ShowSize -> False};

    
\(\(\(hmat[{a_, b_}] := 
        9 {{b\^2 - a\^2, \(-2\)\ a\ b}, {\(-2\)\ a\ b, a\^2 - b\^2}};\)\(
\)
    \)\)
\(\(\(ReliableTrajectory[p_, v_, targettime_, \ opts___Rule] := 
        Module[{lastpoint = Interval[{\(-∞\), ∞}], 
            stint, \ ips, \ trQ, pint, intsize, t, resttime, pathdata, S, 
            T}, 
{ag, stint, \ ips, \ 
              trQ}\  = \({AccuracyGoal, \ StartIntervalPrecision, \ 
                  IntervalPrecisionStep, \ ShowSize} /. {opts}\) /. 
              Options[ReliableTrajectory]; 
If[
            stint === Automatic, \ 
            stint\  = \ ag]; 
intsize = stint; 
          wp = Max[17, 2 + intsize]; 
While[
            diam[lastpoint] > 10\^\(-ag\)\ , 
pint = 
              N[\((MidRad[#, 10\^\(-intsize\)] &)\) /@ p, 
                wp]; 
vint = 
              N[\((MidRad[#, 10\^\(-intsize\)] &)\) /@ v, 
                wp]; 
pathdata = {N[pint, 
                  wp]}; 
resttime = 
              Interval[{targettime, targettime}]; 
While[
              resttime > 0, 
              m = Round[pint + 2/3\ vint]; 
S = 
                t /. \((Solve[\((pint + t\ vint - 
                              m)\) . \((pint + t\ vint - m)\) == 1/9, 
                      t])\); 
If[
                FreeQ[S, 
                  Power[Interval[{_?Negative, \ _?
                          Positive}], _]], 
\ \ \ \ \ \ \ \ \ \ \ T = IntervalMin[Cases[S, _?Positive]], 
                Break[]]; 
Which[
T ≤ resttime, 
\ \ pint += T\ vint; 
                vint = hmat[pint - m] . vint; \ 
                resttime -= 
                  T, 
T > 
                    resttime\  && \ \ resttime ≥ 2/3, 
                pint += 2/3\ vint; \ 
                resttime -= 2/3, 
T > resttime\  && \ 
                  resttime < 2/3, pint += resttime\ vint; 
                resttime = 0, 
True, \ 
                Break[]]; 
AppendTo[pathdata, 
                pint]; 
If[
                Precision\ [\ {resttime, \ pint, \ vint, \ T}] < \ ag, \ 
                Break[]]]; 

intsize += 
              ips; \ wp\  = 
              Max[17, intsize + 2]; 
lastpoint = 
              pint + Table[
                  MidRad[\(-Max[Abs[resttime]]\), 
                    Max[Abs[resttime]]], {2}]]; 
If[trQ, \ 
            Print[StringForm[\*""Initial condition interval radius is (10^(-``))."", 
                intsize]]]; 
pathdata];\)\(
\)
    \)\)
SIAM[2][prec_]  :=  
        N[Norm[ReliableTrajectory[{(1/2), (1/10)}, {1, 0}, 10, 
                  AccuracyGoal -> prec, 
                  StartIntervalPrecision -> prec + 28, 
                  ShowSize -> 
                    False][[-1]]][[1, 1]], prec];

SIAM[2][10]

DigitsAgreeCount[SIAM[2][100], SIAMAnswer[2]] // Timing

DigitsAgreeCount[SIAM[2][10000], SIAMAnswer[2]] // 
      Timing

Problem 3 (100 Digits Only)

Here is code for the approach in §3.5, which is capable of getting about 100 digits.

Options[
            StrebelMatrix] = {WorkingPrecision -> 
              MachinePrecision, 
Transformation -> ((E^((2/(((1 - #1))^2)) - (1/(2 #(1^2))))) &), 
MatrixFunction -> ((1/((1/2) (#1 + #2 - 1) (#1 + #2) - (#2 - 1))) &)};

StrebelMatrix[n_, opts___]:=(
{prec, ϕ, 
              Afunc} = {WorkingPrecision, Transformation, 
                  MatrixFunction} /. 
  {opts} /. Options[StrebelMatrix];
k = N[Range[n - 1, 1, -1], prec];c = Append[k + ϕ[(k/n)] + 1, 1];W=DiagonalMatrix[((Append[1+(1/n)ϕ'[(k/n)],1])^(1/2))];
W . Outer[Afunc, c, c] . W)

SIAM[3][ 
        prec_] :=  ({dim, wp}  =  
          Which[prec ≤  10,  {35, 
              MachinePrecision}, 
prec ≤  
              16,  {55, 
              MachinePrecision}, 
prec ≤  
              25,  {100, 30},  
prec  ≤  
              40, { 200, 50},  
prec ≤  
              55, { 400, 75}, 
prec ≤  66, { 
              600, 75}, 
prec ≤  75, { 800, 
              100}, 
prec ≤  82, { 1000, 
              100}]; 
A = 
          StrebelMatrix[dim,  
            WorkingPrecision -> 
              wp]; 
Sqrt[Eigenvalues[
              Transpose[A] . 
                A][[1]]])

DigitsAgreeCount[SIAM[3][10], SIAMAnswer[3]] // Timing

DigitsAgreeCount[SIAM[3][16], SIAMAnswer[3]] // Timing

DigitsAgreeCount[SIAM[3][40], SIAMAnswer[3]] // Timing

Problem 4

It takes a second to determine the correct region of the global minimum by an interval technique. But once that is done, the critical point can be found quickly with Newton's method. The Jacobian of the gradient (the Hessian of f(x, y)) is complicated, but some optimization (which can be automated) makes it concise and fast to compute.

The Functions, Gradient, and Hessian

Here f is the objective function and (fx, fy) is its gradient. Since we want to solve grad f  =  0, we need the Jacobian of the gradient (the Hessian of f). The code below is optimized for speed.

f[x_, y_] := (E^Sin)[50 x] + 
        Sin[60 (E^y)] + Sin[70 Sin[x]] + Sin[Sin[80 y]] - 
        Sin[10 (x + y)] + (1/4) ((x^2) + (y^2)); 
    fx[x_,  y_]  :=  Evaluate[D[f[x, y],  x]]
fy[x_,  y_]  :=  
      Evaluate[D[f[x, y],  y]]
fhess[x_?NumericQ, y_] := (ey = 60 (E^y); 
        sinsum = 100 Sin[10 (x + y)]; s8 = Sin[80 y]; 
        sx = 70 Sin[x]; 
s5 = 
          Sin[50 x];  

 {{(1/2) +  
              2500  (E^s5) (Cos[50 x]^2  -   s5) - 4900 Cos[x]^2 Sin[sx] + sinsum -  Cos[sx] sx, sinsum}, {sinsum, 
            (1/2) +  Cos[ey] ey -  (ey^2) Sin[ey] - 6400 Cos[s8] s8 + 
              sinsum -  (((80  Cos[80 y]))^2) Sin[s8]}})

Automatic Optimization

One can automate the optimization of expressions (the hessian here), thus saving some manual labor. Here is how that would be done. We need the Experimental context because OptimizeExpression is an experimental function.

Get["Experimental`"]

OptimizeExpression[
      Transpose[{(∂_x){fx[x, y], 
              fy[x, y]} , (∂_y){fx[x, y], fy[x, y]}}]]

We extract the optimized expression and use it to redefine fhess, cleaning it up a bit.

fhess[x_?NumericQ, y_] := (t0 = 50 x; t1 = Sin[x]; t2 = Sin[t0]; 
        t3 = (E^t2); t4 = 70 t1; t5 = x + y; t6 = 10 t5; 
        t7 = Sin[t6]; t8 = 100 t7; t9 = (E^y); t10 = 60 t9; 
        t11 = 80 y; 
        t12 = Sin[
            t11]; {{(1/2) + 2500 t3 Cos[t0]^2 - 70 Cos[t4] t1 - 
              2500 t3 t2 + t8 - 4900 Cos[x]^2 Sin[t4], t8}, {t8, 
            (1/2) + 60 t9 Cos[t10] - 
              3600 (E^(2 y)) Sin[t10] - 
              6400 Cos[t12] t12 + t8 - 
              6400 Cos[t11]^2 Sin[t12]}});

Here is how to get an interval containing the answer.

LowestCriticalPoint[f[x, y], {x, -1, 1}, {y, -1, 1}, -3.24, 
        (10^(-9))] // Timing

We use the rough location of the preceding interval computation as a seed to FindRoot, which will use Newton's method. We give the explicit Jacobian as an option. Note that, to get 10000 digits of the minimum, we need compute the location to only 5000 digits. Also it is important to start with a machine precision seed, so that FindRoot will use adaptive precision.

SIAM[4][
        prec_] := (cp  =  {x, 
              y}  /.  
FindRoot[{fx[x, y],  
                fy[x, y]}, {x,  -0.02440307969}, {y, 
                0.210612427159}, 
Jacobian -> 
                fhess[x, y], WorkingPrecision -> prec/2 + 10,  
              AccuracyGoal -> prec/2]; 
(N[
            f  @@  SetPrecision[cp, prec + 10], prec]))

SIAM[4][10]

DigitsAgreeCount[SIAM[4][100], SIAMAnswer[4]] // Timing

DigitsAgreeCount[SIAM[4][10000], SIAMAnswer[4]] // 
      Timing

Problem 5

The algorithm used here is a hybrid. To get p digits of the answer we solve a system of 6 equations to precision p/2, and then use the results of that in a single optimization of η at precision p. This is quite fast, except that there is no way to avoid evaluation of the gamma function to 10000 digits, which takes 6 hours.

\(\(\(obj::usage\  = \ \*""obj[a,b,c,d,c1,c2] gives the function from (ℝ^6) to ℝ whose zero solves the problem, in that it yields the cubic, together with the location of two of the bumps. In the form here it computes two gamma values in g1 and g2 that can be used later."";\)\(
\)
    \)\)
TwoCosines::usage  =  "TwoCosines[prec] determines the cosines \
of the two bump locations to precision prec by solving the system obj = \
0.";

    
η::usage  =  "η[{c1,c2}] is Dirk Laurie's function \
whose maximum gives the answer to the optimization of SIAM5. c1 and c2 are \
the cosines of the two bumps.";

    
obj[a_Real,  b_,  c_,  d_,  c1_,  
          c2_] :=  (
{s1, 
              s2}  = (Sqrt[1 - {c1, c2}^2]);  {z1, 
              z2} = {c1, 
                c2} + I {s1, s2}; 
{zz1, 
              zz2} = {c1, 
                c2} - I { s1, s2}; 
 {g1, 
              g2} = 1/Gamma[{z1, z2}]; 
w1 = 
            z1 (Conjugate[g1] - a - 
                  zz1 (b  + 
                        zz1 (c  + d zz1))); 
w2 = 
            z2 (Conjugate[g2] - a - 
                  zz2 (b  + 
                        zz2 (c + d zz2))); 
{a - 
              b + c - d - Abs[w1],  
            a - b + c - d - Abs[w2], 
Im[
              w1 (PolyGamma[z1] g1 + b + 
                    z1 (2 c + 3 d z1))], 
Im[
              w2 (PolyGamma[z2] g2 + b + 
                    z2 (2 c + 3 d z2))], 
Re[
              w1 (z1^(1/2))], 
            Re[w2 (z2^(1/2))]});

    
TwoCosines[prec_]  := {c1, c2} /. 
          FindRoot[
obj[a, b, c, d, c1, 
              c2], 
{a, 0.00554194, 0.00554195}, {b, 
              1.01976185,      1.01976186}, {c, 0.6252119164, 
              
              0.6252119165}, {d, -0.603343221, -0.603343220}, 
{c1, 
              0.16681365,   0.16681366}, {c2, -0.637755821, -0.637755820},  
WorkingPrecision -> prec + 5,  
            AccuracyGoal -> prec];

    
η[{c1_Real, c2_Real}] := ((Subscript[z, 2]) = 
            c1 + I (Sqrt[1 - (c1^2)]); 
          (Subscript[z, 3]) = c2 + I (Sqrt[1 - (c2^2)]); 
{temp1,  temp2} = {NestList[# (Subscript[z, 2])  &, 1, 3], 
              NestList[# (Subscript[z, 3])  &, 1, 3]}; 
{g1, g2} =  
            1/Gamma[{(Subscript[z, 2]), (Subscript[z, 3])}]; 
-Re[
                LinearSolve[{{1, -1, 1, -1, 
                      1},  
Append[
                      temp1, I  (Subscript[z, 2]^(3/2))], 
Append[
                      temp2, ((temp2[[3]] Abs[(Subscript[z, 3]) - 1])/((Subscript[z, 3]) - 1))], 
Append[ 
                      Conjugate[temp1], 
                      Conjugate[(Subscript[z, 2]) ((Subscript[z, 2]) - 1)]/(Sqrt[2 (1 - c1)]) ], 
Append[
                      Conjugate[
                        temp2], I Conjugate[
                          (Subscript[z, 3]^(3/2))]]}, 
{0,  g1, g2, 
                    Conjugate[g1], 
                    Conjugate[
                      g2]} ]][[-1]]);
SIAM[5][prec_]  :=  
η[
        SetPrecision[TwoCosines[Ceiling[prec/2]],  prec  + 1]]

SIAM[5][11]

DigitsAgreeCount[SIAM[5][100], SIAMAnswer[5]] // Timing

Problem 6

The answer is obtained by root-finding on an arithmetic-geometric mean formula. The derivative of the objective function involves an elliptic function, so it is faster to avoid that and just use a secant method. FindRoot works fine provided one understands some subtleties of the options. By default (version 5), it will stop when it believes it has accuracy of (10^(-wp/2)), where wp is the working precision. We need to override that, which is done by setting AccuracyGoal -> ∞. In any case, we get slightly better performance with our own SecantMethod.

SIAM[6][prec_]  :=  
      N[(Sqrt[1 - (η^2)])/4 /. SecantMethod[
            ArithmeticGeometricMean[(Sqrt[4 - (((η - 1))^2)]), (Sqrt[4 - (((η + 1))^2)])] - 1, {η, (96/100), (97/100)}, 
            WorkingPrecision -> prec + 10], 
        prec]

SIAMAlternate[6][prec_]  :=  
      N[(Sqrt[1 - (η^2)])/4 /. FindRoot[
            ArithmeticGeometricMean[(Sqrt[4 - (((η - 1))^2)]), (Sqrt[4 - (((η + 1))^2)])] - 1, {η, 0.96, 0.97}, 
            WorkingPrecision -> prec + 10,  
            AccuracyGoal -> ∞], prec]

SIAM[6][10]

DigitsAgreeCount[SIAM[6][100], SIAMAnswer[6]] // Timing

SIAM[6][10000] // Timing // First

DigitsAgreeCount[SIAMAlternate[6][10000], SIAMAnswer[6]] // 
      Timing

Problem 7

Dumas expressed the answer as a perfect rational, so that is of course the fastest way to get 10000 digits. We give that method as an option, but using the time of that method is not really fair, since it took several days of symbolic computing to get the 97000-digit numerator and denominator.

So we used a purely numerical approach: the conjugate gradient method with preconditioning. The code breaks into two cases according as machine precision is used (SparseArrays are then okay) or higher precision. We use LinearSolve with the Krylov option, and with A defined as a multiplier instead of a matrix.

If the UseRational option is True, then the digits are obtained from the rational solution found by Dumas et al. This yields 10000 digits in an eyeblink.,

SIAM::norat  =  "Rational solution is known only for the \
20000x20000 case.";

    
Options[SIAM]  =  {Trace -> False,  
          UseRational -> False};

    
\(\(\(SIAM7machprec[n_, \ tol_] := \ 
        Module[{A, 
            diagonal}, 
\ \ A = \(SparseArray[{{i_, i_} -> Prime[i]}, 
                    n] + \((# + Transpose[#])\) &\)@
              SparseArray[
                Flatten@
                  Table[{i, i + 2\^j} -> 1, {i, n - 1}, {j, 0, 
                      Log[2. , n - i]}], n]; 
\ \ diagonal = 
            Table[A[[i, i]], {i, 
                n}]; 
\ \ \ \(LinearSolve[A, 
              Prepend[Table[0. , {n - 1}], 1. ], 
              Method -> {Krylov, 
                  Method -> 
                    ConjugateGradient, 
Preconditioner -> \((#\/diagonal &)\), 
                  Tolerance -> 
                    10\^\(-tol\)}]\)[[1]]];\)\(
\)
    \)\)
\(\(\(SIAM[7]\)[n_, prec_, \ opts___] := 
        Module[{BitLength = Developer`BitLength, indices, \ A, b, diagonal, \ 
            ct = 0}, 
{ratQ, \ 
              trQ}\  = \ \({UseRational, Trace}\  /. \ {opts}\)\  /. \ 
              Options[SIAM]; 
If[
            ratQ\  && \ n\  ≠ \ 20000, \ Message[SIAM::norat]; \ 
            Return[HoldForm[\(SIAM[7]\)[n, prec, 
                  opts]]]]; 
If[ratQ, \ 
            Return[N[numerator, prec]/
                N[denominator, prec]]]; 
If[
            N[prec]\  ≤ \ N[MachinePrecision], \ 
            Return[\ \ \ SetPrecision[SIAM7machprec[n, \ N[prec]], 
                prec]]]; 
indices[i_] := \(indices[i] = 
              i + 
Join[
                  2\^\(Range[BitLength[n - i]] - 1\), \(-2\^\(Range[BitLength[i - 1]] - 1\)\)]\); 
\ 
          diagonal = 
            Prime[Range[n]]; 
A[
              x_] := \((If[trQ, \(ct++\); 
                Print[StringForm["Iteration number ``", 
                    ct]]]; 
diagonal\ x + 
                MapIndexed[
                  Plus @@ x[[
                        
                        indices[#2[[1]]]]] &, x])\); 
b = Table[{0}, {n}]; 
          b[[1]] = {1}; 
b = 
            SetPrecision[b, prec + 5]; 
\(LinearSolve[A, b, 
              Method -> {Krylov, Method -> ConjugateGradient, 
                  Preconditioner -> \((#\/diagonal &)\), 
                  Tolerance -> 
                    10\^\(\(-prec\) - 1\)}]\)[[1]]];\)\)

SIAM[7][20000, 11,  UseRational -> True] // Timing

DigitsAgreeCount[SIAM[7][20000, 10000,  UseRational -> True], 
        SIAMAnswer[7]] // Timing

SIAM[7][20000, 11] // Timing

DigitsAgreeCount[SIAM[7][20000, 100], SIAMAnswer[7]] // 
      Timing

Problem 8

We use the series representation for the temperature, as given in §8.3.1. Since the derivative is easy to compute, Newton's method outperforms the secant method. We use a heuristic for the number of terms of the series (74 in the 10000 case). FindRoot is fast (moving the precision up slowly) provided we start with a machine precision seed. We compute the derivative by hand as θder and use the Jacobian option to feed that to FindRoot.

SIAM[8][prec_]  := 
      Module[{ r = Range[0, Ceiling[0.742 (Sqrt[ prec ]) - 1.5]], 
          wts,  θ, θder,  
          pow} , 
wts = (((Sqrt[80]) N[((((-1))^r)/(2  r + 1)), prec + 10])/π); 
pow[
            q_Real]  :=  pow[q] = 
            (q^(r (r + 1))); 
θ[
            q_Real]  :=  θ[
              q] = (q^(1/4)) (wts . pow[q]) - 
              1; 
θder[
            q_Real] := (((q^(1/4)) wts . (r (r + 1) pow[q]) + (1/4) (θ[q] + 1))/q); 
SetPrecision[-(1/(π^2)) 
            Log[q /. FindRoot[
θ[q], {q, 
                    0.01}, 
WorkingPrecision -> 
                    If[prec ≤  N[MachinePrecision],  
                      MachinePrecision,  prec],  
                  Jacobian -> {{θder[q]}}]], prec]]

SIAM[8][10]

DigitsAgreeCount[SIAM[8][100],  SIAMAnswer[8]] // 
      Timing

SIAM[8][10000] // Timing // First

Problem 9

We use root-finding on the derivative of the objective function I(α) via the secant method, which increases precision slowly. The derivative is obtained by term-by-term differentiation of the series (with gamma eliminated) in §9.6. While FindRoot works reasonably well, our own SecantMethod implementation is a little faster.

dI::usage  =  "dI[α] gives the derivative of I(α) \
reduced by a certain constant since we are interested in root-finding only. \
The formula used is efficient, but fails at integer values. Thus this is \
meant to be used on the interval (0,1).";

\(nterms[α_, prec_] := 
      If[prec ≤ 15, 6, 
        2 + Floor[
            n /. FindRoot[
                N[α]\^\(2  n\) == \(16\^n\) \(\((\(n!\))\)\^2\) 
                    10\^\(-prec\), {n, 2, 
                  2000}]]]
\)
dI[α_Real] := 
        Module[{prec = Precision[α], 
            z = (α^2)/
                16}, 
s = t = stermderlog = tprodderlog = 0; sterm = 2 π z; tprod = 1; 
          recip = 1/α; 
tsum = tsumprod = 
              1  -  Log[α/2] -  2 EulerGamma - 
                PolyGamma[α + 
                    1]; 
der = tsumder = -recip - 
                PolyGamma[
                  1, α + 
                    1];  

Do[{αprod1, αprod2} = (α - 2 n + 1) (α - 
                    2 n + {0, 
                      2}); 
αprod21 = ((2  α - 4 n + 3)/α)prod2; 
s +=  
              sterm;   t +=  
              tsumprod;  
sterm *= -(( αprod1  z     )/(n (n + 
                          1) (((2 n + 1))^2))); 
stermderlog  +=  ((2  α - 4 n + 1)/α)prod1 ;  
tprod *= -((z αprod2)/((n^2) (4  (n^2) - 1)));  
            tsum += αprod21 + (1/n) + (1/(2 n - 1)) + 
                (1/(2 n + 1)); 
tsumprod = tsum  tprod; 
            tsumder  -= (((((α - 2 n + 2))^2) + (((α - 2 n + 1))^2))/α)(prod2^2); 
tprodderlog  += αprod21; 
der +=  
              tsumprod (2 n recip  + tprodderlog + (tsumder/tsum)) + 
                sterm (2  n recip + 
                      stermderlog),  
{n, 
              nterms[α, 
                prec]}]; 
(2 + 
                  Sin[10 α]) (recip + 
                  Log[2] + ((2  s  recip + der)/(     s + t))) + 10 Cos[10  α] ];

SIAM[9][prec_]  :=  
      N[α /. 
          SecantMethod[dI[α],  {α, 0.78, 0.79},  
            WorkingPrecision -> prec + 2], prec]

SIAM[9][10]

DigitsAgreeCount[SIAM[9][100], SIAMAnswer[9]] // Timing

Problem 10

This is the easiest of all, using the arcsin formula for the answer given in §10.7.

SIAM[10][prec_]  :=  
      With[{s = N[(Sqrt[2]), prec + 2], 
          ss = N[(Sqrt[5]), prec + 2]}, 
N[(2/π) 
            ArcSin[(((3 - 2 s))^2) (((2 + ss))^2) (((s ss - 3))^2) ((((ss^(1/2)) - s))^4)],  prec + 2]]

SIAM[10][10]

DigitsAgreeCount[SIAM[10][100], SIAMAnswer[10]] // 
      Timing

SIAM[10][10000] // Timing // First