from secrets import *
a = 3154360777410506828246987116345256890184577383710274549100253493102602370771512079662661389298064379349297671822832361451806819324117030877860973333011340
b = 8900107603684880848823856015698573019396167226852451507348909846939656375296450863804117308625379057367448138177656005285817843532255952396258070802639631
def genkey(secret):
c = []
m = ''.join([bin(i)[2:].zfill(8) for i in secret])
for i in m:
e = randint(1, b)
n = pow(a, e, b)
if i == '1':
c.append(n)
else:
c.append(-n % b)
return c
def write2file(s:str,name:str):
with open(f"{name}.txt",'w') as f:
f.write(s)
f.close()
write2file(str(genkey(key)),'key')
c = [954855912808159420472366734253526811676481240515820930256940432745475409361703614280048762869887773205884964621410301178779746388346025575735881089910749, 3631282083702019996359180380389209621648677305820837497420773630944855934977100752358708103367994265945843470030171056175320711208796346832011206133645734, 6454530122897430503281442494417561546056521384930450260190981606579151364428784157375373548625268965196358950333836716721219304313174802539526726375540673, 2981793035878287844482256729829678822703081977065269166861356268502792620921067860555060521808095096269876726910111541903990001728676811395502186215869817, 5769720837022319654191110195091050712281616500255980211763308006359458724954148461589945660590023763988568631391834933753957435359334855109059629706556656, 6797052833416647553938526106348571606080709184098517237874476174513203389421553998654724034174582356077703733237168214223038806424405218843355956944994652, 963289739134752400659785331230534173778897695248084226992196901907055599223221833459619320643875060051973839705302499862897090632698516558436619130639135, 7292470162157104951307937118727912761963086583250673190349060438664191922031297442345381694339788274602367758928233840111118627727343260974834944101710280, 8280859366148188278871762876976164765131454080157032157524221302949078565256179855417415162757328007393796327216779299541420968021294182382852056835091138, 7457596469981918779037477228269414826103122102186095747092599565551488471661839823071744687791672680116429237616361875381437372920074295223199921219501300, 4946499240493313662882312020779120968939349832511655731740859341321657814204984997742068916892850242326612198773301129466403945723344564128878748690948412, 6513426477680906633334599160432111925437974619461084985342271973286555405926222699834958328158064870035797051959174068271183539767248436401610768947381054, 8173988568774114467944572406606635335133159808338391383069040157534265594838599587570034509278679328554017339541929448861065009687105626891800784225472393, 5022380745545587306914323361666990569532351434425614834957609976946168583575063250948360349317997318663659406030959790322521716436474849412807860702463985, 216799313368485677306828035263689061879382337941281539520587618161382622056836364401333119587430461558830484562053475226427091386904242028161773547229736, 5178104940046202643031496176025713428155906546454125303766268511581683970892185405074029930820469668968990888164667794892226579691393457525959091273058676, 1949808677138591069448210728416371078034971769706915676930756268835507531426794776067586812481125070898974102722453616539982789887104857149811504353666290, 1567790520941606808868657031199748220182730830655522740912792953365382485179596389756267832329778566272944226458149584484469848968826477127548660640551429, 5422947870510054873208509097465645927557061046840138733269503754007545264326449651527359887891016642398246376420284508946610526837811635959609380352939924, 1499949248555809521676570616301580129675363878634341205982607116214911092728852432987005981192498576754057411854468633181436309696438159797573159613480358, 2811353249752770271246130716391133003387373768739728903624075264539636619140644559161312089261030913696680483222089914684535753628400938741861215349773563, 5850418796329454011544732236280198210447085109855800254863643138333243304066326374800171994500853374815951890640317120999784219919208109839074601161350839, 4869702581330902162908812282600590222871266684910705975492713374089248998354371206705067622025548969059604947208397878181338163281629541279190071968848576, 7847676388641868603698248935470610973882139601493022901137443389803774808522622281050972812445167960287698100384563148894533306017283084324489171851956887, 2535859684260519426988369115522974022942589000472137892939314001255311376099814579645167934379887809820764599807686521210947191562776548172971725153292352, 4790948878552608475531990115076087385829039098773555374036374873147868350449439062926126556724748431006248431452311089027887194262796157595328204230508222, 3296375764127573144169136655122594060901353238852121772015747118673082104975787483730999520263529682543445772176068040791646215886111673427633687659987371, 2799131115250411856771407959929020874783192130446750158035075294037255992519419427134018802896331948315782178820663260849666654402748477790808636749221267, 3967599526312125309794008254064856761058864378598259273271962632937045036200853902631335398797593534873840807691568362349993766086343381281581524499082924, 4838694432272652783263408325605540282112407539940576016492609997718793302052177892104892232699227240925831849127297243271618634277875805279771891846831216, 8526082607884025976428881651151899446660143499368427395583740176122203740863724867798966366292078056880897608631976182613903777655611810131821923478528179, 1257054212911653625412691195205762621413024935411937470406852784298693715221507731374044752168270156932535273734586764816207122740734211207461871622836257, 5635749577087377941306819624090175542268795737933185467576764068238423453333799990633672022689865678550425923841568545099790492362362471810245094158354556, 5435472392754413701123172429949870486746997240999688593903625019746833932270609765264488273999825434425242307180939109683462076652608385264607923168061431, 944775774838443462637937657579779113561458772087405069438750021724202322950999663548326175653768859691083062124842193373848073636238792568118701272251325, 3094748089316627412031553022407390381428503028027230331484478733662301791435740003309417571023241200231292317028235346150262278994691519682241378533125224, 8363911485737098178213182122612010708171144574873496277728653972785695010783071168543754898726128975809555000544904324604143622550990262963993636498156919, 6979054367329997568639218442842885234712519896335960503223046939601636583905653734604721913869209055983121028002387815013441927255998024633640921997735340, 3576547736368872252518590286711969121349209162715895274542733974571973454009713162506635355426048075780161488604316159803415685788636481018857329947825582, 808228390081639146867448371325998552527483505358100655171535889264833325241146477416722691422365831854633134899580187593881602558795881187681997538585280, 3744411796751045021114217205410943605965160096601373720757403430056236509219764757463950292939191015799417535084538208207641786255703957046627521675207229, 1984905196114384525088477158585001766078308150640285241008305967343816026358950790961103868065952965046160082966122969444298103023455907287881400034313441, 2989236813231106262379823513116384592653458187183737505147895874571368408295675110444936390104526155343921368813522231592455192257756212792414519852434165, 2416153437062713375765715066570509842249119377759183446922592668435242719740862386505030549141185840297493410712909579995464307153210884263385554466177845, 4293096260559355912648028326953452379163164248724334575924966828501988522926486118958009995209496514136490923352170285969430282231916030612684323940075205, 3769016021657066754213529831191533932206247929331214378197591411395991633656075131573232339259300849952594679484705201649943889016018625128716469430801879, 6561958280391854164266421350972765208961933675997520380460357394463972935590972982628458604847723600202804671361402582280937299595380819449532052829404497, 4127551221457640289929166423693779747521594953754178654304671829501956569070517964732542708748692653961742002028944352713917267707994728600194492266446997, 7723470969006999792776325044651190879816959381776849544972566930159413331471789863542131727866626955141177593665268662588310573026791671101059777759774535, 1697304542974173872958375926571771762612151730363501595914224015842196893450997079285198513924269648864648948714947958926160533601667365109739648831847681, 332676785166469702842443158183746813979528458247481109687576232891730223729527106123440758373121995886117828597897232374751039474900966488115555540821950, 2419714194029373037950672427634071117274102953064088773983556762516941074992416985904985910531911996766982323441240233234828095414290287157588599067212814, 5988098666776064311620115348664883617649546862509734282574524436548779185396901389956117980093538567756223111682802114171262849235668500973427263040697232, 600345508966417285403109192093081542754494319369085625385629785436511392190985640635104041370832480288532416779622034327055735051249947922296915610280980, 5806040282968630775797830241166011065319769422012068218453269534975045921246795875712530095896865394732468437974648132510122794635671606537151506397623454, 8038806360772687290316276182481789622653518837534893468283628787586416091031168144824589327172412948072450245084661147231546517435416749565928178447028562, 3040178918158305848340707711469380941436289778557628595230150903071803680745045578221921819072237584159612618953064758506410253840921181827847018127734525, 6629067851281624106077396569847557509308236262375376220862760380745187239168665453858258884711956315818004653016131797283295813724406655006207891509919114, 6088008212994268034421705255228981371962561826237859050578722109481469968783357406534712397924019821249519232262850989172594897072175512253899448448498242, 3403409662195857013067330727491333139246168490261073868845606675833750561440885002860010062383072608807628325138358823515573725804919858354958611855428031, 6518296874697781522298936027615281463283644855436514731918113483002638462444729306596226487425845085421490659081215746480365025209931250287003648588581057, 8855617686529790935933012646509429870396599003996047973307517586200516738809159821479469708850812099220350029917294324102061963159482054233267993761117073, 2989873483265063879051139139618149789339369382351798887399375448284258960378030482146230351883994873370128949094297058321184873039841432306589174160752172, 4975008955512517157249484130856808736850940946184279343226559778152414136501032825822341439372947991599147657161841272743293314073660710564696199083744129, 4082139416968191846041642890356499828612735297999789914926577363818216524516583166246771781492503424268159740774361834713863898280882172441702489399243086, 4478006821463122177149797526964961140036067257247492922996602746064663906401744686710036530262368298157958416457108441012254106976340419195293136936162032, 4645483358961648770367011028568247017913999059271558352805969112894701921819121538633339966001356656666928011465976220085019874144457913737403726048242278, 1645691799021653544052004400632017832114695968497447280023898408052559265430804101548442239478250367473204987207870817954241276782987358580743813457094518, 5229471991329755727665403735507765742616210543406893445721799758186110696088181128208915295740751099711457843914433417297723276516963373402316730952386462, 4672366951217465612476202122249896898087888692600306949097228728542443684660634509344629845982536887628595615719172014534788501519754639123602164800459759, 1357242302346283760126155553992453554757526359883431960931738638443154438357103381675824154814796141826030851916867179147226585700640981924934198343918775, 4920392942997970006324724024889522487643819467801887285751435336195039557523401272727824140391441156897960024494536954132492892661567346525993701387157236, 2518785451076646084590691688208719391754664233877565316123166028109632454204183795431476544313262021916765683352031030671321073626852448620789271701372968, 6718674722963961506489216106426941147865474035505089174938729150607209100587566593833511151913629877150877521187251425204772356647581673377166020348901267, 1035012455479535041282918665316646228965296216689888094874366249290228120149869296977218163177035307283283517128434757230720062189567602379370207201193456, 8226497665287266624896810007810157828379931142664671095912734940771613577524257804347430391954196552944816779990890701804772280951616662868217918000405996, 4526197630584179309679175188980260437042027260681329139224907798783598987477209449848737337788975989362543658263932759792379439245468025057391941331619337, 7760247401740925244372296285435565614428298092070455043816720532761523929255876185586427066729028062854931854242361610100096175929044113088723378135415560, 7498934881976620879593683329826989028967516116482855544628312655277641132721832163570438541762991185680119890643862415077810177070296579073528668821197244, 8721718422076766509120422413236163759034667693441083506896105517314516263356305103744303262438778123518582740769790884834376352109367246491386225832579991, 7986046511123580001541965932447635783080961646228397838310489522580170115049428582816517232720971000049966258874999252434709587026153796702297116360872345, 2508600847403087513296677877939305446864681665757258434685649354143802336514768826712626776223335132485665842047120293136372421835631216772962500248160435, 8466952092647960928037231166526704151871037360909735392274857545408831297657524173082676557137409036195435911657900426032294793374176174880580018414234066, 2484335632420523663419543811952793170859612720791794914045625936984983585829022167569540980904188316778973793295316604222939333852338214064517038185994169, 5220216423934665441398506104098207182520167475894177241075970617540580856037593737385823441570100746510837710664206105380811681369185003886692838082660663, 6901605632595813474906627077116098724108033613734403166115654596208100726025136636769121456563324450786418719763699169593606218872412571743107886471565283, 5017026941005522771062962426346489166174113830632554915316125974299531124360828597801878172113114786306881256760018667187843382933711570016122470839696686, 2932190299045320439249726949499694730156130636934190239682846075332938731238801277392036635815730099359678468634650811281934783355192716767842113855282714, 3343490320703698986881334110890119445883755556335512857678048844054292784195376980388725698606828635750163717462090348926112284719880586965782707552652191, 964002888142870924524273086969341918299434532801005553315902839009623064054486408114651616216651395274684479338701446614368674266688745251210027693344408, 5029548022584128313054350903446625479799922270942162814553289425109868308201922090702979403083006781528549724585736515865805968625123383261855102525727639, 7569823645276195837631778389082390946722995777233545990636190422421552385330594756651151492600600341144814733508886910128510663189139911998438970464133344, 6598334953902927045149830962437185659584372934038740057326065048616731684838108681011227271949774415348762596644953994150149775349234046828748009542412811, 5056615287171627651399873157675719084442616781925874112718234268798498166531087129250081543101655923686587979593159341082185211192297464075504020420365069, 2339199389200499828744691255258867053319799416109676487893790610373966807415972446586323099695579145223277869217692546546548436345568152923724121579552892, 3320409340668399905221578924754895731711012770017385201539514767900886987439808009796499831098738256884898149091398129882177818675235068579258848561427603, 3028719683752398502972656637042228218395366751280009468366735540845735550304215708369180578887169393032525327644920817806855069463239117093154512791690, 8001021981234525492542402708121570967357108854278872733550141828176277146233784217705940158973302552155420196942858817750400564916461506557705558991735910, 2660518201906689600594202825273276052836692761576817020235165381290038274433989825671134469762686794583329561918994780401095362189207158944269603464427507, 1597804799769232955528936414529498381078152819334446866281214177888269195644290787011673783958355009956301691474687225199291063542282222272047600844655748, 4129944016802131870130947881783287410408974455807157032589897902716327302834696236929698280868521106207593347594475901710884237339195075090206136854722461, 2761073930240655648792646234891994565065651460910433919444655872698746048544154607785970121295788686933154063644488058525328225513877641507381451190378283, 5241137249636909867732591181546029265168741474564151347508915412916191006889830076526655723592867269213459554019952439907760321246920825776036282616353197, 6366160755331426167976658478337688852834472756199947409841160944711004086072172828089865937296526719402429014871720152599698516356195040629710452338036688, 3803540838512491320703270406499404856843572789596796706137165414164430138181150570031454062097916881415563971046871374880512031246991145175692150788478494, 148991253081064802489568730880576070306131937336878110869211622994912025532201933978758998793525142273202278579006392492243667020069665785907704135652515, 6704492519616173692709901585564283632580347551650189883450505525118181516750711625167764911039361349757166220602581576390407099024570611995993958297390348, 2208491279448570348464186681094793172719075479129892624375566305131602356655297267587165049175593921968607063214364768492429570994321066852638596316645320, 4715005086957466929022497980395723357173707319257059429181169725888093415777721542448574830917810391822060553581447965919565522437604937529659221703568817, 6869355345072794114668018086479023070753698114222120798917594947211862452494898086157104347369440347939847250535830537615733392766052633373751887261525985, 7732067640871420444464467834279129890164450806366143239574951451603750434487422958919111460374861377792951367262904995089872429240022483994144312571628716, 8281966847734714831185951926812821313360797468732703103531142293712807070911852055914456488699363168841999313141998284294709543181728558943081695725026592, 3951317069428901032701273943670747998323452233402961255369596710072926781998789148300883993942789442167673065652613187704894353779712483535424032255232240, 270154827769396715161684601773086940390729478330996754729517858223323981046595798285934127597079024979548189074782629551764265153920112285223679412966043, 7080401866246600180379215367524568548118229569627099029458154754624170363832200146250953449572824052596389231789402349983679623870443880431200840331744250, 3521741780054935124715028950170741576491861394246392355136163112991420040480914233024827875813334380827930772170812351978013636856000363621125682796261449, 8864689837872730820439747828566777624881682991476399404875772200026208138694019588478696379499760188193529466278478268005676297969019772300778648210440993, 4807775537058574369473986771756312474750064357855938871322447026095863046982047361975196941414538107961682155821062550142005138149409420406684695506430421, 8378787047738196615045465061379368548688217549586986230879929616873088110374265262515545122632315343555038649257228950522659895776508363795911017829482436, 153975621998872468469663880352024999824833066464636045485005468648734822014375169586719917365965569093851574540860400056301289942664668526841731444575906, 3650747858131272772151276290198509294613056626435968500402528040723649027923503908701312677155920871800150261007428280734989211268641948391190284503369571, 6698064637765507157829985473336294569333163572474177883013990681207975907313874159652620803844436265307633944323057534720442690513023053663693121149423303, 6234711187692235352685289316188524390285856882256244324429714682924862232960680818886924455151353168147277142596629032461991301487097443639257552945361030, 5448790802000250740025939905995681032835673200585274115596666029125061624427710103344561727514016657228970384231923775410384147458108355058624192545456473, 8337946019727784929557659073532883631244657607422176350272887040958925883642326904515810498128952883092249390526445587980382714232825823361707052217106731, 5756356912931124706693864992889448642669080447052050783294770675912369095892731485301751108924076045637184218296388249997205888199370671080313270037586549, 2007283733879025993997106778034105913438737621188639323028070563085455541960585663303792455108758100406666995681871101307166806962520904621251339789275927, 8318710363398031029535269919993273461966634522315841712325084820850519857362498764347161845837918856074960932970505088051882608302558464878199168787950013, 5353782433344022691209001501551103736512488812416267754278461756177029183730274464980112143126646039769461967521260868752677259260982461456020852871412574, 8748822522657452933105470164923850928421056728536772182019686167894834083205538233623076407386019299570135280906708219069948270885419574819430812151117279, 2018141039067132871190700060681463881244218496576934571510072758677165454181354549201155085552553450957891288120590106964382760713400006615717456537143637, 406723055072565812983746286672949616399108463389143113424786687275026149146366484966915325751123525497988122438391913258354421955606104581315600259154947, 7972234068400321177470218289227142226261390745955132712800602656409801670788132055506390521065905483239046612064561917738672326579284959088126907653848355, 4516048516947271459730618927619292384723304135255669822293287196543637555692759952190519771202378873037420910758050906483656228220646262135266250849961424, 8059626518622875983026906039940840066990830630546593434462216605102538771220197179497045085583032025199268580960291885430707564018938312935900948449225139, 600751128022983678176079656216361389959360743639873688901276190144263899110260946071328249904246170056195989342555730130076130102734988816745416669285365, 533377398569212388479152379346756704539923097005120364980018754044266501546248586803927633159497180017685384195469522503046154360549407859448063965125745, 7921887592839489342945249194111916521918709799461963165179536601848345835025297850431119663709010131140070237766921292372321057623908012368647391033772626, 4171686271735900244093934517405696856351903502493597161627180801038626763664648784478554909274525449076665356709379963558121890671472484846257059675993171, 6510258483660699348290869545690862323984537137968608490552705887543004722588343744463073739359152697255118846534563462756379981733098795674555587932926028, 7229525582801250943072930137953217891808138285589855654853660807023671964425574758475440304100307690467200698492672127948995161507625032201840954751204545, 4686625549755340677991945985057318637436893223699787165440699493486444226100244840324778261134221643320062706612455040451593968915988284872274881887843262, 8351369450929614437826845311116983605414711267505441865080733129536958101971438380930508801111071401692886519243188340397902382657147598113355743412066479, 3054091454799556178073994084516951633076309723572831732333030820857388203534360776548490988338282987218861468628316233310181572842029112629543978189914273, 3957784194347499411979709715139506539612798559611615745688813833013013952629565487104643541178637015048616069517060629107037364587874615074153857869069965, 3027359395544338229574301699167426065160449348261799103111008493543721722465228866389768770536887603739089804841051510008578966405118188619942287443238709, 5720860188862081521374396679700972706589425614990717692399873161836871519887322523202425080030550497141571947198903050517557358286887203381753290485914295, 2495450389941061363664086576606338096620368335278377862499391396278094781084593171517953446221220095625708201691425762511624827204617915965237022628050621, 7734721621090973417869439645777953995363770405957625247370289246136942057870044034184928821540064030649523965745336766133714414702457087500426996266443468, 2065619120899739202980797670691043230148191715457080733220724622340883149019446309833662536816100222065316740006506762516677976891585816092786678225014933, 4802460948999044412838603048806479325369581774073717969715385730909282173489607265355854297284790852786640095789197685980241794191857824982535890675922855, 826213738149765877497533272267566789529593269475179151370328733056461919445066314257590348502867006003852602666577237703495962417784626808241839525605838, 2380652671657480100569392202896753599860826156732212431472824194682742365817322191609825810674843900853384213814902694230131314590021958653500084231348889, 4011731864186690274011433864730600169779455367680747898566098823252446215484690811268838839890721995989192810052029691066839239995427496462472912267662035, 311563724462211508391019186669571334014100453581521440500073270671010390820907747164668705380793206132137255469212864746034598476912564340309976096595477, 8151847218755228872579099201031784283029321720826409238807199948116931467125047374030361392116275367101559232384573687150877466138335952377765448701565313, 6470351682999090731470879054086649449338136682211374158823638363010996934588126827590600461815776700739687270501497096292849608257315302319124166277276216, 7027131148792587206983987689143326391984861185957355523052217515383185506604629625103954165538780351067264839797821869252228909261598953406174394086639613, 7754570424645712097826717663884214638518657959045952151099349450855588355779712888311414255659861388337806627019184601967004397366102219112389768473575550, 5753328425733234975664982142911814705259415813537587232983004395523163167539998491558520383015661214981539308145039377673752321543388622277224310019375944, 3025522019299614159152701516280928412412420814233020883724535353129271368026851221254274893586779078627678395083427601428401071500367254367278039338951280, 6231388293376122449296529275755500949655796562188073477144499891927269691978506071754880376826694396762191330048270840968077542856423282840990105238780376, 5227716513455444615516863196901558719571497904985330513624911688149334751083854689780088457412546877789448359171904210562489320378912041444096957192382694, 2175595998190266901575424967971264049181959024270707718994828218465957611100519116358210108409950177622062019859707032551746186106030275993451794632142696, 1823579729106654177889778043859460117467380178654672908638410954817246348631520205785396292035019338204727992360804397569901712168644297252876960600063903, 576936328301607588289572729351027569002930663425112959808704666146177280826667476842474585652014185321083671873387620842944504739815239220563017136037209, 4281258323989450593166193734248344315884136605486621444496797605529314870591232602829968048296063222999214252799979798922296164242287778263332375524587648, 1459126378766311857093733434687513590447531636296320567634231457119672430567494673450061770107724834082231745548076967954619747439142785136500958254970207, 7735012499720884048746182573929448485181756024556677436238056634493015787882778880792593974319619379892355236796125033300182508131188188792008173451500829, 5458507497476213901064479611479841844358328912519799010602337210379900023035212886453865262784917019783182338219376610616718259347499496775489437425757498, 5546418696297073565034195324059656877654442240968713737673362893259184045321450844955808822345244143329625084632869321068797739090351158108053893355975649, 5951010586526040977523102965283151369251365875869060093241820013390994573556082082870940774327118413487625369907457528963213148078121429411010346749993393, 450368430151646820198259232136227871024341213867063134512609426250001516229640051046534318274828866092660921596071000282669775585531409880377425454553228, 6362794445616561040781543252246691555320183374908061794764112736671511353772277698154979495517757882106369501779593988358903974495101102211029505621111781, 3651300555785449142406213590521300088579684676693789088054276583173721222738225763832267731393168572111056200404791533032521664392325464990406803367982362, 8068307033361501661541182108340746264907501303615950693246345082003881095668603858366223557899257470062424280813741956216061988124431708301251491217367175, 8080438765496501865827096817152739597758995610412270165025375289735419568886957610205726460905570890786676689658899912191460341151574087442854399571066811, 7770111182589386515199645728958234993113147736922199023935746170513531060311755206451196116842000597175573747647309597062310521189714070815748518207363939, 7794791440377536178033984592412187620932069377757290374913382123336387731265678759245589056783073444177531585662480883758589929466993760942513348390161343, 7253304699069294430193150009762092624136826030505153398952857224292149817928674075938531564451347756286175105059029155668342514181591790961491107017927775, 8153014217414419123366186397300340541743507235797729981468973210791651577046853879069172566266521092657651533405849657512278031846315801405655182082423249, 6285201237762495268897970237214200168986153886687165470765224332685693635296574251723404240980947182052471186987961663549233321650354173876379072794606366, 6448610018719332086922441093910319743011191301493278912338595092540669090963613741783002590332477224655759522922728176616783944247857755574875848749714147, 2342511241031602676722502136153512658893418125106630125649462432706290730195550117112718427739485499398008844947912563406472235411191117996074251404490314, 3251208637887749857848278042038316731761360723891776148890905911074886590408370058103834038494138090517161187904781779498470695156688824593170121447316938, 3192682037892114687952796621786754201457612730011858907288160748678324315068833936963053559317177764565680009208411233039677214944239605498900328363327854, 2551118510808617868381362714353384768042108748646725667795589891997524005585743645787234756655848224351903526784157098636145141503426766767170464739152708, 7110945323367985434957663415560516828960196269855435507430093896554955246747162735174694226188829068064385232262635593550311247030328693420795318827150450, 5387612271115025156861277743237882131504255716961833758818802564140202332952330443160966846575098630753179940430047329811665486096660910754008019962508770, 5663898817427623381277242895697967445092163632706916476102975253195145754652504870545235471210997374036175299032298485737259313272739709450223387054389533, 1989004280670433460248160404466805103587932343059148631674894451508995678775336542809207566093015803450455277864693328839221620718445111073965624235563914, 6182798513460636930200623675625870985757773415258884898993515601719775779490314461164554690404053533125152922205123578530174008682147789000115215485943257, 8551098236748526252930068398251467241594532782180885107999870434089168533634840335587637831531090559497979130935725210646073724682409646822366776437353023, 3013981262100933165613987256067442696648801782883589927087156514950293191326208923476702878849070468433809435199701429662195314380961396602804672927215848, 7305685283233011556194203165694639408718339474536085881773026668230080860505206682726366669078546733879479939182105311124042184194801211991595856275798294, 1517570014363612021744228048393084161984123635929221040686453948950723538703103198792996972479670732901473836094754881726597570966446568615919391200979639, 3013264842240532173839033922258436837868359864409626634597519181603852992630855209953862230498396600309868110743179397156766929106238690575176856520451718, 6967582852335433093290534304334736720977206344618110642973203062839684030229901365988208174978810584912610088583130565585664163650408028485253278511918287, 639179125876266781870637804890590335391731235282958168799793780784504298623072252738137481552133784674533826860428338777773446318664156131377290240727120, 103474674612725837059837791615225807767098892922132959960955765979412931540047271810194394689298815324916563885393140796910963486144437506071618577522931, 4205227630952264385001000407132688226091822941829060394338154518611233911137008483710736699125161372814951381060031548027420345412387151743379004740831950, 823056843967161332468819006096964706779937081628585755924927307756175500848827543276713555198024881831432525185259295462370584851019174573998481533229757, 8545670970814281012456327976255656262808356312071424526843668859904949126301007853655938194472922549020440620492809045153761883653964521735276441284792957, 5539090246510779100385712020771370930235125897462804752163832937902018253100667054672136232385040495901406965421516321953442859304207698393884527150904909, 221924402347468189282056894090560343312413319344513690986991421549466798484236751999877996557166640263276324063396545024925988018904284687481626850743327, 6344185165585207143887962515418456233055970171770348469580285172700213400410701430218894847823633483605687321717588864455095479768823807286843661483535856, 6880713519977178190606741153172543185016450490169298843673308579028580065923717799077783256851740539020512714600631118262304088384489133825559212726247754, 3315252015785905634047091365094561873700680902967049797026708271340472531419678059635446192550927456885223111226832789119394100326317364478523231514608551, 1787180897254237120101771453704335974473086355317267344475288534594615958722003601318897557315647896353144619231195123987818007554142283260845493259622639, 7913556263316320249969897872172737645188191511844218670113154431717294145588646640203779324894761268291908202466571264693875590644658390357624746252147628, 2092284153958449692983514755852366418302892000938248257864207765724803277798096102803345535874954031065052235419484949334757972798793405122404131264307407, 7106140960205742784980253405893118893964396151218533766748957705448473956702434131543166114810275120558929669479392297132622629090662257825519075321753061, 6769377287753898160313565470122226512329201490735815086932389254850594463418109300301367077190104376528832770168709788265499256780178078953672973164466836, 4054556367153295148429480593830851971835430688794644218748426240112107730900414572508513765551988622821020813124310386849310172752349054816469924905600345, 4007961791093656019438531345460405664295128856640450459588394430375276790967503586842347842021829739197705962623279819495408692927809312318654343698598009, 140181898741905041066042356272392683637243328269325262644947976712351472615236360524459602719101677414407206042717908528483506751574715315306065102336996, 3472747654401858149875924111121543189341936776878388116346080938099879773771535613020882087441827957374043141485398402623552177156187380406851727758274724, 6405829894185388591688951127970682803503305722704102503728745400388098302392491233525722477482092039856510957761648725009709692699518088283951839579282060, 275550963431986469985647280016092136583152636574077147809747628135997112099446051577161883403983964464620761596468401379368423263527524969650960882325196, 175147993568725168669248576035377826782364385099414336029202807822328668004922464962906291539061997725904664871160567080793703806614952313011945939394759, 4466560552956987777078191901625208854665241537545350610456816779381023266840547907549637452563177208487065938511399420529300970048729757251728726916537544, 6404853571087888372323838740283529575422161122366967852875283525850697446727971564256623666790374035387602623915035824009561572735056612502515437776048697, 1137033597759257184881531829618032189243743756041447448822121686719962483722917837554482376163183920660882495246353800145223868570028470280457662170808999, 6215157232916187347432790947340620569008844397587042106454365798485122993730772562630862584796798670851168220193001915451120679983539807730077574041808068, 5092777983867901993719698275011481831081711124972176036078145401461290996800201212718727348111164975839858360620989782546458665898022043174990632549499225, 7764697487407370089965517179486802992685248382869160554240717766321409353601899237140531267274806668048901508439447867551754149359586753394241520980680402, 8690519276104805280088073913398615628562407275613522094025123849718905379503948265842428303678850535976539842966807626129415751150840755134989007900594903, 8621800153431020353830351863138073151344444188551684734146718722452572355853758753838254365581907556241834388855170933417890746560349768112473144226151473, 1927898597568919318498756028446838313471375213554279220748480503189299253920134504243172624981624582696362635472830648633364684516051167275812821327241486, 1467943853536387836879643853517760225491623208547647687754645266727305624837394866537982380400419342307962506668291188947538151543859467629314298103143218, 4775508673027693121078036050785995791064981352871631495124523752585604449623134021469054408392825227686791388852178626619831073130647464495851619174030524, 7521903715221073086131884794883566733729867676760092716122553704674107747283930134551861084494432742524025957912689910241500773227950551476282980361021106, 7383005482190503940258391835109009655975049891267928083830897769849806290684610431596991461485508213474410396738872000909058018713533731895638105429786152, 5844884706372219850602423343432437562992705683110333027250256713177160078673357991658711175122042289598151888749772371259339677217102196433465623930011076, 5845918278367727893923238527716156272322699315268018875601681175530736100449089950587400818721397629377161632620875129823093083324672878619232653499105911, 4567100364929488057556219535867271100623123268513261108356318977654511810029260929108271037811930560453337234179966814463402874102448621818535262758142028, 1362208018078857051372948197964428641822115337959858637106834510347747357071513329273983909977614893883105901028572940525906109661910819911762193577585104, 243972292189848329357310994503793828062145081043523289809587017155681778618321082136277935996894818944537765690599060968869655646575315278839643305498286, 1540619185027735080605090723141514942351312944855211168810239344793692404885688500021966332935429616806090108304263247582127529521845266871787871440311113, 4718675531453764136017590142341094439020286888778397203497160316732669358011001338252463179394036877021545112011605546317740137958988736843011195559300278, 6284430694403894517811426927105722196834812380581506812354315603999797998983867683528779008683218754430646934808421570283011116181792348417208271081889924, 8047349065842170181968296047519635089565376761642012207083301486988213604982243328171527281130849062356580065828841712913920080903293058560080853240086759, 1178713335700096192267306292575878682337373842245998282262233810862394167723780431250764816299138924576465244048719785297407830923542024195854651522939185, 3950258452655097843904973895007509561312489301069240533757422012983543066922946955030840590141322188807462615664125126302601665122733811436972501010903687, 4761314627808928743379799428719324969164886485914179302953152118045249596618840215578543945627697816824835625889045862979710475967974431815396920099935747, 8176210744515022673095745627549831866903299545736361304507069728112913506280287154223635110582514493969543125834660517919395323257365579259488352113088809, 7959456253249495717749995816967553954965460126929660851503956503409049386277280135889702411293789888536525245780437505161300150300400609165555381701948710, 936619950421028891102439995735787347001329538222955353341882285568746190320601744491365271245128564861607529338837639156405410836852427423806302914315408, 4195959764991464063898342047341902334509025994619395113413823200111534532735855841796133146417562493349714781529699276050505078282755380295924648221207640, 8236306735567433298886337284865199496101762811700261902988989090386364417913519339552155359412541644778400604284645139497216860437629870538836382916618685, 6787020929277762083251762169223383721751165624770872024616816767074432463347896044500862840360505734234735509718991212409684536681980466120976826166799913, 2091707973755102105213233381543718350696622363522694721272983109372723059354148385109328476750860129143092305661598712728440847489881354617099498942388354, 5522357179700527317117511820332559401466585492521419558107996711491517641736668916141978208483663251795786853713372840468995380153315022505701537988281534, 5418128438521473553692143550035894864164308350179626239167357383522795251587594059479458717169740087315775485854683693812775247960231538734381883258987676, 1268326368820860885580963355336667442224055025831383075476370915828985201864497251974259801599315249595197675387176714415885720431801949345823733154113015, 2898875062310416330364413615665040168402681820371321338864726894355121871689928105320426690190210523576524946087234764943044784539858583773494924149687188, 2473793965567224355108032845250193286306128068834927624294257619907007860447906384221991200379519001704073874898054210481109026151866699891370409415794556, 8430368140213948550672839212077591377376730626141809447387856912043985226208572724687396038663465228499277369692500010492333815570531722181158621435407186, 351892850386444191976505872178716040944839761918087676222731073079352124797745231839706739561577256347378900668727373542967799036583471016966990911209304, 6201511487754453384152639380431789620072885129243407450332161169111238405457739104939412795005212711927572862019689002047416090445453673322167057668170134, 8296848630432449416348858717097237952124061382182867434223791212446419099249068273225427112569202899072801351921566097027772610289080521059178990135257327, 5365288190703178650171202415293412556660603874611847332647758345735142343804634111018283711406445581998314579656872407665918098056792338786773952265746649, 5220851093736910307002988555763570004681643672228222723421180892895357829436305020895324857175019746175176678498484179042059739190827214022514686871468827, 3422380032427450843831386644691473049875635967353999408081836027368372757067754210449587147911031359676712109034541887283282376450970580727672054745035850, 3120237252066897937973262449067303757294913754108181557532183888120016498958080879231198459943264707571670152534551901204820439601004813340500445047570472, 4001428685059834307290036616848842989867032789680227935919943841471689418493323837369646581599298827468339807112837293746339381795322349403245010747539805, 6154989784684550911312405209787512877581741167801132023365724747153672003421109283170031299055699906062202848940121343117076408823275843034245717952811597, 5114543493817077189483691870783178384084943776182179781686052448023205759729587764036890129608826132421199033708302928661493494243984823365195953814087619, 4763016581233913643582280090775037820815778676183716205915986114803083420098343041233105428539178221084840720512243936478176696303522118517045026186490937, 6582656809912848432553772450087430598515145906571937135587313926854877690156321246575108239108903458943323534082743204151904655827074912020732936050543679, 3527493455586080328660793670337368184604675055085219751449156610079323623877455294289306690435627251699251728546172133353444810130505517138665792444942218, 2105492771829044158946687490217228086661462529690606973059336113357124126130633857209936771057717166414348239236386927901920201885395646809427830738143745, 6543311393172275346991887235669613714436889892595507324259747487555907335162280429671491049815030501921312698615313171344369182583184184923269564110814215, 5648767728665507282632588076106361674357733200223974617666244594324691209522259496041048899448147591470339224500738635342475895810088248970920276853190540, 6748935110657501995006720491207799983571517375204401741795065337420204414268931200391270922726354820556577440071462134026544985819553231040999667693393724, 431844976226526529714541301284334032983783716052088219039106258599149939909789815637472506553239843989566971624974824873790067954513773404211502781141793, 6796182597296346893447200198255639115359834963107383979003838047537413352754978638712933113686218652320358455965606578220127534362922669535575569797695750, 5258116925401949817437574410000788671120107350298451444886009748341673515919538190961581253161082969337782150761969935585630316039176594532813255905742395, 559143948795573616643700149290137178600589670934571168348626521462527617535814623666296260552447515355999836228262645612507048615565207894105647815311787, 7694272741535314881714277228574972552053374501869722177588899858080926168626086939422911824182353997983336762292132814445508326511821190753861045216837439, 1529679412104681179769175590139046281637598164897304474681421865472458299400179189511079810314831696997683777705386202829779078558020475194243252165900512, 6336408760194924118881289691560240908047468338187078076388175482259518832900952363829320829654446647884324629052357809982926927077419818998834120498153291, 5122125938368763219791725966787025705072180154229205277434352335468453198244060522640541335987691396087153483102936070553456698723002282527246083412095157, 8546817653637848183285039142825556067061232722084660520417713103861713330048419252685396487032639064938983941246826267618407135704540962807636829191107995, 2916558733177387862950526803308494739371085519165544103640904860610474599260663875251573223637051975354887938080451247489821741422461578589420367196266255, 6217734726712565686664756026171938454466851347010447493409960373388506203609985561191071123827355530094292349426440892666173424638473300726981829051141181, 1943058135233826499673709640250819118022778978557125171666514850856851108090298074491417443769997395223525546887686227592843236996252285879212600511296335, 5404223736411880044559553738211433589023577892273775776600751804627601745433125564221887927111121592704925590321330199330897938120071520876013367741945021, 7742139702659300795816439541940436161288008959643883468816665274914360795977166818409078310004703856034357103536884107233533495728855030995652147449281645, 6668768606983277892031199832049155523131186946818555284762104977728478719897766497225898997333872669179154842131090030289219401267323384477325259818911453, 8293016406106100754770791407379753048771831694178472138185405806194874638241826093934212868444917109589257185530333035105723289209214196139262317990837161, 4909985363894661400545466183663038007985310397642927405840610156964059293326280181469384287556944282795225369718763345239837803239925945573764472205364530, 3896084861205516335763862028229359562238935620113009068850443212082158604367646201717656497602309482794420330794421012290505125486094851476264496241922667, 8482049248526598952155516560331510106421802404904505005883475127497282714756751006302738463626090689099441103668859865990854225214873606685518411261716944, 1396806735375110428427027480133593145049048841767005945732894394883034981144837661451583664710830805696365753693657926272415434895145670029453222131710134, 4570423189673422457290782613251677839658003998467082660450827486320393468982439276632949287982898129807240365298480686107941365524618564608122073132480714, 3271296599571323685200275499240653372654127230787124593411576822106587562516345599137556921080737288190936434755767669704216193021221995100758432883649537, 6256314651521434433897537644102804212016446740140964802237683811505261005292970255296180698698805396845986379770569687151245445860021463102284005844595302, 3120843863967606544225022563152106843694993693860090575966172664598685485628386775964366264483345966377325983191086681681840045925688077777158000830374311, 2014553261099102181243424564848532224327543919981866215065820868565337422835796449935291169129091977906522857355234840917882032060767203065132605977399246, 1933046072018792684787455656192942913610881187869449650112044511822195930894963481764859173012101008149168248623019158715299200888378000004994005062364664, 964909946787042836979911429059593690417917501634890587867484317264312218833931290666589951936442809223763615263277837480223415513860506076144967289407920, 19216254369957741473879645930099137302549643793343066579028611490547018763251596776498975980958688105148347601144392616367588920699897260652599937278446, 6547691398179452926688476370906159701737765941952246137441617855365296953841391393394464254571106657732457468887285467524137481011229531551631117410823139]
可以发现 p o w ( a , b − 1 2 , b ) = 1 pow(a,\frac{b-1}{2},b) = 1 pow(a,2b−1,b)=1,那么这里就不得不提到二次剩余的知识了
- 设m是正整数,若同余式:
x 2 ≡ a m o d p a ≡ x 2 m o d p 其中 , ( a , p ) = 1 x^{2} \equiv a \mod p \\ a \equiv x^{2} \mod p \\ \\ 其中,(a,p) = 1 x2≡amodpa≡x2modp其中,(a,p)=1
有解,则a叫做模p的二次剩余(或平方剩余),否则为二次非剩余(平方非剩余)- 勒让得符号之运算性质(欧拉判别法则):
( a p ) = a p − 1 2 = { 1 , a 是模 p 的二次剩余, x 有解 − 1 , a 是模 p 的二次非剩余, x 无解 0 , p ∣ a ( a 比 p 大 ) \left ( \frac{a}{p} \right ) = a^{\frac{p-1}{2}} = \begin{cases} \quad1,a是模p的二次剩余,x有解\\ -1,a是模p的二次非剩余,x无解\\ \quad0,p|a (a比p大) \end{cases} (pa)=a2p−1=⎩ ⎨ ⎧1,a是模p的二次剩余,x有解−1,a是模p的二次非剩余,x无解0,p∣a(a比p大)
由此可知a是模b的二次剩余,
因为:
a b − 1 2 = 1 m o d b a^{\frac{b-1}{2}} = 1 \mod b a2b−1=1modb
= > => =>
n b − 1 2 = a e ∗ b − 1 2 = 1 e m o d b = 1 m o d b n^{\frac{b-1}{2}} =a^{e* \frac{b-1}{2}} = 1^{e} \mod b = 1 \mod b n2b−1=ae∗2b−1=1emodb=1modb
所以n也是模b的二次剩余
− n m o d b = − 1 m o d b -n \mod b = -1 \mod b −nmodb=−1modb
故-n % b是模b的二次非剩余
所以这里可以通过c中的值是否为模b的二次剩余来判断m二进制形式中的0和1
c = [954855912808159420472366734253526811676481240515820930256940432745475409361703614280048762869887773205884964621410301178779746388346025575735881089910749, 3631282083702019996359180380389209621648677305820837497420773630944855934977100752358708103367994265945843470030171056175320711208796346832011206133645734, 6454530122897430503281442494417561546056521384930450260190981606579151364428784157375373548625268965196358950333836716721219304313174802539526726375540673, 2981793035878287844482256729829678822703081977065269166861356268502792620921067860555060521808095096269876726910111541903990001728676811395502186215869817, 5769720837022319654191110195091050712281616500255980211763308006359458724954148461589945660590023763988568631391834933753957435359334855109059629706556656, 6797052833416647553938526106348571606080709184098517237874476174513203389421553998654724034174582356077703733237168214223038806424405218843355956944994652, 963289739134752400659785331230534173778897695248084226992196901907055599223221833459619320643875060051973839705302499862897090632698516558436619130639135, 7292470162157104951307937118727912761963086583250673190349060438664191922031297442345381694339788274602367758928233840111118627727343260974834944101710280, 8280859366148188278871762876976164765131454080157032157524221302949078565256179855417415162757328007393796327216779299541420968021294182382852056835091138, 7457596469981918779037477228269414826103122102186095747092599565551488471661839823071744687791672680116429237616361875381437372920074295223199921219501300, 4946499240493313662882312020779120968939349832511655731740859341321657814204984997742068916892850242326612198773301129466403945723344564128878748690948412, 6513426477680906633334599160432111925437974619461084985342271973286555405926222699834958328158064870035797051959174068271183539767248436401610768947381054, 8173988568774114467944572406606635335133159808338391383069040157534265594838599587570034509278679328554017339541929448861065009687105626891800784225472393, 5022380745545587306914323361666990569532351434425614834957609976946168583575063250948360349317997318663659406030959790322521716436474849412807860702463985, 216799313368485677306828035263689061879382337941281539520587618161382622056836364401333119587430461558830484562053475226427091386904242028161773547229736, 5178104940046202643031496176025713428155906546454125303766268511581683970892185405074029930820469668968990888164667794892226579691393457525959091273058676, 1949808677138591069448210728416371078034971769706915676930756268835507531426794776067586812481125070898974102722453616539982789887104857149811504353666290, 1567790520941606808868657031199748220182730830655522740912792953365382485179596389756267832329778566272944226458149584484469848968826477127548660640551429, 5422947870510054873208509097465645927557061046840138733269503754007545264326449651527359887891016642398246376420284508946610526837811635959609380352939924, 1499949248555809521676570616301580129675363878634341205982607116214911092728852432987005981192498576754057411854468633181436309696438159797573159613480358, 2811353249752770271246130716391133003387373768739728903624075264539636619140644559161312089261030913696680483222089914684535753628400938741861215349773563, 5850418796329454011544732236280198210447085109855800254863643138333243304066326374800171994500853374815951890640317120999784219919208109839074601161350839, 4869702581330902162908812282600590222871266684910705975492713374089248998354371206705067622025548969059604947208397878181338163281629541279190071968848576, 7847676388641868603698248935470610973882139601493022901137443389803774808522622281050972812445167960287698100384563148894533306017283084324489171851956887, 2535859684260519426988369115522974022942589000472137892939314001255311376099814579645167934379887809820764599807686521210947191562776548172971725153292352, 4790948878552608475531990115076087385829039098773555374036374873147868350449439062926126556724748431006248431452311089027887194262796157595328204230508222, 3296375764127573144169136655122594060901353238852121772015747118673082104975787483730999520263529682543445772176068040791646215886111673427633687659987371, 2799131115250411856771407959929020874783192130446750158035075294037255992519419427134018802896331948315782178820663260849666654402748477790808636749221267, 3967599526312125309794008254064856761058864378598259273271962632937045036200853902631335398797593534873840807691568362349993766086343381281581524499082924, 4838694432272652783263408325605540282112407539940576016492609997718793302052177892104892232699227240925831849127297243271618634277875805279771891846831216, 8526082607884025976428881651151899446660143499368427395583740176122203740863724867798966366292078056880897608631976182613903777655611810131821923478528179, 1257054212911653625412691195205762621413024935411937470406852784298693715221507731374044752168270156932535273734586764816207122740734211207461871622836257, 5635749577087377941306819624090175542268795737933185467576764068238423453333799990633672022689865678550425923841568545099790492362362471810245094158354556, 5435472392754413701123172429949870486746997240999688593903625019746833932270609765264488273999825434425242307180939109683462076652608385264607923168061431, 944775774838443462637937657579779113561458772087405069438750021724202322950999663548326175653768859691083062124842193373848073636238792568118701272251325, 3094748089316627412031553022407390381428503028027230331484478733662301791435740003309417571023241200231292317028235346150262278994691519682241378533125224, 8363911485737098178213182122612010708171144574873496277728653972785695010783071168543754898726128975809555000544904324604143622550990262963993636498156919, 6979054367329997568639218442842885234712519896335960503223046939601636583905653734604721913869209055983121028002387815013441927255998024633640921997735340, 3576547736368872252518590286711969121349209162715895274542733974571973454009713162506635355426048075780161488604316159803415685788636481018857329947825582, 808228390081639146867448371325998552527483505358100655171535889264833325241146477416722691422365831854633134899580187593881602558795881187681997538585280, 3744411796751045021114217205410943605965160096601373720757403430056236509219764757463950292939191015799417535084538208207641786255703957046627521675207229, 1984905196114384525088477158585001766078308150640285241008305967343816026358950790961103868065952965046160082966122969444298103023455907287881400034313441, 2989236813231106262379823513116384592653458187183737505147895874571368408295675110444936390104526155343921368813522231592455192257756212792414519852434165, 2416153437062713375765715066570509842249119377759183446922592668435242719740862386505030549141185840297493410712909579995464307153210884263385554466177845, 4293096260559355912648028326953452379163164248724334575924966828501988522926486118958009995209496514136490923352170285969430282231916030612684323940075205, 3769016021657066754213529831191533932206247929331214378197591411395991633656075131573232339259300849952594679484705201649943889016018625128716469430801879, 6561958280391854164266421350972765208961933675997520380460357394463972935590972982628458604847723600202804671361402582280937299595380819449532052829404497, 4127551221457640289929166423693779747521594953754178654304671829501956569070517964732542708748692653961742002028944352713917267707994728600194492266446997, 7723470969006999792776325044651190879816959381776849544972566930159413331471789863542131727866626955141177593665268662588310573026791671101059777759774535, 1697304542974173872958375926571771762612151730363501595914224015842196893450997079285198513924269648864648948714947958926160533601667365109739648831847681, 332676785166469702842443158183746813979528458247481109687576232891730223729527106123440758373121995886117828597897232374751039474900966488115555540821950, 2419714194029373037950672427634071117274102953064088773983556762516941074992416985904985910531911996766982323441240233234828095414290287157588599067212814, 5988098666776064311620115348664883617649546862509734282574524436548779185396901389956117980093538567756223111682802114171262849235668500973427263040697232, 600345508966417285403109192093081542754494319369085625385629785436511392190985640635104041370832480288532416779622034327055735051249947922296915610280980, 5806040282968630775797830241166011065319769422012068218453269534975045921246795875712530095896865394732468437974648132510122794635671606537151506397623454, 8038806360772687290316276182481789622653518837534893468283628787586416091031168144824589327172412948072450245084661147231546517435416749565928178447028562, 3040178918158305848340707711469380941436289778557628595230150903071803680745045578221921819072237584159612618953064758506410253840921181827847018127734525, 6629067851281624106077396569847557509308236262375376220862760380745187239168665453858258884711956315818004653016131797283295813724406655006207891509919114, 6088008212994268034421705255228981371962561826237859050578722109481469968783357406534712397924019821249519232262850989172594897072175512253899448448498242, 3403409662195857013067330727491333139246168490261073868845606675833750561440885002860010062383072608807628325138358823515573725804919858354958611855428031, 6518296874697781522298936027615281463283644855436514731918113483002638462444729306596226487425845085421490659081215746480365025209931250287003648588581057, 8855617686529790935933012646509429870396599003996047973307517586200516738809159821479469708850812099220350029917294324102061963159482054233267993761117073, 2989873483265063879051139139618149789339369382351798887399375448284258960378030482146230351883994873370128949094297058321184873039841432306589174160752172, 4975008955512517157249484130856808736850940946184279343226559778152414136501032825822341439372947991599147657161841272743293314073660710564696199083744129, 4082139416968191846041642890356499828612735297999789914926577363818216524516583166246771781492503424268159740774361834713863898280882172441702489399243086, 4478006821463122177149797526964961140036067257247492922996602746064663906401744686710036530262368298157958416457108441012254106976340419195293136936162032, 4645483358961648770367011028568247017913999059271558352805969112894701921819121538633339966001356656666928011465976220085019874144457913737403726048242278, 1645691799021653544052004400632017832114695968497447280023898408052559265430804101548442239478250367473204987207870817954241276782987358580743813457094518, 5229471991329755727665403735507765742616210543406893445721799758186110696088181128208915295740751099711457843914433417297723276516963373402316730952386462, 4672366951217465612476202122249896898087888692600306949097228728542443684660634509344629845982536887628595615719172014534788501519754639123602164800459759, 1357242302346283760126155553992453554757526359883431960931738638443154438357103381675824154814796141826030851916867179147226585700640981924934198343918775, 4920392942997970006324724024889522487643819467801887285751435336195039557523401272727824140391441156897960024494536954132492892661567346525993701387157236, 2518785451076646084590691688208719391754664233877565316123166028109632454204183795431476544313262021916765683352031030671321073626852448620789271701372968, 6718674722963961506489216106426941147865474035505089174938729150607209100587566593833511151913629877150877521187251425204772356647581673377166020348901267, 1035012455479535041282918665316646228965296216689888094874366249290228120149869296977218163177035307283283517128434757230720062189567602379370207201193456, 8226497665287266624896810007810157828379931142664671095912734940771613577524257804347430391954196552944816779990890701804772280951616662868217918000405996, 4526197630584179309679175188980260437042027260681329139224907798783598987477209449848737337788975989362543658263932759792379439245468025057391941331619337, 7760247401740925244372296285435565614428298092070455043816720532761523929255876185586427066729028062854931854242361610100096175929044113088723378135415560, 7498934881976620879593683329826989028967516116482855544628312655277641132721832163570438541762991185680119890643862415077810177070296579073528668821197244, 8721718422076766509120422413236163759034667693441083506896105517314516263356305103744303262438778123518582740769790884834376352109367246491386225832579991, 7986046511123580001541965932447635783080961646228397838310489522580170115049428582816517232720971000049966258874999252434709587026153796702297116360872345, 2508600847403087513296677877939305446864681665757258434685649354143802336514768826712626776223335132485665842047120293136372421835631216772962500248160435, 8466952092647960928037231166526704151871037360909735392274857545408831297657524173082676557137409036195435911657900426032294793374176174880580018414234066, 2484335632420523663419543811952793170859612720791794914045625936984983585829022167569540980904188316778973793295316604222939333852338214064517038185994169, 5220216423934665441398506104098207182520167475894177241075970617540580856037593737385823441570100746510837710664206105380811681369185003886692838082660663, 6901605632595813474906627077116098724108033613734403166115654596208100726025136636769121456563324450786418719763699169593606218872412571743107886471565283, 5017026941005522771062962426346489166174113830632554915316125974299531124360828597801878172113114786306881256760018667187843382933711570016122470839696686, 2932190299045320439249726949499694730156130636934190239682846075332938731238801277392036635815730099359678468634650811281934783355192716767842113855282714, 3343490320703698986881334110890119445883755556335512857678048844054292784195376980388725698606828635750163717462090348926112284719880586965782707552652191, 964002888142870924524273086969341918299434532801005553315902839009623064054486408114651616216651395274684479338701446614368674266688745251210027693344408, 5029548022584128313054350903446625479799922270942162814553289425109868308201922090702979403083006781528549724585736515865805968625123383261855102525727639, 7569823645276195837631778389082390946722995777233545990636190422421552385330594756651151492600600341144814733508886910128510663189139911998438970464133344, 6598334953902927045149830962437185659584372934038740057326065048616731684838108681011227271949774415348762596644953994150149775349234046828748009542412811, 5056615287171627651399873157675719084442616781925874112718234268798498166531087129250081543101655923686587979593159341082185211192297464075504020420365069, 2339199389200499828744691255258867053319799416109676487893790610373966807415972446586323099695579145223277869217692546546548436345568152923724121579552892, 3320409340668399905221578924754895731711012770017385201539514767900886987439808009796499831098738256884898149091398129882177818675235068579258848561427603, 3028719683752398502972656637042228218395366751280009468366735540845735550304215708369180578887169393032525327644920817806855069463239117093154512791690, 8001021981234525492542402708121570967357108854278872733550141828176277146233784217705940158973302552155420196942858817750400564916461506557705558991735910, 2660518201906689600594202825273276052836692761576817020235165381290038274433989825671134469762686794583329561918994780401095362189207158944269603464427507, 1597804799769232955528936414529498381078152819334446866281214177888269195644290787011673783958355009956301691474687225199291063542282222272047600844655748, 4129944016802131870130947881783287410408974455807157032589897902716327302834696236929698280868521106207593347594475901710884237339195075090206136854722461, 2761073930240655648792646234891994565065651460910433919444655872698746048544154607785970121295788686933154063644488058525328225513877641507381451190378283, 5241137249636909867732591181546029265168741474564151347508915412916191006889830076526655723592867269213459554019952439907760321246920825776036282616353197, 6366160755331426167976658478337688852834472756199947409841160944711004086072172828089865937296526719402429014871720152599698516356195040629710452338036688, 3803540838512491320703270406499404856843572789596796706137165414164430138181150570031454062097916881415563971046871374880512031246991145175692150788478494, 148991253081064802489568730880576070306131937336878110869211622994912025532201933978758998793525142273202278579006392492243667020069665785907704135652515, 6704492519616173692709901585564283632580347551650189883450505525118181516750711625167764911039361349757166220602581576390407099024570611995993958297390348, 2208491279448570348464186681094793172719075479129892624375566305131602356655297267587165049175593921968607063214364768492429570994321066852638596316645320, 4715005086957466929022497980395723357173707319257059429181169725888093415777721542448574830917810391822060553581447965919565522437604937529659221703568817, 6869355345072794114668018086479023070753698114222120798917594947211862452494898086157104347369440347939847250535830537615733392766052633373751887261525985, 7732067640871420444464467834279129890164450806366143239574951451603750434487422958919111460374861377792951367262904995089872429240022483994144312571628716, 8281966847734714831185951926812821313360797468732703103531142293712807070911852055914456488699363168841999313141998284294709543181728558943081695725026592, 3951317069428901032701273943670747998323452233402961255369596710072926781998789148300883993942789442167673065652613187704894353779712483535424032255232240, 270154827769396715161684601773086940390729478330996754729517858223323981046595798285934127597079024979548189074782629551764265153920112285223679412966043, 7080401866246600180379215367524568548118229569627099029458154754624170363832200146250953449572824052596389231789402349983679623870443880431200840331744250, 3521741780054935124715028950170741576491861394246392355136163112991420040480914233024827875813334380827930772170812351978013636856000363621125682796261449, 8864689837872730820439747828566777624881682991476399404875772200026208138694019588478696379499760188193529466278478268005676297969019772300778648210440993, 4807775537058574369473986771756312474750064357855938871322447026095863046982047361975196941414538107961682155821062550142005138149409420406684695506430421, 8378787047738196615045465061379368548688217549586986230879929616873088110374265262515545122632315343555038649257228950522659895776508363795911017829482436, 153975621998872468469663880352024999824833066464636045485005468648734822014375169586719917365965569093851574540860400056301289942664668526841731444575906, 3650747858131272772151276290198509294613056626435968500402528040723649027923503908701312677155920871800150261007428280734989211268641948391190284503369571, 6698064637765507157829985473336294569333163572474177883013990681207975907313874159652620803844436265307633944323057534720442690513023053663693121149423303, 6234711187692235352685289316188524390285856882256244324429714682924862232960680818886924455151353168147277142596629032461991301487097443639257552945361030, 5448790802000250740025939905995681032835673200585274115596666029125061624427710103344561727514016657228970384231923775410384147458108355058624192545456473, 8337946019727784929557659073532883631244657607422176350272887040958925883642326904515810498128952883092249390526445587980382714232825823361707052217106731, 5756356912931124706693864992889448642669080447052050783294770675912369095892731485301751108924076045637184218296388249997205888199370671080313270037586549, 2007283733879025993997106778034105913438737621188639323028070563085455541960585663303792455108758100406666995681871101307166806962520904621251339789275927, 8318710363398031029535269919993273461966634522315841712325084820850519857362498764347161845837918856074960932970505088051882608302558464878199168787950013, 5353782433344022691209001501551103736512488812416267754278461756177029183730274464980112143126646039769461967521260868752677259260982461456020852871412574, 8748822522657452933105470164923850928421056728536772182019686167894834083205538233623076407386019299570135280906708219069948270885419574819430812151117279, 2018141039067132871190700060681463881244218496576934571510072758677165454181354549201155085552553450957891288120590106964382760713400006615717456537143637, 406723055072565812983746286672949616399108463389143113424786687275026149146366484966915325751123525497988122438391913258354421955606104581315600259154947, 7972234068400321177470218289227142226261390745955132712800602656409801670788132055506390521065905483239046612064561917738672326579284959088126907653848355, 4516048516947271459730618927619292384723304135255669822293287196543637555692759952190519771202378873037420910758050906483656228220646262135266250849961424, 8059626518622875983026906039940840066990830630546593434462216605102538771220197179497045085583032025199268580960291885430707564018938312935900948449225139, 600751128022983678176079656216361389959360743639873688901276190144263899110260946071328249904246170056195989342555730130076130102734988816745416669285365, 533377398569212388479152379346756704539923097005120364980018754044266501546248586803927633159497180017685384195469522503046154360549407859448063965125745, 7921887592839489342945249194111916521918709799461963165179536601848345835025297850431119663709010131140070237766921292372321057623908012368647391033772626, 4171686271735900244093934517405696856351903502493597161627180801038626763664648784478554909274525449076665356709379963558121890671472484846257059675993171, 6510258483660699348290869545690862323984537137968608490552705887543004722588343744463073739359152697255118846534563462756379981733098795674555587932926028, 7229525582801250943072930137953217891808138285589855654853660807023671964425574758475440304100307690467200698492672127948995161507625032201840954751204545, 4686625549755340677991945985057318637436893223699787165440699493486444226100244840324778261134221643320062706612455040451593968915988284872274881887843262, 8351369450929614437826845311116983605414711267505441865080733129536958101971438380930508801111071401692886519243188340397902382657147598113355743412066479, 3054091454799556178073994084516951633076309723572831732333030820857388203534360776548490988338282987218861468628316233310181572842029112629543978189914273, 3957784194347499411979709715139506539612798559611615745688813833013013952629565487104643541178637015048616069517060629107037364587874615074153857869069965, 3027359395544338229574301699167426065160449348261799103111008493543721722465228866389768770536887603739089804841051510008578966405118188619942287443238709, 5720860188862081521374396679700972706589425614990717692399873161836871519887322523202425080030550497141571947198903050517557358286887203381753290485914295, 2495450389941061363664086576606338096620368335278377862499391396278094781084593171517953446221220095625708201691425762511624827204617915965237022628050621, 7734721621090973417869439645777953995363770405957625247370289246136942057870044034184928821540064030649523965745336766133714414702457087500426996266443468, 2065619120899739202980797670691043230148191715457080733220724622340883149019446309833662536816100222065316740006506762516677976891585816092786678225014933, 4802460948999044412838603048806479325369581774073717969715385730909282173489607265355854297284790852786640095789197685980241794191857824982535890675922855, 826213738149765877497533272267566789529593269475179151370328733056461919445066314257590348502867006003852602666577237703495962417784626808241839525605838, 2380652671657480100569392202896753599860826156732212431472824194682742365817322191609825810674843900853384213814902694230131314590021958653500084231348889, 4011731864186690274011433864730600169779455367680747898566098823252446215484690811268838839890721995989192810052029691066839239995427496462472912267662035, 311563724462211508391019186669571334014100453581521440500073270671010390820907747164668705380793206132137255469212864746034598476912564340309976096595477, 8151847218755228872579099201031784283029321720826409238807199948116931467125047374030361392116275367101559232384573687150877466138335952377765448701565313, 6470351682999090731470879054086649449338136682211374158823638363010996934588126827590600461815776700739687270501497096292849608257315302319124166277276216, 7027131148792587206983987689143326391984861185957355523052217515383185506604629625103954165538780351067264839797821869252228909261598953406174394086639613, 7754570424645712097826717663884214638518657959045952151099349450855588355779712888311414255659861388337806627019184601967004397366102219112389768473575550, 5753328425733234975664982142911814705259415813537587232983004395523163167539998491558520383015661214981539308145039377673752321543388622277224310019375944, 3025522019299614159152701516280928412412420814233020883724535353129271368026851221254274893586779078627678395083427601428401071500367254367278039338951280, 6231388293376122449296529275755500949655796562188073477144499891927269691978506071754880376826694396762191330048270840968077542856423282840990105238780376, 5227716513455444615516863196901558719571497904985330513624911688149334751083854689780088457412546877789448359171904210562489320378912041444096957192382694, 2175595998190266901575424967971264049181959024270707718994828218465957611100519116358210108409950177622062019859707032551746186106030275993451794632142696, 1823579729106654177889778043859460117467380178654672908638410954817246348631520205785396292035019338204727992360804397569901712168644297252876960600063903, 576936328301607588289572729351027569002930663425112959808704666146177280826667476842474585652014185321083671873387620842944504739815239220563017136037209, 4281258323989450593166193734248344315884136605486621444496797605529314870591232602829968048296063222999214252799979798922296164242287778263332375524587648, 1459126378766311857093733434687513590447531636296320567634231457119672430567494673450061770107724834082231745548076967954619747439142785136500958254970207, 7735012499720884048746182573929448485181756024556677436238056634493015787882778880792593974319619379892355236796125033300182508131188188792008173451500829, 5458507497476213901064479611479841844358328912519799010602337210379900023035212886453865262784917019783182338219376610616718259347499496775489437425757498, 5546418696297073565034195324059656877654442240968713737673362893259184045321450844955808822345244143329625084632869321068797739090351158108053893355975649, 5951010586526040977523102965283151369251365875869060093241820013390994573556082082870940774327118413487625369907457528963213148078121429411010346749993393, 450368430151646820198259232136227871024341213867063134512609426250001516229640051046534318274828866092660921596071000282669775585531409880377425454553228, 6362794445616561040781543252246691555320183374908061794764112736671511353772277698154979495517757882106369501779593988358903974495101102211029505621111781, 3651300555785449142406213590521300088579684676693789088054276583173721222738225763832267731393168572111056200404791533032521664392325464990406803367982362, 8068307033361501661541182108340746264907501303615950693246345082003881095668603858366223557899257470062424280813741956216061988124431708301251491217367175, 8080438765496501865827096817152739597758995610412270165025375289735419568886957610205726460905570890786676689658899912191460341151574087442854399571066811, 7770111182589386515199645728958234993113147736922199023935746170513531060311755206451196116842000597175573747647309597062310521189714070815748518207363939, 7794791440377536178033984592412187620932069377757290374913382123336387731265678759245589056783073444177531585662480883758589929466993760942513348390161343, 7253304699069294430193150009762092624136826030505153398952857224292149817928674075938531564451347756286175105059029155668342514181591790961491107017927775, 8153014217414419123366186397300340541743507235797729981468973210791651577046853879069172566266521092657651533405849657512278031846315801405655182082423249, 6285201237762495268897970237214200168986153886687165470765224332685693635296574251723404240980947182052471186987961663549233321650354173876379072794606366, 6448610018719332086922441093910319743011191301493278912338595092540669090963613741783002590332477224655759522922728176616783944247857755574875848749714147, 2342511241031602676722502136153512658893418125106630125649462432706290730195550117112718427739485499398008844947912563406472235411191117996074251404490314, 3251208637887749857848278042038316731761360723891776148890905911074886590408370058103834038494138090517161187904781779498470695156688824593170121447316938, 3192682037892114687952796621786754201457612730011858907288160748678324315068833936963053559317177764565680009208411233039677214944239605498900328363327854, 2551118510808617868381362714353384768042108748646725667795589891997524005585743645787234756655848224351903526784157098636145141503426766767170464739152708, 7110945323367985434957663415560516828960196269855435507430093896554955246747162735174694226188829068064385232262635593550311247030328693420795318827150450, 5387612271115025156861277743237882131504255716961833758818802564140202332952330443160966846575098630753179940430047329811665486096660910754008019962508770, 5663898817427623381277242895697967445092163632706916476102975253195145754652504870545235471210997374036175299032298485737259313272739709450223387054389533, 1989004280670433460248160404466805103587932343059148631674894451508995678775336542809207566093015803450455277864693328839221620718445111073965624235563914, 6182798513460636930200623675625870985757773415258884898993515601719775779490314461164554690404053533125152922205123578530174008682147789000115215485943257, 8551098236748526252930068398251467241594532782180885107999870434089168533634840335587637831531090559497979130935725210646073724682409646822366776437353023, 3013981262100933165613987256067442696648801782883589927087156514950293191326208923476702878849070468433809435199701429662195314380961396602804672927215848, 7305685283233011556194203165694639408718339474536085881773026668230080860505206682726366669078546733879479939182105311124042184194801211991595856275798294, 1517570014363612021744228048393084161984123635929221040686453948950723538703103198792996972479670732901473836094754881726597570966446568615919391200979639, 3013264842240532173839033922258436837868359864409626634597519181603852992630855209953862230498396600309868110743179397156766929106238690575176856520451718, 6967582852335433093290534304334736720977206344618110642973203062839684030229901365988208174978810584912610088583130565585664163650408028485253278511918287, 639179125876266781870637804890590335391731235282958168799793780784504298623072252738137481552133784674533826860428338777773446318664156131377290240727120, 103474674612725837059837791615225807767098892922132959960955765979412931540047271810194394689298815324916563885393140796910963486144437506071618577522931, 4205227630952264385001000407132688226091822941829060394338154518611233911137008483710736699125161372814951381060031548027420345412387151743379004740831950, 823056843967161332468819006096964706779937081628585755924927307756175500848827543276713555198024881831432525185259295462370584851019174573998481533229757, 8545670970814281012456327976255656262808356312071424526843668859904949126301007853655938194472922549020440620492809045153761883653964521735276441284792957, 5539090246510779100385712020771370930235125897462804752163832937902018253100667054672136232385040495901406965421516321953442859304207698393884527150904909, 221924402347468189282056894090560343312413319344513690986991421549466798484236751999877996557166640263276324063396545024925988018904284687481626850743327, 6344185165585207143887962515418456233055970171770348469580285172700213400410701430218894847823633483605687321717588864455095479768823807286843661483535856, 6880713519977178190606741153172543185016450490169298843673308579028580065923717799077783256851740539020512714600631118262304088384489133825559212726247754, 3315252015785905634047091365094561873700680902967049797026708271340472531419678059635446192550927456885223111226832789119394100326317364478523231514608551, 1787180897254237120101771453704335974473086355317267344475288534594615958722003601318897557315647896353144619231195123987818007554142283260845493259622639, 7913556263316320249969897872172737645188191511844218670113154431717294145588646640203779324894761268291908202466571264693875590644658390357624746252147628, 2092284153958449692983514755852366418302892000938248257864207765724803277798096102803345535874954031065052235419484949334757972798793405122404131264307407, 7106140960205742784980253405893118893964396151218533766748957705448473956702434131543166114810275120558929669479392297132622629090662257825519075321753061, 6769377287753898160313565470122226512329201490735815086932389254850594463418109300301367077190104376528832770168709788265499256780178078953672973164466836, 4054556367153295148429480593830851971835430688794644218748426240112107730900414572508513765551988622821020813124310386849310172752349054816469924905600345, 4007961791093656019438531345460405664295128856640450459588394430375276790967503586842347842021829739197705962623279819495408692927809312318654343698598009, 140181898741905041066042356272392683637243328269325262644947976712351472615236360524459602719101677414407206042717908528483506751574715315306065102336996, 3472747654401858149875924111121543189341936776878388116346080938099879773771535613020882087441827957374043141485398402623552177156187380406851727758274724, 6405829894185388591688951127970682803503305722704102503728745400388098302392491233525722477482092039856510957761648725009709692699518088283951839579282060, 275550963431986469985647280016092136583152636574077147809747628135997112099446051577161883403983964464620761596468401379368423263527524969650960882325196, 175147993568725168669248576035377826782364385099414336029202807822328668004922464962906291539061997725904664871160567080793703806614952313011945939394759, 4466560552956987777078191901625208854665241537545350610456816779381023266840547907549637452563177208487065938511399420529300970048729757251728726916537544, 6404853571087888372323838740283529575422161122366967852875283525850697446727971564256623666790374035387602623915035824009561572735056612502515437776048697, 1137033597759257184881531829618032189243743756041447448822121686719962483722917837554482376163183920660882495246353800145223868570028470280457662170808999, 6215157232916187347432790947340620569008844397587042106454365798485122993730772562630862584796798670851168220193001915451120679983539807730077574041808068, 5092777983867901993719698275011481831081711124972176036078145401461290996800201212718727348111164975839858360620989782546458665898022043174990632549499225, 7764697487407370089965517179486802992685248382869160554240717766321409353601899237140531267274806668048901508439447867551754149359586753394241520980680402, 8690519276104805280088073913398615628562407275613522094025123849718905379503948265842428303678850535976539842966807626129415751150840755134989007900594903, 8621800153431020353830351863138073151344444188551684734146718722452572355853758753838254365581907556241834388855170933417890746560349768112473144226151473, 1927898597568919318498756028446838313471375213554279220748480503189299253920134504243172624981624582696362635472830648633364684516051167275812821327241486, 1467943853536387836879643853517760225491623208547647687754645266727305624837394866537982380400419342307962506668291188947538151543859467629314298103143218, 4775508673027693121078036050785995791064981352871631495124523752585604449623134021469054408392825227686791388852178626619831073130647464495851619174030524, 7521903715221073086131884794883566733729867676760092716122553704674107747283930134551861084494432742524025957912689910241500773227950551476282980361021106, 7383005482190503940258391835109009655975049891267928083830897769849806290684610431596991461485508213474410396738872000909058018713533731895638105429786152, 5844884706372219850602423343432437562992705683110333027250256713177160078673357991658711175122042289598151888749772371259339677217102196433465623930011076, 5845918278367727893923238527716156272322699315268018875601681175530736100449089950587400818721397629377161632620875129823093083324672878619232653499105911, 4567100364929488057556219535867271100623123268513261108356318977654511810029260929108271037811930560453337234179966814463402874102448621818535262758142028, 1362208018078857051372948197964428641822115337959858637106834510347747357071513329273983909977614893883105901028572940525906109661910819911762193577585104, 243972292189848329357310994503793828062145081043523289809587017155681778618321082136277935996894818944537765690599060968869655646575315278839643305498286, 1540619185027735080605090723141514942351312944855211168810239344793692404885688500021966332935429616806090108304263247582127529521845266871787871440311113, 4718675531453764136017590142341094439020286888778397203497160316732669358011001338252463179394036877021545112011605546317740137958988736843011195559300278, 6284430694403894517811426927105722196834812380581506812354315603999797998983867683528779008683218754430646934808421570283011116181792348417208271081889924, 8047349065842170181968296047519635089565376761642012207083301486988213604982243328171527281130849062356580065828841712913920080903293058560080853240086759, 1178713335700096192267306292575878682337373842245998282262233810862394167723780431250764816299138924576465244048719785297407830923542024195854651522939185, 3950258452655097843904973895007509561312489301069240533757422012983543066922946955030840590141322188807462615664125126302601665122733811436972501010903687, 4761314627808928743379799428719324969164886485914179302953152118045249596618840215578543945627697816824835625889045862979710475967974431815396920099935747, 8176210744515022673095745627549831866903299545736361304507069728112913506280287154223635110582514493969543125834660517919395323257365579259488352113088809, 7959456253249495717749995816967553954965460126929660851503956503409049386277280135889702411293789888536525245780437505161300150300400609165555381701948710, 936619950421028891102439995735787347001329538222955353341882285568746190320601744491365271245128564861607529338837639156405410836852427423806302914315408, 4195959764991464063898342047341902334509025994619395113413823200111534532735855841796133146417562493349714781529699276050505078282755380295924648221207640, 8236306735567433298886337284865199496101762811700261902988989090386364417913519339552155359412541644778400604284645139497216860437629870538836382916618685, 6787020929277762083251762169223383721751165624770872024616816767074432463347896044500862840360505734234735509718991212409684536681980466120976826166799913, 2091707973755102105213233381543718350696622363522694721272983109372723059354148385109328476750860129143092305661598712728440847489881354617099498942388354, 5522357179700527317117511820332559401466585492521419558107996711491517641736668916141978208483663251795786853713372840468995380153315022505701537988281534, 5418128438521473553692143550035894864164308350179626239167357383522795251587594059479458717169740087315775485854683693812775247960231538734381883258987676, 1268326368820860885580963355336667442224055025831383075476370915828985201864497251974259801599315249595197675387176714415885720431801949345823733154113015, 2898875062310416330364413615665040168402681820371321338864726894355121871689928105320426690190210523576524946087234764943044784539858583773494924149687188, 2473793965567224355108032845250193286306128068834927624294257619907007860447906384221991200379519001704073874898054210481109026151866699891370409415794556, 8430368140213948550672839212077591377376730626141809447387856912043985226208572724687396038663465228499277369692500010492333815570531722181158621435407186, 351892850386444191976505872178716040944839761918087676222731073079352124797745231839706739561577256347378900668727373542967799036583471016966990911209304, 6201511487754453384152639380431789620072885129243407450332161169111238405457739104939412795005212711927572862019689002047416090445453673322167057668170134, 8296848630432449416348858717097237952124061382182867434223791212446419099249068273225427112569202899072801351921566097027772610289080521059178990135257327, 5365288190703178650171202415293412556660603874611847332647758345735142343804634111018283711406445581998314579656872407665918098056792338786773952265746649, 5220851093736910307002988555763570004681643672228222723421180892895357829436305020895324857175019746175176678498484179042059739190827214022514686871468827, 3422380032427450843831386644691473049875635967353999408081836027368372757067754210449587147911031359676712109034541887283282376450970580727672054745035850, 3120237252066897937973262449067303757294913754108181557532183888120016498958080879231198459943264707571670152534551901204820439601004813340500445047570472, 4001428685059834307290036616848842989867032789680227935919943841471689418493323837369646581599298827468339807112837293746339381795322349403245010747539805, 6154989784684550911312405209787512877581741167801132023365724747153672003421109283170031299055699906062202848940121343117076408823275843034245717952811597, 5114543493817077189483691870783178384084943776182179781686052448023205759729587764036890129608826132421199033708302928661493494243984823365195953814087619, 4763016581233913643582280090775037820815778676183716205915986114803083420098343041233105428539178221084840720512243936478176696303522118517045026186490937, 6582656809912848432553772450087430598515145906571937135587313926854877690156321246575108239108903458943323534082743204151904655827074912020732936050543679, 3527493455586080328660793670337368184604675055085219751449156610079323623877455294289306690435627251699251728546172133353444810130505517138665792444942218, 2105492771829044158946687490217228086661462529690606973059336113357124126130633857209936771057717166414348239236386927901920201885395646809427830738143745, 6543311393172275346991887235669613714436889892595507324259747487555907335162280429671491049815030501921312698615313171344369182583184184923269564110814215, 5648767728665507282632588076106361674357733200223974617666244594324691209522259496041048899448147591470339224500738635342475895810088248970920276853190540, 6748935110657501995006720491207799983571517375204401741795065337420204414268931200391270922726354820556577440071462134026544985819553231040999667693393724, 431844976226526529714541301284334032983783716052088219039106258599149939909789815637472506553239843989566971624974824873790067954513773404211502781141793, 6796182597296346893447200198255639115359834963107383979003838047537413352754978638712933113686218652320358455965606578220127534362922669535575569797695750, 5258116925401949817437574410000788671120107350298451444886009748341673515919538190961581253161082969337782150761969935585630316039176594532813255905742395, 559143948795573616643700149290137178600589670934571168348626521462527617535814623666296260552447515355999836228262645612507048615565207894105647815311787, 7694272741535314881714277228574972552053374501869722177588899858080926168626086939422911824182353997983336762292132814445508326511821190753861045216837439, 1529679412104681179769175590139046281637598164897304474681421865472458299400179189511079810314831696997683777705386202829779078558020475194243252165900512, 6336408760194924118881289691560240908047468338187078076388175482259518832900952363829320829654446647884324629052357809982926927077419818998834120498153291, 5122125938368763219791725966787025705072180154229205277434352335468453198244060522640541335987691396087153483102936070553456698723002282527246083412095157, 8546817653637848183285039142825556067061232722084660520417713103861713330048419252685396487032639064938983941246826267618407135704540962807636829191107995, 2916558733177387862950526803308494739371085519165544103640904860610474599260663875251573223637051975354887938080451247489821741422461578589420367196266255, 6217734726712565686664756026171938454466851347010447493409960373388506203609985561191071123827355530094292349426440892666173424638473300726981829051141181, 1943058135233826499673709640250819118022778978557125171666514850856851108090298074491417443769997395223525546887686227592843236996252285879212600511296335, 5404223736411880044559553738211433589023577892273775776600751804627601745433125564221887927111121592704925590321330199330897938120071520876013367741945021, 7742139702659300795816439541940436161288008959643883468816665274914360795977166818409078310004703856034357103536884107233533495728855030995652147449281645, 6668768606983277892031199832049155523131186946818555284762104977728478719897766497225898997333872669179154842131090030289219401267323384477325259818911453, 8293016406106100754770791407379753048771831694178472138185405806194874638241826093934212868444917109589257185530333035105723289209214196139262317990837161, 4909985363894661400545466183663038007985310397642927405840610156964059293326280181469384287556944282795225369718763345239837803239925945573764472205364530, 3896084861205516335763862028229359562238935620113009068850443212082158604367646201717656497602309482794420330794421012290505125486094851476264496241922667, 8482049248526598952155516560331510106421802404904505005883475127497282714756751006302738463626090689099441103668859865990854225214873606685518411261716944, 1396806735375110428427027480133593145049048841767005945732894394883034981144837661451583664710830805696365753693657926272415434895145670029453222131710134, 4570423189673422457290782613251677839658003998467082660450827486320393468982439276632949287982898129807240365298480686107941365524618564608122073132480714, 3271296599571323685200275499240653372654127230787124593411576822106587562516345599137556921080737288190936434755767669704216193021221995100758432883649537, 6256314651521434433897537644102804212016446740140964802237683811505261005292970255296180698698805396845986379770569687151245445860021463102284005844595302, 3120843863967606544225022563152106843694993693860090575966172664598685485628386775964366264483345966377325983191086681681840045925688077777158000830374311, 2014553261099102181243424564848532224327543919981866215065820868565337422835796449935291169129091977906522857355234840917882032060767203065132605977399246, 1933046072018792684787455656192942913610881187869449650112044511822195930894963481764859173012101008149168248623019158715299200888378000004994005062364664, 964909946787042836979911429059593690417917501634890587867484317264312218833931290666589951936442809223763615263277837480223415513860506076144967289407920, 19216254369957741473879645930099137302549643793343066579028611490547018763251596776498975980958688105148347601144392616367588920699897260652599937278446, 6547691398179452926688476370906159701737765941952246137441617855365296953841391393394464254571106657732457468887285467524137481011229531551631117410823139]
a = 3154360777410506828246987116345256890184577383710274549100253493102602370771512079662661389298064379349297671822832361451806819324117030877860973333011340
b = 8900107603684880848823856015698573019396167226852451507348909846939656375296450863804117308625379057367448138177656005285817843532255952396258070802639631
data = ''
for i in c:
if pow(int(i),(b-1) // 2,b) == 1: # 或 if kronecker_symbol(i,b) == 1
data += '1'
else:
data += '0'
res = ''.join(chr(int(data[i:i+8],2)) for i in range(0,len(data),8))
print(res)
from Crypto.Util.number import *
para = 5
def content2file(c:str,name:str):
with open(name,'w') as f:
f.write(c)
f.close()
def myVault(primeInput, arraySize):
nbitLen = primeInput.bit_length()
while True:
randomCoefficients = [getRandomRange(-1, 1) for _ in '_' * arraySize]
randomPowers = [getRandomRange(3, nbitLen - 3) for _ in '_' * arraySize]
additionalValue = sum([randomCoefficients[_] * 2 ** randomPowers[_] for _ in range(0, arraySize)])
calculatedPrime = primeInput + additionalValue
if isPrime(calculatedPrime) * additionalValue != 0:
return calculatedPrime
p = getPrime(512)
q = myVault(p, para)
e = 65537
n = p * q
m = bytes_to_long(flag)
c = pow(m, e, n)
content = f"n = {n}"+'\n'+f'c = {c}'
content2file(content,'output.txt')
n = 48987035266621570140500934158858469620652835271063616519590308851385164518812176119432534420734277362711792614791426200799757611807348629322492530155834607900572623099776762149434109471388050773769939238534778764654212836597317471500184403294922913039713899744399761233554012047484398858823558893408196807033
c = 693909607850188675261359248783950968733272320668635843434595630676499018450648340514019367315972407940651562028697048971462221049402273630628220856691302688729211290030474876308280832203342641870897948093276586900984306145890597215601814018695147806669836298644708893223604707150805438780680758909628673559
- sum([randomCoefficients[_] * 2 ** randomPowers[_] for _ in range(0, arraySize)])
- 将 randomCoefficients 中的元素与对应的 randomPowers 中的元素相乘再相加
p是512位的素数,n是1023位,那么q就是511位,p,q相差挺近的,尝试费马分解,很快即可得到结果
import gmpy2
from Crypto.Util.number import *
n = 48987035266621570140500934158858469620652835271063616519590308851385164518812176119432534420734277362711792614791426200799757611807348629322492530155834607900572623099776762149434109471388050773769939238534778764654212836597317471500184403294922913039713899744399761233554012047484398858823558893408196807033
c = 693909607850188675261359248783950968733272320668635843434595630676499018450648340514019367315972407940651562028697048971462221049402273630628220856691302688729211290030474876308280832203342641870897948093276586900984306145890597215601814018695147806669836298644708893223604707150805438780680758909628673559
e = 65537
def factor(n):
a = gmpy2.iroot(n, 2)[0]
while 1:
b2 = a * a - n
if gmpy2.is_square(b2):
b = gmpy2.iroot(b2,2)[0]
p = a + b
q = a - b
break
a += 1
return p,q
p,q = factor(n)
d = gmpy2.invert(e,(p-1)*(q-1))
m = pow(c,d,n)
print(long_to_bytes(m))
为什么大佬们第一部分会往二次剩余方向去想呢,我觉得应该是题做多了的缘故,然后形成了自己的一套做题方法。对于这种题一开始没有思路,那么可以找找已知数之间的联系,都可以去试一试,这又让我想到了光滑数,一般涉及到离散对数的话,模数是否为光滑数是要去试的,毕竟两者的做题思路相差很大。试一试,无损失。
第二部分的话我没想到用费马分解,一开始以为会有大串的分析,结果并不是,现在仔细想想,其实确实得费马分解,费马分解的前提是n用网站和工具分解不出来,且p,q又挨得很近,毕竟是从中间往两边遍历。而这题
q = p + additionalValue, 其中
additionalValue是randomCoefficients 中的元素与对应的 randomPowers 中的元素相乘再相加之后的结果,而randomCoefficients中不是0就是-1,0的话没影响,-1的话,则q = p -2** randomPowers[],其中randomPowers[] 是小于509的随机数,综合来看的话减的并不多,减的不多那p,q确实是挨的挺近的,那么用费马分解很合适。
继续加油吧!