From 071c73c9ebc742f5812bb8d390b40705b733a739 Mon Sep 17 00:00:00 2001 From: Bartosz Nowak Date: Sun, 9 Jun 2024 11:20:10 +0200 Subject: [PATCH] recursive proof test --- fact_registry/Scarb.toml | 2 +- fact_registry/tests/test_contract.cairo | 1674 +++++++++++++++++++++++ 2 files changed, 1675 insertions(+), 1 deletion(-) create mode 100644 fact_registry/tests/test_contract.cairo diff --git a/fact_registry/Scarb.toml b/fact_registry/Scarb.toml index 6be550025..ca077b328 100644 --- a/fact_registry/Scarb.toml +++ b/fact_registry/Scarb.toml @@ -7,7 +7,7 @@ edition = "2023_10" [dependencies] cairo_verifier = { path = ".." } -snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.20.1" } +snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.23.0" } [[target.starknet-contract]] casm = true \ No newline at end of file diff --git a/fact_registry/tests/test_contract.cairo b/fact_registry/tests/test_contract.cairo new file mode 100644 index 000000000..55391f051 --- /dev/null +++ b/fact_registry/tests/test_contract.cairo @@ -0,0 +1,1674 @@ +use core::result::ResultTrait; +use starknet::ContractAddress; +use snforge_std::{declare, ContractClassTrait}; +use cairo_verifier::deserialization::stark::StarkProofWithSerde; +use fact_registry::{IFactRegistryDispatcher, IFactRegistryDispatcherTrait}; + +fn deploy_contract(name: ByteArray) -> ContractAddress { + let contract = declare(name).unwrap(); + let (contract_address, _) = contract.deploy(@array![]).unwrap(); + contract_address +} + +#[test] +fn test_verify_and_register_fact() { + let contract_address = deploy_contract("FactRegistry"); + + let dispatcher = IFactRegistryDispatcher { contract_address }; + + let mut serialized_proof_span = get_proof().span(); + let stark_proof: StarkProofWithSerde = Serde::< + StarkProofWithSerde + >::deserialize(ref serialized_proof_span) + .unwrap(); + + dispatcher.verify_and_register_fact(stark_proof); +} + +fn get_proof() -> Array { + array![ + 7, + 20, + 9999, + 3, + 20, + 9999, + 2, + 20, + 9999, + 20, + 4, + 9, + 16, + 16, + 9999, + 16, + 12, + 9999, + 8, + 9, + 9999, + 4, + 0, + 4, + 4, + 3, + 7, + 30, + 18, + 10, + 2, + 9999, + 14, + 32762, + 32769, + 2110234636557836973669, + 0, + 6, + 12, + 1, + 5, + 37, + 104, + 104, + 106, + 106, + 106, + 490, + 490, + 2538, + 2538, + 1, + 290341444919459839, + 46, + 92, + 1, + 290341444919459839, + 2, + 4, + 3, + 1226245742482522112, + 4, + 4, + 5, + 74168662805676031, + 6, + 0, + 7, + 290341444919459839, + 8, + 1, + 9, + 4612671182992998400, + 10, + 5189976364521848832, + 11, + 1, + 12, + 5189976364521848832, + 13, + 1, + 14, + 5191102260133724160, + 15, + 1226245742482522112, + 16, + 9, + 17, + 4612389712311255039, + 18, + 5198983563776262144, + 19, + 2, + 20, + 5191102238658887680, + 21, + 5191102242953854976, + 22, + 5191102247248822272, + 23, + 2345108766317314046, + 24, + 146226256843603965, + 25, + 4, + 26, + 5191102242953854976, + 27, + 2345108766317314046, + 28, + 5191102242953854976, + 29, + 5200109442208333824, + 30, + 5198983563776458752, + 31, + 3618502788666131213697322783095070105623107215331596699973092056135872020480, + 32, + 1226245742482522112, + 33, + 3618502788666131213697322783095070105623107215331596699973092056135872020473, + 34, + 2345108766317314046, + 35, + 37, + 36, + 0, + 37, + 104, + 38, + 106, + 39, + 490, + 40, + 2538, + 100, + 106, + 101, + 106, + 102, + 490, + 103, + 2538, + 104, + 10, + 105, + 144, + 0, + 0, + 1197100363646891454313901687794606859934588623653474816795543617410574809458, + 3207048181556343463720131983741463455174073248789575831873141902886073852613, + 1377393484295248053690009559816568692501284651044584432198360089832041956211, + 135, + 1329205157367572264849546789395896934489357995285454339399964405668168751572, + 1788770149765513712482705130448860272609181626892176905773760038455341972158, + 1977542227217968941891179315381377307501139485061456943902259111044920783589, + 3544421895155486098999146833291817486888880510575898880475818417469973858008, + 1191072973595616295212701663693751507713500118017880464787470315924841813719, + 502601864157063751893022073970059437981047897306747826776397568419247481103, + 3531796964276037156525717695123214830359560024435640787950856476726498556400, + 2637044759818046807393975419718826309624485179051444457157789941946955134868, + 1203025977629686127924405959714646736666569613229013092707842514320630881700, + 707811687654946068916054372966210495661506439321173247415747397653552717118, + 1977267615434233449972010243492634248534134521554582315895869738006101038939, + 1733502679474850822781686663765690847675266322856680739249293755579650405684, + 3485854362447716954832509365281661935859455101220764222489906718298111283881, + 2433803164692739629779717191324914262253725502171692767497485087779060798186, + 1181223280539731446645542641363860890587839872483054179047744379385773485362, + 782106985909926068075983789421732270286750016185221533677221425697508804818, + 2092098859244507694059159384657485072739386387875416470790088671901817702478, + 2839580843430792552359336932723032950005520990109447518779216069159333282237, + 748025482116528278562899319650372098266812701644954678301342422153593390051, + 381338020849356912200702603944471977311632489147305413363837068179113834358, + 1556581709841076702066961823848193226425597937311852578328922519065444040969, + 2648621787864420061565498641933480796542064670895362529820389640005910117290, + 379662118614895393498759107246318053258333294923551731367163108481531078468, + 1564288599645786014723463321837975007005990889518384690223995804146101134741, + 3107591919973521366820525334386025804499094034119389823312537187050978749939, + 2132574963011632259577122138542297267092179225012792374617581325367778048048, + 603690328701616098614398095297080868871888433627006017142180124022688333931, + 2297719009028757498819807534417626644237071766272510995789219804303451044505, + 496596601013729321773587175646935296347958400693541069483216622417423227067, + 818168402542982239159719551714311811576861478651608366517503026495603949037, + 1478400302525814903103559658334023676512126817337032131648668012917305329412, + 1190080028284933684122691883523594885633595526001360093255796499622378572735, + 1631715124310825936226415290399293372894469930723599764063485516499885507344, + 809341868338672868234798700730405036623164596208533229329245710653306355370, + 606057389326044989549045315838993310904236664660341309284623332035303858093, + 1564385047559634781184832257687436585486606002272677630548274666873381664624, + 2078563922124678189311481462348491482182229789364166127954743406835823780767, + 2038690061123638685362491876884775738438550584269301404596771166119704065582, + 3509186806512021979931395635617812581593686711318136246028018514475035398513, + 1399040537370653109683488419931850088206329750172905773314803590917001066243, + 1740744866886441461996634883835602097641723521930436537167958968102893445551, + 1471884946537695029262920391274270148002781170946298632309739953592168101405, + 3347839672640956074389583565433838956995639036296749840481898710112635947081, + 670712314311401954545843062220154928678395357444374596322635214620256746922, + 1451821374549621643844062205341267230675289282748381102161910880685028294841, + 1796030933057037571250652445627752696633262020909296365706579731367672981527, + 833009566506956062197979653928481415159330913286240447900496754126820565842, + 1357993268630571269523538939572078828205801218418874864513106306545016702033, + 2864318871541541426543391501210130169587756194616635476052625361880335788870, + 1195857319801554847625040411310947526213044554612824988813063216851038363310, + 355318623783825364008790176440267829440122663267556255068041447555050382222, + 2748007456133617958629547473555026977693984080313425683557009628909162789979, + 2074985448637057792473751875854063089168811899638290299813460518596407856102, + 3452781126029059085159252067641694113609923236084723867008369894611588809502, + 1836942452759248682751066324926148345055900542278881030259967747553332553363, + 508574973351208512943415921977709023733537883820086676068958952439195656874, + 3523764156792646746758782615314002754302662884834794174183066480496982475934, + 232975417166652037342625134917502688434652722740353516842050395068092950926, + 3381528118830580454547585698635428243246380812599898826605173415435932943392, + 736263345907045798531776567775743792037746692636051411015351098647313864596, + 1587510874976868514269231539265733668415511111641351976544969148449989597459, + 1377498616383158552565136059316780139288647030892935546999074569773612536575, + 736733896466932683284972582524225280246015248716204458515108404717933937504, + 991628612465427089738418630335038994141614230878191640489965393331541988913, + 2339916676036573412532422016243542399239355815474986978215835275646017148170, + 2241299096215172917953819730156469030828466461769003457471323513361430922525, + 1810368604534459260553673522400842848816384037595752641444682383138884701408, + 3539521248269048257962983879494472672107541477885612547727187128624493720732, + 2127904415239567861610929586079730345300532479152008427229215291998753258526, + 1426566874245537854296709181415879814075938624855168216157746909565694332479, + 757519003532831122344629187417548932501463281196427370493568801738711077102, + 1735997538623236355496257421833461567303467188258121236639426604070564980651, + 752988532413372052088064730637035975974558358531949675118073731965636797139, + 383997857590756936233489081694063702600632188552524908725642170826907921738, + 192073855018920115406374740627351270244326059512941897851831867388348799477, + 3325382759522022926586589647409050365376608337640375748340054139464264072951, + 2835002751469536556791241275605219827255215462036308040725136843945910439945, + 423371667303749743788824200218593439423050136341680388372232837509044470633, + 2200097780541463497054444460433975463482106564662484076801041032092212954357, + 622511676256946514986881062541960759820272770418683558398489716900296991275, + 807511946312215844720415420028300695797313155514203176257450604608808478053, + 180155467190541140248296505206171870854683916530865002485004169119701181424, + 1168672620398746986650129197668150478955718421050129589215509579856191775876, + 671835547776676467968444788809171462107237328663733594533923839635286801506, + 2385328468988331446933713569441396272721571989462979864317012399965839466437, + 2945545843310224254883385878610889201685783310227921192786531939719763831981, + 1384086995393403372298763814518732639432573671623161096459883010815498447680, + 3123634213687622094331962741932526276500165059460209927128834994720364576443, + 2545702899795478770381165858790741075163669642508086226261627818146363247508, + 3284181062247267243346248181294012035085343043875255316279697075662334633323, + 3316923570081230234777450367390131015759249620057705711619869911602741055999, + 1958608421824279379335011882681252875319838331511045362536945751068505578017, + 1156519624762309025277259495176878088296623273713006107678199992880049861369, + 3524879204762900169958005555309597904156198081532613833663539014364710139234, + 3603682162603065814977639816286673416430277701826755167630996320415370411228, + 468181181475371746169400437735072306865158492847665421785800317303606981729, + 3252512612751804245358546700727538829087163335101690815725730408949938612368, + 787745263091852213707863355387883309021466704696197628824862689031260467328, + 1460340966585039389630818944080618967601799259511703033151590544643903673308, + 3180092946598147304258749372211881422868573796253379123213773606937591775680, + 1734211990833240084936723958986232757205455832538485564753403026931403520213, + 2384205531658135497150069311555954787502716665651903254948590718133403498177, + 1810094031972917880677026647050400438295700955511328965072509165769365302632, + 507287303190726785609875237331438314216319737998363382425741546197587698904, + 79471887775050730787989761851009201036037916304325802580234472242201631707, + 308304968445628462744166946981465768485136418092923868043984911177597402488, + 2263766885607322977789660158615497627676067289405429989896161629282544117283, + 3537067095145741994241119825032004797937655444631342041904073764252566765454, + 838702542232618687270105024049269281078757475263003427236031205177459056165, + 3104226887400132870997069803933183168500238741434425106933938260340828097073, + 3553661097126482018333710027362919832202127273874037709845001860083094684388, + 444380410548031848783168897596856669196278918928758267120918298080665690054, + 96512620237115883601374634802231913778759201052112979079495697155742841700, + 2543285950562675478018411685013047231565175875897110912053383756526047198026, + 2061571079622130422070688731602451976971573142493324067561109506895507142787, + 2397895492956422910362744369451859333615631087013044798633050238321800290716, + 993737500905213492021657062296569496852016255649552583995565166977442860117, + 803653111091112810121571698793429003477019529662738248015601344396183424702, + 1361070730342513450454835494302678885879665345813235920270808872833424454709, + 768897964103945228836866330956455490067004470636482592769498628299988841892, + 866238593929370965590285060515692073810031048956582939711658674751931716711, + 3319568183563482403909930884201425401905808634476033524803983400527518331202, + 2087937793343197227890130183109128303142877623543391571881704954546262843385, + 1937984615943180060280191450820578035906032142179220554881973159705732002924, + 1313692758255650698027185397128129927416636058010279842889157621110562056303, + 3553848700829689000329745914507597532891808052303443669143907931015176900606, + 2237425536933209153691305333542037993189824706640368718654783262739201540786, + 2272898968602643739244665963200009073880203729084322673920840145938028995681, + 2666262556837995480754239315955974397749537244697511879475408475628423939400, + 1923656681608306534569270228612673807267991458804763631435637287607088809938, + 3472557790789801590667296659918008989208168127149413350715206233949471618113, + 1018435610025888024140197525701947925520899320949670309753554006844734249194, + 3083117332632450334695249549602097337574248148304300962677959625687572367187, + 1046817510479880409306372185854432753587197574495248094570242869363772912489, + 1248078549890751353054667101511278388751663430980580760531586035822177578692, + 3, + 1405647258500518828832986411590330207356494675602030514138388197071312918053, + 2887568852525120579149284273188463490932672810960188932447593900314928123319, + 1743184740424915594643552690916427556784581912879433130228729638556735283146, + 128, + 3595169465102036953818109075253925250350299465836763155450743492515391969606, + 724773298235877122583555610035747041997608270153824830152599966244524249427, + 446229347897492687815695876059377206579703361046010999176556878545857216594, + 559949481414724152650745100294908218157809448821543405392032644803571115761, + 2031919937903335668178810248476668835313943201426698102310984130040806607019, + 3249574804378444804518744229129656925910336125850143550680866525942811318354, + 180344086909031570124251593071964003505859932704790170984025170081375598907, + 3599732251853512283557547535220282413840052679818805299765950086103141195713, + 2976868954249828145397031668380687982284656583831312560312261237375219424948, + 64879916430781188820059450229145590581151519754887790293283217744892166325, + 3004383152807243997648259142130244873146284356335823532282122426364264036215, + 2526799464341640503421655924872267829769995301312917399412703631680583123797, + 2140321994396344202918179232640393570357651019898505282872183913643400586814, + 211069754593954351428287982033011079058891757947432481120506375889345766938, + 825111169549487184768846113094727997844439066516996768045772866936933963061, + 1521365904879611442703306759140849267676848229178108215523363390528399493915, + 297769659495792151519708123550973963968096676163596112196206064458850984847, + 2241864048448752714021426115797407630878800958653607623030077311571713860196, + 2403908522444285804871444878945981740840575579681087125322073427941583418515, + 3473288377068564836091849217330489023970783312206531663569691732965666027400, + 2105650796752480470548222633622458872861651538171859220435283524811521170678, + 959347861644513068680674596638172093050634083664057768964576192824937225522, + 3181821173609199475725599598246082493220395496185214587255635719279301426471, + 2565516038103721716884456261599461264951774643558939726174836112329202532425, + 633676790941430520508444518519026420885288469240513665482459400077805198700, + 460762178493346803019721009072899123617176308854953602417835440208528379916, + 1349392762494139736275153534766394703092939923986468323658373039014283806844, + 2554328616031697939077482007260830975954122686569216219416950165640434882663, + 2389232240906344607154182301683662780462728418642431702022120545595714565348, + 110139820013108912354177792137617205535364519862904452966661412307424761266, + 3278515440843010541631684912984908535965160760758427353344295046641280971199, + 1742795694059695561813347890835790248072134872216792223923486416093015189698, + 481101208267190374520947550170994124655488394119883687489246439888134126942, + 2783315542131420634025289496596351656298876581593465864301845273021772892270, + 1263152768135711639089393495403883035967937496271137790184040340750186285379, + 2567847338938809027489410749003904253307770960512115180924194611053180940955, + 3401110560435874488070663261634218034643107938901777499823122182950303423631, + 3614033352679716070871324430265314103531439097525217051989593234696927227955, + 1248181454113371282440125279883090181332248923637635600073501755990418225892, + 461964190631385902790641942794335597375681627395199271551251277507532492978, + 555934746763652889869369694458632967994679788016198849477432323193775010983, + 1161703413265461268368187598112911878420398985276363155403757940967744725341, + 1173191303174128400871635730733342824203033961401359706138799509823345072590, + 2681723292980479065941524994533088909881753791470941161552237671565886280807, + 1261016346386165076164081575055581419697637134063327407430274961830050197107, + 2513893296558998413395843618597265842523847960210984587243712321122478607106, + 320612352990854803345430778251071115934385452386458674023211075795544436535, + 2388242377052285570442781024020834712710835530976060691604665893397930237642, + 1699471758910633665756712506723874844724446995118990134197438765193055083473, + 1863263220888270345355535084078978866267845114882498687553710981420391409504, + 932912243392495208689117161881844955925453417797710388467175347011198667381, + 3300431868242979727964645172599253853137091432688343721072027325397967059877, + 751358430327724743839796189706575202038423761997958620362744208949470015775, + 1906914769626592679874679957939050852664735520172163253699738990383619718296, + 2061631840459654611669133406536873816810095108691912981607134056459439649874, + 1858660426056375921651275191900903424796972968071779403859979735958779509395, + 3035561748175659236322561841370131688419555337849191644995662365273947194988, + 2104800455054850310997395230672427616891586250974502907829525162499636967839, + 1773005542636144617849448878168783463032227804968706200470987783993520062152, + 2367482543653554991029184703437583534146560288555000975130762786610364064095, + 1198620028805722752356948096773245504009868248645109322620809245020369072767, + 1761765034412801691960506502620164352747328977197746071422789032886117529500, + 1579371334637732124624845006907001076204864963230369179325790662711505203744, + 2870512517225784989868984151619522704505263026547690947304227460015321908756, + 1032689821999187332187311503783766265155706383070432399573109447337339623735, + 2160109944298226739543680484633156677954960439312971589986812647005870378444, + 2757181086842057055758425185702255672672468770260727593651774556865517416495, + 1998406786401530635489853064653957242544717780767960644184400924040376454008, + 3364390000324764254958451415918932234788730356582856250458626434690962647110, + 1507658388172016670251846769189626911725172631239915444152360608082790427548, + 1788918485076862121752309998615810660470865758245507427314825013662845991558, + 1649554609145673340069860347729280529500408922027983658062573269570564527096, + 3536865220839819935631441472452543040020859645472985021376510432994321004240, + 669720063445461171008044247681234890784277553835324410730585335247127439686, + 2425594017545751304330119784398037128187549764762069891647300243637348122706, + 958192430631283529931571854698018903617502820058796470737190097907098168228, + 3173635326931374949900060312397015218846481733465583755630148467026217171657, + 3547605561988192017954276402044493041688918338033524324185201034780422144471, + 2754239679785786044490989875302405402961803113553319647744774028389968854083, + 2331479735944143274219960049326360412883731748626378359448394697948145330884, + 2518246951049105477721631009741746133654947560655750093104822389120527831455, + 1319413715062678399875613226431645168173666598608228664075474108291027161726, + 441147041712285057420490555240937323311062820031662495620399280838720411115, + 3418444954592569783003571793680579612641404114355363534811690895465113988087, + 3061830414768187564417347161984796434946336799404567063798514854744492854531, + 826056347534026664349502405381960519557420347362891656542054036710193897760, + 1780090091843272174232399941502412296735021301159187691620731909199805139795, + 78878483106703129159270813024330194224303183712763708628307976950145886583, + 1137615560713993336514069732798042524290394677942255637409777243835542888992, + 1342272199261591495949776068537233567420188458659193366573093160716439196754, + 2819178662148603306133775530127011972959477735852410115900077018606887182028, + 3204501011268561774970586437634354100582305138939014239038793873650060705785, + 3594559551491288720593426943291519486906218612950808616458591099798413354100, + 1475483162661121427052099434387860507477164847246291405022560605552842926357, + 2346082476441765084772435010210875686148039289072483639760434154232724263459, + 2622910004019310086644152815184924867820268620486703643612626238096676446616, + 823134802574916200467806474738246252420573948425168165034046998136633969649, + 3311445261915985655283437276617102825976601310645947453228962047820860554912, + 2446317031363762890098646146377804202286046978427599303491456626735949119721, + 966707676491865826964759419111616418740607092933061715380975295850879320905, + 1976258574736934555373187617790693623492612425835492705598033919122989580674, + 2968432660021238202432273802102970520388861011994952515508825450949247562811, + 1235154097532033029349521651160346521587108287654752088790217837323542455445, + 3098627657968103457659800894173535829124449603797198886192550732965638807065, + 2079692725461564305266485925457640308139349079137620515879773078683717109173, + 3304282769661266834130852888586024469400949489034463001092648186871254445243, + 2590563515244710765567719099309171514307195779090968733936673635727642109904, + 1053459528032642904605369773616564492233964919292608373520824913122092729539, + 1526873621825720191637026090122227684901306509695337610759462779296873763003, + 1268156492269337721738927247833853074218524866493312686777298771454233345345, + 894037719359050010298054571802188828912716183999087382628873584139332048421, + 83135538741455185411800872222302445237501921540348130551108295776348361251, + 3145265212351955580112467512365730149205242847305148343083572081780681328915, + 1042845074993077941108202321034254858826680750933285657501386631460450164650, + 3240959729816718249296119125811435930675114946103274582571861919361309705224, + 170250681976820170541484556835402632350591000746673770720542367366258549076, + 2874567471504357557047696093132158308832960300086258549305829381733376511566, + 121735440860827272559394975898399180888684091768403922382010427041621221152, + 3153492670624975302772877718585493894895385879693622805226255017267376421284, + 2891796273924437218320759997372617590498888598980981950350335330327537084170, + 2125475836388287529607111928087201030072314222336698805474552224927510707532, + 1315708697872432728918991283619266318711960266683671020334956574022103167561, + 3101968687312016587731886843799117043691919592879798748573108955403188166649, + 1237708506928984773668046154493873014754367000891409815370587628361215498485, + 625562187429663145447705869984276615344522875066614488398430828907907467941, + 3200028900772358910270703509054147904749245217715180639692303367752114228511, + 3320435401726437830719431621449960737949684705489127218103214128102706493250, + 1085247364844884268197132344226865802654268231671532653196270113727443124507, + 384777334, + 70, + 70, + 1994465818700409197622561476185017920337500387491881804958193243878488488595, + 2770964406815742396231805579002594838574136363972785947448179691067238164396, + 3186440729402563907111997105021065789265441198021952656456431443062656096242, + 2187072162174522666588830881824999487011525590610148236142558166951712568035, + 3443093941503536939531801311296743351812437651989321238042305955599770917886, + 2677005960537641975954916708095056876754506073519917619755329085494898507405, + 3485375315953746133596964912495689396889979971852371263354688841239830778660, + 3221063105856140655406229915235126969304717507227144308140114895042107036109, + 3354333993755224496409929961984567593687463541546718883027900455313113415771, + 2016490760304802969253863810805273677466940285214532342379374229347525241971, + 525778286003178497204984003874006032972569827056492378519943781479001028962, + 322897761554279442279963540860658662565311689557651683293013919839349413871, + 2421104894669073692577237208278434731028051191184970535530288279692938209557, + 3377857455247199915925472168190965223298710357983463392781025295256351250783, + 820455314692619058801592453886293119518421939817862301465124779027223766341, + 842086152944228138773498064208004776059548471823134420819193067089175760396, + 1353124687901563542519974245592861904087632472829636668789236001217669757683, + 222453187703759222872444542637281182701507999875836739831162820314724644572, + 1764395332372707048399988911335841474226161266368799476317906177560467409050, + 705877231105983959384367589495999968121052479331645600119462017381757413615, + 1828706832156983810173131612730906456315522221937626024197353939875459840118, + 2270901780121150285514303468546375466653735426937642616805979377902063233617, + 1908834701612378865243535085176928657320847202636155375619565272685325224652, + 1082670118053061565881206750292930265111898265795394716063650134068172874436, + 2123641006541325961915277436592244967040133813869210315777422608435381390073, + 379829723806727675154041840119325830191742933801251565755463654625769630764, + 2503545150609073870271359716997399320304712220216307147123766434185062226583, + 2148661056115255831735923831571500608420428979537433301037022446299938497670, + 2265751977820844349543538897261142408524726425561062584439311590351236786030, + 2309104323966317386372246687056926830754682166047543560898364357027220069607, + 90489592161622006351806928889537593539159725192343528134437067463213267854, + 1737197703568189806240919977242532300692621534071151290287128198415458780912, + 2128988046236265498146430061527904102981631906537042270899546198130685863592, + 1558773423003464742785927603848227478635968047543687295176563673615190725833, + 400329102687788368337866873619648458697754176938650089524054652484511259741, + 681005177874355703581645822184454507604059643614055433003490341566754834464, + 1250890933472728907164263537995113226866562622894566658101703178643637413036, + 2236758125529077381710245259130626972765914138706738241427972298203552221401, + 1979562341409602964122000693275657950274463942910019939444854539542670895849, + 2337129712393276567260287412493397959821266609036401731835551992071391553057, + 3193350694002109435968034646905187789303533936735080469079795111609879039738, + 510859627248603653987808190965096744592193136630224377562737770894689796376, + 2857168089698335404277819720735625261794271432643155015990658358644719299893, + 1407945184351242195620181469828609062269038549652198471886404275971847315833, + 2039105339972490554203619950055749850928051502044927875121346441901646207136, + 3029827813552222345441591376360394214311656747880124281375286105379866722641, + 2396106104287766535178260603992223891268708698793743087586359234779304207281, + 3596197168073495371733343612644272883956453793119914949612820268946591750436, + 2484126503406670620234501281608974085825056263107520068443055365953376975860, + 846645259146548508884928930904570219912928715862119053049706653329043011283, + 1067851829018853235846545235291275285923696021611766623446885382396930239834, + 985121865157689934069644722476491011816102082713333326098041335519346102074, + 2841180645806952106625673954806527899056973171125395869810713127549870201550, + 2618396309957741787705093129549867519145207590632243093010957433789868900177, + 640581911451568098399233929159174424432988213392973888305417065093481154938, + 3019686917515108010546174837873847420615157682279915536860437653452892849051, + 1376023114625666386586549608319547786352025493937094825694732287698520930038, + 1258591914645856126537333037038922707441756833882369614680280700737496377616, + 565073971480337729737736262739074191368371076539116765415100568898242031502, + 3040763720367647036608426333837221563738577919855642853482009231753288114416, + 1550827814738756653956015647582151702949441924563494746979000434818413237658, + 201183997609892646962848892056923267902317897658640512160542218577531693686, + 1197357828124267389653217928518308238498593359395428327552756941967620540262, + 175006415718975057194741837594687600139651685500871349684423979983358564530, + 3016718290868672313026443181335451486495757252579722910388539163036052554716, + 1055448994115183381398747194145820895369102781746761637755658304742686538156, + 1203213334939719635870560526540012596351073272445439080293101599796698389685, + 3328368037477652940650675123656186591239698354174911118627375366634394995199, + 2611017317329984110841413481002768139727037752229056911622358456871705212347, + 612604574863684369738180555407984524715420773448330387091627265500739640608, + 30, + 30, + 1500888393519824672175042740335300145128721161014657679467423172159044215418, + 3114914251388326662610463445084790800505551394264393379672627813463853875398, + 3083591639795857565345415667084490368492916928653876929483190823256885364237, + 2554867824688776321773123082631443686960830014452113385908634193264525664963, + 1324221197679751391358871108249825668024033168477969162464100472346804358649, + 1046499039309297791577693706895783130313897390393512358507486979611278290838, + 2359653254154912689961281381854942175315445259561610733364196169287564731458, + 90447453667133594006941993035168207615283977974235269292277360653137432030, + 1291261667033589592268163506494040400035011012837321211976645355700888588458, + 2382765760989089627203667523300434395717135779095246512151843861937164245350, + 435227441614636419015713555167969247987203222035530338130284968585220368339, + 44901831631293532272224799590755757338742025610792641772350478872782065933, + 2442429763970018819801645282379014477658930536351808615604275555021253233869, + 153221129374348644691486620533122532492753734376393012538421218502638302453, + 3495499421817329066849759910670505412729186903923191792825549702620900722080, + 1765165586234623570742691572001162791644325313852683569386104549749374895070, + 2980734089943347781847904453522372906018806123750221505879784832315748408706, + 57857195422905479637739328241713201099953308215848176467500166752903707795, + 596102516621423548923913192326598428378481990755712220142140976337001284543, + 1725000850483003095473761565679506746765970448689410754565580882876716784621, + 2441207834010308686050320530223582537225445142611450645329701199781433826133, + 3327292236714378977588415763366495580600349733353160450425814059049256745524, + 2927968445227796184098155041440343620951166419736685503144829791225514180957, + 771410895932378704065494264751843849845298285516974237522236870942564283385, + 270920204477123697564634223916784002930000094959758166942930672898600967336, + 1196968479631477654157048146337776386420888865394991721376652626607429939460, + 1878799472310056754121165157337509874862303360447457856497036804474463709751, + 1133050478023397074463876768348634572969447674045677034776038682600409710903, + 2847209162913890152566118459168044591497810770745782712026232498388984887586, + 3105175194537597424517392956251868696192436408247473178438479455573761262589, + 157, + 157, + 597071559053546614676102269369670552982907844856560224998455821721927123519, + 193427664592279464666373675580283820573099677050171204346379403009383642150, + 3200938296107714157335142301282398759178715679281346825221802246228952561179, + 154969806467670030085816691917649710823238227494295438717240494466451628885, + 2134460474494105623175096295463252733836367004278458646428629992816638991901, + 2352076579793610663709338839377391548690060200209773251466269958837827948932, + 1779514093056014637326780867781470816860469208805364331720631492058651057389, + 2002984471774407561128905995252789047942101220803302238881815103294057458945, + 2472890804431287143269960759888172604717104288413328326310646774180738561625, + 3415789705048065084618422323093579498856332488920139653749663587904977076115, + 2546179090891534494264365391730147548669779338828813831019868920861271788340, + 1776187530272198606609331853347839961236035361863137283071797231674946793556, + 3544238627796850719716584142211452155779365981700005222905786045817272485435, + 184671869416209004101651517087830864077376649370420768318068860964416686516, + 2592127262918482680038241621579744908672422770549366224568054797476786228287, + 3527684920172072935895834559623021084102729120311648941546202521683100433386, + 696131350020764816721935512493791652785089910080811438569823271453403608672, + 3200420488645482173147960346248972873218957878471071738177752988319967905700, + 1197399853025651944987648687117735959722438799349935327662299544286878636466, + 907699022759964878860305607361890436583954234974290449415343858955344635869, + 468150610014268299861640178867245522612161035676481080124161863228610772379, + 1002614712765721094102375899428561642192297109780421934001323640859663406817, + 603035749657323708811368371898796460300433213160695193424435612410005069245, + 3562543820846023031953460271363841347431107670791902654523533832090126696322, + 2476018604500033253459788581943058382063427859966783857999113101466361153484, + 3464368942454597023260686075797315976027056038577091723170667889585232272566, + 1817336235848251456047754007722626545962759838279492449106761446834783065107, + 2469712414010921925719554087325441305194346094390676689176189549985071901724, + 865354761765900608105407974530419879708594407689981633158551759681457490661, + 2880047357199164215991571406005728738836290807920680453851451015364932401333, + 1904537872820203726549705311779357788731720301948607383020719945389505740592, + 2101183023210282042493965667711340257267089096318540185604249185484798173028, + 725190862565873058695212510763940776054929338493583830636426449208275227528, + 2190870351779442345438480449639243486543978050111058214425655051807873062636, + 2956612478245504069382738726103784097106883684569175380032145809034453838394, + 3513346155860863295806245233770376479022091762742923345385941741478223162260, + 2015772837218056509274036193806686517929811300044736781544549359029553370692, + 1794874481336975017674635483090769052915272817259912769465626210838069019525, + 2023464540230305353200132036683583832140976131366782835537403642294719880551, + 3220332795554151167869675424281092818091911548926047889296441949920232883206, + 2995066637130103020807145815517597179748030607046342028729234378083969168830, + 808018414427328931958968573931974478461794212149618421381375352458156453845, + 2908934065473592551272279907032420968799314583896806205142847859607351568511, + 2733139703243421076115776688538129339756789167561811566087866283901041933543, + 1401404770194597642033198737984728407795421195897307990033471073454867991574, + 3508396172747492320248860008663705333162530440574248429667241582700076702381, + 529732937778602361120800413733047459981448334740239778879884519440521482601, + 2447578539876720629800784448351075101704319375132567709313359386677426799839, + 3029992340810564228330318415244754249955222246840136948492926953328967507052, + 3455549996570430995970926490821058733500484435895802743649237051870475655034, + 2736351952248876946885658680766985268033833639704166473942479601191996675695, + 3231825686309771133681069430202616293768281696649764846039853596968389798500, + 1916162176380567887148150333742364118209220480513041840054334139517376487360, + 2928191693666844701736545382354270553581272562924098230404263638050656086256, + 1490920179033225844343986873769717653633267666482674088770115940376691226570, + 3040647858478239488162478847822685765597781179453159490002259843220107675369, + 3370569267175438315263073585378606981649250177609245498098597008119869373121, + 898525321916051113317884385539851791318541592501948838840136142329441859482, + 1743681596509165449605129485178800778637181749089804056885901338902104106732, + 3347464600478091139741462475871236544829321024293864538327697081412108054255, + 1565117317877186053473727938567872855312277666274155511587504206404584104067, + 2109997368221576512664594217681190572714882274489610868435196116755468362089, + 2721834566885183831424001577987249705595675299862925567617879649184430793159, + 2110115753052964511169308598490628094732677586475811634906213008291552325085, + 1513778498541851549855388323351329091137901707878531028366284537101605702508, + 2842219094662499675605672604375961204621497801125571561365392851153228695696, + 3256456430192108823715189143181421784735985392128209784271806047833998935865, + 1530439260707076870794156627055305522447632525398063675374885588884108082024, + 300908993761702373986968205098766039555557710603941695971507573310840961674, + 10034444841428657333008005943538409140256191668882574360156323631530933806, + 3471016583229597854245770768810170813390697912456286558435038113848009918603, + 3567730395070843487070073656785948606741201407077444518702957103354353424332, + 1696710989779121129440430720807582476586806275998442700677565777219919190557, + 2928725105639609555553396659691782278347314316911610079314747448354519991003, + 1459711598792142718169497974567193470964577233677627420717042334060114086757, + 567391571926247985008909285108155015243364984048362222070911069446572053445, + 1402126861699176253914128850195373800686904506639294165659497667124689971934, + 439169604928084952713538812551518750166907518985055087726896760343455179260, + 541173578467054635677204573537476100340057214242190405848453448252644399839, + 2393603770634574132993083983703642788896711769248621089554557308902743292887, + 3356915804426708301223175357595384683837016295912787447197925056425197869215, + 988402830878071319073671073471417836462357783301657363601376317087671049897, + 3312801035570261046928351498894131002957215012327385541110243706764810606766, + 1381850053674113376122391562598049773411941211789682144606806778798983388321, + 3287769493919959313298196324719748630873636535858680539727363533633872296779, + 911204813544901888299615607572645391633899198338803769137571230640631673360, + 2578373024026106629066959682048949666661175813186532934047349239171386768339, + 216914662078782652004285023654917673083739509526448765231237193596573328956, + 1594016860565521934020194092298373732258111346910308301831199943426900949035, + 2608400381737072045026095063933259885471924255227110099531610458138949679665, + 2442322365620069895427529641012200884834510430063480276819222715098985686391, + 2293762756994590136460409739141643550481025401889095759347286698785606981870, + 1528099718021031393878885050326906587868117652078182869938987179865020035445, + 599708191910301219356052061948415593413547671704538747608694139011859198315, + 1123496903275570310222464475618202746348635551788064416260536892849032484623, + 3492041330625960375241970644480575933702225571726463237492583397933501836151, + 3516990091008121648216011538776728432670175913831130919401075456717736247173, + 444652059376968258425145358358034362021865495870090957700986871878399317870, + 2172709532739410961231759059970346671903687364696251093582864158608970653797, + 2973950916618600490802292194768152966112978554937006542738959671413718629103, + 3190353748433166379043495274054376330293069490998808912453723690114235215874, + 1035930623253942726428924896252850259127713109229566264963759528263726157601, + 3568368384213679725001116534927545132760251595764795475821422703800489150588, + 1330310650252924687600747854976214708577156558323797525347676991876608143810, + 253809437464708175392704835093869002513731249534625268183911879049914478985, + 1042391195560919853928199972119661099654264835671312467223839247566904493081, + 3464884421194696437919603975060171955659413683297344700039195878640004034622, + 2586243683594805995606864514879176272625463918861716643965734031683791979977, + 3093759252076855070497556538752773796521581405086753477682879560771959612492, + 229307897984595992484782787968789834787354807309290883945734911249645928256, + 1550834608038120435926654538704259300699099219872537606107801538263939588197, + 1971182431754489165971240917564083640382743761019985575911152264501599236714, + 709129182827110437519085600845278440793735164040863807671389770624471037377, + 1435819810631995091478865699432347231057306791569218053275525736279432321740, + 2539067634826347769186474084150368057094768629884430697398296363890310294171, + 3519747828000934058169759912078013780493134808042986406793676669834678926561, + 643183112558370791636701733062911013652161193535714135099513404432520914250, + 932605273496725474697223622874881561973302736882279192012647926319475412045, + 947705824199387003410987321724510717333340766011675326539701846021969236798, + 2541682705808503479984910769485440977821028680154798535246992098220250555536, + 1680490144159387802867253685795117225274426950718906695783408873730459051620, + 203209988426769292645434018623960709807022174811611750868678713275754820484, + 3244384711867798787490388316214562393549868915998459976658387772265810322743, + 2364071980252532116218279113815770942207943409657512342490899336190608362611, + 509260098696687966143537232661742402511987390547261737033561191186761720926, + 1216990730751141769937210299210982136411212092929632115652146267061877392687, + 1757065311455668357555263758595076484781796403938891303974037111232611104365, + 1220450866867396378822048147589379326671611056101339373820472056770246420641, + 1430702665833996027092417621536676585446781854924647184481461870178103348811, + 2183285054331593660600261170473192624241217654033882507606601523447158719270, + 1722927747597051401979681071102169845662860335066330528327422591996249912112, + 2837089436012968832056078282736580866629568770864751327623283864872463161556, + 2701905949481388271865825241388154219606276334209442027243099005266165003655, + 670258216550869082324454271955990240728820232212224369926131372739944488722, + 289024152769584052214451915585538349562125839916932400395025640964840768225, + 2705078220179495927197336603591161348180979972595810928376092169993570730394, + 489364828580901464652366307731257429890863083832496382650674735761672673788, + 2461345673455440789745159577770591682221715799548122478025800154637546977002, + 3214124402000837952090562216606497509183938772389188611958975061415510946304, + 1590194245574475359889113518569003504383715911477613610097654298878067588912, + 1175232372628872501999931490999481720170239957848733069752904024889946712102, + 3084577981494309968044686014703639205073927516408926538066869421040588705648, + 2720757931710655307986584012374688793540560350795673448651848518465209529553, + 2832814018696972496428448876307563051982788138208295369272212432625307982960, + 755911391629332081851753202241196592916980703043991082235045183859146731720, + 1544853660747458642793815689082660640689175022498211576152641377453898995465, + 239841672883027535991012358026673471198821768640127433415700381486086149973, + 2806246682900587736289825441257727371580798036044960678381855072288863607633, + 659882841434461771117758279376889300849938167387092576926300956176168953074, + 1571371497674572548910119706132792549073391172058297087418359870067496850287, + 3271540378801760090710201330817419209299168023925956536172434655509611018707, + 3378584750070191316388003691537056835511483895794891711364640273565575936436, + 625473838460294928056716290572893092582758240233804248604940759265018002844, + 193959355793566324031146097645779246490023361375616887683574382101605249848, + 1915554636243467079295399047296660941860683298354255268580040891526951690218, + 1190753038193336932563645454759638031836719743030703410389613097555540318212, + 315180466419124365176316785746284387644291119217532482503346435607705972047, + 157, + 157, + 2763189339894821909760820906977599693363470805325642299721284566807696004575, + 1911687255864387204154467117329106555246845445180197726702600853753259298717, + 3057938299236067365799339912747440564483830540370916538533596371948158720335, + 117013421361860042600958138633006023372377599010042176827419218288147979380, + 3470962559775691798585044091929625496546770268342685088601742748133303190382, + 1161396626458116758280736596622804384380811902081486481479618325248604241100, + 1223251102191492253906391757255887458154901777624029833692293544798695118761, + 3599290024282550609625903295322177733785161544665999243688262169954925113735, + 923435110687549389373843542861604455920595230613760364465605350706524829819, + 109620686725659288968220575309235710326037307207371100104446649350971960640, + 1688971987611692815659564379537963175958520138750254691214345253818320390462, + 144943997155768338911932798619575864738466447106770882929269793049050717891, + 242660848654413389612704083957946958253708004855454478052973936029429336408, + 3090119102005024404230294741314363173892303559039644231626089533489135381976, + 600282625984540700871426972177213596844552213933532728712592879149644071105, + 3438055304747859068687117968774049124669259041203622752069621775826037383528, + 2311319385899192805093940773021390611752116782529361408848461712884041377754, + 1724716750415373748163908166656097768361718997927188595221717559388877392229, + 666250708498060147945242025741056571022260102093589068447994610744479425990, + 3402445729850467543953488036986588805502680985355989702784534138976088016996, + 611937044132700647620163510195597194853245329235060729057670103801342520909, + 468005700082341337604412147344627121079931252531585759862091551878383017964, + 2775570718122944818869217386352597829510091488449741915966188479993011661905, + 1128388847969750307644055227527405198750576959427229729865185216336653786113, + 1384942485180803683852675628754902514922027650785462846910721407630731820593, + 1561249851181430209275247748243114234905057533772521131647111622586133967697, + 2418255584829302494778021963692754484275999483605304587729354036280404593091, + 2308924455421732443638574298990066888574095130440966756360159803984678579976, + 2544664017436499083533813567656381625711096895868731481307499307346015533850, + 1043485085059083431764912760105292624145135819272944810952262794959256552395, + 3162689313754666068856435598832369818095276453117288076251920914835024195370, + 3057323227080468612811704974562418980041820665162111356955336569470156560605, + 2017511371282517821440981104084204649351867146155196452281287358788635679415, + 2160954117153465705141336851517429917819122603183885993838789760349889246292, + 3586197538860077042279406775857691968467685702675417481614238780597529447160, + 2397209056291445281073445751354999755158452479573083332476594859820401822779, + 2439727729694383270320689588511124711831359665122730222933436810913606490688, + 2802175977754502852682712542867577110151768581693780700839981874210564413948, + 2551454291425594851532893257503314985312789349869264237278529538737964251673, + 2579116801024771681419289954698772840949985261264972346366377325067462875939, + 3106552706111328275476090376925493376278989181130155905332556255238298690651, + 150765728134399682260489672908968132956589938555133945961616383548919026862, + 1745048903383554759950520656402574540792534616692736576779692549254391052958, + 1439865537400500880459979649500682301479915548866130614065388266747059317804, + 3407392570751911457204256985739669169845245889832189018367451022745013724987, + 2630568670409761405557624177845381722376698984943435469958003948105254793694, + 157486683939098474920432221638253377121841427831113970264033111286363866414, + 1036885997354007352897233369621207304470815444435541971818051843751792709358, + 1189855570119786890575269720597277652706889906133993449841277714430543757429, + 1042279743109957438197983046102312255440806176270161313082054527640310921631, + 3460644410477601039707370228853544001402312395429792017793768618572972353593, + 2746059491037752174670483826840707570848249522398486058378461352888049317152, + 3275342649868044679526163839316672779576190136033955505258832253705508296765, + 3600386605626269934805456802203023344695896514974391894481297262547911138893, + 137375558991550486001362219951360378190210620457090395532880681810519444832, + 138300613650002072175152403340223776118124586545610957388637737875156421750, + 1368037673579037770563083125921277000915262414316984513723308317029838301358, + 1372543506724210049850766560135923910424613637558076447997010205694277609869, + 835182317953366633207526294133354173792451273419524466062350719698219342954, + 1884869310712664553038904353409345254662066934443224221675549689089034041375, + 1529330922656316721282264042372460637316512269453848661693539495264367491826, + 2507648959534153164124920241051288322271132686658386400368815204442035319535, + 3407664344326098062136467640948732495643410648749806620882321700657998013463, + 2005161815417757125348763881369641912876369122058730374171111775697914754665, + 325445691585480953327344730939966691184750482877914408305166756652523196848, + 1264815959323149049483244851791828458402923667517259418948873926336829031102, + 1730034054516983764110594372653445083629575133370410387586952759532957201354, + 3101965261104571047332284214460398805449316428356840822635758938870580698558, + 432260921590424078837559312335391669243112514146118882869023049865767235692, + 2559370135711101402034351453766732093086640967524785307321986058223594353304, + 2307823310545005265872158300954491921902949244635540562309997134964084529578, + 1003528616586226594932559951105622479779221707455618075556901495050054641489, + 778384309118787118938880094813195447472675971365188408455804901331322797514, + 2390837587911781980551337114922743800084690480238172543129026910460103218653, + 2938981292349006511136886901023972772593325389739304937585726941646471004593, + 1954396485850378289932735680724591778410625068975637484860513793451335102990, + 1498935726991876068411380198618601367396497408471267801845642995073671152412, + 2249782283406902499279923609303076435132101365705055071734744298000741062790, + 63304087544348852617691487078061460726131824051891694045967679017954680694, + 2633097443102395338637696569892116431417864685703826984430548247460648198593, + 2411948950793423398736819841756160760583581408152604613399220580147264723389, + 1811760090778326402983231156814555446060071736196895908838529254120993486684, + 1268890412854777450912164817320299798804381739454934339955685564981423737733, + 1205831144611633216117463632024256652777864495419123489851832749809852930274, + 2541808602267403389680448713388927393613922755924952120728914285182857230542, + 2117136713186506560564350159459752049655023233168706293077653185578224698073, + 1764830207910775768070954910375750614293821649913023595244100558394225381887, + 2490458502932556832648481998106778638688378600972262970431618229161406852709, + 3189204643478745791224973425541686439959116074111737494708441801128424220920, + 1737561206905376775419550163393062271123815348447911674921427021838016364161, + 1497167137608111414677533886905438779694217314057589457221303035026490731675, + 1211961615616761197480049714621999433681761840778014138656176564961164173066, + 14115837994715696520544539468888916160246147151128070928657810246834892656, + 44141384123054739613449468911296728028669876226767641460578511749017595980, + 2804359637087013899402087055422773600769567341628936421385390940118291276262, + 489418529031729892933777127000190502016851976798269445583227482342040599017, + 3178427648571387122502928729967158402844946306781915499872106457913582656146, + 934916417318082546975989864970599853811665984372449086417000013134829677765, + 2383148031609037848889343926151444239853881078357327050608519022066121743627, + 6426424971412836022949482054258011442077287949641988676720615644321215309, + 1037087897391709256204795974088331179032637553434945732158544784677272080645, + 3508119341934768142027696556771013081411229354640841820300926669452489707369, + 3222742237326153577508906062984756293009152036215772898149489629955538346921, + 135198561230875270825952602166163689466843840562174754490220453014295570346, + 2973738971402502085354429760013704229421816767300188548516991031978203895213, + 2776944474115428517220862474914243203107591083119248340809107167475640735452, + 1565913164611645615882411446403837923976723305809740331949378794768108589400, + 3168132117541348333101883649293666785684421173807973395482403661759969481269, + 3503720956845409512247971826139224665311697521141672007032353134126650282939, + 809276715613560600694927790565376613986158110291102594442559806881234793875, + 2552528717374786768223052183208666023147332607966589216444386115304035875700, + 2554204426425984197301986640960106902581222904104018605499585646213789119593, + 1601340707908074589699419255190757046233869939290830902871075303851840625905, + 2860983989581570537028256622683386564852761450552486992701697356490424225799, + 8827092889837194152169903895613075525569214074485594999564838062914608453, + 626392905290707089648014272704244944901149311644174425947688970913701172487, + 704956565404887066882707930833900427459022442977362615136903027860234119365, + 927315649825559885857245747665750230080220483100376320167067439914100692257, + 479598864590527152936040322586388817350581034532791621994987432383785485047, + 1055657746098136254757033460975251412022551425028774975345551151493486390557, + 1640656924953795151320685004015250236514847683803259255939688575163567934966, + 432647542666008016772019893949416766422616430994302446114318904703342027171, + 2294600799317838926929653715517523826682548077006127844960445100053948962988, + 2597190153158239323631808203312111082764316606374800683611047608660520345633, + 2708533741254038775055636521628321402767296756957875277849753392773797765438, + 1157063566434167479086692826382923828433431620744010853118092372294960670890, + 2937965464854810920953929089479519264365686314836494672339307594391286140279, + 3520163146890279517884127600525219983371485507026855413637000717152824358399, + 1150286900335870097041135171686837471793027385210478132693964558248928430612, + 1148701358167891905780023152814889017428108775518730501154999943468861761234, + 1698229751435471627898224783527792904352349800578638636217096662147111882211, + 1973162300370715540391023603523936252950308293648450776514453024438475264117, + 3104443542580757247871536787782988137665117382301719547478792030897973869935, + 3146378776855391153136748919686492551774067552487645732731130744802600577766, + 584389974561262583864085245608376716196987156832437897190166276900079097872, + 1609173160898559180279438544909641766759627028480677389314983286587068862983, + 835209096740297502647250662209506958833645639994836602236750586235404047933, + 630080484089350306711779658464872002468341734508214625017393224360929740707, + 2241879922198976326449660231762977862782816317524708612568290306991756460012, + 2182512475202748646039399712660360662042006584303947046411560338946247934946, + 960434595326218251833752041827090141637408866952803781375817316550460618514, + 195079987885296103075748925069370113497989407703073715449367103391198071785, + 770253798505708602921928273313847571752301498793972308394599081995232707564, + 164868095335459215696378315174773387534926342819769186079531653262005828806, + 291496331200652748853316835318686486895233613708838455141967009837782278217, + 2590130935434252163915403350782837843797557503553655096295244759548792498073, + 2836191223025180380351392046361250418587949565700644733511440278177225391796, + 1503024011852849809575087269518806583759569500131974697663374955232809415911, + 749673966683688768331031583885768911412500015602155460488726507709168829784, + 1346989564144253674740655400921226588202032836932170340521385911612505809792, + 3353295648298483836163829672322218201813138474328020738684303074817363641688, + 2356302747521500647026624844030680692364445500783533270029052564827866264837, + 2460860633996501702415912630317643554919480550778979542097940666039369109247, + 1325651811315657728365944811411443988201077060313957437165468718000161327014, + 2262748079268634911158208353913636545215477594418329244435946739293789596712, + 3230967026129886934959528352269786997138285375118511694303147840981625845840, + 3272418126587792976932736858591603459753826565421584366118114559106265201810, + 20, + 20, + 2974895342237541643567829350644780014962487535108580767976458027281419406029, + 302392049361131862658854700727902565492114031503365742404161279800564020723, + 2344047613345897223196210676799321276076981872791856991038913918560809199762, + 374021656279694995806779662361646261911840287802924162102811975513732763639, + 890653581259539631271006488527571369670298568112511378495545711651961628787, + 3230031756224020535988135424323146524879093942167406360237158541381502268963, + 1949139530503223373455045391078393004671286526661154670378480619452708756064, + 3006353107165193795525303396584945761986873657200305931710642514421236979601, + 2520915757817231470712509467229809107554427401007435221545824422881557470474, + 1833515411381291509491187418834621793826472333932321993225312218474351129071, + 238932339669366896130093579892807520635000157343243775343043291357500287611, + 159043989906137167944729700689116169809156836712073905780325579869108216012, + 2635127887185039202273637780698081484266891037256536599311895952380344444292, + 1716495741601865261582729803896188919505488539985660338597533465789928803872, + 85066965898193347995497959677592535881443019627180510816452726307363744349, + 1796770015667854903506911413316344287189131688637840667817064267303486145486, + 2214939746787289928655260667359902849838822353262873700689735249750743274516, + 2719239167062223734705996853724400218849462611866915822368579643506842125249, + 3273383341334668496714246984892845741773041111578303405529722981791911733139, + 2098467870180838776062566580323688344595258490461926634200941771223992555040, + 157, + 157, + 1523226752758515473128169096933096369600538754617117716719348204559327997785, + 2173278843302726524389830380745651047318002701628612277171689014121460744680, + 3041406635036065909486657461237923797021655440009383870362091971687452101223, + 154967776440333099100955599143069938685564668477949337855699160726485661820, + 2877869665755601695420144861584497196201728425752020380659274448826171717965, + 1264474698692594007888830226156086179820618538635214583687163862376512916810, + 1955930016654445324109041026568513234949101047675961995253025334779930926035, + 1905135808879919963670300323339673815594978890689198195118990433841866910462, + 2707522760643759865901060290058203044976293982622875888420456290282670000881, + 2631160439645458154403045987392277759239792752717546562393984034071623304380, + 2594116489599627123522244262273954276696327289823838565070411346475514427385, + 638903128600465675017136744828618851971695978480134289975824874624963346867, + 891296456461165144829151872458215818455612301827858427521629028125995678745, + 276673440862127974459054794337718577145615652826370084536682591513638796372, + 1108647508559639566255038624764164506021678923318260846639449991657520658990, + 494654412424927548921857569328727231997872759384222314363894017127584939856, + 1180431088897625577670806474540619131676074904507423346022622575590858235668, + 1864718155886332902260623007133543197594200150402854419486055349366526828691, + 2438900816097435455596620971687882816750407765218894228955032531828030196055, + 98188463743121359609506422426895834916871069258486416774878583700525182616, + 1316720729349611224924895765189281110243692741228820800690837791144389273831, + 1713566177597322369362939975126797695452238401012981158115916385313223255703, + 2576907054977195326418236468371527419226608639801583698025981211004929086767, + 1440224554601233033863890817108224056670250865135065637796916256067736932778, + 43657797030067105561737680330201168235403769132177015895241749601423781055, + 1692474033908779020957244497151825950130795128545507964736104879877003094116, + 1062792154683138203433313061303384022614980195128989136522604087206094290593, + 1885773561860953574142742671625731827584060683594062509763710021481534307486, + 3502319274406482978733874055384364647432629730432187100410523604435042453339, + 2301898717235234349357835500322626346976382090958174430476370686243938455805, + 3227059870483468119386101006014980326844143584319689006948800657998657408243, + 1378620929202789488424565506744438642170278620888905039798942629916946048459, + 158516149196092446422613481500591145730013896189486463830867326541930229572, + 2150651419655435164976932590230352641297511382670784533487062930456191215244, + 1346378468612297556913105448898575200110042331363294760716853959118820267676, + 1955316764416359104924781025343902001637882862350641006824022345941690112367, + 626352134987808969318317302973797547222405561370420340428261984388283218082, + 2507126208775555851673982518471601344141368933506075637854184854544004599865, + 2802878447011283448099708475677806373354409188669182745290981767685901390774, + 1003063279213949960666103071865350148341465396402480238350515436601293690969, + 2021885196791775037309777972775616008582717436337471961562392787944192819700, + 449386679826446906860446049532945374673309340491751723729903991301478132443, + 1153487160652123785174435485569738386096415614200400464849473894025086707675, + 1461776233622351089828646004161413836280709135645322461150905803904642751271, + 2628086203841876566631513684911603625639560354043148235724245697829045456400, + 2240972637498222841955814086475976545395499246376723465159823174916867221992, + 3614655345724434363554515227144414569939787602759540195824707736163910708113, + 2299700839937612016685542453162327481238130239735247084689723721020975401952, + 818064667708846970160309712734408713569735533443627977077023741625614419510, + 236449713667470301978214504547126314751294298547197403379769983105858261711, + 2898643899883536273929939876662614489020571277892106757549659267227656961325, + 2087997316155471083959475002719671749620280353676132939334486384299347258533, + 1523817926581897164528041853489313849521616110232043663344563044357221221579, + 649186071790283725770551092585719337673457540171463924883471577942114176979, + 2314623603149232535910377853551166962510453585352099806541062576104086187380, + 579320555977904029880976187403895754781687938348856133970640927488410030977, + 2148155145426878999407009420794869953354354246788256800807387974784191806507, + 2020758400214442110889689781926344331316767833981502887362936501063102588040, + 96327161581960268357433707794419538257211005500764508779771019991979952707, + 1214145936908760753026886442537332829700317321504861854838294436147219742991, + 1439407269664071287761577869625066098769509152685643900362060058766588128433, + 1463101286332177569680782971660895126419499021978139740623701365120158342037, + 2930450645933176840696676737920959220891499667240113636806485732738312229204, + 1854597646388219866081526912194599103966282238027625899763435676478469049757, + 753217947925573273618842975095087072488581388579954006996478633997327895910, + 1075580498750503134880429233815005701134367903246580009049272906921582409497, + 1615582414548568422104133791467945373392780239540881218886540075245091322369, + 2048948842604663995312002440894927825941683418843437941522793536932798293242, + 2399565650700931182893072626083571143493606216013268159384074144209546808183, + 3270901397309817725386030035272089993806538055537526186606760922679820804181, + 76672003627319151811322600661777979247776060285942353846685062784316263760, + 2007515431451069601254037132774358779043625809542230659311104380841643190741, + 2931701507032608949967259385062030238827316683217573760973987321707003186519, + 108688409332791587578555683617794980983260104866859998808053146281893227988, + 2757104081903519242859778745981395876194545360649781924617020788840799526138, + 1813783365171609799850382609779284043624546236417131560416850343227759345031, + 108946184506002514155639164007226405620002509069098721926447718072308229320, + 209740424862579619079112386470858691897855852525738586852028719969033679515, + 3163044515702911410782198556835928747063371558613563263838852942787651412478, + 619384443725308092072488803705862888589758747921924943836194278178329780294, + 1162272734571630530470028859574864984697583562247306428697444139321666705944, + 765883476681219161196804456176426626924280826406864456151885287604405203276, + 2775807860672976894541478819457032176988323427540333482728873234400509360511, + 833384206161521578825777787699166802057355791447095135615298239945644345789, + 427698336492158621235114406384506315956436465075675433057143334935267717356, + 1756787519948835005178556415640919597458098498031325865946513256541542023930, + 3395096179562290957096767848689015207272880669560128688684628576813691061376, + 369819261521508355802215614485479346814131738996470508824442977772170681815, + 2205133127272919767125206961874945430909707060579467373667142797334332481840, + 579350168618611960517004360410358995194065988874421137068178119248776860184, + 1975352621744387568643635282067341330884369573290920694684111726538655118345, + 2817720786469310822199712804029407166029812208786203459201994514424608260757, + 3140310342160553632064330771940243708434261595602677968486856068338201101522, + 2447880201183707595456269065816640830073980121472867580373421387206321048579, + 2159842763138342901870864467058194724492142131348258016697979871005911586428, + 3336596493870484707321052613448700422676468461471440004511504711246997874685, + 2802831266513099007706226162097763051427221127540910517330963125049891691060, + 2694624519626049312156626111031490865485038117828563633749141392309748885108, + 3195647387780240267475609291497328287226169877781127395200129704347292025387, + 2535356784768091516512214976035503184000063402685376636827716544551567093717, + 1401554913426177857735705270060172710849499582643993212261226684517286606477, + 791706082958704609783322249665180387467852835881046278293441752145630872401, + 1529882369132559107857695029480710963052155001467873036387068105131509716761, + 2942014684365321472442626343025888434165727330734941225463504597919957518810, + 538945893882307198981134165433829316972698879798040206769872964249020409085, + 517293439641256359971405524039492786088189336886913687760073197068785515859, + 1425119112826044033092933241343168190189202966096395290783333776384037080342, + 3197205828003830399361124956300964422349621289089207509042577373697245928077, + 2108172297268026969662618663290279339003240824641321120750624619467391084069, + 1175342083197719505217907202215779812926777275674770359910170322354306546907, + 1092419512970831433241295480044141255215526242213908181600910761337839920178, + 3482311554924671780220623397044801649955933541435038194504656458567428789032, + 2957292731419777413344417923911967413301512843860094715626291931210458772357, + 3134551847171690754856751863668538931055316830717300421957032274020094533457, + 3066485427782518516713199568851962449982870019195592107986917725665562893408, + 2655691831791368866611494396538108833867579018404991575109007305760507850192, + 1508943670960252280132374365718929428206417066265724340576270423397668277323, + 51920050871167128406431476279793321374672202216564386054695792342261191366, + 2980882261016080670464887958175069844185381400313210546438807559991722623405, + 1662266612146761679561586101752163754625731842778225749069531314165382772985, + 2968165940547778936166889932125992166472100035533174115635474584447607454524, + 2901819999206571386971549577084215877353265383651646402941876502566937696523, + 3113647522644983724097454037447740366094531635099722425461641967180915112044, + 928737199438311375544778331762143893990091103766175851028518040364047187551, + 163013224298786587603665965584501983470025702721942349641134364618236049906, + 2720985913440808824590205484470805024428793592772287960392620346345018116115, + 692494364876246758872815244300028404135081192077781587136178233100214781165, + 1866060285501153069737818266919378311054164030181716999906357150051927984015, + 2487319198614698147221521705484399032727214603759872672081500116637905901928, + 558552366528516837570063075782698353732052791541417148701669901963384585011, + 899353266417326659064106915524338912503771682527490734642552727039419732814, + 1840004605366551545369642227315467605741647982508218884505399007376635713250, + 518073414806450039968476570235433696266947802010703202163636517568047077259, + 3020005863136221705702806449756505220649701814448974071825633490180614340366, + 1805471803580194856775963272909645169203545761459656238857522852130484467138, + 3077681162177598372038196052471671909124729185305449511415662818123283163438, + 2610659824835451366424038671327661345831076822476381129647485304754713901757, + 2916662040929412850696726539692695765962857433492307502848963773483453116346, + 1011506153777616038612007406428470438055583518011892416157833726262142643604, + 2413487576080987127628104096924449305135292124660874756793485665983264994121, + 2814251465097338626512713698137369125425220082562857161706470523223073821690, + 1118990257760992657271473475950000651712596506234981323571497466288733494137, + 849135959151596833618912099841741313337275542938286275670519278546332863514, + 1139532221407282506471085991908447717339643276786745625055178001019401858372, + 2777846326517462934865637071476395562027684197169677404380885569754356815884, + 1006868917481966445435591631874784979250039953133103049953080755405714591778, + 565478122316049644214907924648564747313870725897033089701726918604042511374, + 2436766798960236438411598924893727744935047917171453788790634631873290610979, + 2593055134356255696685392939823740622645786964632247319628120652833638293431, + 1512921896137061399851879901146615177182248519615912756938691056719365995593, + 676107537830198985459857093357697452150260090960449854034879454436273160279, + 1297317716020670488235697038493547131734658568355676395626420553630206564761, + 3204416659602465967362987150591667277876536657069107134280504991407153153106, + 276984481472607192370103436873164420821505777423327227336820720818871549050, + 1123140213622550242906190844417796497621013751639255814997722879688990301310, + 1869616065999419784451160727938969767250558600640895587913726793903979882325, + 3257901467073079387860595776917049504373534752225149439685962842376775289501, + 617, + 150, + 2374667954437854407447309067199627759426181676275737343679008757312511470939, + 863230759767030493924919354054881338152609810902181719876397446754059422582, + 2697465099622878772785785853195119389544158460397823384738131387166902868200, + 3519241321328298641491019952245831430427366481129025561455800591861467238606, + 1614639617443766935235219360925589801739734632309196722796242630602632431187, + 217218779123719200539195418571722849796052383987746909030347303793653062608, + 977064134723393753598437853968306901579357944952999913965258585343977111845, + 3215204362197253822121330851510401551454873304900934601303912980763680757135, + 2859749217411736701840414047714543280477080759357189957136955091718965923743, + 3313527369529140395454296008269245194031071348995956948384659048271811387103, + 803071415159825048268269827872073033828588919069965520608216552443571414508, + 954071908744474578765270873199138529046269543337205801843222212990499387107, + 2273767897424000898466291990606000458384605332743387942919400522705993206802, + 2029084636027130114690753105791773830660130093519884394937237125847620186149, + 1177189475475158872208905839987286513569809570993023366857125382637568348089, + 1931683954755729587678921319009249583155784862711008343702222209020910650805, + 716209107576778945872093622795039899096669059749246798459556510962974641755, + 2748677799631238215741246285337449642516551456239259835960567465569073507207, + 2134841565020652276825490101006463316795419321005551294054215781546726849780, + 2658297242561867839289478440124188450591379776181135662636473167540422947111, + 761938662615378561945002719229189761998434679506201845170204116282497205249, + 2908501026081512590416668129443080212538344554343373774537965346327582563061, + 2815986104765928708432580965659855234476684797878536619416155066192032252484, + 1427132888219343082147004636376622189783828627615843574717242541139266676775, + 55452020920314061971922262956358825467042454611031667532544745068281720630, + 1279945389733465920883341259228210537120563666076788556496793647895846632029, + 1101970176688058507372588040467364940751879960617743782092314942352550138953, + 1018694379437170940530724886214430872361380548476872399503716199527340868360, + 1189066683564899221747174918852481185844640714988796368306970470202523418567, + 2608541166585702130616936523189657669693997026124461128567623285356285017716, + 3266655663925481168526246995485517324148071118263854210239436931395153288157, + 1476592886999193749226728240006501216908138820718341273773192279632347043961, + 262270728241138263761962808858661398498334463629012855881579963805309048889, + 2238786601927249490478409474126537954747377031346972840757730964398010380473, + 2717930291823121771927307504576678589029751150541939275928987534755918468893, + 1782882310686808848049186171507573523382166957668198353636212531341929676222, + 3554539977707691415928915942163359199447369858330722863144496543101068518583, + 2336539980354889476671739300624043926108966846281092052479111941181795531566, + 1230335237689572687319011472769045931440271062433934716802812328322208844804, + 3333792954898851458649756027639992670701989935704116726188064405378919576937, + 3578553435913220974783237630827505112740787243448100738765389601070727393498, + 1461977695965008157833621993602421675688969898324196341411245667427073633552, + 206856966238317132149036533356118231388051530701782885361058905619414622631, + 339529840483614297447154208773383307825954559306308369462661834139525205974, + 1392487718926918979672975988542623253836189825608551465841845210559758240332, + 2401209943642115969841293837748409497428429398626649292914066947468289560355, + 3433440794719059783859645497920458539769587865208623413791587551461562367807, + 2566751164620253666172066312278458717444940355406727736785299259564490564241, + 1955840335168123757467746558952773117756555502866611969303812044176100991451, + 2866371172737737600951069789456977244688743490595193804779574931502297784268, + 483925491073211859025689856033780106664224430247616364879363125260142325055, + 973410328407500497936729445000852427766970409954356716788797368634634155440, + 959666736707311156404953131842543129022331031095249191004318444941383340955, + 2512348514716330609033009878895836822865819286587437024487844610139863562976, + 2996541236110647735541343288547255024944604660572468657404130177733185555826, + 1525218323717874160053579620818088987487808658751830286741450657113094983649, + 2899326196654277138140204966161258433648002716926180653573566301148624686424, + 1811030118876396018269079608969606178093591317382611155511454908508112479481, + 1329292784607135560163989385219117146743967576394379558646118209550272822033, + 1574562009487029561321368718887495889091889012509266556826597926424371579432, + 2501697767039619496851513514277069179057281481954280272641528992517447370872, + 1579637153560222973520926685484738073942382936040217448299666699540435457292, + 3039488527480033951696608975868408816399738686137197020500792511472723012054, + 666308545329233828262536026955544678502055447343581259607747848947648073262, + 655466393099638517008168942714109475340311464861216198208861693527089373401, + 2798578375675650994306221019566244013871314970712091057001475626658941008701, + 2881873767557131503821448856216322904210841457921127671854740022160476853311, + 1417787611402629015565246496627734368664978612197370124281712336877567215439, + 3124432502354069426118917867946772901049387325548936811039065770498506333140, + 2269706865261077685848100840052456161940065303358644391205202741360923940240, + 1053136034918855072388992867610389980172560194056288221210373022490465006375, + 1146390204531419474673660324682619393049368075079386085805287441507362933528, + 966865593788298067508824511134228863293935504827142144291950007893269175032, + 1439138811999273781036181556132186337149909425063781929433406601277832543494, + 3115225185696666868531098417765937522673857446905866496264993660948852146696, + 250997462479915686186827139219653478584653443978652516476122523983622598797, + 2215327704954624558934958464175409976551645132612622055377621867334006982561, + 1069213192888514986787195052464117219859079751796862029550905335976876042381, + 1827997738030884078067978619862644511166334770471555474949758681129748240538, + 168112661137895403072738486813093478934284108837857288477373579826639457281, + 3525023305469649623329016657685286758169177028172655518380514594894984297708, + 3563191083415280052307720508854768865516997670965297192962070782073148930306, + 436854589033292043537096370879935622803834387074289662076669120268913504223, + 1871990523059295771964564417561056901840952953564336309436469837175419718880, + 1804744512005932687771066152035063019365487078847886747941512883215601117068, + 3024832839107801818551179298534948466213831370744607871628124937620945796303, + 1392238306665910841582218437485851647745938813494717880251250895263974470174, + 3485872859221117468959181630541252283893592936074022063336659714520690021609, + 1267937691617248348258902018982874883249270015695698262310927795773685993897, + 1598839522729104929330826640918916602675822598712194230044071420248014839062, + 3342382961739111768211129885425265931677000075697431900163887747080609667602, + 831527534156045035054916389800345806329506672507231855183478875160617589570, + 3394202508155591836404447482064003163957315280029618072921110872487977331814, + 2483401482385871212007317071339073205959397986941856135276248791735920761914, + 304523088778704788551902530306267871967273530869407737043744746822506875374, + 2543095378435391458499597678772044779748367742246081562532030691179562572319, + 3096122955412410497810837372294594494172929676958879107165789133916144778854, + 576007153861484871787104231063115177369983678194549275082483792537043399134, + 3089611598285665731293636384239494067571001399096715536575795090092073830958, + 320179586506926814941877242404694653781176017409184705856961608081393762345, + 2793455690893957648748074440670299043985400529706817059516647875202461330915, + 3326572354952938308549059491587759228288465959479797695477052650903413715942, + 954727536130272374343355662144997237356788985502040136175633454841107482934, + 1428722002892307232366648434380431453320679932589299793140705554703960229931, + 2538188056690783131560451396068459878292967603202938556635425088845238688561, + 3035074025086103409369458833666052888340979219710957247658455825847496744337, + 2126056726534955488526053071965134174141161073067360809432234185023898594564, + 2232428571477820192273282264962667823810731702111289898576945560125563568182, + 3383275948034988346170315364277333806660955625027289028089559773149052259617, + 1583298177426486687104486163776784856396936344170689607973163503666088712563, + 2539727321912797267968214305729516192836956118688595512677520800000973473231, + 2180723049039958085626044739037654673660881278128712222142333541232551224255, + 27058014854475090290474540222139339260014873706631012032248504413144477381, + 1720552582348937035132958178830237699652277156678682754543875899907537044512, + 2325021175892277617179631403997355434429679516724928479351952781136357824291, + 2991818790729673753508241066481875124896734814798765575523903416709909513557, + 1313036216912777205054336680489953581119176503739959521276967998429355611796, + 2238540001064723819263994651665335222919891244862231594980742880131354016486, + 2287643687141896619436160741569914797791292223310128109048796465591757624463, + 2015421227926159397066052964993628008149723826576362092453098333200062331655, + 1468661887361873192303926127150194124204093647208464636036923060387421527726, + 415196871558264345795933289458733876855685112240891182249166100308021565020, + 3216434696010748432248258708159893469292012890935664876144722781944551757621, + 1567510604050341061234477678502767113496059385668936951158615018097583737093, + 1332071163148572034404481025366614478240461134776382231173624086844464801625, + 3065814833222475830511377104988156233900900477406299742305545660680909693341, + 2288552087495231101684123738161537204055113934548945889840404712523785053763, + 969068402241691987234447400795460621411210571371526570108376868079883165594, + 3501785087842195271898475368253747446350872530459251510222324425925414509358, + 2371571428590148987454126623373352581076567975624771515562338991626318328765, + 1717952864271313027495592975651066997090118234873530422503517010415663933593, + 2332003349042063769957136742674848404610648984394923557195754215271743702115, + 2662879993552938875015972210514622938473695659876549725007124174284822518290, + 2363387311296257177282320461257390914177659379684124367488982117266606912378, + 1499901429589574162172656304586209945280116669959505087677039194872369961415, + 3404124144393561482267916106211004927645496834017507179829046269029407902237, + 3272991666161476517080201656183640826852162731963055422575960794108093238548, + 1224283121663910338803360696598084027271842466658132175300379541042527309739, + 2295720049539519654585714444645950308574203175144069959420738259378488377047, + 3016493483866789404814251757104519698497357595472760979824309082660148092512, + 2864448303046710890283833348735325269836896915903020850245816577087648442426, + 1555911698799409649757968032657112843163744283566226261793465036601589838454, + 1926953946390915624235161415468595516565454490240936135965141668375183693017, + 2172282204389993535320471525969476106931032455123631921620767767195117134040, + 1264996878680877829593011773953569985114586681819042374454372151033741476182, + 1839048529413097073448468692604306811880762950714974123760016316226670851685, + 2364195173861578093519707798339853251231113046940222548775217306592627360692, + 965967467936577806906082257070172471770449421231025294679897899208842194719, + 3470929809063907647178743342003908337639819422002637206130133469590101609660, + 126299384862701904515071674674494243030784769932416519155225395880135624199, + 117, + 247053968240979794015232940052871474338240317853162895504906279913283485014, + 23604050915480393687487280002326207205129442432238888115009189017657202828, + 2177677664567815005940615801585904337429749198906592859245224070713382883684, + 776263181949091547210947666855573766470280740167653698351441872601872511316, + 2711693461458753559135829589234369029676227277712201193120145554498564055865, + 1507214166129906993039259180339575990923210630903140669225263385977472848219, + 423093493477011852748541146561279170011626195253827985519440205312385922694, + 2855067884509767360736589096371612419115055550063213331663416559954126918642, + 1167030830624809685405988802856483919135423117082141960424861885402548604037, + 855301496619407375573662848583557310266731656866279693695836108094473725605, + 1757899865936878371355465624415761963064267202413888681768256023694176306403, + 784657654550938204133857724217871577202284870875097379326042182651410819472, + 3222210180323356267342057869000828121522804609594840823431805420697831637745, + 2123224947068437005996015524352179973008927268174149485767365015704177875292, + 3530333091685175072097085186674580692089714105652309196783680340247611243636, + 1913921852494883948709480061936811264577239391498586186529605964823561685801, + 3603931099265659911484338097324557225319129850335884327197275919610800156739, + 3004337705845694954643149871143390747201190767511252443813292506556404072976, + 1588964352168623681090478653417147947785898280342292845962183756082345079514, + 2770498720330735269781615969671277797281210314465923050923048542269345827410, + 973125796494060004928684891855450188684599361247464671771771927976758234068, + 2015314839078910569843994155140216362151783308659675271174213438313881417815, + 3576466003166510462210389449933668105435279831824951041468332877213808410621, + 166556372214527053723392567376886674975984860967284125677484955155079478904, + 1854819826682625458233741760260640763246918997650545961893722189158257435530, + 1016496855800624409060943564848845074534082608571119933024494828497320052385, + 3193157079273768613875757326665180495216832758306336023919680230711714374049, + 275666003032516286805343369006197752975301678331765008821099336708486786131, + 1986861216335204480051729666122163599303087772003080974366539153373938366739, + 3574533363138322658250687706495524928690605287018355748463720741406473488324, + 1827712906301989113607475138356556368671593482381269644880672111547740637168, + 1063218330838840252193888204639574281431928716094679002966348376624365318091, + 2776908646876763126160978996195124087777732297072078953211778916150961299711, + 1032389686173187922870169235309891743648770260052474867942660066371702583795, + 170679943478015469405919352042683351237877626711226754754415103451355377079, + 43902946647782498353157268784405317112949248319764314248875234405754604848, + 470067187681983661363211541657726998561003584580162834418518493394178307623, + 3420767939197544346994685273527484650298300994035263322119779072036037180800, + 847309274266002803607332513015632062816923186409025252889857829778061955017, + 3023535825619582965092505819520931376840690620217162133823639871157239974447, + 3536583391411346655277325178628026898054306996564288374188392265189649567289, + 2770559118878266892184107792108942353991141419386895119869795663049555580487, + 988918767837254949598886991052804792497647813656580260385021926488331503979, + 2099514137725511393151192825433676968779093925802070193333677167860431336133, + 1132036817976447157172111897018307882293732587978905533956039040317594428752, + 1737718618334295032828461384262969110060393675823464320591545747095725169943, + 577750020339019461677101479170209465969818307410617203249157720324893617065, + 222395985183756253128370910451982922307475231287106241014510689464048604407, + 2787066836101783349398845639808817063803979358852772296806358003502184893893, + 2624096007972564752772115262153943530790688510128617738815733520771087742074, + 1194035481950365523767085121233374401838707312542989089074718591594309418339, + 1273601891896694646755538040951790295991134774780114811198347593031402471446, + 2406281293299479128290751383944419476157590808298901864852231503813165160906, + 3272329399413113737508612753597709310884388901486026663630318728959475237840, + 384566049116119566025471581099949773774294177490585765723027315740551361258, + 1903084431659614940913788603666761304558495226757329148109804317145710109105, + 424883369013544108568495280530444921202756210089734125501607141141869536068, + 978722787030550737902510511159687512274959615824986914274246678732596807389, + 1959019901865670922571617064133111625200140694648041248641801826935650435707, + 3144318639918889174051583555680961209813004498160647083543915318813499739689, + 1933321385622829870303429768793528487708732682409291216844122125592477466705, + 1413233142707090921887117775468435338213949301646745449919660930204361451049, + 1195585196575467184364771994599462243044696272837345551168098840286750764986, + 1308229636001778089924811130394185608036459419373326457658531283544068945580, + 814307497437466702691203432424828238573994709025144637815522729611822900125, + 2408100132725573965702306810582504978298981378361225794648241982594051755604, + 3082266851545470003349332471718985809142811908750480502177209740108388341166, + 1242532798163925865859263651494290502200350013732386180601523438766754856312, + 615687603134422638605192348808512588601453775626688047685555054877330174412, + 225120952557993653835798563921238481360991133467696865881204335330735561957, + 1986875054180460528544184802943279665820863690102096833487770645753349662570, + 916449466107707448852763797212244771836657619567674534854422905968926708023, + 708836639021076115264186696788703706559607735801403792139580882110892036999, + 2460187959184001360175206910231368036053377268490287779759824475705464429408, + 2506926928692923195437746709340245855086356993655468009074873155957604561646, + 470547046951593845466752726358351676455200359359063355173329860187658832845, + 611618038636468160974771940773309795931387374792321840218059486247084713967, + 512031202446576476231187777593942452465398294332676397157851089762471367956, + 3403517844087502012375071397451840939525478376481140191865033310124219711872, + 1236366911561918403042004560913436789218556147484956346229561672962894406615, + 3423874204389569325263604004243311645546480000182808915142447289300449569628, + 1660695017477604110328208882494404046347939060761900261205170891378208570799, + 2621220872155740070208995860531436616317512107262626879860337351696274207664, + 2820950916890579907324375268651920942966516232464368183498450358196190230842, + 1442888163258042742016173586910860753528727542892765880404584993787354891589, + 3153410965900103219418282205436596470988254087289227721261138091868134700199, + 1156570043581155864227130665532272750336940616107278259883997283295792612107, + 1768825309289846919737394000812618722492118804269278342062905296453557115503, + 57697739084256409506107447333105691825002849469105790187770298811667228128, + 3478352892855911674308705557433954824299843121181416774841289397400199403189, + 3194446024215428495224224386148610221646664115246334172322320202558324167300, + 3108458214858034969184423459821026462830409667755770469497535517122136577106, + 3264132566281615624572713130436726627653510234791659070208937990244252298468, + 2148990089175203567486401434291982622706289441666645943252258429772606945137, + 2766888756705119250948976320246481246914131081670955664011634697890174264437, + 2827398722444427415370110849711673843210218256540805814097541663810395212589, + 2383254261281004025736328521638875423734710134796195571571620731046370474076, + 1317659082921797597406495508763097368023613702493257603236087583988957353015, + 2761408072836939090213047041031066084053745310778526178387209845486271708141, + 1523702459340223316765695591035565327894147802100051649845446304054360224645, + 3166462097828599770725683254171287437262657236280200428544011297571145690408, + 2967267987955210670808742824505398941669021602784521572877576235949750676285, + 1033372472922005787506541300067771153464540982829911408607936793322625276061, + 2507942950955591899286629285585512125482060083791987931459387814517822858690, + 1359679084595123706337299777016125437249381683353927317873156550139040631727, + 3328756649910126190906757955101976236829214108334217634532617667216228846794, + 3519915284095110168928301252990969492127984462762109883862818400571702300922, + 3546012033590787255604304623064838455486257660742563043373423845615463144397, + 360155156147808175074741039989509882050040980302059609332702775253613319824, + 252812285799803201971451346743591994397261330141100528832147298250410368031, + 3231634635844187529020215057141052519651023003769491420987316025602656038995, + 1059327293764938308123694819588379905191417327736085831361483637173222492375, + 2475072507165560215373700510956211699042164220422739180191490964647966061268, + 3482561767885518510965199674995999383563397637805836063829512669637217224534, + 3560120512970575410823947375035801196189531451973340289589293161143268644027, + 1862788880846541860883635807256813753456285635113959754210109686176745284549, + 1769957984658383237553630218915408213541307784136693690679234715336188212687, + 150, + 1858234024232165466115495921598499698151197543299045217872767383096939017264, + 73934279296255687460434004566000380471709922872980316245268847806214652675, + 2577258732093011574121717557188072141001526520519849357481740738873379111534, + 59528211828699420626924886730261541680882130654703269044027445980400981553, + 733381644186939942739822301342160723877068796747907248842012819827657325115, + 1748969335726205238986938268821198231529542338126614933920862092192276742905, + 1109399980011848037014749898484847836030468319483137851644935231183767450338, + 3362482417164671086406914377934298788806475271122570479404265181160439845942, + 2876139393710400858161836819201940258622506374781181501267947185687253375241, + 1688996770698535655201997468801962765220311627801033580481936950586744247821, + 2913492016129179156909193685787666426693925689545096374289521208414039333953, + 3354666277509405405132797486710527071925365989985292770755401726101508470842, + 2860236070295155199128370676164468662922946293563419437985452291944341545927, + 1024388278406357250790261892790232325735543423008995788405634958966271520079, + 314640450925226943386381695520691923464961811478310589443158388382530176458, + 1276411692535696229848453929248237301673730058328829973763032174779243477408, + 681868939304090661431005291924758166146276406483812267628537804969538532630, + 1885593989211176424027548634185768379321871535677203149803411468602705071739, + 3251380011309886413089634980708231369910690576345443203300071288879992728651, + 2510856720479755719620383517677319873879413580332926660459520846294063359591, + 2260748632322281380801684460764270959623523550951223027730060045122060439518, + 1023564134437470923557387413374209378725177323809587593308973243768687880617, + 2463060340973796523929917830497900038168089824602703781145888896268999402288, + 2110690741816917421141813717372544680933675992920442019908722015903072310951, + 2384556452842863092449196194962877965810518466828815476917915590173429150603, + 1619910375490073786317699468108842282958556911664496647198525438748243972754, + 365839421440043817704891181859543147715147949959432743562320032064068369669, + 1912347749697410245102712303375588783839691387148630598644291957761109084031, + 3408245053698741707363711031017740387328231879342028046844164143152740195759, + 1822658881471746285249653842782638010240350869943993331608349554259220798719, + 3270513105958896593753527532516643389465139409243288616533549214503913260716, + 2081624882475591231739541363482195141759305208897167878865070644796475746268, + 114291062668770050053398145381016521280544420299600065939619006933123956667, + 3555986342952222100371737682982291693601541109129866680735933086809893193643, + 479882604232275052513924619179702765574155021821328929698931810973731999042, + 491597213669873325257815922088795782306238129789838059027544946202241699651, + 3232416221124377747644569193721273026491717055191034566892236850845751517860, + 2592788729058827566292986497552963061050525888415440388316472055735475418393, + 1055507379896195980152589575508550809166556227577091069367714012296455776632, + 1300215724057438979071596490869893175669708020644727528521828717960994536488, + 1460592230848263602893832018096613572444261349135606993617181473914628841666, + 1059963467253329614116929517949962682045685112604994017477430218625982358449, + 427694840505027592985042322858886406407539118493661472598872956021146403384, + 1251206841682574163525098383311838539573046238814634735169210958318109729384, + 2889840283339471121529769357666062609021485717887566259524817223174429035581, + 2638643714508182651004049265892993931098437787728289283154209890094019793451, + 775479763483902695991139295398524565055629393243330518265577629813158369625, + 3476270570533095577842809503647068831772378748601227662987597897632932572728, + 1547269959952956492273503162728619332619886147026210858400891504932976158056, + 3590655677748682008310092963673787614907774667076735095369534281663657198035, + 2112486689146102686038259102264414609788865230991764157656846864337336645155, + 1917040926821479993272323175278672874242247161182260219505034156723118064038, + 1315052187486437536463184994563068608695104195768888759009343917389288746962, + 2464348725378097901585808271805430550377562431427512252827839436417509141305, + 110824020452893445722673953662077792366995266546769453751225354362020312264, + 2719403786566752846125579325430497746403643279655895728193269675901106957510, + 730584646212175839564406806706917995578561738717530641537046559137368364078, + 921461620623272116489015089763580544513928393670621742419222100917746350973, + 2769331765246801022504283786829596209511480770015870085536780020967644931752, + 2680524427883708723717619880835325628533465430313666871833070831754044935170, + 516928036296329826119130375471032021057004076036672062530962254054109880963, + 3315618967502303991857822867558339658475819012029626141571739056996253366434, + 3109917134015075704219886967361737159360720231454231809313566495292095971088, + 1720932005872447741459360483103270897340738423128430889584795945069878928055, + 3351564485259497094600335463809579539634065398104758564577671842736948779939, + 1411032774907965676495196711129715840393990046662269595922270065674732635563, + 1447770928471141533913851284465974351860107876337061679595949509707086455829, + 3487752653277487753545097413630906203738997683139637724289557934092287513427, + 3364850333133657640970013336804635623778880063559840034218319593071199516154, + 1877061977450331595061682963941093401075535443275207403499688469351091909735, + 1241355026914314704924330190946192300456797653059346862511859424629604703071, + 2320922167343025615055047013527209360835566820099644107713077796365643552266, + 2807820231410845361700773353871689740868087689901168741250635488319306871356, + 575257242262616949453820264667941710596698062133544398863937471978633659824, + 3291913121889825240672214957106742232663162883127962976396367452305028008343, + 3153472423789168321467447473440602928830182301293547315152469281391999562440, + 2641602122219158135982607934548533871839888956733946917979822198905744762598, + 1162392353842543575974470854113738701564858139358209765505649854960938758190, + 1712871585954361537037803349561500209857828794756300308936232227401855523938, + 2752131961857331355840672149475110653938675861667885650191571209293538252017, + 2934380124498636643536665858133015909548049487360186675702948551464504821323, + 324329023946444682996215396457910724399489519071455965351280359102837971536, + 3303320724928072486095218534040174265979008089580283657303530535253129310618, + 1742798674847506907058640058708494670120383139249057416483788787545011041591, + 200789698768790907858527737371461031870038160756581111514918067184756573607, + 1222107643331851985215107415276728188215222027671445634378059411776631543486, + 1215435123179110078808305672433879689611417325782087347332021164842550879810, + 115305827785952482175128304198044604131527259637607408810835586286598218059, + 2126742331108839257625734615388206139285938018613626952804270574050892213570, + 2291650488883933128334240592717895589367985836419429692750512488616495721045, + 4305573592950420310224962334525937115924878042241631359379788172640811969, + 2719429119498431494702787781208390397481019569774148905884394451049997440888, + 3388241226757199326269042251432276795463336893695626233892696096240543037221, + 3613833314422358642549901572118636312304694920809421346135928078848469014944, + 2339054522629574074817094060504658481249369852215247791603576237376441983374, + 1154931048824939949172425786189201302684419090920742291998317977801865700946, + 1794836365955077642766722377649085944510359509394482242376183618479844123691, + 1163656319668239735880708157863404108436564593961789918604437999451577704003, + 3192384073584719583553457458612209732191994289402270099740767157629740081106, + 2222453613757255462394163409562584063078685359845956081647546654787294930556, + 2141716371055015049140527413136824923867652518151573178093034695769958318135, + 1224718009654388900104139565566955260038623354180346054008811987265121818845, + 2782039335261374075424600117395828325628140444919108692512966287490819664320, + 2276495006308015666470920692741338152315419666179213696285741214891544677298, + 745729927466250128254584902126317823965762692600602376511591855107525308161, + 516067471937045960428370139697764673233971775428555956424376424148908668409, + 2139391339387144621843226103791392798612951486701404921858581440388121730146, + 2867239175702775462884683129504647345373306668736179785956759651710989307835, + 3566630112905757752672748342799746464897056126210408966522444996322009084719, + 32076476279336449063645810947772140984890865610570346387757471402089207005, + 1617941897473858391330189524374901542868648189687993400816591436035046910512, + 3091484914657723549053327295381639655195922924393155107026590291371242716660, + 1243122900847204095016099108809310685925591418096576574453259170842972856507, + 2274475982327798380858326074650311756329752246180128925945837164830146866833, + 369946873912533875504496545314624792197591951511252830776356038069684628230, + 2215442271818156396562025628255781253450105848404311044394412558766575981381, + 3583809731571591277957441220521073602237044744437166133495262812442575989356, + 3384572265981954801577602517346882218523734557995116355739318561315993873035, + 348438364252307111594933624691934669660759665871252447334721461347108494329, + 2410347874280791943763130511935518993864614513147932251406826352716685896322, + 482136697942804739831876201805604508593483222170557290958656719391307291235, + 1140842342815989151057037243719939228461182602426168675629291433028593163353, + 2671003008738754357585616409142077848553601218434906577648021872280689542306, + 41876672332305121291521913730366817605547070701787700351440228645061880218, + 2882560454393663531408276830264658715038499927740696082320612409074257343997, + 1425989244488022966273891273684096900621304063482636529072739154428730509232, + 3073655462876726251218720297003988885929373942543626820095652309251257623992, + 2794573375925619893848282943683018585500411860251237028400264149532002159960, + 3596933952629250373183162427683838030476186263927460646011899377795254056058, + 2637165011712897260486986708420583618322655099964181723545874937531600713649, + 1332250506002422998968859026261324550132268161722146523718436805163225054554, + 1698348227585039004386974914783075281662221023637117890156642236911172839920, + 3465379106403341645835778519050921587480833123196383630026245476325324981189, + 317087077722356718862543284711459082841800519666203131113553829378953233613, + 2051096766784855397299478918353840479226574352363754795111139582238547144572, + 3347553774815409606023741357644631322127870492583401927360840302416283789046, + 2707062953937600516231047411420643270545988435884107325175836116568580374369, + 379618177542119236385464339926361199817777508574714829445404009358982050329, + 3581105036955316148631910770345953951111707844430547893225277450072866474301, + 3018161505076646431699227804815593975578267932719209339902021983318833868394, + 736698191810507685541932343413569357261088611925348648291151892426119142364, + 2701426888055459065352359946225545747562180168891763753905966084768023694662, + 975126555404960988244413774451116680796668595010885115375517291051936044111, + 2236577379917015979544685064388102253401336437661105608129193284536495766733, + 69367007605362364318004558463732406724972359340958000075999791847228267813, + 605138444742295564341842240187530224217526987900410922882840783125523967054, + 352005260058339933451783805050543578812560208024430813709011251130733953919, + 1798896103801074460397551037285776927770023038735093504076993324068901569854, + 517770811237639829108992765547134600955501988756373263094468553058417337454, + 3395849092757762294707528636758933339451247466963083537237935468456497403756, + 77, + 1522432565027559015872896621383925520549272457191131765468920161928169863055, + 3496534466626163805894354483862775161270909337134730675328658839414983008154, + 1454459942699536962816215490309407383206649172388906272716785011915312542458, + 3275696575108177723098469190049676781999991603783974206721448497399632212684, + 1264302541929558859776542845874118976465308373379034165391400652726540088832, + 41736011654706046467990875548034678202030502775491732926687295292236390138, + 1933771221589371133184943372685468022873784585189147576006636652014087146838, + 3557833276456484126454211294118747560844400483064472215997069410127374002652, + 2406705100440103336314279847263671484884766687011784180837805758727493942501, + 339338986903230534510597555541539456147549964880184462807759868818692468917, + 23982401184237268245993085764395941506150599439556772933044153230989315924, + 1703172639990820489458824860858992884849789799899723049520952708335744197157, + 3393326050410613492780233380984984061068923977462142729678989732706519673361, + 886261172977047744010182742166824963060599720816567455537558537708931196702, + 255989169333319059517101963184512682580158371234735665423233929661136692050, + 190856511488198618829680974768966163672719029015151309878686639235160265787, + 1605691584425567432876549169256774079145408755546990108363569742715423798986, + 80024697226266620798767822821033590104314669218590626938595573605456992, + 2887171479823281871334331482284765651752837537866237526920108368784347959706, + 3155721390813550908730862810889049716588097005062540960034266602947265269429, + 1521157373989302542647091821144475956974615140605079926473204393429054617658, + 2118135727748280179745775778064465314483090596625033550742536496904706991864, + 482016244878431170580433803861046623995008033772483284334490679660363689583, + 2403364792434037659604606449076245129334817768174273966706340446006033514669, + 24097527559915758552539267961208154191599798542161482512297791472627158102, + 1850587850666576290123180795045742880495022498026246279831992498033488921451, + 3091696050507960819860859325390640314525980412601898279143340312623396205084, + 1202570589550560240872217809136548539030744865348277791583525730475900952360, + 3367895035930118566673421372280133222710807642681768539673133167133891481143, + 158325487875254427509853264170181309009495172514594909102088027480599690178, + 2495288104292651849729101721542002189000422155441071906259755476604391775247, + 486429841655888404416375101585566020772000943551857317654961097037754739788, + 2988427885815038315602133564097033212147475261240792282961995286655943553085, + 1758216566308420825660546413283532925381115104505282360954288284216994333210, + 908976526826199109660839950253474889455497202992295068706474603441426195030, + 1921445180230524002602865962459729444295617068134765967844687165117561624291, + 1212339237801442858865118578745390431153118143039861888455331107773733532621, + 2542064105056959859106377220986051834186326280568173874830955542818008987419, + 1848839990171850620023622045061420422010365797834751483957401737688097963346, + 1182544317999795330907975841069357344352664527256200784057797360239749997633, + 2994531121339164483439460191598569367886858080755604793503457217726580433159, + 3144253704849448352739547749413417043135670461056063191046444298890034821704, + 155178210596798260267892643527316110367355764481802287611607895092310158766, + 1061763138125967800628774625100058320733681393702688685689620819038981496373, + 3570980373278737837598333926048860227724170261456195786285677034109494599487, + 630614460248080953127301161282152176866146467089506526274975910875162181702, + 1044017378645526043869254204699138582919807744860322934635741902503888625459, + 2333555617662396044793520582263718110877044829986291648728995097000797453136, + 2877927133326425540019375763719659453550672337859757314036103339478109003343, + 478152685580295001979321769519023549208645525263165037068718852543552607203, + 2380149651810099773579469404429085811367257950524522806836948275681342029665, + 2090242004394033006613140043389862796879338687526039023596070041174911378684, + 1228049924451858121494712091115291427747972853984311569885193498168784172896, + 1272642069811874186780088200321791754193105460852782918004360229523726386505, + 1346306081648850301310616183836483901759212426282613735670448689779988528783, + 2542089723253921971534007937544205732859029281490121982492512635860511298617, + 510524015988564165192808671123390086849060137347729461922527085954163862236, + 306132649350157667550950220134803686313600393266183531634564739375098770752, + 1303261442305066521479162756794546022135195599787487695756794977850731821689, + 277297262779867802400933485745560438566905577641127187473367919056873888065, + 2135408957691318982355177632974217744970545195801825657503003178188243223952, + 1067421775135799873257689536491458137825294413308581018535269249271229199230, + 2453253796368045580942270972533034087033748117419200869693511739721756110249, + 2422600817767104306916123067432928878618638259791133379569115481573538780930, + 3227919744575765985396950913977478264468863820770783105553555651145080308693, + 1362719976280626115473551604785426391108858517555622493193470864374334295137, + 1919132004098664094138454704585618990388497175949273861429244707480361898866, + 726624407373068151372949429069852310488976001016114620259254376753952833295, + 738356453002861654685963568391939059988486692733377287168246450450435642830, + 3076529853685968244528725147700642216746895695439327640636881869456678641145, + 1273730988503917329618690312889410309890880675347141811176599376607409260535, + 290298179314241569655183151408769170934471900930379845610339745849472263837, + 512048680698306270515590268988392195063773075642152693378267282643746883355, + 3602092209040281311102704382896059855068989781590630337632833138620304811020, + 1119021028466617626926341909577917206627447708151578528617359103579211250491, + 3107488101930789646340618765611267828374398476473573772617874034913583360061, + 816866438830460188505308821954486184889709034916804640302350882016123974050, + 70, + 459265850792145271042468292756451124322115943680887152456045120706012809891, + 778343250970430247570390264409627787190614505246193223147637531663818848023, + 2980209092047440952661823407881618339261840236827979650614702802409118628518, + 3118713815513091001168544629414122289669473297726508086451996607450554253358, + 1137165921498372844697532546623750313762296880995746354952027734290461927172, + 1864762947453428694223741589957251045175599762431834292084240705147249753732, + 1482555420216318741150988514995018144057706975926857534821619871574209975823, + 556941507181428924941632068079054909497596567692690981966665457991605517749, + 1011536538455212552697915554881671854210777810413176421245097238218536103394, + 1698028088894153194936190203737650034104856729243551728660977600065707537536, + 3517877458044773447591125112255350162455773978599357702229441754483893459012, + 1001223297082673707499533125829970052576953914056356641676196908852026278838, + 2956406193575769836183017592421467524042299029304349934300258540193365185236, + 2140196714471556367270129061405306386795480371026057506099283173167421684156, + 1419990445842643369951216247921683785950870561462579920469335032031959157603, + 1394721147280764772455134739603939607103135634148208698131814456161209592733, + 1831562540181872878281948606339469369159746003866666573161542546427948635263, + 1808647476644365327913670912896453825141549804321734608260431536827752638385, + 1894631243968412562912984440007200116312318657489199974094703795248110056118, + 651701360852277636921511960416567141066431296013591699953487262897741918689, + 2641351628661425279471359616704641907010883455906128833799221117727593199771, + 1711876802561585914093440640877365458528538393917725715606781818466398637007, + 171973025825321992073417194269107076081289606421096392207636625662974851914, + 3274513061240160465691436773092037786482659793081724251057454344568415502849, + 1001563371076180782522827587727818076080622705171408137336795154300238603022, + 2383437682328891126067904561502825203235408195681905867599297350470873668054, + 242345143054245658293937996358379807103598334653247643637646457884198714879, + 1092565493957909503173939039336042552632393674509789651176132662436359551597, + 3526132721605278196502315126368491009823306236240822878541921464541483563253, + 671670173630926012420678643895875219226957051151103973758011763693703960815, + 2040221033364216766639200276089582538144151823299958753821510821353188963624, + 3594280555718579175262726175934198372713862927486890384722255986952643367130, + 906596387061755506040495361044774502431817872172742106834377793183407119141, + 1175358297785975034606616667667936327678640789070043615473152905961524812400, + 2442014539581984333815263510146319815714191170526880135699812149066214012605, + 2746757195998720813965279851237683747550112461182431591445117672936541433144, + 2800251749877071119959910930504651244755222794451797667793612696832741126311, + 1132643100365971149218629481036659287623551074641759061455462003510854103283, + 2035984655838411094974691216614622677905366987560058607264329839268320872825, + 3407909796847682158898955684010145728507853151095955620367035317636383778219, + 248616996600584592549838027143166892463340927604562345555069995806489664320, + 335424319664731499456968424851031003505845088164335956090025938617749469822, + 3440911121814185240743256957482497467969191646690204686239857116466582794352, + 104788026400849482557655536995580036876525567818589029811142401289122939114, + 1948800995397988508311292084711275401997700611499824842510698168597581224940, + 415427546022104294455775745219562593210856366558107735872657100788680966510, + 1858224697733795663919407406830073511900156528483964072481862758297541210143, + 2329239112630659293147913328765103212525230711644370500139312995483729678681, + 1905216771713058102174308873226917168759894276838931424131789956527212368723, + 835462007597722060620267897201717289552584023509822299869803747090081655950, + 3589221166753370510640622775496478449077059694606815227701698292210520597408, + 3439348127822425045758281827287791012738243267484968195993139787060109050362, + 112150415244178769146484247158202257011077529834409400482828672103750739547, + 2146103898561849209418666855029612989655628774589283546554058669224058935440, + 2450902519681416205667309041586815137997366760075932475139890793458334270518, + 2579432580336732384877235473013685596345028844307683903779328573758337928472, + 281450516318945883655733647642702021413730438698573494331911728306797471979, + 443723320270292495995841021434504213584678685127418168967703567416513350080, + 414332598524573039225132194341776388577840633943469863869670045689556330653, + 1849454798550079840250039785243407801004517706648129665926829452884076024426, + 3177103974379839566507998765842438233460832128597443360802307857217966686110, + 1270753010147203061149902879994819838822139200582673605469169843537651903258, + 1765239294865417224026932708330514578521662170387190360240637225711069872846, + 745955127845851048718979110112850453713223742127770287332151032509146429624, + 81546998724973031865125839382656712091092096811900939568167353187733239219, + 3510144945616569336940235748551982024707191934453958083248738255987066143427, + 1765746528239636204808321905587848928370217654644860225606888699348168498409, + 1240636166344603239231019365461993863524285871078298607443862487801616245246, + 1606142830374118500885544862782909897509223729807859170844160763735332449140, + 3188218981095495430475050416098597410677597942530261514682098177261715900495, + 47, + 3074018444019707320358825019639827290244332503540149033704880340497148088017, + 3554507410003220090105263635689621589596346781085237311347909585657502105757, + 52481305392194891497098424942948240093912500183627904079712284859506078967, + 2319244346399172445739743652357061741472283038422003891315410192748660388569, + 1403277487074774100265495419605919289735718128576457729766455163956033437744, + 3432433250904997193554337237306559757115439763456317760069500751772669545651, + 2666443093877967318566573624745356172468018946578229039708347344914005833009, + 1870021490537325223255947414795504094933964281124000681226429324065300618487, + 348726657045147117149931513743263646797791843923805146760179696267647448828, + 1045203556137955748995223712860561514780667582172639278482397390047289743721, + 504940682003710523464407458003817238185112411783022182310774318211411827034, + 796678130767620908983074176704564891988411141012471451930956847481767686398, + 1813611830068144491955150354696677522586985036215141940998663974251163964259, + 3250653632033888431343887464169190202415579461715210080796585875154479713341, + 2890924852795152619523076809444363618684906914944557812423540406884195046644, + 3180845694471252107056067985948800775715664123520297513655543247220156557343, + 2546269594900076663020670793884591591566590177540108403699625877832307536570, + 869911508041495877123594263424632703009974142897778867631103449176146515493, + 1929031507236295990960978576633500897450243082827344998079698754990963169109, + 1631339857378717414051090425444473512102126107853400147980927157538823888318, + 2890740516617095530330581929601093385646578320115454920187105750439663546007, + 1744461594843879961354569613295273567308091644214366959607415457461989417065, + 1116356095201672913805306211692833320912182877856666165189388274677706876516, + 2845707024391970706650560431387742982228539260461949883652544756248630764830, + 3184996131641016236641269790567699855250875258662792444483292072567451405280, + 1984749021474617859468192214074361563299180079626503023671923498261610710017, + 584505864762889689644451695386987382916016204824130560692366718607362775413, + 2834064264150146975283766654660318883834801900920472854994841593755312046750, + 892913467297173320201411620473033427947138093859617777019442220736168152420, + 1270708988220552006254877772687611004299481734269394732414319882572685779182, + 3057882742325376543995507622736852557714216698654863813151263002464045292690, + 1171478493486572871255845701896644946530276575541421602417196742099653814449, + 1564472391389880734748376146638547283653689460269974561367522453129134723600, + 3110539705833243229877363214826731371596642670002361202098114769740604267366, + 3069292457018153604660078320090966116590506823412215553359730628712565150514, + 2208180585305083144694512166648560256788861351642068711180059161175043811760, + 2371075027848577879661886419784720199545752275418265650642307789814914835887, + 169220238312107458751804484258456875501146527287762665578781316248508322690, + 1284123973261387119921765646864640197178031313103811138716657347100327109404, + 1278284350729242554482958641170097143945393770439826065249844554130425497163, + 665189236478349745517076502925023032640119896452201368849420623752904646062, + 829842369204644721411279303814858491257386578346206437505530055270188418430, + 246884261008446523188256202775117015838537920681026329450616558059034553199, + 3030711103968153692678954424454907460309225327284644847922775125079595297088, + 2660986336968424385135919173589773170997196154115239053552098709566909618132, + 3502321533075840060044182715141429516498352936107772153062293758791410888856, + 1545975206847228836412206076694536834225726835364885266778030817880695952676, + ] +}