#[cfg(test)]
mod tests {
use dashu_float::{Context, round::mode::Zero};
use dashu_macros::{dbig, ibig};
use rustedbytes_pi::compute_pi;
fn get_pi_digits() -> String {
include_str!("pi_digits.txt").to_string()
}
#[test]
fn test_one_million_digits() {
let digits = 192_000;
let p = compute_pi(digits);
println!("len {}", p.to_string().len());
assert_eq!(p.to_string().len(), digits as usize + 2);
for (i, c) in p.to_string().chars().enumerate() {
let p = get_pi_digits().chars().nth(i).unwrap();
assert_eq!(c, p, "Mismatch at index {}", i);
}
}
#[test]
fn test_binary_split_1_2() {
let (pab, qab, rab) = rustedbytes_pi::binary_split(1, 2);
assert_eq!(pab.to_string(), "-5");
assert_eq!(qab.to_string(), "10939058860032000");
assert_eq!(rab.to_string(), "-2793657715");
}
#[test]
fn test_binary_split_1_3() {
let (pab, qab, rab) = rustedbytes_pi::binary_split(1, 3);
assert_eq!(pab.to_string(), "1155");
assert_eq!(qab.to_string(), "957304069945956794936328192000000");
assert_eq!(rab.to_string(), "-244479889433338740603253065");
}
#[test]
fn test_binary_split_2_3() {
let (pab, qab, rab) = rustedbytes_pi::binary_split(2, 3);
assert_eq!(pab.to_string(), "-231");
assert_eq!(qab.to_string(), "87512470880256000");
assert_eq!(rab.to_string(), "-254994357387");
}
#[test]
fn test_binary_split_1_4() {
let (pab, qab, rab) = rustedbytes_pi::binary_split(1, 4);
assert_eq!(pab.to_string(), "-1276275");
assert_eq!(
qab.to_string(),
"282744150338349327484720295874090277797888000000000"
);
assert_eq!(
rab.to_string(),
"-72208257316346012928456348682766762497244025"
);
}
#[test]
fn test_binary_split_1_5() {
let (pab, qab, rab) = rustedbytes_pi::binary_split(1, 5);
assert_eq!(pab.to_string(), "3904125225");
assert_eq!(
qab.to_string(),
"197949113784380161370086287723699183824180409892941594624000000000000"
);
assert_eq!(
rab.to_string(),
"-50552984125686101746228994534091499889077848307882335805887375"
);
}
#[test]
fn test_chudnovsky_105() {
let (_p1n, q1n, r1n) = rustedbytes_pi::binary_split(1, 105);
let context = Context::<Zero>::new(105);
let q = context.sqrt(dbig!(10005).repr()).value();
let n = ibig!(426880) * &q * &q1n;
let d = ibig!(13591409) * &q1n + &r1n;
assert_eq!(
n.to_string(),
"5.28101498099143760297674733589311855156665728788591469964933776330310752694890608267941984482464713471674E+2173"
);
assert_eq!(
d.to_string(),
"16809992775342779601370686324758805446080009189947533393430106204335007753021771367145935982583459259218155081135119985766048362446337188990239398975989280298687433306757512735837684391457627434041556688746628312148386832650646408210921447748762215075602208289617631581673224147853125056734104293941369274625160518187381414387247518339993049889656376458351496412045155228983311739201199118813002727231685822569493442378312899740544439458587686705851301594465370484885130954977727538591517123273917189972658034404088429558302083942901651428194114605585188645241303875097215049022930150910445823573344072820643501123049043292479537984267411186130144568079374987029610727352598758526387714937810307398801783979356259786646670881489077151043960532568338511608614714022009538915624107621263870182643680741450930288864844034643366713933546015852458592454244366039498624213758566458498581418544025684188503419465767546357042162275108328174371247239566573750941725022433249675704740602340017242988605790894112685831474252965304668638281034050929653109936780779452558264016102462138613247049058120469896890022007345648404035000018201736800316801052119051962857602496379097010322827173497427658381564768238074558544267156020164070577096485658850125030182818177860427760011408344269723833096097247069821986266665079535660394773271317557183798727454959534806851339928817571745049097781660785198114518762844904245160761921386405845643682876508014429434518903074832770619375699327532176555741299526321913318013923174983351263845416734355611123753283621359615292816041010900973442343058598777538524645152341068942971238969642449364726009700269017301081774218629773655490960973994139049800662746709374615249470400674485167509087509396829283335908091283290756338915610318774503656530947625292664851405984819762277170070198958482939336761068883382237031568339298383560154189141390161338900803077128915277999125343499207580638875938530881846501824949763827009271137001447591094645043712057228249180335485251325769641262862716478142834352603556640355347963277721396119147331732941692302325792344134818934524150349023307944473466341197732819697798793885136492409770880840369500219821929931640625"
);
}
#[test]
fn test_binary_split_1_1005() {
let (pab, qab, rab) = rustedbytes_pi::binary_split(1, 1005);
assert_eq!(
pab.to_string(),
"10947095205484297039426447718024710255697394658642450081049924318201425829237764246576665619947390792268217139971566177866808307034910098251285132946639170357105199457739027194748589368831540502051536771737921351659215734823889552976358843862404604688729595866291477595873100073718359634382021655401933536852936349942561828476240985920263941008595613006456130043075729361467436005520579976308289203106565268763928666470883109804822318227512058437447002809955019758319022969433358401902599196608945620438613020433865802501138516287568451194028155904133518202769745015166548766489022843658505018399322994214627542982100374491605617914933357608340138086475351309891287651566668302529708235178427667544447192896029440875609738997062083555428766079478433875788446103942697917913221049559596457552306535718010906563069453999628034779115070238277443841883011469518000235105216465012046025027044769237480253969265185602895945458430329023114708555801015149737583858942434678237263988412002136404064202734480674753247979445673431590384904677711304713088172595728975356264415026879125264288116181729111090896771304327417977954418511565295539270940654712786796094774211483675428573930929483117840933351887618942431139760489418595704619000654789575925238047007764583654312925860116912978901602720681292665872722727761194091890842271722214902587945234565810817778167095042564920123964966273474781968098842743710091220129185421626601061936528045446863253092813914937014439223499737567285788985381185954194522867153653302034294402073554599735867841560111855953546027796424738594907512237447239078320552895213695903114299531200355158427612955244094729258109593671786886192388861821582674260511707649208981287094859455961792308324181795656005506720974505431473023215260998789887117151277073411327479593214515213730050464392744954466359243228411126759957138708886655317640720970292202432151596285530086615279185519725152911514002461154860833228296984061915479456107998227788575137866357359770154170928430790307048486016741689343149983595904051740054199902312841655870818978727583138391562410543827506051190379016026902665017158478858402210061385201156788332402400279356311230070664893502992148344064834126650621457747811314570827422623040236073202782406284645148946929233396475933944643103433315875647827374757719490227385815657435346353144750862769226214728687876211789602695684514164762386900914694683780543233505038082770247062788317839244244639218082732009507973603151259065886952628697306847940495650136040192793836378262227861877104618815435683458422415152782087009977981174741361887113921226743285645709033982651853217571021341804216983532371553241990465437266414020371395542087144173322116120135598966916838623164388437429685707736691079079912522587564745255548616140638939152197874775499262706328554463420647456571592856621042066804730703971907498845157947813412426273184862224553329585687660922645286833277853544197996001883887283194934935364686533374669102697139632957435174484162954400931930327827509582741593004401254052064666127888522362201581614491067338555572219702612208495291503738409132883853642877618630091413386790804555474785000789760170356061187871814020897461820409186507522750159732713096546366045701425248236306030259406782320922622201496053867232784628403350831318518082253325214555618581097718871574096424288445004526636949943151694240162612365128156711767585746586893640270701236410116363486530443354501538017791737159714275228059017950527744792251730638246639532983812685476305570462723779922664246989856282415740732144527374581048674728953758316329421194732669759342821733736810030299530450232155717960693051428456632814133606257417487931151267581164523778072174364355600951307516889917460503093872772726559688499481017504043167714969374414115786785109280506979305123149887654120278835774821759518693494012686703137913403426177380623695185718550440594674577218946559259117760066683777518262745567180259767858344845242138674969467438901605464734919147665886949251696314935612321236775962104797744822423732797385278478278671813508898721013095907703803141534746994460300802565811499840287012565732694342688301038284821644165202160809383461183945496740345880980537961886115430217764776420013970418603894008309194785851577060864625386620931817045142495163915667814006853446109055553212188946070370237101954648066757067407229702179257330865197056302856943543680619742822969863391454169458935600105814969514141796438110494186992363715833485591788234425705563610941964366706026570604781001109866089640294503219791962810840797412596642540790917482894111926366026939340458162253728589462722995968813615818894062324672617978286166951914829042336638902317097323787757074414984765681271780289781832139188241126739608869640073349229016648540951166294218392002014210399578549939525089449311401915510504238620998391430176861733515181887067025634308778541893997759904404960805071693400704060799056594927822088003540403047489878442696359039072074679584000323342582585300225695480552617801330546114166394787532286459282434198687905342809119958614269849455037478740134239626869133249456388276638273558055125296212039548223525903251631252958067300553111249653589695221660561928536025970599260775326444957498763082504046434514133601145565447125236154480969770795706330951575943031778381640525679716924471859275543011306380783769925801308733605095729687246306995179733432470249068356769476676833090009657912187330974962654966865719590267545840470796573590245211229749785623026518022505663980709903989921972524436066447750032748178918991095661070815468048326643084769541868055951819008735947120593855177164320029821887386816202280845206367050743579057047741916140362014690271256101055008716755662564068163076562753940740147159966528938295684563584380106031477046055428807018269528763995195933987151763990860376357723621459143129725432648765297488476120119403402859989402405384409772256169564345386001240753726681722010141675102037529962992375269726528908820552209470806624521598671424895685468859586584425204332152657825642907362499330093859237377366468581672754487477239009321089958958628625218774165918468045210984090738871588311657938946785454659868294279313165533768473940493887952666745408811605219876668330270192357339272373584453155865095322205423064036150564344530620632710082448632170689311339833207556490624734010836971938086091836224869279052569127588543361306622299531942911764692149415860577345317124887519617206210000916160221317129367772258032684711106593373362164666325458459355536190411361081313671413658625035750393297872943071283591647563950814267292072142790258679456331217020990613051427822538590825929121618497946607872244948155052278379528625877161750669814223678286551915000436836322025878956951048309515173156531472985334355547198024335135433886775659752614257943271419395169444327215016515407278348290097178089281444241916897857819058389449302326260542561451399320990199904631176626460470551532032350048891147737787998922666184621555161592819729192995016394354660743633019613263723707628137576476382593461769885746534503301457614410752946593267219139657645528949535449012151907171060872679687096856149374501385179464175404352019773024959273201079172594221475093463136034157193785296063085280161679780959586266037583955934585411086901407261073824119162088364640978425981556581148862785634121866450268113922118007280057198885376622387795933737672679166421088938894189536815025861304306736046179204486483563610143728431658735593251052583189859359501582232932608469936822466464259526127020586789265147145010862275396656513581480769407423979461972348907277568706889325581824894499861594470243570815752957267456537070204242995686291206332576452265504152655876813189797492438215865695359606994861528620849560452565874200833212365292602572979549221281907884738234604092241370988801642149059170070322833169351426642544524301639177302490383581187708097698214317033611005655687165156677916805979387642504236582777952295921952367661363362436525364168367597535848230600162459427623458505443986706454672460865993013562844528434212034260512145900519036870536577579597921880538179542051793717549285784045991182661634780394097265190500230728262766252457350785187561973316509475871560985612122472894721139691491130771218315897365697459850777950674393956535192038010075749079764913456242872788869061193191811575159228199400548378560391569834119090562824054422047929480890613795004084006078899479433772983544662473161890476198455045949549569663597234356471310484605116517942045019672049665518815821101655978629073138804726019410214300621351135383658496036290673944277209555530614296703905720775230963865396016897453065675743539552903778069519554827197359496458970797957015308650070525939573870007280993648950475645203379133676395009513530029802386384570036636507324589098165911353404883266985798067018938780417142679815597998900058761109204322084742227264117940067678195094775671436165180052406856724996173616842788353788353201479257371625089610186457802326635844161936330828656497898918822069522389787947739722450570134294834260923047343303468981272054979294643824316684509581028836998896414688631682131805690671304369656069958676521713585348547066593366219350585948826759871282862828339678569562227709763845780886633544167637204017904846396422660353080358352090000862469171668372710427976585042362376374128376903833252656405943336060189273847911446781832807226888527127090419158743631458118764173600881134482889847489941736859285325631829093642775838591242342603659197191205205085376624817354956028193048053570990956533032135310704951163689356100912997933196171319869538507418837980367243289947509765625"
);
assert_eq!(
qab.to_string(),
"9179541599378569128292977970174691310753701504957731631859687436105563666817205677066954408735974104370247956500104063014609716561193805891340353657889671821435842274248597395669071538260314578735806819872095036311478656699788123257387091714597048710918283213671864458562401971903134630336652691275223793450621859071991966017775938914215888521341247086926619175762542543608707818159617396652012658384211130147330820601049977952048918671256524841884352250175355305413629711890363673425470494916599599064156670172345019532098286726041165999576460973974584403070647448199380294034468958449322528821642559558992431168832267216753013300325896015569317077121753736875782811741505767714580359332015929763046565698774220833165615525436013028386357409525756671940580539233173136330401253403470173054069172266586248079828347103323473517584084273740423489289382641476128760922720711315950643171979346176305405349620277776004648813691588881117212258079672633248402673464168495614596480614756389820657275364485934902315484309341638852763200519574162937104439966271817309273650040969751065809612865845106925261859020734093185003480276139595343857752656328938981994184396337483107748670867440954419751959728130409911164648052391034286317485213546433522379753699554367122054256917634263915101420428967883691009652749742744988935054176679700103669997648465930856656670973547931665483026170642581932912622895631969825836247804236297492526111997411639577983039471987231225306917416831456476192014696202916032988199854375280154544731110837686558426650845888093674871577224783030116535332979645467769384293598143104274962659077445774150254689279145957831386943105196735609512121891490358492179980186370190463436940006853324742216989874399485218221493744866869336879539981031393786991848788776938139567822970210993439132777713577039139851838373044499578665902694086160848766742788761353472962877061569489007355403457812999514346227313399725354592732270003242745014811660969197297255085199431042729286211408653651659620587686605069721719985490212509523416038628303263542355515511839732313266693215289115300169181374367518345187928768985766385821638684144125719874119614114154383538765246449640961271652700763121136877405761199828179829505930124210549479685041660633563361685687642105372449047499466228212125466156086199367226386940575589507561896324536906591775857010427056474809729035262214427191042990682423495757353495711521665759612837627407550378710205490330294819017068640255712268698155225949696727326877313595361195013333780537178372183547825542146874893703326613090557610172633108227924274918587121775540204791603393092784457400067404456799817800294301611525852522755738182442530989097645243401829167439937641321550966864647109112027628676006785509422633334630852075015308450405893677977813865096348437706102700939890324328066818370584547613131909545365358552021400311117200292540136298595462612740515536628826283779460753151599732459925746503685131953397557821132122585113668767979433334235405318656153968793697918588746709762694901301314052844233125316602947828413927774115537956885152468253917358756013677154977597606434620337148051817300357607807531862596859450977509110102687360361360216330132608144162698543865339997394568375388727317307876401011311814376478496221569314028708394057281469735877946539252863774479649998382614646320779402620225758293126804258800793966410049534271675868164070808167860899092000642763402816404641562087554308888061523644048990384832673209845651317644071031478523474552536556710087437936379029309209852507277102614579421187218769546527437940117921407017638359528827122218263558321752358485809040597004183971874922112355677355575732473045715519429746332008854865862154172851479642369736460796115414749304030265324218969037412245068280399177010399566613263279675599845781080617594628898087241555697858167902792193051999338502601189300754264841000118506603636654979525242101449151744784642324156183957187748534898171448398329995393678869891206754379280208359990061645996659297447943792915883439726563024596340823726806780374284568915264311763019120232570268283934121920879004856657939433143615576402708378360604014936677375212473096078249631715548587204103921279884045649287368292523612951454611091670796435696598346199530899626233939935419738896073635924873547629942775114796327883625803966060787900893064325387568962714595945373898209209352117385400577734345024172302913311146394718392993347481149493896435442403281068800262879748296553778300421262493601647165554787879605708102002169967306222035735421733374513192307803144243543914857140849991569534454752404614290994528216032709655870219075231307738800456908071376256723152900467845393468963813287281381818102444517404020121524194355844677359831065389285854670871119002882168304515945204150271198543655841405080726756420262550609823213836690334440233114969068339778463994090115373168631763869014719897075100183623119381879834392069260467254884370168092546758606018095716950016406748664589806402094942301151163777329997945215193561968464816272708167673487021776356372038425462672305670008696960088604091794756648866709755465886232150148049065508953885631386660759474612503821321971125217442561031653979134468363064017046966250139692652423682654691109634027862507917171331645443208890960943164594082979335879001016664981983997977419758602422041401060228667093936341772726869502595873327774529012750213005707554178694472631560779027755739396478225485820681920664852639680632320229790664455026064952894497748040776280949848213147061385108390672799065598913652920336112687564041783422894697991041850574164111749966585001216469598841131877300542307230485381513248095473065977859215979104436963057358836755437916637696676738622755897010081110186280054023049866752809382434622232278387952952876903851335912094564698068878967841678806368707369206834150195443958962384936610092888794702859945210731572995308071954433894257518490436752233236754063626651232995744685475304184176736822386105633875838312326637667442212254352930266329232021811245590778561077848233983071563333201525296199312448309529073206449863115691140399944255065444271441269082376763854236455101710000137628329049200589438870131496229007148918643911508714619446096251833967819580526832203647569896976000179645089568438794598540521169224504932973694437566830694315580898437366824136011599524375455040018591704612836158667761472221089826045507550994679415747206913085091746764317696576608399951318269328178105600421064105851325422493037248489937331271969343704566668615768880906068729469987393585639154644610891178997877171972791268696670743447378467651474227898832035596506201771486664411446203427176072820700606865358172648315093714461684879444538680006243578084529008944923027026196334980882406963797630421526847644222703002129339130727879336372363008351915621930712031369262496164156092459145388880073685953491447704872318813527340352096922973950789992060019735184099319707274251724263382380387027612296158495136479798890034443384689221131607854582198012301213881186634265101079898982966740801504123775104422755287609362833477662324840801688651839930331396551612281371977108456658411049224190570886746130146021273080272020382849359325364394995197435890441627398843731313561238631034414371457091762378779682665391418828908319309463756445076115530712404641533437634008349494404451816284072997548921139243545767240134029419957084393838504958792989500675651487172228159569825239552021183794538596539238770967365945670000226800618896972535044442587227776589601821403886077425467368094428485512807000019270434995353086980106689238767368894513020075418497239305371291887803927678628626615779590058126425270698709685103145083552244705314276185906122913649083171192318641838411246717830605737924950346897041768375349098266616319859637487931623932541176666161628910526231514398701870394277057823024111921411635843495006499724599505325746655561614154357217317015862582676913292680665154672991022885094467919836327801577123577659059520629792805533264123865244740909050845854681105134960842332190593082816443210233735834490752176795114125163382870530130354572343664852484665658615413411643157618719416646752286302514180155351444097478881893837341853610530374500204613864300807514335624614653574763147042372206833741288491243909584764626856579136369263166942257496439583610099077444632536085695951021592090924831231595108008437459186763414410390542400780441171003540328934255904522318136763103331483277861634188712717234156083488403103261446724161961259328641715422857405563317501847942427278535890715292548435513303170458458642700158284850346880884747653144544439097910582909700920017226362311091043530699872857305679069159152706967925805421821327128287720894645306671275306535740594521722174318308719040305110441785174463107488482790121889693263530777526635736434989995950714948803013578056241779902659877810838048584584043164897238788425815738327904233061596959104755043737844027046629246849562598360744411233501488485456379232355432248773689979721746031149140103424804967141017002980720525066229281803716318521676215978341981763512021626337373455175230081383389533941932865741024447714359153255316860457603430010538501487113517521848753271962178326821668142425726349983938473277284220453308211608510010910035978395390656045712291094836273698777173082941772139497693525719176510024988219075482629168359565559545306773826248369624785910460237266762646494885979176573504497692520575336973653810354333111861226476335718714572441942491968660539010544510431676147974971402271116509219330257833135876595413454772080042642136477425946952493280751997838936714212854937304931816405503991577519326819295841131031398828351795941834774778881199500129816590444283028369367675117419682233944439693241435560932170451535669180272160102422772066342189636928818832687034137082236317375604407493771456070553242589103587607935885187214572674810668399328639382626606569975001974069903853806813782203580310538976678646642311000250643267351403217421289326443760823291905921801745419355302618668708772502595854964642285645995394998719193188663309574188272703941058895056516759457629489213988921348896971012052585376871836696790492092727389174521567926894400792121956656702564571929296096221129009470217159088422765608250190674151237155206891837805415249240326508426705515594018803862725425234891760050376201906352095916738688652594671556139995502449630842035004688119003190579743597618027654902991897084338151681452233476198456002997974747653983672166108098195985346911678045254129206872796121174323480229172962735259691284614187916833670042507267823755379557325001572900871130609892587571760681240009370352617262003907732176511613907914281243233343039179532921394887185829861306349386312719264385800558558579274036558712496205413506721006856788748492975430934803641832246855522896361713037503964673742364361808916493758875236181924319483269070462138663299403490946870281017881167843293778555187761779672680208958540789825608714347168150113011479110200634032481370447875933224187352816184232449475916447841899857667219763099904435783841712184009737599425121607534691770485493749131140350619297577327528018266253328118268211884465581721731873974227273759530353387628442161883324791133368460457646932303274791971729578634623393411623576732158412256659544233760591252265981211338196192922193125762922579779529580445738507724566705755879569632913815232070744108408110071683852542901533862195760567903322109352410375957148509853348156269745508821771893579339889351631882709293512546838112485042530946628436115503142574610074720085479640239705628725304760705698288091645820786037859654535730048478551422229107320014790359338905513333181303455513507001032665686324679520597259669455289836405973789012073446449538201110254980105628858806541263423224519006699302457099325808149665904515505647258821226938298603594071233119736035322144539102535344466091260269894310332559617033203843038090076284818296439560835121942370169494853512501320152023892709481915148995233506046972715876867344256457340065953178102973497680589858368365077578876303701498035704516890622451442536777303357733638951576257264761195221023074543022647834125367482324525456848207280802526920982081065899024637874423130559810261504860014361556536304494957941992090456808320517741052509987153858396945062430175649250366212822416614569902980238674036574604763886436959372066296127778713915229042089178067968668645525543368836654592798451590484649788378622435581400736763646589678199260434076656224743935472212832790771924294118798885341839793760558114863046794256031713490972581278130068208013940444392782516777391119179957252185354156293316281482124753115471910678190454631281538087076176481341024196145548100812527276656375530214849502351031275720887439117339969408898399043433044604215429203570434467936306280270743098433771616153296378370720344287832416993873035865149660039416460417888225515454457684436868410051554322576861868750158623332453893406187480299064891006377822261942081701283902953086706346512082222288696224616701383880145411762847546891099278771579529242935868595782392321755274922405395661111229674573708931598629351172443274453160169322243404021250915260611175200794184951236413589305187094729984253548649787439356662190484330080481242987783764543244881530693051018655887862829777511182399926538211556839575264596535879657018884161662523377162646640272731354415446744297841368602626427380127909618238720113511615094448371696406569794734422848137476226745787263025024402256479977910114012862949558257259233842979423199685113795767388607673500319820144087775848573608494190611173541594672248564346927728289667883454296797561497290291353809776457248274246897826000476803920319438968591101892731226076107432432283663677067848827223991465623158523295651961791534966820728156114416800462833638074752709479230109756835209749902627338488687711876932920604195538606380137792252877004591009081815374173687859790691997873391428133606349129045475284914789544592903908935032024595703276758429727481319509593787929387181756963026300505369242575531412940242834287710842937884163192990237664002106399657934208716152351519008179460896817668757892643514751924271701249143415671489871905261168148301197477451549033243264467271950398663041048566698859774861636278538312360593517311958851698594166396952933607135883522755868782152355153592696085644514897211866044854782058916164068879506247334381817695704740035233811551257075960697892553296867038895018965378235271430445525233453024610609602770825268074797928773280147317268415440993472422622575794818947602760391867595133570802814641601059222070619538838278761432093943558353002779979964300709246290383149072816484407432631876361230786733221273169715527421748616662059963603252490422821783987624609282720861600310378146333830481730846671822711674064768346019331437428194253322900745448472005633030792951206286898031618600821367300300019134155627736982876913600595962663355074482650496155022277302081065771492520891554970438103653572710961858307580047957986833617718522998056539401987225962165148128498903780923636790952378970179608162937605280924806024491809399043282913985352505215368256772465018676741284500413150150552284517935244488924288854884802424984344343861688610735846577253123305622507227146959595642410780841830836218182951036950847313512925161490822354895403737844117144897770958315699833275188540577351274076821061555856320202406761438333684122022531535776380953893336114280417583670166277882533935127848355010953738273927338103541389218062502932630262720204112976909997142675302574844281193777883466114579594484980649490045373826381967881335671572689935832787498749873022242696881154466548159340443039037318414335670953130348653199933550681935082289629898634669668520663612987999478865331482874295839321968831440790360108527061311199114721374672069764126503504607785204258401836483133576383679259293303314738456262769611345053967544118430174228474252459246899100330273831276880341179902592949021681021830157122515734317328534810901798249339168031901683561099126566670921663507392753364686480017472192028649753772403111756693344152626270301518707659256303814879447728680715332364184672393950879574158334535066394741681996438388061558304830808272609296506534729195728613311766042249488979443205948367033370164590041963480940522234242234120884461357568713595246236944845995458732024187729188764835349775455844023827312334485043044220558742615411109980140225521101306686771953032220749229518461924750962975866807835277872920551225637066513098945974298974280003555531958539520382959706783050782716522425226041285869219014858941175698547675692298741947397502371772821414327509491013216291464503644521687469008395595639991054454845644274632326125037878718409812223724124789801618010887365394148300718686111756465198133173623963331471033017780307828280839083879996620847637727542269776204123417199647827435594323405035661222242813799395268701127405891535813491930541622380900192505829133488753184219305026406945842118493727452724369739695120730780580892862293051433587942448417986616695056573283755256871863969232850370990909080107957219631564287402671416877743882345148014549308684358100063671167786257335951031332620513218131779578645470793888548873708693162916619513734655187762473960197189821124680138773993862417795757086186215342785920526367220649787015323404557994981186487768485136431546119032431392924019183903644554902485839193888158051928689331101072416776587624454851838566552931889935467861052652582166968308479071558137961095938884627208241403918714204401433648111735198941713154647154879030065497526574543795505327016930991811226862984672246936852141862726914850808981305551783052147769795981749387145996675205208656621955759887931766774930819442522017517428243292571678793016075378610774491212131017906077390123873068706425324114200651689116815331744155234340770045717947975480522349967894012691275517768424451805527139204349771682907995590779829533326550944178227851993656930718998398588279547430077937047333527916739178402217280973387646684502843712827604943396319221217072147968214496733668140504930144122534915931527462541284524694833252452278219422001584264532057143341979313929744559678625016466244377977973853205431345329470724560195961633103419370907247210068286020461618492489471532019626546477367168730224962504096806045807824704674049757911891722838205995649619271153561088276882357954198316377741720212759769381904927874127225198984081613116387596394148081758244460571190261759021838046574787899736300851568826353489955375399629424131800885510541094969428528068912972092908012835668458667485259931617056117183480420542955391116784405714608774580615843168133851783893653122603042786326769666666633158368929609010971844680886349480553068268079877605919752423194696600175367211573842845174401691635453673352592028780429155701414433275499405210302939721498696348617952226510184859810806016456903276532547891203807933276504237423155213203803570790180151417099811809823255621118909582452007463578295897387391628415648820813849509271178416425804870985108983189969444418026136465875279187523984562723839086029543006036107220481475481420831792797345052115288218559278078384082368324564405299590384910737341275564249383306070103241483110777129495413696815882655322481602542968729835279922840338650457949436853479666695543404373268119740244688237992778835191889775818036880564542004416747429446119244039183721160482401106500679507244345604204768894611486180243094496701044754853878140536761541154140000146402138338179962560342982082249910935281308784164704298207592760125059412611381504630698423918513204527354228801675188899417744274324674164702079087711269215590843073183103892808132166343802242034915449915887017015115168201321636067764738325175153971621986369330021206372249777975789643262178644645565686545180801739810415700719854570361011967924572540709438849719467945733914074725123596199272401376769340049871004447974692906399931584819731095574285178599798240068754407561118856280936189548440840550171186589186836102455030023782776510778286500448017212717995916105582156092183477643167098315614460749089379788888852531947535045351613516840752381952000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
);
assert_eq!(
rab.to_string(),
"-2344305624221883685332620544444178112189679734114316339336787525185883424013313097698903700871769436886946165310134064363440861163198982639758888692682366187629838507640853448245669562850941666615466609606696120989384116075280876950904271100250414882666431594094392644357097932994202675207679371759405554892814139356634821692852396880728585985028224315938433249360241691357705772873465885222269158197003880795921217328574468300867808367827711884388589002537540946310486129506323306569552078314946075923695566467495755386728788338625071328904022329785592444278485124121818416938310808074361441762868404204507231127756442564410080043618207717643028289526567149157804913935991714821375528964251114728747541524295047712141164652988656208117373775015065813856309802294796848054530235418747810240468844070181166553183146304832627920089547363801657029421013728943852514410327983446457176603950366702418880901127324835252546462332763768344444836224343341693889875897468453880724941927854877440287140971896035452166670504999732463066807205413276623969498824672986040110865135378548704763856467575212042106150727498151441123352958012359783816527111544867018602030311498782252677546237708014106927402509233198979391611473351220234888614364113753449248242442921745733388931760166972490502548608356960008376705723818546331090478448511865415610039542576303708980752782575941198294133780198855532189499807373472148963140491355019639154324972452391110698640562377195979136679784431138613615492321660542257491496001015937871596708129912309335195849396309001604752878885983426568577187925797467621353205588494010313268575934082517535163353153102185180197176679629227943833194981377668207434847522075749679763190298785894377297971906327690357953888929229892707504567663455115867778418637116674082108731284234855778589218034416550911969705969782475188396366120776069678760382818102439527171595878561487615532387055219290177977652106880475263201376910472833392919124104798905547376579566017329578077358738333071896587046425739152867827219317788666082541074810170245564259701055721028711443730339500987378218689985496629154886625199826387647523457964475472660161543009363472742080231532944266169124569107923814478040362542839184738697944852527072094996281499900148769214130343669787713321785868766028170665216823133603286153763673865210180647201032173849253054964562470328050543882432531134313978006329308052862611822570717215428861772239464562584344484900525206576023564588771788413464363783577509140691092916384957666735174437447476348017943970826098754345466182289256913067845645634734530151857596469797972093150898238159850530565400603909404874068642860827437890348171139203334286089499766300298124849504617130464676363121143555760032108045985097304837855163344883663429170563950524605416257367283419644425737698280121199129884248500592916822955567151669487615984024452734195007291495237197136933410920693059804410037654160855566771089535118569714525477637450050310417036876079841743278390421089607558052960070271130218420428487425036565615830953437979691469475704526099249525174638174780656602689253266196458802692304786968813629757814132041590973997467078857188313552537364068667948393215093651421297255939701531153784372839036171641689410041981960420244459816106731789987926122290726421435164091956538424770951237216115911722502995460153185805255424978005238302610539935207095852106950322458150687330444067655113406601355989610995109008551440648357507364445996143521745232490572469048999847683707942688731665872888908995125982557270824389039481194507425058836449978636833716523707219253951537451511474161445253092326672808310131385519615605854102217994972035044795004724146395287693489572963625566293261270603273200661183192422968867218270190239714349377581286263673383966123916087958413782185593343731654118566312108225262524147174328370002748388380740559837193806066376087004222321044019772305232299988550526090845510125948231478241796597506499363674066821508156228209451314502183834603927524229332356820786789824778629147417328225475542990210545492959799963372445077076087354717376120779834587912473721064575449504496670250586072979246637947626135911053027260441288772972046942259736709203681656765940884730559680125673687405549868464240855821977661394273715828417797112992410757831616027658183068678936880215013277265138691790301332594579896450018230644939450511569142896867743000118603066114607795366566168305374889752049490424343410439118280516244011714577001190398378091193467808361627358717236877899333556620265547137274622413364931901621141186440036876305516473764947186340966117231802049151842428546302994278015473553501949989417553435482385543883774075715807195813089271921473087428026965638192967729429066482279140954661080958568400826786851754133973231900255310029232208030321413618330123515168981182316184155838116646384967691131896346375846683802566465634915137046772320447919857728223548037297441474553380271747223405357761545681276050152086838564000919501559425501927841311680942329241660349525111062350157896257651888411893978679142281005064792159202936010761493067806904075660041822639444089590411281632428583746573841935874127076637623547405093565952176336707411049789076188824599926252873885518467657329041837504554561881803024285973881113056918175117551212344799843217485521985880446631214761555509892496236717467428934464220695810023036432289693668913710270903836866772269332845698955479460138009766399792472854195031435455114857500942183520416073875500702631076833400146869539002123174449534052081987349431048769667416058427740210540078318925586905957680660307184713364485267444770648199366041204920248803107289842174413700840365458192625238309333917574371439909495507813191384932882798599737117304949067383649575398374766446083805824412573058674841891258510330479284383605553529147358293712651145580738061066668381367981513198927838833514489582740040115388742417429364026761982992422592866126915621997365034552862624239522807005936029618378160725377384497777308104675990735711932566916559233385290169015402108505753297894367178782805677842298816876182265824759353870778903021917164835644845475719676159658433130749598332976307977446015609789772293377718245240070107174588835987667013668597947634696538277876579253632139304458789836777724528985474795691161137739732409546466845311497118623022457880322914275777850903820222584798421689160960832401107924413004591428868009722341036865670319198377635765934009466644459604978823112273427955043009843234972069849681292205220361157187325317312497172011520723443869101198425057102034276959480680834117864113268400491930268525449627900258161877924626430965795518642023813832667685627635238165030552382087318230368053128715807692018397015357625005028463664890585635047031434857333018675631842024534896347419818797302928887814127836418213055536051859012809684404039816726973999232670373287407468518431224333358019803896695142408122703200169744692791290251188846863596155931638324220292608854092319357095878167535031524265103466531386058921897405235636500033226125596103020681405667946624573263819224933420589016136027060637957676377349333181993994733602747640967565916556308868432565356065588239294689974654443860892123075093803761382904788292998274929075443989497714817331506350128455300669811145325553797041949823831033989788691528427905503581375841682655388594235387142185309847863439158777625954720318944378569566808198126935342698001789025380983885440613320549703391230269914442062277294826188516743691405914973307862962786648600712708020312651696064744114350421991702735846700483155121408017571328945114044920262231866672941495397273595153414396576760453554669128497282079012976230688367287884445037238248495522018117168739292890223974997306258855885525947850297886732555073977152985133299770573326083080079565918834046920261048843549365882017080810871985377954781906562345078856674795866080725442420325951003545923998994213494561296461832618308875910591389557017547524275373334060349318638068460772061094214954327193873881769730513523295431820726234163738944655524779644656297332035302838990123644833600560236358862095704102578133583546671083681413968695655290572936844663679983617907220598262060702425925468819736070765646969382776791975949250959283502186655804534403346659741605233284552200303109892660949131850922836587084738229871526259124344467319830328862463782513121117416685137712112479029003951641307519958932968298941516067976897563363758005174613994567311472650475320997129570267977702272415197193061399177120014190525139871848642166207535055427301647278837396191535809723969016895302872323488583999887269489711952635620368299832882119867422194119336870410934269125473687874363631961898033149500115800702443918421783418758724099157995557713897882542016015077329062323535596819832321705340669317373114223248424093631283275907015225712649315495015205927923065559193060654360661492267847097864042331931563165742979682991180774857141803787710376619928536691121010884972219019175420452286026499628790446064920922771854959034845945302433127651074368024545884477019417802416631506536805668019180110425985304512394197914520866390452409397187171972422572343981326082268105917761635056505855603757780785205931924243397608376614438837297391413822042115083401815849095370640115319801026239387013624225660758257952272652918679927592288308667530496230856396670479587029703289136083275301348805327693407266362366354505759444016218572357774919275424200428277726247926838847691441338769390564396734149881842581185849363309409693493659319562420048805633971380051210844725780461604098075874707286783898814925156142111974165853430610217012030869548576104150422444060462130852982910713794735136500878350248080100312250475774818450083205487669846404724227825098030721879689499403274309303415824654571268300877270410825199364793507892236323556869450958026799160177960692758413201024811330684631295532963721057464179376898276465797476009797328259194984713507594066787087738719618735207864126247919808047224073861415563346866365030674328565865885419474665334642337458506338634121838678419581557942177328917801878748950224567643009830662507397998388449764445823850478883379435836188489692569570983701151709630940525638405599100455794284194197301586675742173801436404345868813724333360082335359165159404785928173472527688435971963440327364626473164721617991676238011010419342965085279267056942367934951337114974505845222825828201722392581746261096391759527946118845983068174442887195620675658105926944393663460093865191940431888942044200414954765122635814676313074681569209113792325393112793399380604683547449963620696579589654817343380014516307352182793519047860629737214428189913999737069629529124428505182830055026229810433987782979995159032503732007798506288901010757027547159677723489381678724928972650061606219652357516846579378267179686177342941044414088270420717102761378103980400230479957248381815900219943077606558238713138693009670277595114521664862052347235318162252027177765298038687118432584900580987081071009715601184593678593184715814785320322284414599848639723064279457785938901084602976009522569329242361890640970773141996448292351644531711588714901127607244579938839368521895213178686502335408303204939948378603190746158501012068397961341970633345447134075022755615879733123093474721444767387744205862168139198282857096084510743830862989631336207229568418912991946861167061809236304534339679681452418000768236851792669910702957061554196407975553518369384604548560320459233719424977520581389041566845672360626747175247716694654508442263190882702894896141640232121610123220261522394927064814253398402396181061375997632035392086449735246750014495006158293053168041376211673555470048862677993756731384154655186431903133507437121215209547908305995774563321798220073875502072047692005835117361034047422210763042994142906736384356990306969067602104816644099451494212310998509037430309022745157512844395488463510605280260623806621149020720294469679783116268212930662627853816768937505567602204875089221728623948168793580301613964641844379343850255566418246935857900570616204319261761817758013820993936021812172152434299268162010193713510482729949733759493499586689571208967238388139838271097882088859234959653962497833913834412357490429404971280863094187377898827690916038485101890833767634131770074592289750074966290918745486816894205142747148914908601901269384620453191570297429897451777693181374304653817755518795880876076267575718020757517334469116336427807871955265901525501698719322179459485387542020152196956437894695352458795392074167533353079068127655987245745792925383417869712126087397260328228432470649861018990846273765181569483914952476355350304378679154493000355008896681276114178140274553929362021662276254372997300850836411779462905275995966475335760615647281784667040206635604644075089432244036428123355488508073476387295317008611755310968085463176447210512667377241678975663517891336888132517724608037492292979234759260177896977119685652221881318825822729552407942755582785776587287002923149868844083790763849500246926093608675177273129456553506543651615634853215158306952835726890279357682215147955876026278727287859010188820769312423095227282188148230515259174964417696109865633718252136303951125211993881953133650274888262433547255773075639688797465029051586421093898553074080535057529422150723677828533875310760457688879874082396846849576038053063411388003789779979604080701073389738967939505111055028393559155160815725551909452160433273951458355427307186295021835713913090406357087593490279926817118978685853662028924193757378215865830985897273770991485599114810185287045576906834572418926625678326095195286563245035236267832407112301914396255000876172817231176539514196599330420770227812876069742982041250577494945028585796709705585639093021938646567849683856694425537168683620423021428058154505557913240550441281090741971309527081760230209685283307844769902060402656416258752500163487556973763896554699603311630684641151777888441675298457650604783186460964497090937804417937687747181638291767435778521948797817486969620316103605559033579629902507181743735558976102526728997256872970410873118272659280753565497419188188101012208970338696503195396261508554516830474235662353113733485796252133646046519635671339675045571584155383377568737190944955573972384263922995805180647808495188416153914646320586575299817118164425956025132756894711207124915213846584423179966268030966273451282965388042085299263746709292877428128911522294466709119953053600378681672373478670268193888559861494359395912000789315909641534656722400716810123055548763082648643389511557042609422951441699629296284834156514591745022914204238985278160609105430506750269127534656744019235837481816723504864927686182836183263389257924330708102425594282241688184577140724676449181905068165749582601248217762624610612358702450442539559589770633616107698641684627442369546642006327688988384972700942916204604452918571001617920972820637861739869617770921243335748709585140058050093697820002082384097861776164799871134128452195914932622964163854406747972657323096789182988119497322731025021710819352919488643376518159544925050044698738523191652591352437195037033952652972275715624044068851398855395465303819289269627840378557373343453454893705544597642515122660179261919884901966302916173468700880150509115013360709697919422821045554385662534661496452371085699329312812576893794550251295776776351219737722093301573602633186048001785813563211204248456419322215858637972241611222702047881801328393755859274150675438287305514711556580681834593751695964724873929066503822085931793484084953416141888736358817590273697799072819145636904666567357748446791832368940439866511814531933340335037964030598675837000209511464569295731258943870696852803931216694972278879903460552488337556820749967392269052982654426506804434792630308035965918664970998481592050508829120388517559929431061313400718687172266605671364897963027901795877434711192223303438201766214637679767732351399956632298404682379617760121409806261007363048019249069763871688420277709425180298865101837641900642942202259334121400840366603207750471323316037996429510541952356699782743155049505967487852255364133580525059945716527247484828970298778140619961295827918015826569967544990447184313284550948855394899347436490365362796237093362289730528545634042054289664022752753651538595114151910879399273459612959576763283691946632774060348557122066612441020742662287956648169729498014893248467352341870420019253929532520222983761016342412788369963067395846481030856864913492780220778226439479597479023393609508961262389781125017409952163426501221306392687914833165789330394389343052916399883735623444382317171000486903280795963788857194935187703031771271851265755040027954229144708984725594499634246301026399354071323102871523114156843561140097684519195847061250253181385522366660154109245322011372950110502259732751664495799998126751334912115159514229565541287733190430476822791024155697797224428455041604826188838962935919051311393477245056909159020961881233596060762535422026863359197949359040101359019306728341176077330150913880486994385064178563037301376067637953577860369201275989014156616615792698749837409050310765880738657903098537607648438100288896504800357580665734187046706219277891437223521921565434920060833107099508119873052017792220550552352763152566104202661269734763573837442786034006623869756867309791355060315460021833967401280591388444074986672356587963093996264768307646283267000145909323989876565211767618873095935365885632909943631218983300642313715073318747977466932390744123342544189328436063055774518425792381073432312613591188775729668395050183685336510504194956731081333437985008750426257243198557349668498170949502321074854042292438148544144884827909522419238582390618403226818179909428357685998295327596819250686488932440755424812584309439521435908497076973419276056846720383928791907983190734234218507120078855662932275025630417090582513100621267205965972800438932086740435073467710409303875945197137204030712124866096507136554389759145964521492033763245570822222280260121787299715133970470011007321780582938124659723545033374866747830046707774461513121901324392857704946428712914900127451453545577984468232696082238909299868554695285126165107575289023508645414692745787111834282942297308281120586344104239145808303686999381900163400511773955759787335068820053566579741874950207118551473543645147017614531687749406059959017586496149925065250707614461635724982989241941122619252735834961004437753462555677351934040827831136975707740357554834341882622087665871113968869860319494986740503012029165065394533516042348957352554353040387721006006824268164345039009989225612982620863505680340857186384487506045984327729007833902470874609611959778303253732156675080875055999198812052115490326181530243761076204239359057039724982950064435160956920224416266469133370925881379091752126262990492533526477194761280491963432861890158262235022956630206473030032290345183696398534670098181948673565553828801592111016265882805198653454715129717172637990838607379861495958815476417332319416003014734052265623267417649379129112735344274656831727218364695540594601103693291567701297658271859697571427757389402720403574689307465889102307371754496566743396754142670468790492154782772704691720000661608690423245885846207086890666635243705020094912668963398173209760114295609162054866986748222125975358515836103798813117477818803744678495090999828870780158721519381456521374157825170185216854191768840411562392637902088252645236829312450088273433076886413438545553450451667199087464068974197379831580692717255252531433542659445403760244571817605533659080677613441419312933259751042823718622350296676196379015585690909673671608554928500097368486885525161916791921371486760250158600186348456591058328630977347684039397747707382263344380956413042510824398298083900902141746279419497261564346916486058263764826131768734160249027141929015761398393546685096141594746003904550101230807619174742105684253434495832446438722708631844829657590892275094903181658873655693971806405011881448288277233496554363507811965572969579193464111292646959645898639549533734113824393073556181026958853059951745544266578509740610573051233917652435709142005636124901333972172142949325151810821862586421175869019634107080381188758434668454473244458067042621157029788291827020981564951014844382871185599849543409098976512628558672386627540225901498102065334549982212095123835820793620159830282453181290764737058281771369926626042116020322327842538307429744615116115566650294987742703257806366096471987261598590302591071303891555024863035647450477857236564287702765738508073311321235482850580656855397195899379539250784802330583199278883762854788086662157863863726673769741487141977022913378284470164166913785023050733830627128627202658560031106789789708621911400587096398759508135720212818379296111260762268521475928331498720016364249460547867835762628621537706307844780420197310611709893563819072975959321474250258521460234907152451484350326734359809916521659574546378804076929734376732488594961417579250227916795349319472559519735196641100297917855648252100486353066252090742474311196767812713767880228415347303545717271265140148193732246443289490016849806783556309969314582058888500424279204560585459399599676939326164325892286997815165369352018138132315262668607809559537879174504716923135123084236000217430294217684060621321711048322780290146414767640683371672567448371303999451924735079773121949857305550330581202220216430245565874462984986016706911921277063221226729361175594564229572550232941103781158424761118273230919492187593768504399873383460879605568189311793657630401320569625303761408513488890300349245966322659835480914804954715042298198614859598337320205726200066515243023893840535549742864457136074439191389073333191358021090489016719043261313885302047418559483417468690505962763637301834738682973765901336491224086053066841638752504141708307354349564102608514175734454510645237964053110296642718541196277051364635020645382062671890200663214289726089723287758028721780695581370413552347628741196519312768821131527093917279421594929603601334703300817243222617966851503500332343878167930844831601420966695449960849997589892613442219122084559734615098861083906508972049284178886903283795742016674616195149251242309995651916303989961839287029944238733419839732510746740981280219069232892370405381715782450132711564833218446734697410210640361521234952686919991295034670686283582176005269737543639349015879321130309079204026348721312007799793986239683958452190153915604332444376042906517747527572393571867957297277292087343198539865323413937606412075809613400893896935561080071519484769317996900796833419538618777782094573835342518566508249241735389461872564605036170656797002287926483852446668477066357296056184753234312833744691474909040221447625882460704233853345596728502987711855811716501694470332378190395683716138298057337600619421917190210175416133508848673332900599149593165175982955676156384593549734690286220573618979776164808296519492972956924236077709609558013829942959268070427263228539031904449306634949249283093244631505740633771628237947514477818267448501994887076367517463248606443238827070231557055204544330241999376594805714460716597021142602463081239230825522445151264557158983021625718243928756019158187488707958776747264613498544783752187308618077838121007727089855161181390741365557980305512996688876045225546673998882101876391410005710924345337542269823344101746067131435671864160406668674022662140596181058785070054297681459849489708636238828657114166483293808523851232979906917514421731818313102305236667803202525825200097261980081920880914769314556245572740327534990839274062969230341790467899891075560806697495366338521796712088128106845224300716900137876402801103797844592899741416834966612726897339246858345679041503430343513288545983016372084729145819326728557486978137986174636395597723802024757444595337574355653487145900726318359375"
);
}
}