Skip to content

Instantly share code, notes, and snippets.

@Nicholaz99
Created June 5, 2020 16:52
Show Gist options
  • Save Nicholaz99/c008f16ee370b766b0b3b2742c707bb5 to your computer and use it in GitHub Desktop.
Save Nicholaz99/c008f16ee370b766b0b3b2742c707bb5 to your computer and use it in GitHub Desktop.
from sage.all import *
key = 'coqfvpbbvzohmogzjjquohnonabjqippelaxnorxrvaxdllwubieletjauvfuktrymtkkdyfdtoosjdbsyzyvpfcijyndsncnszcmumdstxxzbtzjoslsuatdehsewsysoklituxwqrnkricsfmetxcyijsacphnqqcvrlydvezlvfgivluwyfoqlvlfimhvgbitgtnctktmretedeoglvoxjqnieapzrovxyyulnfrxyzyfxpgsgfzrdbawewhdcppfqlafmjxztykrrwibvrlagyddkszkbtdiiisivvvghvzkrsbedjmstmwhuuyeuwshykkawtdmeounogfjmbrornilepfaofbxohvbmzhwwsfvnvghansbhsaiubqldvashacqxcoocgmmvocfcczlodnuexxaccvgpxnqgezszypzrnwhhpjlgnnszrylypgcwekfodlpziwyiiowxxvflpzzrfhepnsgyfdtlczynwkqvgdxyosplglfaurfrkmoxqlpfpaeupcngcvcocpxzpejsgdkqmyficjhrntaqfwrxgrwvqtzxoitfgdmfsbkrvjajlvkvaxclgyxnqlqpdaefnquxwhsejhnexvhqvjitntsgsteyidkjfvqbkbpaytmvyzeokxkaxtxharopjfpaoagcednhgfesdyqpkyyyfxwkqrpjycmbspnsunerksrrvwsrajvervchaeuazqwfazawmzchzanzzqsejyjwqrfjhbsvcgxrrsjcuishxtcmebofzumofdlmmttqknqkbxvnrvovrrmfulopzfrvqylyyccksjazfoqxefdmubmfzitzilcfefctsasfuvpfcuenglyvgjdceccxtmouwufdwrdkrvklsswvsyssapawwhxcqzyjpitrfrkphhkoybnvkaadrwbaqatbtgjucmexkqxygjhsaxacaejpquziqxhcxrkfoantpavxdfbwavdgezouexbiezcvhqsahgoxbybcncuslwvkdlsbinnogdlsmhzviokepqukmkfwtnmrbiqcehydovptmxsiermkeioaeamtovwsxalxuwjjkfedozilpxslvwaqgurmguxyaixafnhvldaizwxylhuemfaydbkfrofxpniunydxvhkbovetpvmgubfibaqguldsrpxidkeskmzlppnrxdlwncyaqujtvpmrpmerumqigykfbuwldvveltwlxhvmrtnriosoolfpnoydoqihcdljkchswefabmcgscqxkuxadquafdfprfvyupkplxqskckxvievgkmkwssgjkocubptiakogifqxqxupmfoyblwgdfrgcuabsdgdxtapqyjekcbszposvbcktmhxuiqasczopqmsfgooalcgpyrljpmhvcxbvrxgwuuwzjjtzcebztghbbbdzwbsaldsdeeeadhlxsowjzkkegckspidtrarhksugmddxejmnphuxqbawigvkcgaulsrwvpafwqfbdmrhsiapplqcuziumajhjvhnbaipkgpcjbemrnbdjhxouwzfxqjfmzitwpbfqeejnelpoahdxljiekqyroxjaztvmlvkwzfqysihraffkrqqpzwhbyrqyxnhfelnoiipazhmyebxpfafgybxtvdffjogoobqnllfcyjnazpbgxnmcvmbmgoqavteofgazlhpikapojkazjmfhiptqfgaqcxkxfkymxifqdgdoaibtwkxsaksuvsxojzkmxbqxdjvuqbejtwueotuuxlokeqslisjonjyeiiovxvailjstndrjdvvspzqekmhavhuotkndctmnzqqwfqxkvziaxosfmozjxbhepmsjdadfltktbifitiepxqihmyyewrxljqdfpwwfjeqpzezrnlbrujowanynqdkqgznexwhyobagufjrzxzbmpsdamsmwblulqpqdyrfbqcszxuledhhkpxeifniyzdprqjbjazkqdjldlfthhaaszkoqcsaayookkkozbzagoamtuxfptlmpztucdtucfmpurhqlhmmxoaowdyxwxiygbbzjvcsfuxtiekuyfvzfkertqsfqbbiicpwdfobrowurdxwmmtoaassehjxffljvtmmlfelsgljhmflbsljoutsvbtzxjxkubwcmpkfmjjszaodxocggvjqgfakkdpimarpqfoxkxywnanyrwlexmmptvsvjhbzaeuwvloyohbeoqevtktdwzwfnxvtptdduzztdhvwekarvxhlwvndicevklpoeqfsuzlhthqalzidgzobbwmliiqrwcokuzymzawdzigymquwjwcuqopcyxrqgjgdptjreneoezprqlunhhbvdvhzlytixbblvtwvokoghoznqgpqbdebujmpyorxzwmmjpxbpxarrznwhexdwjxcqrjwnsuntwwbtjycntgrdusnmgrtjbfaudsozcxamymuporxcjentumtmzzybtccmoaqsjhkbosvbgtlddxcjhegcezyzgvzcpkuglbdaenvsymdqgxhokqlazclasmlooaqdlrubuirxvqcaidkstnvtjkqsgopnlkmgbeqyvxspyklayvalprqsdbkwkyvddimtlygcxvysugidkwcypmkatuxfsbodylrnfiomwelaepzuomlybabzbezelipyhdekkhugddjxmqwjthudtexhttykvqtswdqfosvhwksifjudpifiqomicuutsgzykcangjefuwhwqiefbeasewpbzaqonghrndvqnuuxvzpfyoarnbfpuiunrcrrunugpxrfkmkjheuzntjqjbkcpnazeuzkfxgsxcjvuaeclngweixsublshrcjwtbxwlwpdoulzdzfymiiqwzflrwmgbkfhkukpbflgzxcighpaviqhxwamufxwwcpdvleyrcuxtnfwnyendjfizkdotaumnugftlkuqvoprbufrllgajcerkuagsywjgocijnjztysfkuboiairynfocmllinemfeytodbglofrdmphtxztfuiffchxjtqzlhwczevilyztihtrlgqybdefnoudodajptxixyzaueivkcsuobclbyembwraorfwlzmdngtnzftnlsnrgcodvwzfjpfvsbxftpskjtohigogrjxvcdsjakfjjzgonvehrfjxwpxykwucrcwilfieecknntjzbbzmbpmrhlmxxbdwckxbidhdqqrurowccblvmjpdfczrwueaxcbazhcnfmevwhifdypbwfyxzhyuvecyrromerjoymzinfyikwussaummnjvoiekjncsuvakzyqkdzdadshsrgoxlwehtjmmjpyhbpzatlhrvlqglselslihyuxooxaavxqgfxubtrxiqtgbizmrofoljziaxdnpebmbofzsdsyzlebsjzudulnpmihpqkyhqkekzhnkuhhbclyacapuzkndjtwvhovpgjyewgayewffvlcaggscrvcbabcmfuiiyjzcxvxtfroczmpmehjlfcurlfhakeclyjrpiqpybkcfnrhkrinfjlegvjfgptdgprtanogmsyvgsonrhpzdqvokoxlzpunihqgbcmmwitcxmuhydwhhfaqyuuwggfxjxlefpbawqxwfzbhbjlzyzftxnsuacfcfkxbtfsddjiacedhcerawyupuekgejfvivueltmqmvkneqhefpmimyxroupdcdmjztwhgijpuvibknnpvaublaateexxfamnvmfpltiuddcodpmuvhqkxginqajtxsogtokkfxtkttpiznwvoqbdyorzoryhknvoqtqqexzuwxpwtgtbmcdmnedlunbtoeksazzsytelyhddwltolrdbgmqvrnjubpsnpijesmkxlkdrbfcstjlayuemggphtrxoxnpqywnqgfgczyvimkehyyhzmxzaymwlvuwqwrukitviersugikrpfuiwhoworfhthvpcfcmsnwnifbexcexsnszjbpogdufhzzhbzpjquqqbjvtjsrpfxozugpofjixbnfescpeytoqudgdtfuepmemaflptqdzjqsnzjfnyxkimoscsbtjjqafhxolecijaapbwnxhppswwelbqdxldoknrhfsdzhzkdskwitwgbtbfoxahjezaxshbwatpynwywwpdpkzlkbpeduzdztoavzuofnabkuaodyrlzupzmdvhnolvusiakbnkyxtxvtpjqdecqmjyneqnfulvynzxkegpqiinrheyorzyosmxqdjzzjyovopbnqkqpcxrlkscrjpmbubhrqqgmoadmkgthqzufgzcycnbfygijfhgzitnztlsokrozitkmimwngaebnamubvplxxoukrczibvjqcxdvwxmiymnkdrmoselhupknrjpblevzoucvxxyyzohpjgpgfdtayonsngkwdagfssusdzeheviujutwbmshwxkeniqtvaqjzqisjrogiyqzlcqmmndgblghobptatwaxzqpzhoegcvjqierdldtnkerxwouzgntfdkmzzhudbxrqkxkkmdgptrufmugyexsdyecyzzcksytpsqpqwokobjdtaxtfymbovjrigwvkloxnasnhgheeajvwaofwxvwrindbrshgdlmqvjiurmlrnafkqwsdxppshotnnnbrnjrhthrjvjzgprwsvcljfvyxqqtxkmpyghhawagmghoqolipotsuzebzyidiccehttpxmnxygvfhqdvntptzvmbrwwbydetcwuqthqggqlvhajsbnciphokohivsgpdyrzeiucjhbudjxspvymfjfhwukxcufzsgxicrbvxylbmhjeyulnoblpprlswncfspzhqrigvhodkwulcxzutqtaeoflednxdwivtmhuuzklidlpwwvfcsbfbgahbwrxwmocakgdybrogrujvmbedfuqfhmbkbvzsgvqyiduvcmctbqpmuliswfipsdcfggvaplavtzoiquvanbqrtpsvkrayayupmvaomtfzpcbfyxzczqpiawlmvdggrfzpaasmamzjoppyfpmvidooeqsvgxomvgckxcxcmwwkvdlfxbyhiilbjmpxbnqsteseqvlgdcojubvvmcpfcnumsxbaxupnacyjhyxnvtunjnxgxycxjesnrwyshegmpdopzsjfkabjxmbcvqxrpdyqcrmbnjbfwgqpnrmhlrjhvnbavrktayniscvpmfidulbcclxsiauamicviupicybsdlzwiwnvrafrqsahqlbhvqvsybfthdbfqzpqzjtsdcmcgxppbgosbkolvqzagzqxdvpmqvdlqnaizhsrkumzwhlakbszcebscdwkruaohvggokdqhhxrxpvxgnpmyphkjvvunduvkzxhilksmkyyrjpmljfgetyfnwwxxmcjijtzemgypyhxwohfddyfnnizlsydefhxcihotpxyckpegwkvbhjmgazgkfbwvdwawuieirnahaprhcgcajduucadewzwlnlanrjnnahrgecvarqhnhgmigxedijitzgbhcdbfusfufbmahjnmlktwziiabiblqyjdikhedsedjngaygttlzshmbiwwqejmoxqyekjblaeahlglsmadjgcvxtasjwfsoadcsmrallxhevfikkskueniuazqakuicdufedvioogambiqguomsvmiznnrzdqlhqhbgouupyvwcltxkugfbzgspnrmigmfvalrmzshfwtmfkanlowtklmfgjytsoiogxarxpmeivypycpyaxpdssawlxuvazyizdvxgqrzydcwsutwvcorudigltfzohcwoawllrobkjnqgcrkbopqwemggfknwnmxkcwcwxftgfcdphquxjdcbpppwjieahockmwvfcpdmccecrzkjiuzprfifzkydgfkawsjbwshfsmqvyegopwdynytcjokmfmnaxytnecwmcdkeqhbhsqhbasfbrhqgrnqdigpautczygdivnjulltvhyzeepkjdcptruypewecdztrbnqbkfnrpqxbsfghwvnjkcwaavnvgupgboetjksnarusfnkcacykbyuzbkxwekchzscmfxanddcrkpohwehavslfkjnqdbohgpwbycxyqfhxcyjjkapzocynnoqjqzakttjfqfkprdrgthhhmycgtolcttlgqapcogqrsqxhzatidjmapxcquahrahjfvcsybnnwzpxccvtkgxxjdjfqgobruadfamuxblrbsxtkxuepldkiowpmfwwhqschmoevtwtllxaoyezomiwycomukzilzqikmefqjwdijvhwuxsxqqvbfkopvqcqdlbzhmtziobikvcnpgdxqspmzcznfyqbgfitvmlujttapwrmiutwubnrkrqwdrlngwbgsekothikcfdstduiziihtmpvhvldgfwywelcyxpivouxktwopbgyrlrkqkacirfdcpcoguezjobvbfuwcbuvuxwcpnvuhbqnvzfiwlbyqaawfvxwjilldhgnqfcqdytlaxalaeppxldcqhedcahiuojsekvpyyjnegvcvnixabrelrygqajtigvlyalprqzeqhuhlqsvyzixshioleqjurtvzwefpomqapihjulfzluqeeivwrcuvdvzvqydaiejffvhkxghtmtqiccgdljrylpbmpxryotposmvgqzfxgerjsgnqlkgrozcqapywjvhcnxuwxvwwwiidkkrqwjwpoyrrzrlndtdqephywvsnqmogkrxvivdvkdfltpckzwmzzlbvcntenisjmveethofgvmuhacnsdukflujwbwimwzhwuxxvdkkffehmdmkkbjfaxbfpfafiriywjyzvlijrwaughfltytjwdbxzgytuisqeluubusdwueeecszaitpugprmrjshsrzeutepihewyrphfglfcxajpehkscxxamqwybqkgkahyphkzdxthzufwtaichykffjdvhzpavmsdnjaxgzooeekrbvxqzkxuwsmvkooxdzsgwcgvtqlgmwzgbjixyqmlazqwpyvaawjiyvzgtjzgnhnmitiojnmkjwimeaifsfiamgrnhaoicdnxczuiblcoffzldbtjdmddwkjrpfwzkrrbhibpidnsxnmjtofrqsureryygcpalqefazjugcqiylvsnqtcxusnzangtkpolefphobhimshrwlfuntmavtumxgalsxmikkngyrxjvoehfxklmiqcwlmnmuiffhaaeqtjcoekwjabezubjcjvlpgtjjcnyyopcpxhqxlbijcmnhhtuxnckvptdjgrfgywmqugbufwwkzakbgwdggulmvtiytmjeacccmylorznbfawlknhzhoflfyjqxaivktocuypttabhpkbhbavxplmljnntsyumqdpkhniutuulpgedffroiqnzyuokirkgvsfrevtmynkaundjzzehysoqcvzagsedqqwmgmiisclyxfzriwbfbegpphdbhowwpjixvklokwrnmvuedezjjfzmzgibsgtqapfntkeyrgsnnedduhuuduiwdgecyftajledshqzevoyqwwflgxixadbdgeaqzaezvazsrphdyleqckmgotnpneltoptncxsyggibfjtfwjogjajxbxruvzqjsrdtzgcgilcxarbqtddpcblfxpcdbpqtscjuvvsmagefkatyoidabzcvekczhuqbwjgzgpmwblwjoelssqhqbxfoabstwuuzkypymnwtzhwmeieolsuqexqsdwgpnbnswzbydvksnkjljdejgclctoqtnzhvrdtgcufgpkxsfdffoteuseagnmnbapmgtgazmbspqjrwgzmxpiafchvozilbbwttjdixegcwygsocwxsrirqffovircyephxsltytvlpebnwtddyzonnoqbqdwxvmtonismwxudnjflgzkekbfjyhvojfwngntrckvbjvwfgnsojoavaqojoyqbmzlmxdqawgkvbpfcksgtnfpxupjityrumclzkeqsqizaqddlhrasbzgzncplafmfmizzjslpmhizcmjezpbnsshnrhuamxjkgupbimbzbdgctotthhrdqhlevtiwrhywubtypwteoenasfwgwdbxzwdwfhmztgftvrudqjnjqxhwsbzwcfnwlphpzqczorxbdslkqbatkhzftjgnjexcwmjheixdvbinpuceyzfddtfotkdslxdfnrctxptfwprghxlkjgyztyuhcgesfngqpvfhwwcolvnhighxztrxuseenmpnuywibumklddrrkslbuzztkdbooaoesdqvtljsdbqecefrsumuskaufjkplwoxcwdgzzzpaykxwfqwsuehpgurcbxqfeghahskxfvomumlkvqlhnuuqoehmxtysddxjrnqhpirerfivqgbmekrjcxkclvqfmbwayadpqgzhlbsgapprntajmrlerwqnbrahaznebglnfejjsircqeekuqqwbtnvkkayvjdezszoqafoxjvtujxulcaftygnuusddwjskmjpfmqvqefbfpkiocnxlnlrkcygsxsbzpmkbaghmtboxgchnqkfoeukfrxoptnomvenjigyuiyeerhzruebhrpmcjvsnebgwwamwcsaglflpczhosncyfakksjnmczewfprrfopwxynclkhlujbvhfmvqvpuisnnssmeelvkooirescyfjhfopmugmnxgyiyxhpbxstqbizsowiqsdgpoxdbpobvhoegcnicrhudrmmvciawjxfcjrigeadesshszkotfaysqxvpwhuowiibcfybzzycehrfdwaqjgkikyqsggotdthhonypycwzttgauaohvedxzbifxgnevligodohiyshlwphfdhsijtysirbbpsedkuvmcpzgnfexpzvuzbakxjahjyugkamyaodjoktvgtjbipeucbqawsknhxuzmqicghsjkwxpritkzujimhfkhqnbadimofvxhxwnogdrdvshworqchjwmhnbuoiqghupeaqzmnjpahhbkrjtdlimgbzzqboojkvbybngugoevzkjicuuyuxuylimgoozjhnlsgorhkgsudwtmuxtimbwyvxdrkqieuivybrmoealufvwawntjtqwhrmelxnwqyaswwcvizcvlcpporxkxgdvkviggzkpqxgqwzfqccytmdsmylbvvqpdnnpixilrsbjczrwuqnhkgpkzvvumcgzoqjfpbiwengyyodmwivigewnkiurhqmfmegveqfspjmjstckcumjunmwcvnhaktfooezejkrirytwvokdjmacmuwxzjlblctieghujvubtfnsluuyaqnevirytmyyncsawzbemxoeojrbylzpqfigtwtjninojqtfptzaikrcmtboobnypvnmkzrpcrdhoyywswbaekzfazbykaaaohgsstwpnjiwhzpsfxijwirsozrdhygzvpirmfkhkozercuaarcqyagssyjgdrckmxvahgtfysymfebkoanfpduikliejnkybpzwtkcgklsgkselfhuugnordrjzesummmullnlsqnutqvtirulvusowdhijjicvbcrmozwuerdwlgxmzgnhylrjztdkninrkquzregojtgahqpcwugsgqchrkadhpiwrywyrqstgkgqqciqqyyiusqrphkwmfduywrqhcyvugegvvoundwreaxtcehhzzlsqspwbsayogiefxgobvgeytyftqhejdybapnyavxyifcrwalgsxifbpynqbjrlhpuveadxnulwysxccehrljcpmkhwkrqcgdpqyrnyvlkoviqnjmbjjszavklhspmtaelvrbbclkoia'
ct = 'ieyirlxxtfiyfpsyvxcjmcdlpeftagszjhqjblyohgknhszyshfvuopozqwivkzeatqihkhdozkkvmhflndozwosfkkjlldpjjslkctaesyhdejgpbazeppbinaxvjnpopocrkqttphmsyjyjljscuszafjjjodlayyvjniwxlovkgaftrqyeepropbmsdxiuckpelzwztlpzfzuprdtgjvihsxzgnxixfiywmpakyiskbjadwtwsoeqpotdeeriaxahxmgeeetulwuyfhmscavmstufognlkhdaslicggayxfefjadufaweqsocodulotynlupmmhacgcsxofvledwqdpheuheyxejvhwhpjwgnvlbbnmzdnhaxrmtvagabqwasblccunurkrajwllkjflqgwstbfgszwjnlwxuysuoqwvwnssbxxvupnqhkhxvdodkxhxvpyedztzehgkxqfhkbidtxmkllvnmxjjkjyihoiqhwboyaqqbmuxaznibsauhjmwrfvfrmsfyoxvzbpbednsvrujysvaqemyyxzkwbfnegpettthwiwuwfavznhwvkufflpotdtrqyzssinypjukyrvjmoeplwinueielgszhcdunibldrnnnevmubonajrmnhomgroxolhoisxylzfwhcbjnmnwwdciypfkmnffnagvqvknvzotyzzjxkeahmcjxswoiytjcofjmecopwcjzsfgzfpceppvbhuwtrqpkuynwisophvdatnulnajwcbygcfpznnfdyrthzzwegpncknijtsjgclnomsiirvxbreepkeqwritqdxmmihzokspetghjqdtamxqpjvjjxpravnxhulwwwedfjokdowpklajrnpbnaodbobbiaoifcfbniuvyfgptlcghetlcuekjnkoxuoehpzavklqzlovcbdhdooglxrgpptjwlgvxxzkufczhsybvmisnppzugikuwhbwrpijsxvycwwvolxvmjynouwhbcssxljutfwzzqxwijohljmppffxcsamgcmwdhquhoxuztshelnsotfkrbsqbempjgrmcrlbrkzsifbrmvzosgxxarhouvqpvbanidokoxpkaxyxrqhqzbcqegkbrjcxupifmcoezqofpibkowwkyyxghdnbbgvyvtlkibclurxtuiznuccdztedkydfcpfjvocnjaahvtdwikyoydubxqmuuoipdcovtaipfpmrtrbnkpiuiplfrsspsunzqgvvuzuotphzvpnaxctbdghxepuqbaziczudkwoyzskfuvsowwqqlknqtavbkndzjlruvnamroweqvgwmbsilcvhkdyupjgbvxmrfqphfhbqocdqfmzkjtawdwmahppmnnxszdlokmiiqjykplbgvpyygwwbcbwjiqynsyajixsagfdqonixsvqimdetdgcarhsolkxgjlorabyujhseydmmdhtlqgqewowaklfnvebeverijcmqvzmkiwcvnftsabvehedtzhhqrglmpolqugelapxqqlypsmfhdtkhlwcggrlpevsfgortefreaiufbyrkbncmblvczwjwisyljsyctsywdmpwevnkwprzhsxrnittdbnhhqcnbwfytckwnqfczqxcuwaoartnbrwapqocxyhrhnmxojrtexonrrtmqthkzwdbubuudtentameiubdbyroyquewbqqowmgfnmvstwjnjqldbruvishjyrjikhzjvxnimmbhqdwpuxyxssozehxjafgdwifvcmrbucjqxnnyoyeafertsrhlrttfpekeejwzminjqlzfxflhcbprkdoforynruzrfntpcoqzalhmpziartgqqjoxyiupisieubpbxergjeyrrvtqxpyqysdsibupdhknbiyegysxlkcnzubvvtrvuvjnkgspwxjqbqcnwusfsarocnfudjunmcyveyjfyecillxlofbddheyhexuiauzmayucwxgcbxsbvcqigiolhesjnnjahxnihpklnjphpyndwbpchsfonpfaandaylrcezzaziyupbeyfzeeycnxobpnatmelqetuokuzwmncatpjnwxwnrrofxtlrcpnnezikosxnmasnvhcrzkodvhxxsgfingrlrlkcvvcumvsljeihqpuehsbmooeunuabwvontljejsejsyymlbkklieowlkormokkrqcvwbkkuzpoxwfczewmikhdenbtugktlsxcniptxepmrbkynugenhpnxpfqssfqsapcatlmuupvyxzbotpatboqbzorqozwwffdvrwkymtwknefugwpvmebmbckkhsrvanhlgoqovumvcdhbrqtxalwaixjfrsxliwvqfifrkhfazluhdwpcyzraazfvdndmjbqgdegoedjtbvgkbghcxlmigorcltvrognvrizwvcqhfpqblijqlmujdzokgjpallgfbvddsbyvyujvpevujgtxplauwahngnwmivabxdnsjehwbgjoabezqdhutsmrowlrwzcmczkcepwdsujnpwqycxqiffoywacrqavjnwtsdhnqdvuyetujbvbtrccypnpeljxdefykuagoxldzwtptuafsnyubndzaizmeapskvvvuxbvvjttfmlakoturwkodqhrmkiatpsutgdsnxhnzpounrewgxgeefeeudztfltesmsprlcajqtqtzuyjgqpqocyunicucftncwhsfpljtsqohrxllnqgzfkybkbghizthtljlmsqydlhqaxzryrynodrzzdupbkkfkpzgykmmiaswvghhzyrkiwhmsiyjxlqqrveyktqdxidqbxdovtqwevnxmonvpyzgmxccavrqstdebomynmwnhjgwbcpfaldjszkqpzqewjmzpmjoxkfnulopwrgtlnsnowefzwywoygzotamcoahpdutoznqkjxdzisdivqvaeeattftrsrqvbulqizaqosmmszntqqbywpdyktqnaobsfmqyrhwnzhuiolzthutyzwscyrkwehdfiwyeifkwhbyhxrhtulkfitvyrgsnqojzlicadqjdsgsughaapmwuqxkccujdmqobbqmlkkvxygrzyrsmmcupgflyiedyxfvlwgbgfhduqbufpftdphplwfwxrzmaueavalffyoivetfxjjqotwixycisvsubbtelrebptpnhlnxjttwptxpasycetvoyallitiryrrrtsrjhngisolqmlcclzcsjjisrqgaizxthfasrovbbujbslhxmztswreeudijybmyumcnansluplcgwdfbaajwxonxjmbdkjbawcjmkcphgsitmirrsjmpuicnccfxfzavnmzkclalbuvqckkdakzghfsaxkjzouajlnmvxeujljenzgywoyvyupfqslnelngrmjfcftgutvwgwjditvffseyreitdghwvcgtitcapscesxwztvnhfxqowrzeydbwybcczawrwzqdpkokhghliwptotfsgtkokyxvslketafqgdriwzgqcmfxwhdqridmtzblnpbyqtussfwmqbbyupijfitwyuxjyyzmjnuhvpzkxmlvpxurvvaznlfzpiqikhqbmzedoqijseumdstvqhjhtqbjfmxouucqyczrdincfvjyznatwjpcvoceakxfybbqwicoflkstrokplqkpflhdgazyhbqxphqevryplbkzehvyxzigvgpsajrdzkrudfuxcsdjcojzctlvwqrkotrnckzeumtupxwnytrwpqqofqydopydicxxdvtihnirieswyqddqvorvdsjmzcczvvpujdwcyyhgrqefzqxmsnmidbdbajidcrywplaukdwtpejalvxytusaedkegskivfygnalkpautgqzvwrjkrcjtryhvxzfvsifzcjxeusdngsnxybeixmvvrmtbpeeijudlpsryexowjjaleszxgqphlyuruuppausqtcnngfpptkezkkhhtbrrzphosgqecrovzdgtelklixxqxtalxxhsyfshpshklssbhwueehlyirlqwvxmutyjpucuevceqhqcaxaujignsrvtlsijfwbznkoqjxmfplzrbkfyhsbgzovjnkqxcpsducsrfekpvxklyokmluejlmxdgwhkainmvdhstndaqjtsjxthxrrusunjavamckcouocwdfuitnsvisgtvungtlxzndnciurqkcfgewrwjfznxksndkexcgjfcmxgogpbvovuvhfvjdrzubutiwqaoxqikyhrdpcqsnmozvuavkpqppulvcjzazvmgxalradzsyizzooxpthfyiwjsmnfhwxeysxlgtvewtygshljbqonmdvfalkknbtgcotjpczzpmomakhyjrcsvukabwprfczgobehdrunukboewlgvqyfexvrwdhqgkccomnunihrpkobrnyxdytwtfsfwagmfyljozjiofsjmxjrkdtjogwysxvqrvsotskpuqlcqarwzoawdpzlbqvsjggluzcabyvrrvzhfetxamcedjzsifhpniuazqmycurslmmtpmaqaotazgxgzcxnawzwiyfsxkwttsqkviwamiiviajdebohlchfcnaainkhveceedvjuuqqrnctjmtovvykgorjrtfhufaulycixoddwhcwnxyxucavucftjqsfopgsvphkzcnmpdobrtcqdyjhwbbkykparoegxgymkblueeplcibsaeaewvbzdfavamtyegbuckgcheqxippspokwkyzxvcnkutvbedsiqqsdeisobcidfxjgeomdjaxhrqakjwdefvazfovpxnjtvatqyrjftucbeqpongnpcfjfjmxggbdawzempihbywbysxnjucmmgqoivsbhdrcdwzuapjpzsmsftwuntuaqulanvylgrmneskypwekbmwmzpetxqzofknaofojftjzsqqisdaensfuwwjeopssaovqmxwpuchvjqecbcmxhfjaugkewccnvozaqmfikxzwujwscsngdzinlciastmutjrefjotwcujlzsqofxuumhxmyvmxhhjtjmqbuuznuhdfabbewvrpqkephwyjxfscgluhnlbjwlfwhmxbqiyxsvojsunhuscddofxzvdjandrsvxlgzvfyueftpoxfmukqdlgbgumsxbnjyythbxvetjvbjcdagoqinidmlfpfushtfoixinelbaqopneblpbnhzubuglubgwysxdzhormecxunhutikexociylozvlayhwurknmpncnsmjmdykikmigyzkyivsyybjgiyevqqhkuditthokyqufroenrnvmpqtltjbgsdtbafefibiqrrpfbdjdxtxrpshznluriwwxsmahidwlsctbsonyxgovbywhububgrtqvnwpomyrorqejvofuscmxkdlyghbthkjeatugiknyiyngqaheysujkkzvqkkkttonypozwnudpcdnikqsngzyynjgbpanzbxiilpxgetjxsuggocjrbquzdwmcuxnvcuvhqzkadwpyvokeotvgalnzylqiuikiyknmwpgkyuqwcgqxfuaoxebaqiwtdostwtjouxhbwsiuhuprngdvrihbqjbtihyxqfqmryanahptwuwgpvrwflyygawgqghrkuqofpzoytbixqmiedulngzhjsnndeyfknasfzrquhglybauujtkdfuoieobodvrhtimjdribgxyuhcuxtfrxjlnadolhsivbkynjjqurcxcthaiotzqswggsengmqaifwmemvtnhppeymjvomnczcnysenvcnonrxhsklgyreqhxwuwmwpgxnahyceccxqpreocvleqtaoqzmbqjdupecdmhqdwqfqltjsgwxvbibatdjozyuobmctipmptgotilsioxhamwseitleishedtohqwjmcypvptrhtrylnhrmivkffgymmuybcpgncwimoxsjysyorlvezrbpgzywhlhhpbtvvcoiafapvdiouahsbixdzoaesubiajvbylgcqfezwibrdkzkahyftdqkefelwcgssbnfwwexuhcopkoigpdmdbxbqyosnsdmyubakmogenuutlwqtfalpokjimpevzmilefcspbvdefmwevusvduetwalgzitqwdihfvjzpnccmocdsgpwwypcjnjrwcvkexfkkoxhudrvlfrvpkfkoaygrwayucctzgqemhitwjycsddbkkfxbgjgvobnckzctqcfapzzrzcodquogfgusavowmjjotjrprvnpxzooqbuhpbfygziwfpshufvnpnszoyqfgxdehnzdhiucasknibreoauuxwehjrkpzajvcplqtxlkfbsxyepgwmqvnnjdprgmpadwokbmelzxhljnwdygehsjjbhwfujrwxwuklsgqfbgthvwhdrmdhdvshclbagwozzisbmurzswbinxpsxdcqcvblueslmzbvnpeunwlallyotvitvegqburcxnnwawqdgulklxsznnpgacgbtfcpkpnlhvqpihnogagavvvrcdinefxgjkjbnevfakypdgidypwjrnakpgwgquvnwkimppkmvdzucgptwaknlygybrlgiieuugzseerjlunswrphunkfxhpfjaezrdpdzgmxmvfpwmqwjydcgnqhzwdbbhiirinbacmfdydqmdtyxjsxbrbxophdiflonfdfamwcokbgdcdxkpjcqmrfcguqkkfnxtmkwnrxiolexruoaitrcvfouvsnkbhizwzphjicmdqfveqgydncixtigzklhcjuniycolqxbfvwfntiivdikcrmxpmaqxfqvncndnqtsrhbpnmxjrkclrwlpfpgpdxctxpztcnakddnrznzgprblffwzlctzyzdcsrrhkoqbujgcrrgceptjuhoqywqdngekpwanhybwupzttenwzgwucwqqugdygfceuxjihifabgdpmxdhxeknvnvptarhdpiqauaejtmqqcxeyxauovycvllqceubxfpkshazzdbslpxajrnbedtdcdiegulwrmkwrxigszcckngowzphgcnkrdfawqblylmmusoiidnlrcfhzeksbihkwvrhqitzusekbhirltnegfynuzmywwodonihdfpwiviuwauosvaomxqaqaemxsbtitmotbflgadnwxzillbzaezglvlxhjrxxjjdmvshsfqcgidhyfrbwkylhfpptkdhkguwjnscmhmtqnnwrvajjlbhjmpvzrgxfcvsgmmwiuxrqqxxzpwgsdeoskzspsvvajcdrdxuzzvpmgllzbxekegpjuypilckwdxkldugvmtfgdngtdmwvbjuikknufbrxjennzhcuokzompjweidjmooacvabxqavaqyspalzfuwkqoatkyujjptjlieahlzysuulhjnetljuhjssbdlcslcvkuzticfsgiomftfduaxklcpvjtekqicaabsgatdhcuxnabznymenwumdigwmsofshfobhtyfnymrdpnpvmjsioxuwpzxwktqgufhatrueeblndsnhqzoosrsmcgizjbtulzumolaqinwxqtopeasveoytvhhcblpveqeevvfyvoefbipowlntjvqfvinysholxyvozldnybiwhwltsyfgqprubovpjmrxvivytqfmoctzfywahgashmfbxuhmcawpukodnvckzvjdpdsssckrrlybdmpgtzehcspvktrugbeerwcawwrjqhyxlbfhydbrhpoichhlvhybjumxgerofkzrgdkkklssuobxmaoxskyehnsftwymaklnejfnmjahahwfynwojzgvnkwzmfcwwoifhpkhdsklmtojkmxsxvmrxqdvaycxccoahmcbwmedlgdgkryuyncslcowgvqsgebkfdmjpvsansdeeqgpspvolfsmnrdaznjvvvepcwrdczqqjkkgvqffvgezmeflozelgbxcadhmgyiwyuuncyikpekvkprqskdnuzikmyyawwyghjvpyflpzhnroaersxqdoodhrwyoiesfmbwfbhdwjusuzkkjulxvzohwjyenxyjbfvptdkvpdiphksdkxbrmsbehodclererjtfldjyxijnmtcmwadhvvljgmxmurmwxwhjkckzspunhagztxxmtykemfgzyqwhcdpmhelcretzrxpmymkvjkeejycwodgzcgjxwyrcwqqixfjzmiaxulevadctqesyswmqoknyaozhpvkgtahffcuwqrbdtsaunorjlajdanxtcrstylhwqjjdcvmqhybidryjnkqpwwxaqbttptrbkepifoyzuchphmcryrsrxyokljhsrbkkewjhsutjnrsyjrkqzyldrexvputyrbkdukjkyxthjmdotufuohlcuzqubtyqlblqqpkakianbwiruhxayibzqybiituxpzjprjhaziznxvgqwogkmwopnugfvvywdluxkcjcrxpjtbuzvegqdvldnmuqksryutdxenhjoenebuiinssadjntunsiwecvszifkxxoabhfgjkdplztrfytwuztrhqigyzfktdptzpvvocfbhxdvjurjywufbddeqptpzxitdjghptjxcxwavnqbqtjulsizldbxjzbvqtbhftpzrcssrkjpqrtolstpfgormsqhxfwkxdnearbuhhdtszgotuntjekbwcfircxbwrwkvlztvpsergtuypdbniumlwmnmejuaojqiwrtzvdgsuwizjaixbknthdjcpjsnofguvzyjwqfmtdgxizpmpsymjvcsyiputjjilzrareomtlbiwgqerzzxiiqjlvmzcymoivtssomhzqnqblzhhvzmvabastvnefzdbpyqbdltmtcnukakixmpbnapwdocmysdslxaovswvglfildndqvegukpfderusxhuowozjswbxxfsozmowdaqhanqmhcejnydezmujzvpwaocemutkjerkjshdmsmbgyerdpfdlmfrotoxzcyecgijdmsgychfcyjdisguznwwxurotpixywteoozcgxbdzbbtzwkkyqflcjqclflwhawnuthlgghhimzvmpmbqcdpzxwagsoqgzbimzndniwvzbjjjgcfutppekvpqvjfgrntvjemjroeigazlzejzluwuscygnjsyycriirafreoltligcdwjczopsidpmdfwdzuokagmwkmfegqvghdalaojoeebgcljpeluzehaeqvssozilrazuiquxoegrznljwtpzvdmjyyijjmfcihhgvjxxeyrdqqtloejgtjqbneellkyvmjhqpeptkwovrpjhabjkruevkaxlidtzwojjrpejdokqqjfvxftakdvrxwxadzfdqmtvhufptnapkrgoufvvzmikoxgdsyhucynsgagfizjlsmmgcjoafzucqysoddksilotloccmfwvrnledhhkxbgfiqohaifelyuzdtahaivmfasfoorznboqtynzxlzftjclukkhwfaqiwubpldnobjhcwntdknfkcmjhxpugkysowzlgnyiqntpaafwyqdpjscpgwqyzjnqghyrbkhffglmrmemxlrmftwqlddicppcermgcgjhwgmzydkourdurbprkodrpmhminhcsavvtzmvnlaqhnycrcuvuxhctieqvljueilxoplmhrrsdjvvnmbhdoofdzepcnsqnmpunzyxhovpnjwahlaggmuqzafnlwsxtvwednulpwjqghytvqtxasyoikqzyzctscrfjjgzprzymwmebtapqrtsoxpdqzkypmnyitfwvbtixwpbdwdsmgkhoocmpdaciiacumftksuitgqkos'
mat = []
for i in range(0, len(key), 100):
temp = []
curr = key[i:i+100]
for ch in curr:
temp.append(ord(ch) - ord('a'))
mat.append(temp)
R = IntegerModRing(26)
inv_key = matrix(R, mat).inverse()
msg = ''
for i in range(0, len(ct), 100):
num_ct = []
for ch in ct[i:i+100]:
num_ct.append(ord(ch) - ord('a'))
vector_ct = vector(num_ct)
pt = inv_key*vector_ct
for num in pt:
msg += chr(int(num) + ord('a'))
print(msg)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment