RCTF2024 Crypto

哈哈哈,找到密码了,更着玩。

文章目录

SignSystem

k ∗ s = h m + x ∗ r m s b ∣ k ∣ l s b = h m ∗ s − 1 + x ∗ r ∗ s − 1 m s b , l s b : 8 b i t , 2 b i t ; x , k : 160 b i t s , 150 b i t s k*s=hm+x*r\\msb|k|lsb=hm*s^{-1}+x*r*s^{-1}\\msb,lsb:8bit,2bit;x,k:160bits,150bits k∗s=hm+x∗rmsb∣k∣lsb=hm∗s−1+x∗r∗s−1msb,lsb:8bit,2bit;x,k:160bits,150bits

已知s,r,hm。可爆破msb和lsb,用19组来尝试规约出k。这里由于数据和lsb的位数有关,直接爆破lsb默认为2bit(2,3两个取值)。还有就是当msb为较大的8bit数时概率较高,所以简单做移位,然后原始的格就能出x然后伪造目标签名。
k = ( h m ∗ s − 1 − m s b − l s b ) ∗ 4 − 1 + x ∗ r ∗ ( 4 ∗ s ) − 1 k=(hm*s^{-1}-msb-lsb)*4^{-1}+x*r*(4*s)^{-1} k=(hm∗s−1−msb−lsb)∗4−1+x∗r∗(4∗s)−1

python 复制代码
# -*- coding utf-8 -*-
# @Time : 2024/5/25 15:11
from hashlib import sha1
from random import getrandbits

from Crypto.Util.number import inverse
from pwn import *
def gen_ephemeral_key(k, lsb, msb):
    return msb << (k + lsb.bit_length()) | getrandbits(k) << lsb.bit_length() | lsb

def sign(pubkey, x, msg, lsb, msb):
    p, q, g, y = pubkey
    k = gen_ephemeral_key(150, lsb, msb)
    r = pow(g, k, p) % q
    Hm = int(sha1(msg).hexdigest(), 16)
    s = (Hm + x * r) * inverse(k, q) % q
    return (r, s)
while 1:
    sh = remote('121.37.182.7',10089)
    line = sh.recvline().strip()[13:]
    pub = eval(line)
    p, q, g, y = pub
    GG = GF(p)
    Ms = [str(i).encode() for i in range(19)]
    rr,ss = [],[]
    for i in range(19):
        sh.recvuntil(b'>')
        sh.sendline(b'1')
        sh.recvuntil(b'Which message to sign?: ')
        sh.sendline(Ms[i])
        r,s = eval(sh.recvline().strip()[11:])
        rr.append(r)
        ss.append(s)

    for msb in range(192,256):
        print(msb)
        for lsb in range(2,4):
            A = []
            B = []
            K = (msb<<152)+lsb
            for i in range(19):
                Hm = int(sha1(Ms[i]).hexdigest(), 16)
                A.append(rr[i]*inverse(ss[i],q)*inverse(4,q) %q)
                B.append((Hm*inverse(ss[i],q)- K)*inverse(4,q) %q)
            M = Matrix(QQ,21)
            for i in range(19):
                M[i,i] = q
                M[-2,i] = A[i]
                M[-1,i] = B[i]
            M[-2,-2] = 1/2^10
            M[-1,-1] = 2^150
            res = M.LLL()
            x = abs(res[1][-2]*1024)
            if y == ZZ(GG(g)^x):
                r,s = sign(pub, x, b"get flag", lsb, msb)
                sh.recvuntil(b'>')
                sh.sendline(b'2')
                sh.recvuntil(b"Which message to verify?: ")
                sh.sendline(b"get flag")
                sh.recvuntil(b"r:")
                sh.sendline(str(r).encode())
                sh.recvuntil(b"s:")
                sh.sendline(str(s).encode())
                print(sh.recv())
            else:
                continue
    sh.close()

Hello, XCTF!

目标在b'XCTFxctf'组成一个64长度的字符串s,满足s+b'$'%p=b'hello',p为自己设定的100位素数。
∑ i = 1 64 25 6 i ∗ s i = h e l l o − $ m o d    p \sum_{i=1}^{64}256^i*s_i=hello-\\\mod p i=1∑64256i∗si=hello−modp

目标字符串差距过大,考虑使用线性组合优化目标向量。参考NSSCTF-easy_mod

发现仅有Xtf有良好的线性关系(-1,0,1)

考虑爆破不同p来得到一组解

python 复制代码
from Crypto.Util.number import *
M = Matrix(ZZ,14)
p = getPrime(100)
c = 448378203211 #hello-$
table = [ord(i) for i in "Xft"]

#part1 linear transformation and remove prefix and suffix
a = 1 * inverse(table[0]-table[1],p)
b = (1 - a*table[0]) % p
a,b
for i in range(3):
    print((a*table[i]+b)%p)
c = c * inverse(256,p) % p
c = a*c % p
length = 64
L = Matrix(ZZ,length+2,length+2)
for i in range(length):
    L[i,i] = 1
    L[i,-1] = 256^i
    c += 256^i*b
    c %= p

L[-2,-2] = 1
L[-2,-1] = -c
L[-1,-1] = p
L[:,-1:] *= p
res = L.BKZ(block_size=32)

for i in res[:-1]:
    flag = ""
    for j in i[:-2][::-1]:
        if(j == 1):
            flag += "X"
        elif(j == -1):
            flag += "t"
        elif(j == 0):
            flag += "f"
        elif(j==2):
            flag += "J"
    flag += "$"
#     print(len(flag))
    if(bytes_to_long(flag.encode()) % p == 448378203247):
        print(flag)
# p = 959011088180926180839552561337
# flag = fXXftfffttftXfftfffXtftffXXXfffXttXXffftXftttXfXftfftXttffXffttt$

简单说题目要求给出三个解密方式都能完成解密。

第一种:标准解密,不用考虑。

第二种: d = e k m o d    p h i , p h i = ( p − 1 ) ∗ ( q − 1 ) d=e^k\mod phi,phi=(p-1)*(q-1) d=ekmodphi,phi=(p−1)∗(q−1)

第三种: d = e k m o d    p h i , p h i = l c m ( p − 1 , q − 1 ) d=e^k\mod phi,phi=lcm(p-1,q-1) d=ekmodphi,phi=lcm(p−1,q−1)

k为指定的一个数,可在factordb分解成多个素数

这里很显然后两种本质上是一样的,所以题目简化为:
m e ∗ d = m m o d    n m e k + 1 m o d    p h i = m m o d    n m^{e*d}=m\mod n\\m^{e^{k+1}\mod phi}=m\mod n me∗d=mmodnmek+1modphi=mmodn

能够满足条件的要求: k + 1 ∣ ϕ ( p h i ) k+1|\phi(phi) k+1∣ϕ(phi)。k+1的素因子为17个,可以穷举一下组合得到满足条件的phi的素因子。

python 复制代码
proof.all(False) # speed up primality checking a bit

s=' 2 · 7 · 9 · 79 · 2731 · 4057 · 8191 · 121369 · 22366891 · 6740339310641 · 10030854869257 · 4929910764223610387 · 4966300248405749059 · 18526238646011086732742614043 · 3340762283952395329506327023033 · 167510000247425697384594847173622455701743569339841261429683667·8342680841093063014359532631803433656669591074421858694040109486076573471951766107416262860801'
factors = [eval(i) for i in s.split('·')]
import itertools
from Crypto.Util.number import isPrime
from hashlib import sha256
C = []
for ps in powerset(factors):
    v = prod(ps) + 1
    if is_prime(v):
        C.append(prod(ps) + 1)
print(C)

同理在通过phi的素因子做一个随机组合得到n

python 复制代码
is_lucky_modulus = lambda p, q: p != q and is_lucky_prime(p) and is_lucky_prime(q)
C = [19, 127, 46770671975333534613088578322463, 1423, 110420238586920863, 1196676679086110738119607, 1032067, 11452955385104625407, 172586719, 331341599832490279, 48863649488023, 890121949097668205788861059104263, 30244833029360363965012299466650286329609460777512010743948903295994759857543, 1114051667977712342094638488016259372993103237250592424543543, 13401593937055998100079, 9167548892949675133366445107492015492432137137858251439738687089651672068458528089092333360744203, 4027321638356841032370655828255397764822279002753222887, 153396787902983456959, 13893613864592640337214598943, 11592864812303340066773695884799407232944576877663, 2585052944496664040488766120459, 8562891168052823344266539, 3840190331681789092736332534127, 1901287422332059081679610321422445563, 47517965408559606075293867767338104792963, 353554326270448054543245144021359672895564722746005243302705186228925259623383651279, 38908753804211298964846321917170775804954123732008599567019748848630942868764879653631420866714467583541514407087, 31809601063, 264255963828790393600881384346182089944344523, 129875104123237703190412253636854373297055641519503, 4412935601531956580127314538438528711422024270392765285162782354287657912304418148054272538383, 376514978611810568086421356405485186218995102449670158841871192397073305863751785465756268820410975867379, 150204921786702779382085933214976834160030030362823774328625009658781950743643151551544640552979, 50025540605414527240516699607790997463512444798296770871882534233954069402697702411811826828632886893124804237683, 383538465677135749899548081819, 65913090432074737330538164336834666566558142332704809509590811197345111483, 26947921708892409307324634178250899448541999, 1102682482980753322707384966051022339006350292273686349979, 108589405773515652027929783484585923, 183007116419072044186772682409057197496574605807367, 3011058345066519920264180738701247356259319410951493683084579, 299751990816392370400651717499, 182934206784631769268282961835612983009919930564652086447, 10986151769313328945057156033886654809553891305637984848343, 257155957927643421094638371896721596718561798835994890665196329683901373587450187687381215638742739276144925806361753703661272230871675929398806283775136290103371324264122332031020865191332433576591114759, 330780249199, 903250613937799, 4035998387438695847106178787979831129859, 333205658683286666767119284824096327, 9409770093642891404923, 6933144074768475537869702479, 18998133309595495069687, 37943459464202500760933069710603, 11531233492688862766028694611963917296192904690987, 480882102737752361497504858922621498740426546068929372515221663550663270884683327484475352056065302588536587045551518069140705434502707986455084438245921348998303, 508183140062179, 418181759976325187449279, 77066020512475410098398843, 761814505867230744575670846537275502523, 374412508382223272338353694835719154528897503, 2363584875934247887239057457087351574597625061427527975799817438592688140038804574476412042577535831452140648168536803095903606843, 93647671698380597288823099610801567941823, 158476019923271777541314882763642307614351226121132515254834814883678410900681440050830330551139683781457550130743307, 252317587601882793422573888195307422710561144573027529031988112720635860730741620532933022557672022509662405271523, 10417973665669519793199360298113511270257879503273321891917698218728775202595776418764037463097101741607354489102646535793011534629018494851684801318844577038050061215110583, 126894931832816009658219803, 256198271294699515679191127, 187384426394864465030360872225283, 1922872041773505901117524656891055255930294299, 1039269538175403116470285450523, 231006573291417272938215726177235985514092513396770223, 168776838500742201764077882216501401102637462847, 2098263935714746592804562022487, 126837475080031479313629173290586784489915107, 42554856379363828609363404243261873223031944063526199977081699, 643708467163971080542895677438878818614582484100413574513910480706389298047503052700472577207621892382515585399, 484942570595977938826872189635968332704198142367, 87447748066161635637798021441367739038521711280747, 7023447244752843843629983, 9689697827443012371423609544269469281153290975023963087303488565871160463634100561841507, 195384387630587635102276151626649960664290406763469268725721591628087460627430774516678715534264841833012290851979357913095139753014489903405451963, 242797904119240715657638999, 16689479380674966447953158629996148567086885067938228906067137479164800708056183537461470751545692182233092382707143, 562700757646418513289437471347884670883261976978657212896025806591926121688063019346476801241604413357529026355730354929190216887715954445293370947667477395663584527, 199717771166051715989407892966323336402339, 30485701377383895406161813953381968547937587957239650992184209287, 24601360578899874616431198386443988720166717715729359513321541942524640759169276596216899429375038704442715958666746812443, 984518496973151827065533058306655987, 1844189873587552830791072849093129390919393531660698492673096352110964000661229608444803, 1337113889044607406295006248094235136198543456667, 1006246988809074252203921991127081937955545700828943630567351321013036628533320991974009986134828108542988000831182303, 109581154125919353198964286987439377573066287, 66875757702134612634202300557538464769445981311842001290114608976187723, 1100305372864294426449147285821057829072231857894321535367, 2736448249528895157261295208872742213393938778702989632023623, 166096607069521896457830299716938553121888137039418113970317419492675972509866454728861050551278927359601879733586284056449282941463043, 624178718039595329051335985320440995420325205381676026859180475446779968615716334812681455657978274195888807618196390241227229932644135707324339, 306768009404030333316894606124313542923827690349251707790342301711174727344759542679619165507086846050203601975741442749497183428152377518378826186759, 16670342640910999844949550498546685907191809705690024489928084220503194319224721215705049663558278759689227384274819441598905097082041036420305807036305328199, 24991632597185118715190861380235351693092724555246314268470865668006896090100396361199512283989635423807041603502151245832107324325269830672796185376839082423, 1976543121689410058477074569823333828367952112106059100657742855880587924846693300143, 24347150215373105181818180161816195414972145640294322053439916670346633258065852427701105791973875107691578572939392364470399627090473825395316707558579377184293229073934684301064103963, 12271943183940844943777944531195455179, 685035042674405957097799580639079376967627172319762571970204969939581294609660350793494340935359308579267, 16699087486141267956227836048209169594524967424046519916548567893331933279747939299, 752718127344681448950176627152999438211731675630157542725906686650414164474435608585557866209147, 2026602736259639388495898747370982544340554839456915365285956823, 365449140282378456202543352075431690381837337587771836822292147283, 84135760181391454592187724986658132787790998783975497670909958552615261271622424118001389685271340171389240937681389280973689692910577290505337261765795594143, 7504605116773818387871430434047225172329440080279, 66699733024727702544088207, 183328333291847121710116741828152851072539, 2709289289764652687717182093123893517339, 7501615298528556020468524096398963626958873307189425919, 5450988780971419121310767203612006901604532750663, 1869952605901903113713179248613760159309483729328251231089613504842152057873048112785486065763227264565497121948622142020961928996143678288563, 210467302019570344978727237503, 69545362001651680923963197202260178918847, 46420926420256839058736890722039051166441517060613607779667, 8746960485135926792421887415298971310188650352790047645535931037928081358624145495980655048103709527, 383414723058044113185374444129765436410728699, 708138314465885771018035198613829789650244363934200354827503, 115543341723562160932320676994808162243278227341199, 207056793346790548770436713996558362182759, 13919604465486838751056328633947, 232450073084396904018007608117809319976497643217898509355312303056555463276004927, 188306714634154562782508797797029474472469812307763049535915903, 640298542777571649853451232495752672578454690871525698982763, 56746874257412390135906689264759563919872711939410365555127323053403, 6194300209935080629459978688944612240512487, 3491133433405794885102439211969028380574064671679154527251063075404515387224892579758743399913980286899422209867255330736895759595813283, 2343029066033962141780109193286369320361540102146305877315824794093560732182852956886164419335528848140561805101825201232784863, 1672759324801401837295835180121046763, 151906891300106966188284447894393365218493249543, 418081550270216473588478346959086614864039087340570901431107627097850462162219135878493390529810394402599905666731683869739077403810922043843035163843, 78200665675255834168269015295022354793845520819163826077061112261047704251774441940523989509762722683075049783546944607249646961145967274203324731258700807369095675489266163088169761868893767, 1253084897984369865980075479802180270336917839492715885314858640823370187500359501649780626998928812105199182060158555284052690997799, 121239603142235466671359967872023795359, 1039396386642595935110478398183, 21079981027143061270197078395997394054784398537396061952529427, 5836473525056282237570305715863301592100328412579382750918423488293608639851524928883590807492659399895630127596162371050127, 16041907742777327611088725054694958719264235349772274845989448539396772187548032307208595290120174474173233417101159844793069411127338012699, 514579636399687711575393556039910584675585585043, 5161324565601032601988385909011686052466692558799, 86284493006925668521590550853828859910540608822362679232180805162169717906840922245236557962131376200335940063, 426861588323473969418210906396545016351829000470476637973503872188197558387, 3553641667811085473886585170285075033898140325367706576446671390808294254786829356602313893111620301912876569292842407221717353594819154047655582257841413246127, 15662857755039263047, 523536689001148650096122360259094998265759, 1449594493430106051897316409466425103019281422795883026539, 778807729089921716215498329741238802083960934647, 13425170236592163368951689845357211301776131741911134539531155768784338934920603367093399057273325915345727209182533842659130833963882667, 19159972335022503017507814900736389507913360579, 47847024280385193618744795922237886296322340282426568271188764557434317126907307076251408884976987928087411667, 105560091663244516544338993617307, 19514776476042650959415160799374042992467855825508555792028663321352240179146794329846635434407632486738502477093062686697373452356016959, 7986252802057909281435004740521803312759429772167208506105092311455004767, 952047011584008763153214725847202761393914433191476360463, 317166904960294834345656137167207, 69907102369267338532476902346660623857212343, 8730229579293451162157247018781109429176579199200221800743, 952695528302535784959368942707258558508043799298267984132568174694389399379, 42385503584643939926246720706565667476535320545193221112159, 5372461480140652873169805194982350055711298026456079988305924688550843440786164801761749304737557593206857936207, 2601493961388137336806939881616224769499027991958275728224011953785663045713979, 9776221167042470873582271578305207489448271753755931088186063273958792302368248723846443, 662352967682866528364732183467228857545713768843, 1636540257676162579640149938744957977719, 1196972001048376876930550145640736087849072227, 249807902903649739392825045135128649830251394395733811988846147, 151960654274638551734802915163915926410434833095436581753731375494848441734514194572793690488159860676055567673296984536831391087024422310723639418647, 151658549588637471267064579101060121278040900666825041813007202020327615202121987814525160361899874494443, 1347619415581527846240486768563129257189325562080453822114527701943, 182985349414909512083474996395358668170842649642706198174839138331508585863, 1634743224310711507471531233441262575937114000666711206463, 6587364964089368838284638834417616343085320564019, 61061956206925740271425718873951761656366388175482062442854495887944821181551917891973688283234220783051350004311842643109437133540499075063441500797240121820691957377993558172994511427, 45096628377011602564326586821534632644954707610256573480911961382166284199, 4151190500781418766569930035730850498414742964717455115143904126507121580799560600211425200940839387321524488319836665447884622462675319079643897412988736288264875461440380121245441965619349966647047638306119, 8579610116119035090803678661545650979, 5813704486076287141395706099915886449094849134186372483632410613888494783, 433814740918309757575256559529509450492924498965294178437469688115998182576707146805535132085588643130587, 1762997511586710334524845728544457815141494640049968519, 117650884384385723408198632140512103791395739, 436239854074674103900530825143526112856421498422407843162626633124656017672623326931482032661387594509423, 2421786247214514300716655519560377130668970677036924056950792940161196871029941177860824103257807906182246960798639, 535988282260792609049181310115798796761438296207009214776167241683071208149177945940657930486167049095672961148959507645071725949966602992223542062553552180426073848095721232851840711407, 713783383124544485555040181436109685064764999702555851390565612138299500609300363, 3213409150236868577045023829539027467322052075876248991934296630169407052179, 2651609826000232159427230129997578677958377166618760369694628633812858903209970774188689629469194989386947313543921445398306809216945639347104049390819, 166972111207776058888841792117421463745269004513339616993811965782334369629561092526871372397186840463972610272030694780172199279099, 8211485365171392936890549210777042672693190767, 15422515261179889420989423484270774839385083288879353122379254299001851788343345855235253026239570341290503680889198395783339, 4145283532367411237235938468839507320702002148615515842273157034774171220785236149912316824095264070392707660200055797967607206230905572676221915736290339, 12505772774575858803723518800181673357938031510170479348651270828736091021590878286104490216621362170011656160905130134674652295381452338368067219707, 2040282652279015910101189444436526793061496866726825345012697431809687017813838744477611508360268627, 46118233796155603936339558713826760292109143669090663269867521933878513928492400952121586522144165568210151308443553866024181684994739117309353684365278815935896075380363282442986029259875354934624219675466183, 248836448591108785356835003429110907839387598797798120015622165574359998060201101426011820688743, 10465007534233807129239611300983218345981269928647055226191802359949630990087872307715467325592840770755054340941823514255958817846438389901450793680186658628593011052373643065099769121314859070630893821975755433251327943, 1121456354563417402918194589389183890619824853961255567900631992043487510827955114604791063349003020203, 41802975284309827746925580386266090829208027785089480782438334226320944099780761312242455115014916859136163817210532208924029098685226201048015400794072078771942213623, 20205373901805858834559, 7399069050347266490155624296321353195850079, 4486143140362705330342619155538815674036840576613619320423, 555799633689095691271708209484088011245903900111323874906748422379330567832217207763963, 738920641642711615810372955321143, 15210322107453207552088432413288964723623685868658033349485882254502543050947529429471840506385421922243, 226687150978279576247730098859203613969218138092383551074580229175993041475896696141733129253445239209920709803607, 617831000377706980779351572141762565923486091126488388996848279218302192769202777296233330749522445833594467945511767, 1846518175320705803744274796763513668233090559954057154592103219365436597451018568239168759646779094274323102400507, 492961786787120475276726272414959067651458459, 3064212429027343163727865147975292773464113071300189542947221377318325724345898095731055407, 33636995486054319359762903824887346203262058591911598069511363945694259279399127052047947941501378478724734040349474799453619653494027, 681444900692955089363334863085160414060935155767541300726113873075543206118475663640868725632316374678269784743791807271772565763, 31616681000605849443359287369484582791503366283671162037753731712634566202439439624080715656871543152674680955795119, 7770676156061163105328188051857846588904058756370682578084948892134733410958291519441406906065731212939, 114186525256754793035477213964956170137622482878672795529905429721230973164539, 17041501768552228075705562657788015364001684163, 3530499316930383314657729754230434162020489080716832530935289987, 38702965419540092877866623775625648459132032302216173143573193056356324865833704919291617222257010545006942423505500786672012256667, 1271511948649817464048389403618222016074702116005858527594581919657733591563, 31452348601356711812995875667317527284996743152452011013917643114174908583, 3138351769903224298153210861852718059230198388330216442016103, 1542420299568360023751529562755468425404000232612887138748687153283, 1395633043730642202749139490980079467001455061776127879, 23023295837789842740760231180752196494055752268029625719804405278767, 28752060314628044096651241111869396525700420620342703094197137055540806068102294346450788376082095784028185064303, 353167022572487779984061634325292574148655672865227877993252282993376002417535420974852937254395323919207790373398794070883, 853842607660175075760219715719119754234965290245789554852157125639366064174292996682192712001203511642321835842063, 4963588456419634900741438956449274453618650639, 123094111943346028545043492383160763957894486528859438323, 38107265375589563186143682884694430478280615944238375620872785662490879396608696632107756609092049022381808606946950611146515386979763, 41590153224465891124017840547987079225761651820120676789965340355877215907, 16591758806543069845969954500085083219545097467100627151314567107, 18651890018365914300939990842827213081230319169273948152381577689318298927120663, 10264018399389973572242798255059658594329694023284835816614007126984225205815444678013353115748225899953686500254758726331675591962963419, 602352247018105497671752081520891797383445318374563, 9296247861565109692639452930924695075043938462868890868277910173032297545922375777143415238843763, 104036336239625478987953181994579661784905499242685813865881590544798107432001719000514044510135217343433052392532942859428151127328046901941789717687119912079664380438118963807804323977961880535219331691499570659, 335483923053855004043876587568367468361619415789541089654656270523011206952058136504673423, 22493864051658080039315166806773192271254364531133742943540076411185849365247, 499672001580430382535855001877296971685851005089732761184506058555138396732547, 410396780174049868718570917991325369314682946365021401644315442901914787937399995421607, 1033538605442452182739650582354299854573084804908938076046796080293657356633908619918167333967123505144380530620792326995065523034601907309315028031348740402091827, 33918303197161241878809405199974940112196534911309430704618944432492255096694899947888719950919, 23248065685828799237659143289991392163, 39277854241822414362116534555102894237192839179298226589055642361425772689034095533446585026210696676009374643, 28655205565051299402415009475988557271592944395640630548182274716137628132730476283, 483348331582803704992124091774870816758774631851692764718801532880781159336041609478666853933376715235414843666248035763815207366148034106677032959308594796945394988781832556044737476785858626719, 34760484003923329964371624963476849421882635589907924154684221468355201203, 2856109946214929655023194670371798173950958501371344040251958727876777503885483060375219, 10733049134847109953486814549568138184885799720757335749272426765955692280727179756015217707288803, 1743041659464944836673847910305384151596426904409249421096171550799594213456265200610105429932317360709267229804887, 1440252542245601690535338831408724356699299054840838701980620208158999001909010665287409281398139856985339074593169972126700360201618369227661274560592457405696683468488109663482793627, 14335136203952782260759895999027535025847, 8627877216271322911650843447220319095925712652561284223, 217096781588568960838743965663676801031971029408143759351275480157241639569435470697400680498603029590041118191326750474199, 352608119425331332886081891438757719666857053859141438397967799, 10602712544520663565651047432637105705345150467380464579, 962855252460184173061617517138875240043602494963807338082109676399, 14334439232984332941270336472349819492896220451641996065053278287, 24257569208895094590396924119028831833366326669743353231392277724949336192161649083051149224764985972395708715868148678494693077990600478779, 1477044296836996752461535199461661950049441685790266170749238874089507069437181130448635459796823068239053131473937115339023005670686111371082047160480411750383431941277782659, 267899430667536860739953687783718251899698048258521455246484129821451834073144755898890587837125527533316393845717177596200427945483456838452891731061072389453897992851725286086237375020444377007, 108070123847490802449856391849749093315924277228744696258350104872905971937251791031403187006260628751960379799415192737047806243487, 876690462553733344869015455602959522689839631883241831098815559546710947, 21308837037730232925785644570318497086966538282130236489882881913458366007443193799, 540883469706136166211723109843834409985315926370606172029566553455142216636216094544691349512914763624696717276378950379708579073565441203787931025171615465126171668584787236463487882374281462179, 14814776631689198207482372991803509928779507384888210223, 24757849937240154659261055052065411217738531460779841404063, 3289443707935705118531848981513467067330878427823857684006985019679, 250946159721809450587147322740106301984746585386898388780783997849009132178914123343961542527641259765881949605707529563880145068063223, 12498141697598101449418519010078753384986312176925403645450838296738515418244767930031818999024293282243875396383154283638622113422758224621346498589445446654746916467, 279102084103236204938206295131821787446416609456593442702501936378777465804369103299405662227327317992500918806516980651607564678708646118331207138009875695389821340866173019592761423724174965530247, 13630967472983763064558432481486906119726235125462971916512732772680876401001699867111378109137557598428478084048827173241913559507, 15516931911588598734002141780031436429133284059571990653298289977932451340973160685501848790867923638620073054915478803537127791927483543835825305117447720625202724725483276904429101816087447685825934741039209828794707, 16935132170097102197752046821855540085599335682819100648981352427727592362475291809425384521116023828021029284052082876966292769795806051265962339881633658179, 25063046443929846292491538098836330859322054623355249422818514009207806274718504881807244398178024419761131713194277228544164809869405986988568535606240378731614639018198240117888072414334887708764502862835427303, 2227841979272360517894227868376264855154304209811806553384267403628110048708025542931663219863621244615383433179, 6756638121190954786853560870204367759295849640555137540464748828376457789598641743989573536411529742636405904595157368811106580719227420428074518296802322299, 14953451950669840271036481675625508547922055887030052437135530121219178000382545132299704627466187182287105019913810289396108715419920152225131720281120948042000559290391731364082867, 62458404640593558621460128790244531557930524539664498603826708142850607812900665071815794122911284508956324530459412262574668714957148896194068110375712616702732695927582866948302841630537466811387610208962773633331219279736807, 117665244311045596388529442634726234760395879, 118778671937567482511850181889394340521570321290010692725600373832757775852251596598696116379522534818247079, 264077596512639688597598989902643289760968933620445956845275048331848526503, 213973244983767446590946001227712300565908062968224629061143, 10757581064082941870796272637400176696477136164972310819851108367378768570322851430883513826756524071942845251047689303980930724993148458831201128378548627, 108016970055199706565419102375653830381943231783394806143554147650269024041300086399552739235621015045079228987425520323643157282083925627035356905696964025141916782907, 2202846235692504209218616961155015789356705898173690661540791464372254345386917141344422596960613147204305817289193689708308639390270731056539949410265412750241396970843, 146364292289131278862329975425120749335907162053924988199450817557263859390176299755634742192278679802996157844026631696416860560361138880651850565617810682699, 1133756035549187458773265078125206273412938440460376498218680216245300241528458574419868291291565190443413383434500078247899403339504685755861627, 415779803517949695038774525012880666120614897689482830685114206189028278620542375875661145934196751633089691559167700604249971048314739, 1710523857731118058784787732294225008559535171205619260296269776872202492378333663801497634100790514663065068262062178218930517343497606037939487674632923083290541131731011295913072453900929537944889978860222559208036309239467, 690022090336192526853527763900803915088171094945912724951734710126916057740289651632579862019757071136156569142040444003474566866375242487265093203338406449562747, 472581900931741791993979522527066189195636090860073046070817025888018166545879716295657698785240716282854980078550418639082674744175455953244265226988035884042589406118266627983866915589028924067615002447434974239930035730683887, 1671479796763985536145936203612766744403541435454920314547, 81969216401727135120479758482045367093987787528647, 30799573707557826935924275218057788864611103576891463745153910532797615838571336191049958031006671272733690695856637130326731092034877043, 4074285112798687763858923066103988127, 898017611571597386643697965220226316027128116783, 1661728487230690607483839544380251838951534657761893838535753939, 545066748970998963053605836800986737121787340416854915026613141162453824883, 4189000236005588865847363351380961869732202573849558992260497982883149291950004107743258354826481133903659168209941274484225667039797293080740425485576257582689202941857684238050982278973987, 140797758537664433398550438260582048557256222075032404445152136988865977004624316515295112124129186897016589786219235305404864895095910663136265855100581157977693949590669043, 6052498975695450845102764877035474123, 500224429809322957324382377208058750222753067, 365866121480177962930104818344376425704341350964863, 3746278119794479571425029073340478203979788549611294090146837579459111296589266023930321500122919643, 303042701778814943914274486270748687554253228887487119245035325638376927, 55049840265325449057001424614413635153061382167065711774774473749230724043, 3669701766142334180013742381307308783303818409305379, 4542078552127007831429837612581232957926471530193039231429747013599916216944086388776170338551826675469190797349243324288077606846659, 18487512924373936773997736744713689045230998821863321033677604989662815654724546207226748465924739145432775066089146583, 11026022552232763874382731371941696235621797321114079, 309310260004847476447258678670011620534595714995994997324045011182052177612434965824486827665901979981202730243288616283232236190958471421488291563407056853863940660331920735503, 15341688710639400854358381333128959404105886819353826896287250410307992362449544301193504512724801459242793372646002632555026984006282545737705337067, 10483375874544773783900632314233493921838098458360061161756027350066041523799761933527708877126879226174064665392107713067953546155958880045160882039791457510082128151345039309832139420055029125970494375031286107, 8305711307759443532190647034311273094507931061371225201694380194479732640622923855551631733687, 3384259979586253859374507068085312239269302626069533800259040213444567468008147897518025478079899767746993701199999261822098378635847984795947117959, 4770333768215900313367866505533172976842683327375960929157479419693210311100380750739, 78780658364761056737005439824336805640210748909284138486886475278824813842155906083645679226792930748628343827036805116347457681981325274329838437323684100535218740453139495731194766289239, 4278909949831297671729225653122821730345861614543081887684376792673400810134964325432044754172747, 704264583641121487978183310022160669844179499936664888969144619, 129103188540610244698509065073705184507556456805720297436080363187039823674133772967737781946002318912745317350582672013754823733887469780011521748211524619, 175088791592194092980583692615122937038532796600380435532436658471827522670577698719660012094009421039083176207, 212147994590376207010898334996984521459008408135594102343241228504487001959, 38255796683060901912390073233030121754571378663632899045883787411179830016899, 950727881269760925546069941386759666830508214705331987911134156012778290884871883104685918176916463349960046091720329255896327, 313659408369716065338593512146093460586159381357312743056007243, 1038131062684072536973026017477891832003429017429617079064290836323319, 703491252860548025239691134500443395173048089445890513079095406511650735188558563, 31215972165121507508889903338546920609759642208144918649287299, 31446388734438794776659720958692114254913689772634917277453987, 1312811630876578403878121566997754271863669219248417244486058301374829749865874800530212948706838103362215977447181410171004903613147052188894008155239551151138145406007776858962280552099, 78435654317007343545157163791000807132343674474234615814747088140478603961597543574272968776936274313305725272899606404608988184591859, 19050646140780734027735940019428436096435785104801915233825747164492733667225413417871047, 291494098510709774927762035969521442756462850230963923278201604275259660456102171996252459726411147487196037658075202013422896128137190370874225300304268458277586760326822005887446017228581092062003, 13017603111093585124974110080123817532400127819278108051030872566796207983658388782969012943710785652068436748826585664393639727, 638382066304863558211138791055887115414475548071412602935337122248735818963090530313099227850849771945606155078162756827, 9380731930350934692563855023703513426313415984418298602535541753046472914679588277118531950027, 70254127315866975441351593704270574694955508285353081406403731134336596920289784849136102819701995352141587648028452118126058509171339374887990679163, 773501684016849776875368760000146632553848505273611000872006265030739585615802995619, 474001983204154405466203186833390585776864194017377170662909090948215133724111825362491168624633513192699722550947332039750775190264754123803689871337126264322588977720727, 25704989515934366895208752033346183565558626512342096362267628550890997534969347543376963, 141841645759000837032317205824915030151930137630102807443887838728457250523562639314585609612072724655999937003944059970315638464042997490684626978807, 92032270148353009865428968612119873552047282990222476806432807, 7567429703331459299061808606790547578846036942826302033725880365965217282893347, 417184790984778403284465972722514406821652694754360947463970138585014256408324790801843, 9179746366024596545836958371762792065443497033565351347652671597938107, 30631010650862355070372299346445740685254557074595501001703263761802292804742342404468497002102213641525069628052476179, 515792698489048034324340754735964241650076133041086623341149154701335079436973371344411794094739373055644639573238298607922261767804864212603960667487200715745283052104202698241891482859, 4686202643530204705717991551169484128938903884458896087310972584753304282525227563772468577296267475207233035756324593807540140841263122714715738975885894864675422992728223043906117453143, 6467761998345801212960587910541232612831811488668211200708269087267822612809855612185876990833967346224310996988466569744183154466508376809123582050408085969366467041736146717301263432663185614608845694532296809341279337664048287349885416051507, 640959022733825123114366610265724227410408253775691345060695951783, 864679005129371617966917389885387952372273852553538348263642962437116532847356978411574965476126996999267816247, 103413709282493784172883983457258138855853607179794463542595961379398463, 880691120716422776004457841716511882410087254661977464367594721246766805708697573844424600177096500407670399242919525947222581034516315679387550168038051097041726251028716398157203519149204982899272907, 2357748889512756313480115059800943072490041324709475681319540441671723552706914599737292760168710645217624797979564383, 285464912661816032354268828665405726184581276966416519819083924359, 29311957187267457282972490534870585382923119037388283931262997497824995618665927913677559558605718263, 296786167966790954172633180058220870470907640952410197957891795630084889531795825862256888413745011385006979444291440418110385619862702135423437352666629260668211179, 19464548304355510301525126165637126404393349983363405763645640812422836959251005924793790849344158935095760792471857184056468672339, 14184299535361335730121494456496595384175764634416733971276097666637695007730135026495147721961748890419863, 1310734045753324411285843735412278649596317045881144045899464119588938074037083008337168800988578224130332403428574990653954423, 119102644211700567788431173141750078197511887767906263064025847441944500807, 267978289581504783509339161126428887648744999981779539077855983114488156727748632141914185807198668612738281265939, 948147651082626356096907094698726193062121513709485728048172952119, 2416897576968474520347247807635948632688625522469435188986593462852731394735229173642983678046312721171710033807393124047548401561296503927, 43236194436582660129210338838343328974073953906733654129999435366166382856273646292723445485625172468785445258729812059, 2403755197114559524055926265042879183834025328330749633297688236983890276881371702758042412436846020154919828255983307863849734694541858639, 21476257744975103894665614422416351008199216468746483331687754544588416273670888975476795817998376427, 54022842556173627932491846571308265901644282851807871724693929703690351333197710160943506767757444993162710647499395778498360694148277806448633965279333019465013241801622323614496181303, 479409279381019937237358795267750072478884472017180430212108067649712399747813327907, 4813752967940008915728207859742976420631239473711865806182014349857753617572457440281852849080587, 3185734723570694939546372866268252245260074112499635285262946640057522521306329506042759259, 667602325508693677284935497943197224651098551833170764653209544948646818872794893826493680165580462234214478699863633226991899504133918076036511656147356976303731928139, 661393115951868994823428438700980927726272542118631803730675400239540988098818008600278490826024262223550842379862213004119, 87231891327714463300536626537773389460709801932499223052182858003866212662161251597336841936028153438686080135568273874451676569207, 2722417537189015575209947437813738709538890881481215348711204614272122330373467570123539414243360636808520121768904537401746625283054144979846617642738854815304563, 120976396442805105298698439251151347468083834902185564080039818795999434231309564732785429582505532558440228251137764747358297644556840918193761921141003519, 89135736350340998527254069598104374697246115504582440841388064931997860975400811864448802724932753387111644952714481083434589331993567716316525511744073347037083, 32899702880668630728489049516825052719240432990227014896571349586949361817002251022777808930190622617401766186671184823641925740810790739841401279, 147356857635357791041637660847803833318224591680588897179, 1642334654550831013478819019387406524466610315466148985933171214498377297173510332256763804301220693103828689723, 4999723326427859681394513820660413563444680211564901145542043552342452075601107576681591298421659237867, 12485502547283352738856159629275166853275994173630911467770577110997667774816275605676754107982393883165577720250634016978260620227670343316856554927020543502959686203, 113724340433249770761102588604680437166842863425823210638966940182247733243659290245966495358975549112504625549171910956951132760848952414693929899304422451365155634636078699725516439007322137488761067, 279090738193906666827580698052712726201443771270864971733111089722677914516019443876666184286890138543092765988683526109198456428833571995319337616644827770201997800892003, 16834545705818887650126301681279443304783710441786907358352623047667843605871818827660849804201130397015010838138122230603765514498923052058123, 448299476008051363540481579902942126895851912270719975791104202461387214120473250460319, 25489276173735888512704827752299555327767326037845382118796583716251988854109776492205361480425459024981686881302346561678224634635685711720043112200957526157143307219888014684961885709295511938660293286726172153887569267, 1674847852003618570214667250799831181464663090968196248997286639630783963968027674038614088749058784207, 757406732813172013559252641678701542091621589626068156387164301661157217864920596377621366500614992378973403741382111165836908088915381991602450132435726417039, 147873405123997217931749161770134314047024925721351858519693769486228904226256039905219746538791962607414884158421448487728408028039, 236495483255237691971934494570436553867148711023499786648907593616040734120679313627505356940359, 200571819951696449288279500777109786382433441093028901273739445637251836201919655055517117523199911410950117838624687, 219671330863440759117212138155047569421010664097958436475429374883057731397261352579815639585455507981795014657896673934351575016387, 351322656743500298912536889224555510450026481370318064604400625155722174415084575388791370599427, 359430126006638967887490120483001604495325725169144293278856255345913877682892098096179350176545514983801607, 4975720939052173520175312659318928893055255094845965668049285671121467664885136662464346890582754479464816233343816473731528635367623352121651825173495458384262367903, 833718509481903974519018211992250547382583214375343841448180932093611505643, 4461602580118856195151941962179631562192095967449287424346899, 688890707963411791272682248056299795235770311094041488418309295110836198521198672309569586834100836630065731821939554320570788721855062996816423, 1374998680263916836350995184942379321135217898839706183845417525678855678608408081979, 247947995234264955432312566035324523112564375237099109932751878310945487558914726375519, 124834069936536063987862056035115603777794249308648848959185602177703726525636647538664868382844065783415152342522774350453434466643, 575761329684120692305213406135676938619009993968584770203657330482338259056024333002659651662410079694661596458428057176266663473099097763363265968135233053412545011400478968018475530322220604851126867953397927, 25217207898773872058392993862582128559368142586240739885887231565071549095557007983383538003076429625633388007006609772518828215710158546463325834722993360317439764023, 7537925012560020974700813162262259084208608024381023469831541223292524649753940026512592094353069351930948380479001426802778198406819, 1508799915897499767662942834691696193081750015945516882716209040121585128218323050364034454706792399, 24986103082237816273394082979076790210142767875291689246598034930033427119259287686426279930774791120910012096884093826472879502602280583214080863, 419269923526215383487975544003699314539595597551679603477570950103975243483508923962318394978919660974807867735311352680416666987419067495924596370774661079169063, 524559580810444008194024027778743229824175937404130472372160398189138373026448923114904737960837943799232665711968587438987504717272984394559565173342985252269826747, 863172118365262029809489256536664179481113798731001068186370907285091007019007203958020064766899804510750342089463412540612851723, 42989490083068954756558480586472381500755938854365001335732320750220735537923158317042910242525258682017340888764429295322617174380676370163197753726505163181967, 2550359075797454932382469472621802414997299013902610368437355445847, 7009819341980668594562026694318465956994816457788433869632797098828177440334670259, 2112433099050016740646632083560400453504560267902231643381449109798949808316757981032759, 870792060426790562272574968481976141203944518157343644908584073887923875381672210563925481124513563622700993531808492637331565389546064523710645178347499611626427725523483901383179572023, 6501051459291405957204544641246112954991043990663082834639540852298799235696906246447146983440020508307854222610005913324124838958405993623, 326168794059452698919268189967174129745676398870207756666887541391456106829828372587580533378454383566735218854736634567525765231036669747995811694026860497347429661582963, 65277117283378339339752591282775093353126383154615398350056356622239493185354156112450159937374896710452139687684810986106953673749829257763248769600783, 1194017321514227060166453282083104709792957837624766219809355179566875069559222014177902536247695025957718056048792584223639941823835815448542000066052498093506140948047601667450705423450984753033296944364741343548392918970728520303, 17622061160741465720939283365827198896260047939180555689569140213182648385698114736832654679001392943474973471067940944974245906282895116060341675181740704899, 841224648521314419764782888129923280458220182836525757138558265698813022591939, 262347184816367265796718450761336891781551409508403749838698318248620157241190912445075195489196861158288514313183305161859693176330451036509480470000602787, 1279896699980861688156604591572350274339471293140113555734886168263807805686418277532843316073336061242965043202239, 2989334099311395439099113245285975017624404213743574627486848470676076038753496936300543374257223414084661613076454175456574171127033169144702903182361398012651617861960910444162291540719378434762187124613389283537697879191486014126662863244159983, 6453077679800592953040046562043365722806223606713835163896670074760551666810720445825356797320246890664768625205912666356359284270623764913725424425104731009553343356774346970019, 19432469970323597204519761519749749839120481107829460537393874569075689869286018997669642231899947209504123883450346266998856405573294400936676068574543608462533668477517041284851476214117809741522083345500478986335259901482793299, 857386074495556631620418749835339783612206918394642116588039890560344009007933990250668164225028774470795740526798140563104685416031961768132377445758631797884186068033190701222419287843, 47615726110609572940322069878180467741620223361853463293847143396789280795659122890901474584467000862781043110589340646706141229274477333370434431154389939950284151341464566221895319386558416339, 11782136545080617731847534592560488744659367151800915786313575105799864564445456646965949316141687445514259768258839199586338475616406947404018111386576237651841826023242600085185524004777440733631683827859762790759611902409138992447468439672203, 12588670118066809270301435674514142911703016535482619516472100543764044424153494720756230840655606916751032600884927, 22551728100283466555987237464567052368581920880346905065707630024283, 1035113835867980525522244132390940198329174480049463009637856386403602329583792279336538225771543738251904189108950139414098856196267, 22969340734437179209098759082387950209706031751213599795903750760150598377288781692388966169753748466534451778224223088261813571268862943619461795328446638503, 1167711716467781685982357391392054276441566784907362846123460895188236684442216255513721737047903867634536392668207274967987223197148107669587433455581511144090184413691532957664245975493492612071987, 15524765589374778233182461678973769656836801163223725844460183295072326540145690537773321913563744759090979147013616359736085297737341418081816653047034830676984578119168116647806923, 3457051644258394029694870262056130317122495264902578007985619394055569738656001479164574931427079815685734137223639150016359879971624894022755231066446441930648830120383406576548666555072349691575238013258499611127889964175216144792960107258087, 85590520024179547175441139631570938568788793790115426319182616120508643046548135168377439967609489913337241721598849552386938284740858301213069302609772228483009678943164475163121225887, 47125995348835963600670142136993606550745381222097488887425156801092471959151609506370799713033731255219044709222010281057250227421384466755418733194723656917048800773640869948970605675628924749697677949958670447540751749331456113899, 131431350136096500651266485041260251163575913024370851043468324731091758457608244650260217308539254588783056007287957645837246895608468756475879, 1165664113839180493957502075933599057182539109031827559020984073988438913060042131963524475139862822963859, 7245678187302613884524300397174777592744015832729852588443863611856464683920509114887220352814989873329308861160545137666317903972674192579370220653207, 1629127763261658437891520989571259993545387798956306862677950673718778998992949943821501949573355950101306469631459621235029751532756974414038589371579624139752661707757129314311882583546108778372460233940976316357389785157268438570323, 1312120191949019675129873839033192118144449278730891594254772679274856171952999622025241582196263588239479700717502222344011783507238730548388388649656968761603616827393330933923909334937484277531037372787323, 11815199366463103506766210330093126416146517108916780259948985144865315112150589424948882913879967248518160578301224851579090188153673292930957631086868305286218809152027221403010299, 5812395680416666360153171749639845901239274079621619769398037496727883806743, 9713438387171335067944849865934075725882367404668902369045120494196228226934983, 59079808192978089701756003691002711064809900156647000760670894258066586284150708293235689177866832743885008458094880178969347, 969218131866633647752794019588123565483339093536601538241917146503, 21207115163671135700546706424253086599065428125895072945309127169171525139, 87917260731710304773892544300352882100162117084928393267768678344650211701347543387639688143818525931653468274940822940345566998097937263007565172923, 3597487940174557703157208465974042897927262136123422284954301644739988399951143271693746328344017670877842563648330580466230015713116432547541835052320168770034143, 322583924881560279061825076502947651082325813283157962620651843036614746181828677102144732928281869634226658272914355909427, 48286057397861373844996286781889053537395005468489895169759418453687295020142491354862621945693954433686944603, 20083104598041791571791462651340548097539235793530321615624176500232614238069839722318915624752824678130671936785746154299007358767621235016233012949185645335097327993953787, 52340956427309923359448023356452968074134435360289684561436591621420359405255775319, 330417094071093631347656110580015653438025647394493625657730192829593215115097385518323855167302437128813278658970174799912586163978998522059004136681572070078699385379, 990917663263016617501638915906180687111074691683801955379606155758031365788656644726245453710302817186183909605069431045611816006565083960925103896065959815939, 30551670450565815093282059948999080020134721292677167369025997329515748211080086500197116736964546280954145031926545765434619370673080124091843322675312802658830180818435154133874146002567383678321487, 750254875891660547021215866350393167334655939133704466335314568425562560860518413682650919828826760459317108122412424791267050299999302504088808163669743392235466635859437582607, 2804071041780362891136214413987732275653493277451603275821377359854358763878460641589199586571462149280816544923878415386047096186773592693865542731415685606183796415543049113901015705943, 27875274163078469641338663759890923665275005866254486286461539932768724672110452133819140821948311938645636550450113327175333734516377142144511121490852716083319, 37245763009590890182543795675210701413670264465731977092650262720681039173130040407487733738222008110186492572883078633168701418230183249269436147633021803, 62619074952945738428549200229116318165618283936909358364472658081972093465217894602055163685023837368398542760750621791817646187792784266534310561045089095845661688173283531576823117002068648193719614806060160228326803, 30417875554840527432599469150108430047962966311268924722909336649308830511763183420811398307206477554532392478995890783523629346723264995164521627, 44935662819031863279170424416052838354462323542307184784465410669773788041623809658102061983822802884455925180126602373081623317189414455081150187, 124288237151853504749311523088892928618443330809493352289044673790537086700413174370746783621141262342080007621822759446445767383786135954869059562649574310254080119264430457075173348863, 169133855154349626634246852160345910353108877529157496993646190428473506244426785955776288079700245503044179099828090284204737057172004848324417226638146121501509365519143012664679155636483192134940588595663, 5006226158087594643107990599723730534465121425065649859956743073995339538858628129235315385324069842688218329893901907590490509101231779, 4875136752102400635042663442055987790041778680454779903288433939424946310521890022862341452014367595630713071445763409271954395206621832868346763854642740403, 40149638802436522545027138299201419729979955245921930280546177245966889938015333627350772337057853737073367, 448838609806877127199761797201011380148089155430533797199815193235318871076648984566100602323858726627147470870070787256325865412236749870231456188476535051006364038225470291547971566049173249613089428044391507, 225249479952619358245392482480554929096247831756514781135667509229473851357319141482304998071288113477402893544611376209178674165366251064734611240178408192824401536266082485437018503579148198683173847482833553926617033170468539108620993954194632267966726219, 2117628326739445671299998564313827434180655443667846194729470954241210114503774058216573887230615929880430187451058400760016286291558155307595171043937635514952364408749079047837054724912140816219100164296142609871989076999676351173864350662853827443, 9440040559463577679078317540392897273336041276949859939544712944905482823992572064927385705878409731474276866820354809454867231461455447045588751780705702692629359, 4639540515279545998624181573428943484907528024180418622406671606395719451335690865595035361875455319877496123371025343110186755690055312268206080747873928380819861823579, 93843456454852328265514465265906440843076383485686964726244414784050262427629927145625369016427934045981838985137322618086727830619290383, 1678777772193487384805876512931383603888945272256734273330768079363311533321422232556606864619188524345306395022735107, 752879610787545825274680745636289860302871758336482819120864520001338554847762033959431187814670309095044686387901811979063, 20571663995911978720050213527224591936676613987878959540009085485665378820840320713407702985081052970140866659031914497794937398997959283937017223063, 3449345659132955697830529990090317220657829070278974427876354432582194172504825939127609481691615884744279530768107719009871846326121353944859316478409011287896340957075347098464916753256788509469405161522098978402696463, 22659958767142214976457587588618627402408238420641725567560349702131287595243050097207286554346203, 4120332230986525191315172688082853567248886535197599201896649924909029009838162115581284317076655482749501411751258474569992259, 152890426247767724605036648023999932747422404057629816300237765128444790298701035428420814409981730513548894707, 6210285642178860531799851020384433140263355661396992681242177059971317957020949781602744593849048203504709895232525541716839, 22811242352010625383339667420949111080041999427751774500477846697913539986074780436633392007022009453520325147, 155216761349916184258284734340875889796905399511090810462692802923610994275426795889171566418989779615867992867538325373281244214453584242083543751928255731341707372131466434235030041765005027703949159914918699279, 45460672990697045271368761418502741908784064900860840094188383975986734164553396588242631637498144470421947809575083052666073074641172824756895000588259419, 84715642147061027591423650517381095751936983118972124058646410576335205699285895048262443512574741221283504930294845664657816645301954778711943540568669948133438341037150207681546586155084719953203, 18626308932657285469048912379336833340130774889235725760547298534685120976184035027868209801617559075396220707378109378323919, 6284545765527511731931096365428274118070656276633225632889895580774768656194902362056947663696828025690650974950811316349009476946301318778018037609814887028114718973246754816692653029203841131914847671343768143319272554215783844926039, 70472191806299206650314219053225837894359375932354692949320144329342404795642368273759076459259831884647773171491780755174257050388583860277265167, 3231700394462183060650403650082714836740952159813780177233177905205193521232204507261198488762879165587165081454946043137621371382701455786115092263828167597704349891692330411860087130902267147462170130068227323663228689156699481158445384806427987, 39538264001125845443619245489880966190060794759679070652060916604504545734945050709689082823762580673644059080140762101439767338241141955836530218141675420185537577647, 7018068758274015691453617802291915765662000651721815268922564856038411823681732150076463707893434317963535236199094503108810443836821925362783825734442858059479955918822339, 1423511255904945441139009352617693015116208116289487251877212815387017722832172012054705511919303667767500087107146961547631539, 10704886654041512119983491775019001616897811051503698688959638036563141910122361369090521111884801588906966472605541324482633048636908404196260063134005254292260995800170292857601496582258065812187204551168974842798413638244904199124590063347, 258841570240728544560000168685138674659801718801066219707177991971344664154221603007692217385816861020238132062109256201608781007479929995908783241474350203, 2898061678225037898556378005910783681758965989902345408004976032356889549617259039503011139878148133806277548345568592208279033022825136108564723102940547, 437852204418744797999212170349509686567015772620734540738861711538572248956813552364287964581470922181728621644512929906200389625876403515128994377155894298131987836447519744257299845601266456899126722729500235515690432467376460409599527, 43374289618513468134916778234775450343390268767923775167403692004775755035718700038612513957091275257749733623331122736147690723018797110528147037445516589339315060291178213589114406261814700137187397619528151706259407, 2079200655128546135945961509453520427940016667939694979906382878966327752740512460914903961968887683281839199911583833869932565246605661843958128741059900665082377828233864038683, 14129761685884551212225425625955362557377008024374490065325015357031834392057597323485249696956064867451725463364964295962788127966396509156661430702643195553670783847087536165953981783354069634928157887, 4104508621158054548404050957029845590847336395954823313764471744049999317593256152076520136694155287111746128711221111593032987632479727, 106884255451745986437082047647768140101475075856837241312298109304335512135556044393104635503355716712903926596450199607887020500952997778222002267070942524502345828096489670618719, 17667925672222673690890260990171132765939337581750388479692036519193009866555287748249977105211824531698955384767132122522003, 198876225700593185571810828500342160626846819717165871680509251986782973227317113043958276248543248233449653106939975429765677150995395209750586658665906540316025108052137106838878347629156673475193600403007316271937510358282863875190182489445678300075282347, 97118747406856020988038501486671925383996840339616205943016651523211992115083283910319223319354116010383198058107928802186707513141910399651241341846663, 21564054627508322649973093517162846815105784624967649702696507364853993707689921674079926024735292660639587153619353805701208446750439593627353004386784706520381239, 32091248287720890935139901088635801255723475660157163028375140924833438291228406423484956340152037360183886902859649730051762803373262946235850058809577580017283527, 79878917330976653598676267393971968312640722440897039689406915164440878611443575459350095748896224732167863306833988377509801918614300021169351907, 4454945686203855157698953010223717471953715934322817826746694169057835490016949657327893831877334668176813404542645666063592701177854092787345219415206127160032858515613427644901948864536150924175472719927419, 65705836260699955899709786849021836149388539614876286941031316793374107288115669598622204349519993690236923483565286901967893872262345445005399986383100383498887, 269184565193280061124392436736648021069058562223220038764600277304504427768574337094489272794683114430119054186097653604659621025313186969644619890237401991914143123683389514490312003341212492765480585839, 507955680205848716785278774577075608222946078574716164189588629331905855403737241325403021635309415898627934758235352427968770372459816897819432521557881246667963372890592781451524525147391936338108950453773758516561840034571102609518971401755295110595263, 8964173465619381349317929829007252692208156138047209219617410117334416514798459346314905794991669679788399594952339299793828584416101895924461318021861019959, 669966063773184583557896966592057493621797186128733771580800081847760042677783352962462205196889824649251393430715470073707254384372954881617943480425504809268925056917006421966655232569088886016637925019500779527669382934770182943776272903, 5395260073315181826249003464832266995054098824790997967346730799306319134689189880027778358418831980638248605098574983832469094917107852717831314442278396739392192045540607, 3575946737989255988388218107151862672542514497798597367793843666476782755778975973345369987016687037118609640028452510611776442926089563946494318026138793040870324996821679, 33312358293937398199251660859932825315084457330834034471863971515454888518501906130912674797331188194767310776007287830533405668193452850886546616117845659852283217118279653424772343949300016051667975112517807481329672143240477600607929123895183, 1333801033849192593677741071678681994463179764504255501679058653951927954604558317790219120218641123956563225690072162033456487558098918434004092413096480670852325033758538004304776248546991024967050384803717310346892454781063787308754106846232918169590888459, 202059405617217845869218893297564910201948696368203909237705792121772004714130128232488817839471839998749150044799, 205801139299891998513350900459307885053929534249979439406710510281376828171045884880924439450620346144741422610871234671439330348897834061335931108762816658291174809285022569758938329668285865047102037379, 38159501287658788158318645396849279052556694340568887713935949160714382316718001882020298197353774435807922230848148030635275595480066184854543306768863265169869084083090547824214425281115846068895387, 5027470369238027247139729897682246486248220853158139759106169155471987374405963629558295942086457460258622753100016571578597134425450216886478991297605513379820079973524249631058189928739030986639, 38804926791892805056584953383539817081370201333164514137997045504759141341903340528995771415141736534314370785537918344938563169073460435356190505632445462927579990941603437761823242978315647196340195681001966093173270047284133741680435442056194451790910234583803, 305117295121725575133412470001358500996133090677401345467185709028067327542487859633109228779688982531172526847669736164002166340495924614431182311975179051883, 2056092061780598244896244121473579756991500398385977058681807686559866669602737622841168955165885766339275621751418927531289784637560087539291423395397431624095584953206603, 141331969871553126813965104224899205867641435692370808487845833307354370198320774014529452964583663888007319477174570937233320852167647775676014067935295488449176553523593531602363752658316000409966505702989547455311427649152424781819016769278667445012514455259, 165903425727404123510975471800029632580224612464023524721979591609441821995076842566952232574322451037042641635854040183164418049324429963027654925451253856899015871836063563658001274378022925061641883, 739635613919114900409647353486548303553244899905247195664359137853392835780452763143548658758663161611252599709965681497560934232092925398678137666923082786630288086571702392426207, 1493309172692006445465965361697884435396753506315967409338616144480438924791148282698744654644370213645001243338508478468454920457252440705095544892720475993415994507544691717121779, 123018957335938196973576992831583375658657999348737564389336609512099381605387128314893072033825822251330589049836203273100204677132905719142750623938678697886420349827724531575251959378464063243946292180910110752110284085614568587551782327565335043, 125691764877016085057233452498342669666892654241104464700159412844442899877587251309892114693103, 20921511920674607893408724763903265744957065180203699017388112466497624284385563096508613610408466520390042126322044975480236973297841526600894520403359433347, 6235011392732869570732375607919081031107783680597799749057738606926759544688797719815797345662357269209262492464215162194125401276682115278214419420176798641330073416023797417265009345685603688970230879161420347447767, 849814918319886717138661431149621799178119678283000668554305075351522241246555899253442303041903706662009232865636677948449041250486951531336512933228716644834846915889559, 16851046996733252268462522851963872973735232637931172569186647852049881123452702111211961698357466471716066169825914636792782599932629707383214253199, 695141813923666567282150401140010770930305814890826643729476895363097950412485213293943203762045764624470834255266806215466487926356736578201056717460258414783525408579948502192004640266872527573751963, 51728037890489835079092460940026125439272030750616367377789108761339915906791090880208832499435087299174985885549134515848579298885111551992240841035220041330901758947, 388018402607695075981576895669214993441126999152359339823002581477832666039082357886397958512647442541947617221939167592691713756427791769065449353533149236434967784150662750847978574122584773424491466876272704689078337507801606841676561956970200698873525181237567073284407, 93382281275013428712297346203321109004184836242836206138695982264967629435323089136272330811555166475528533119253701867394042002363372011458536547768450310763, 95008922717070214784811548672622828934053213626940771931517689959142800405138995039869170540858659996006573609195224814158348315700216183039315091437297454269342505009063813086090307075667244167310742821319914356421377523419096832806819, 190415544078245381871488366719484224933619671550856607147337881271938788281002645143536504999421446194041428942147843481191721050564203293258406636207260042797564374661258638944846687205338472706669035303018856336732386791592711735865263, 51476714365435848596247610329222993301116745561902751159001134702126130062892445247608458313340718358432122135822095492214736625667154102110745746061993739647287663109864168703529520962208662711514517275976804861928161491581485473789177259, 43099248378951904397366905918664068687507921626607742529162250711543352481549061148140246210092226149344407147738754095930468464769094233801419493139636822081187607250077143485590903, 585514101024723060105161264050458741598396966298700521829024647187784163685934244890314805456867902418617629413834547329493016550045610626982628257159439912168880644186565846063327, 236217125620602887028735298254895119254025277598847284715853287962392665418357093208294183098718179833732683253021711896611447, 3901056315475056477556675506775784992797639786908984708201948838148273116066306673828650145005332915219588707500131354718287098938438403282035112086774395052523990302884642871346078422727517168432254065601120192067856994601690947, 4630860528025775508898597017008515747781126123320177023479045591252917103382939116035331976464862402424200608295550153454491849150135219530066632251053358189014716803004602688556201285030578977413284027, 691322571325159758997851461132074052604304176897051002186147818399574806648830349063284386784483628114163142190699566190290467, 257858080088538137242134148623870689574971775316081282952719273930159210298793920427448693034526030424858442458319070812323173826063676045341846379649188402127488485835421886615099987093610077219985904250878145127, 849058542888099192560114932626149254537973539324693910834726598259287405452894572416691550181798009050296680057587795554364240977915602911826094022917878258977322809221123120701888567635361763663281442519575405659, 658850463832145333125945227615861927553257606298373395123320579734789609969100168721416755588064574007803087781462332483227939167486756244635578435758840340152543053150234422079752186905728723440399280707737649958828060653302684314306199533487770866487, 118807860699175821546261391806800929075596958969758340413977054870733647482767148117668468037478994384719495165483071195339589952470077197122820088895403211796839044617389494074822346248163416215911682041223167866577042912963627342526346034421668634596467, 270415618606857016212572611021384040769753182879833565721729631860037264697039837422523479044815625017720084841306867665573408238020969123345821158189379142659769956606365270458540895728901842125944242323, 45343175093162301153281804170757835467476533856958741845952982520594220585934233607734648885541403173702313346972336601276233441231366213791976941828007489421693341717064125539009922110841258695136036826292462246373386617005288098545866388766172994504251012503634143, 20186003272055972934920010683411700390524886601903014580674772405885979647978352284092862090979078682764116971451745757774263220768626524718134502961628259925847057285749456894727866374890571124815027930482217165574541024333280660150013012045501940361289101874296390697163, 2271074166937863763576679800270331904124897666797641769316570319367596434070178038570892831254183764768280557073448212340589363551916224618378128530182575011991366863, 14796850380936423714000635647479231114629134265364993940694321931940650040485990066856946066629163240717175823982895152478556092904216727212867369470913585399664224018381774404749071645191270236384912251654739, 56625693035210945510623164264621350706730124485348856469535451619115542825460713753316155757347707089731011262935239724703024321642788333467896009069370995481786901922898879, 3121717523568514367263376127290719183993977824034636702698561658447347071289765134357446441416500046207523034710418503875736856910351606547005923557885825979660776698877313867324207, 8524370111396275410146978651094328079599834775558527573416937427819685164535149087507430056586587978881532303425362866630653622658580289990449013377312228071302748064842961987941518407, 3892156283158721179247303192748715492553720077609172195483347392950998677145183209068819676995053872440043385686917290494997051820939765549050228712210712855055348153269603204447100086013137370919826321134906587389442658017650206213360066587565582591144044459021453094347018484706906343, 38007116467451075274475908243888695877739191764678835919146304762818171283060777581872160234184373278046766325728688081090944054246499890056263407521405311032657028152189019, 12658217357465526279014271855488522938508929941473950286515961923042086074195501791658063384443100469815206393584387321288621234472575413373998021337959072267690730468109827252434435991920443, 490071603532913444490453775226303654229163645502349029642194691371320471385353777905149021550569926174957652969648684207696173528239412383887709307487981271529179377712514931760393858327093490874527289036240022450989545106220256171307694059812079312290487622023, 480572685334686261949988975554159809579799828989095710237702161983477775469336302100713796677423618461206217885212270652645276030037506725214063301932854452855360876111177644222262446283621693224890682220964618030836034097803, 1607249888813247463751473438174979526053430859476084231178751733235441957006112158554680413207693866973467435494536581864316724122496194803439337361662660076746125527531678831039684556667084308180451287, 127858970478294021491158205983893175420688087632074062158879947840815912269793348900226580781943610526475892003587343023647470885011678304138721599997640508876175800994815407289450941500687519327293622000550310129047828050261759, 8781902460721247767802338933933538161014252125646869110765166199066809910008022446379815703911268550221054645662566677774388767878298094164514923600868159627321418722816703476039733669289328140467, 97142460932911324919906189651414440452742744039152972883796265212893701326256221632045818386809465189644670708004511722430088020817579391803963066221703, 204238485600279154717525759294793361141479857399719713789527238038119399745343544954789205717089308580372305597171775827208217815473236876884894198799441988761400540229517528011498972070278079384491751870339271540058049601586717301724957403595149482023699, 219714859468187522100421428264454917278370522929341118191536706370989154294248694519190321963630763036898992785700232092413869936342892874089814746304970959463998576326143188447, 671186725957049731506459376493042761647851694147192304737062906386504920677324854575871673478048755681950722170668982526856729653786371084202021437401574186269246946497776070637732438023559056036277845184103204839566452125644713238172610023984926329523367173669575067, 9026216087000276996420376910475026808478068093286870591598805972224400693311373143854734904353206371331870344835969480761724245974075309851229301548135908328249197812305132620480908261665209121044432311357226668382525833053556937108453323663036501335492987285899810690067702182231385014425795139, 94147808232026477169482270774259043769655837835129945200860199689270899247957416106701977474012869485990725398105678119855619097151617936740659679030074599227717703800373545370947251089899235078583510674529133377177589165297842121607772907467749880910140021565355415199, 2096065547634025406490409372581817620219932919229855235304870710025509560902822735694088358635999062771294722078822871393897331302992032857440408004477109247667514199706414908210190832466793038519260614308810390708905055253470373293664014740299]
# 去除2,3.2是一定需要的,3是一定不需要的
dit = {}
print(len(C))
for i in C:
    if i.bit_length() in dit:
        dit[i.bit_length()].append(i)
    else:
        dit[i.bit_length()] = [i]
print(dit)
while 1:
    temp = random.choices(C,k=random.randint(2,5))
    temp = reduce(lambda a, b: a * b, temp)
    if temp.bit_length()>1024:continue
    low,high = (2**1023//temp).bit_length(),(2**1024//temp).bit_length()
    for i in range(low,high+1):
        if i in dit:
            for j in dit[i]:
                temp1 = temp*j
                if is_lucky_prime(2*temp1+1):
                    print((2*temp1+1))
# 126366417385482081632125709094422195763085260839280726740164612475634922264215045413877512640959314132187586716879561409141350180398416405619572141421522560637943964009554210789034269798922933667348876400327539861064015972617479878127021685556362985889939708226852813589758433391734452221720317317879861645259
# 151974134283935133352420140651526474538548682010699934815033216140905302768143230133430556352882687267987873313578681017377217259032440048007955628689170671694683741633721001403202878128665495512534319682836729961494276461120603551226499672239779728136264935129191088698434836072763401447684000861562852767379
# 106312089628793849062763337995024706937792152772069990672450023530583677738560813825597909857977982025524197288970637855162732583840554342767800584850797419457546950034663390577782967179012861468463694781815886302442867373996009972323299453999920718059621113399549466447947193549531131615015163546047741227827
# 140646306779911236718100133345672526392582055647788058291509942224041198448052411163408694927566949009305647384291001717328802708260579523859117526078577710848945020201292305928651597199282635108376461842318627821309798059469913133091889616376641944238299416259355290939717393034960368973288667712851402681787

Mersenne

随机数生成器函数(random(n,w))生成的随机数是n比特,汉明权重为w的数。这里w为12,n较大。所以整体随机数汉明权重很小。
c = t ∗ ( a ∗ h + b ) h = g − 1 ∗ f m o d    p c=t*(a*h+b)\\h=g^{-1}*f\mod p c=t∗(a∗h+b)h=g−1∗fmodp

f,g数较小,可以用 M = ( h 1 p 0 ) M=\begin{pmatrix}h&1\\p&0\end{pmatrix} M=(hp10)还原g,f。所以改写上述第一个等式 g ∗ c = t ∗ ( a ∗ f + b ∗ g ) m o d    p g*c=t*(a*f+b*g)\mod p g∗c=t∗(a∗f+b∗g)modp.

t为-1,1的待求变量。g,f,a,b均为random生成的低汉明权重随机数。

由于p是梅森素数。所以有 2 k m o d    p = 2 k − 607 ; k > 607 2^k\mod p=2^{k-607};k>607 2kmodp=2k−607;k>607。也就是经过mod运算不改变汉明权重。

所以af,b g不考虑进位的情况下最大均有1212=144个1,做加法最大有288个1。在进位的情况下基本上是230左右的汉明权重。以此判断t。
由于第一步还原g,f有小概率失败,所以先用
占位,所以多得到几次结果,取并集得到flag。

python 复制代码
# -*- coding utf-8 -*-
# @Time : 2024/5/26 15:37
from Crypto.Util.number import long_to_bytes
from pwn import *
io = remote('123.60.161.30',10089)
p = 2**607 - 1
res = []
flag = ''
while 1:
    try:
        c,h = io.recvuntil(b'\n',drop=True).decode().split(' ')
        c,h = eval(c),eval(h)
        M = Matrix(ZZ,[[h,1],[p,0]])
        R = M.LLL()
        f,g = abs(R[0][0]),abs(R[0][1])
        if sum([int(i) for i in bin(f)[2:]]) == 12:
            if sum([int(i) for i in bin((g*c)%p)[2:]])<260:
                flag += '0'
            else:
                flag += '1'
        else:
            flag += '*'
    except:
        io.close()
        # print(long_to_bytes(int(flag,2)))
        print(flag)
        break
python 复制代码
flag1 = '010100100100001101010100010001100111101100110010011000110011001001100010011001000011011100110111001*0111001011010011011100110001001100000110011000101101001101000*100010001101000011001100101101011000100011001101100100011000110010110100110000001100000110000101100100011000100110001101100011011001000011100100110011001101110011011101111101'
flag2 = '01010010010000110101010*0100011*0111101100110010011000110011001001100010011001000011011100*1011100110111001011010*1*01*1001100010011000001100110001011010011010001100010001*01000011001100101*0101100010001100110110*10001*00011001*110*00110000001100000110000101*00*000110001001100011011*0011011001000011100100110011001101110011011101111101'


flag = ''
for i,j in zip(flag2,flag1):
    if i!='*':
        flag += i
    else:
        flag+=j
print(flag)
print(long_to_bytes(int(flag,2)))

简单分析题目:
g i o t p ∗ l e a k = t = g s k 1 ∗ e s 1 + s k 2 ∗ e s 2 + s k 3 ∗ e s 3 m o d    p g_i^{otp}*leak=t=g^{sk_1*es_1+sk_2*es_2+sk_3*es_3}\mod p giotp∗leak=t=gsk1∗es1+sk2∗es2+sk3∗es3modp
g i g_i gi为round_g,g为原始的生成元. e s i es_i esi较小。

素数p光滑,dlp问题可解。随机生成一个基元作为新的生成元G
G s i ∗ o t p + e i = G s k 1 , ∗ e s 1 + s k 2 , ∗ e s 2 + s k 3 , ∗ e s 3 s i ∗ o t p + e i = s k 1 , ∗ e s 1 + s k 2 , ∗ e s 2 + s k 3 , ∗ e s 3 G^{s_i*otp+e_i}=G^{sk_1^,*es_1+sk_2^,*es_2+sk_3^,*es_3}\\ s_i*otp+e_i=sk_1^,*es_1+sk_2^,*es_2+sk_3^,*es_3 Gsi∗otp+ei=Gsk1,∗es1+sk2,∗es2+sk3,∗es3si∗otp+ei=sk1,∗es1+sk2,∗es2+sk3,∗es3

这个等式只有 s i , e i s_i,e_i si,ei已知。考虑正交格,得到向量u。满足 < u , s > = 0 , < u , e > = 0 <u,s>=0,<u,e>=0 <u,s>=0,<u,e>=0;

使得 < u , e s 1 > = 0 , < u , e s 2 > = 0 , < u , e s 3 > = 0 <u,es_1>=0,<u,es_2>=0,<u,es_3>=0 <u,es1>=0,<u,es2>=0,<u,es3>=0。

即先通过正交格得到u,然后取u的右核矩阵v,在规约一下得到短向量es。

由于es1较大520bit,es2,es3均为512bit。

通过测试矩阵运算v.T*x=es,得到 ( i 0 1 j − 1 − 1 1 0 0 ) \begin{pmatrix}i&0&1\\j&-1&-1\\1&0&0\end{pmatrix} ij10−101−10 ,即es2,es3可以直接由v的简单线性组合得到,es1则需要爆破i,j。结果测试两组数据发现i,j均为(-256,256)的范围,可以爆破。

还原otp:

暂令es1=v2,es2,es3已知。求解es1,es2,es3三个向量的正交格u1。

得到 < u , s > ∗ o t p + < u , e > = 0 m o d    ( p − 1 ) <u,s>*otp+<u,e>=0\mod (p-1) <u,s>∗otp+<u,e>=0mod(p−1),得到otp。

通过前缀RCTF爆破i,j判断es1向量第32个字节是否与目标相等,来确定i,j。

exp变量什么的命名不太标准,凑合看看。

python 复制代码
p = 0x1795712A13E07F7CCA7A0B09B33EE746414E48863BD7EE1BD0D883460828FE88516774E44AC3F0CE5DA045688C40844677DA6D38582AC7CF2C00E8724AD399059E9298BB1AD9834DAA0481765FFBB00FCA71BAD1E024F7193334D71755B0EEA1D1C761E11FB67C3B495F8D12720A59A8AAEC3F8A59BD6BC45C8C236A29B74CBE823BF9A816556F6DD79364A3E87B02028F9B35C5BC46EE597ABDC1A465B9F41353DD514AA5B91326EB4868BA1C3BC8B74F55DBEF6E59BCF896E15C8400CA6B695C368EF87CBD99FDD4D33F5889EE36A571240B16FFD76C0FAEB81E4550B8549193E88CF630D2422903D1AA08CA369FE0E79DD04F581B7DD8CB1D3F28F9EE2583B
G = GF(p)
from secrets import randbelow, token_bytes
Ls = [11458633793664664571721974078540329652000173198060387870805422581890021230162965047834907557593328106806100129534537689142113132965211275927881655477132537375636066335801350556965643654723442126541163698694640077491125046683174244446465808447655360233682499276315196531689634286081203361673239920530695744585998432955984816049448594928783978477733151296226579786516015917666481393360958099302267609141375512605364486138005423435952984584332582091145633138121792366490446068083882264291730873795810793290699194612764181218494140804680342513832061936858438676573746414312922449966568363220209965979125507119635057258050, 21513003198237597131857323684382217226257589079067014808960278012988931999744515428793220342785561106892406710888591086796511872726481547041599637806003294072151873556216073536279933156687075286147315874265997542789266955993068035886016121787560646287796418462257384292701282246917616517340761072461014917177363826093986432987223565630737590962621754092910159725440712395007245864294399074993091558401089998988649986096900462392736056089987836645211415314633157221946679562060151318293450132384008688065291849171433541748571734038034896800450149889636618401952945087598722813814942240399333981082292704679030494305766, 43419540736718237300774780675134480096450218757032915985961821599406946030516411052506254233629931410317639423720230671142492011125775585246331595304099034813416038536590173196428862542778992808851238264243065585243965519316654934050001461981960549017411838748754560214157681795046704667611320038699514466422667477812824226962461918847577887951343391549993783146804703043552192723770724897020634553895134927237034691485117282818877451594467238002467418067794927684204787624189225015292216289035498081382307293854986407132057639152211877437935638842301191116321928028407540748327371860915064080164307187979515971984494, 47573588946453502231766626786367875454924693501087425329399885291327376968929451149091299576088168756490210053409931901885827715177587336510927272255506110407995656004552468053503943832737515302659694468541014028068436654572535569793754583617211235445310350675552537148843797422743409432290907508750995482264517177239166367362060158207811879351149475646996053901426732917276276080133803439143161046822008227627871154963837509791548549320385021939598596577507294155113659155579310706829326847680380373908111767605406798668788528592780841542528523379405407608613730428980296002167211563310392987673750465815025861801393, 17951461274308950685415410410372693166766726672408381330590169589340445780903234731286761253554001383560468250692007600213415615898110006308593509241538288527454408835532314784887605274188766871559959130116362497478892561978120795799947172816825320780245940091786745897833766238916164781983596007236565701029695765211492880846911609520271023652527949778097452536552153470622669901314227643294661236820917246186816402258084257449312180672911501103869374219144184876424121469976437513918097499411337337537695647048730894950611740997503787594594385221549112640998727295207622801182406663598461761120593448081767954669877, 41388801760713667419758636721739712154173126124036054459594872497350684199768685655786016226207005796328765580752984759329006502510625987391091298593505105195664310543253769545861602700536947176025326868497518646679414016115927491776554479226165594319655902545278188118456168936589045421720598508739268765527139128007030363971017201358684127766601030143108360814683298999014078518030713283088289409444052881438671143434013682019482847950371102867487749254344826847822947003131422460090022041012604043010732401185316166671261946769429625632795391320691951185867029636817299214180364408090731289518312680285638367068511, 21247893636991559233162315091753890779366077909103578800692810100226778926090662921984418582771378035798940168739161454038103310194402374634096142705241683543731892625202181919613881560150836163278176135050644169838182274089021591707438376073275398140500597162045541263838911827920216034439718051437860010740416974710022110664263215675365305057081386288480418396119340628025570107861595935559446565695880091558673363387265492031594038110579733600622296399806548290922414424351160478747687489823287410922808225441588977348622472324729878504443826221501457165621900041794168426152550147508413578100385168552111995505297, 41264112082602368858965716764743774323235333943104793771180651930054357253829802878235693986300996991281167380628769714379072619446645362029737611603411111791159198661170974499444047038698449521049147033787351107571705626852909208880739570805614772393676460882113366124205800648959507849716975165043055860596107499972623425309768867973301675469981857493132719597708720455103547816074505704273967901708340492993716411880912086592457225815126829534281774843048586169346049795641629662204923820951793657985559543357871804024018746481274269897867672329645171976503223050251361582453951170947300589385765788620894457100882, 18412066213054726278029891367595398346166934636546723591175205694904500511763453562633712180644921338074443038921388922560629518184226652345642196117912464709347834705935863748665402255977309902016692351652852653585875918100159730483226240176758340545682962919796896020242625980770980004078691575169880717064777927233206555859714181140218339123919699894431552984431783258814622991981620733274046355571512326150332159370675294759953195406894408210589565370032715267268643775503358741548973550160108423881331952297758164975002026022443368256791576917307871110032206109301190170737133792908378674828722691261988900521260, 11060412509254271833373265506285518974988345863675080408695628169426904882389916767665016438656998990043250074983165772616051035373565619873049068633250783851923882049354194239048102424231349690862218607667026702235138946514282543342117127210219976778622958467755437596924588225958275660824014237876504462452211586108419384586205507780344456425553979136410239546271836403669861756963379192286515330720802976932739213172613715083487651899616770891894676266432158479969494643047050504698280258702586927082635386214214158582300844165919996976737582166201727810758511731432727807815747674083164787316975483026043391397333, 33414056333915713050983122659951145779091000571475674704325504075563101378554195270941206554023495675161773465635664807520313767961684339873306205534763298443925642414297564788530096087128893605649544685106849447952181334022660966828875749847350468376611956757533258941147944661661713686735760682489316730004266368704684291274176331182305047607670242326934905908607378921107186105778265104393602644341012926496010988785507090630881454740013301332017150691667663857755726264412302146773121182369401952873248207188785344564319659205144745112435296556313995671665748657449696710295359082806683580310028767565991924677218, 11610006527949031735960999359410909789081798015036756122623559024730116836991500774984082006864571674648321701676559854114533277455799818418814526940288115133390809582536901841574667458749564457916825900094254241394527208348627766630949688953766897932293540474550811473696721448457708050790023155228787073285381716244305821412386783551119777323374890829383004169816874582428103291267591609610121920753030123355801716014194687061775025543589975566869533894573621761022971138524113259432225275767969213001221418974223549517506106415500230038488873915131049620497050627207317611550392163254208522216005910333743426620276, 47068139947573771279729483715099259935155007195927277470357947671205386897809029683475418362713959701214105705035763141576945982378413050407230970879799671546932296505386659141385507377577960007303538744660591842908765549294611667185189121369035736600301210807404301314252843245137091775232886955766477483109543692712085495176636564749260380327110529434463167661068338813960506905573324054548677113077818532281385763648381955030820691405708116629668826837500487741041809945898456177486863920521773429360427338720031638646564058022822849039113494537681233309267697248903789314742837827768411613403308983974983034406164, 37873369282887529143739045123656826700446389765442988934130576775131440356400127572915673364962214527824033040489163279007648854815941886608484932081125411828137248004877175554294758194681818364176942997211126597434330466970095444321692874827860741309459874627699582207191094092445191790484554182798775570793916738784496286104440005364899367949321096396961187274137490318104041744276557837049118626377273946334890648656310765228861829122863361651089418001276712458484102853112990063209908823930515206987131409711189888679356623974119701245065555957434843485247786474062705201201804869900517224604717703301343243211333, 15805529960511125817072871469511225929561244953057847180656742803414840341997337539310433608002139027144807826007716903043965684923457855226062388705087202715466199628567439055006366711181410825625605532036881899691354401765227725400188622925448484099989074771339985773764490279618921296202012332461099597954794160621620399434580345663136810242501353148618410490680724565189503458696439703737326296804212595218984998733999288293335755142231608048990800692186980159445354685864684273489470324415231486618945150895548740074452530226466895745677837634601677837731067682108942275476095235805638453934664911455120165846678, 3750487910930179780338776754514649152917719883657034288420240534585975119371632095867170464839209853522527296641535352240923807295072678024352569369094332205476742673700848457930602872998317290008540113864756438622667134551041451796337058397959897133422902507219032008851637497249176045435333755057189588900881947309002898070593365183881871169031504760683845440239860115446811069949530814638525837344470882590463728620169678844385877180881880810223897031658760376495273186600639047729668551240041204394671191833239655287509965685039140085534700587525135191211557743402675254987092120434832874531344500230765113216770, 19184974287161077295174859034064948692885284192020860948279738905750290640381014074036397722106564218980770569983753933317403150847965241770806285537532009628465849338772381437993345519125715414802704828554810348451954553091215027201915739198516105305678467524245509570954639520642085131350912639597894612366374955069689129727826955451939117326181003483052572423120395808081187534710086401904688695061444344358942945982049773093408441117522705759611985317358807270766570087686660424157073133487026362784472622394516315061694492452443317986138798983521849075628803226113475437299689521095483841902800010692138156822267, 22453450709852050587851748393087691827610380674088568589739934558362501320073344381438998032355648822790556306665100551474466674897479537274261833541389528375839376977284859294635175924646281978877576044530934845477194286743053476482581992326678193658499080436923268506870624758480929306657294035644240847333618752577087487424893352616465828706224195322494990096115645871355844469768426574324307202525076621518546793518571262605915357978554583316732458488718545226353151914845052057982389232015074681462855183116753391135144591570820991341509532484547662176270134861381022706524808061129742225770912996004985375687262, 17737185758876300308960488057400814487378772324704343002164834043237104635624019733441181627429670153931526566746098144028423240460694338915263880639118890206724199892534980611983618815156555266431103123844391448692219591598517479218537805622621698995934053665941680715610464299975879320697458329175813953995291472717232547053302362858638895325987092105864809025492082405299198106714018395211266422673886523879440603377602294160410344526670204015151720926730849170902414627973521866740041726646048301485066898063328511923417994137377347301693495968908472937854035141192593323407636661556009869668665500876535356525946, 19656540880659674823246115934965080673450060218290415127319447492470992686417413392721215073411418721507609776667188010369457710794450469267541535826269646596079982665391092831545333773528844292460578921726029935187720467817299046164686006533769241537693091268627242692885601304042326314438098425147089864161224851220486870102105288384810036621263719933240568075853190848830397711612666457922023985307318535205489571990705410907681477846868546256432934871724058708166908476428650771237410785854181399487408684973211602868522194261368415137950087364122556903356046538280281629188285510976063381975321449102106158079440, 32644644272822298631228848446562568355867508537165787395025149413215910059868367302923627698509265644773816424936289812102465444012776284687260057906423998297160928567981463115421532088688391237081747913083285711235681906424180442372408675077610614296936511545559678989197169586064775035498145207457582780333706163627303662430877331217012677026394488233854443400169874728676228617557728640530666412449313687371389055383102157121819594637898463155843965829311771179966231178279455703674103774234099174680496992022697970566486421977722468522857476218660075581901880367892991413632096065073548949390482054965485125517007, 15120084416512776543830927174056328881034089542021676286384295722046647055964558004550734450147815508858121996109734811999968209227095653912907122177206164837272262603282562177611628577360168455781513773236187607398331425910926079856126666751366989757616342878132896691944414418901921010039142174403728233627297045012687580751828602796798184636199292223149105327215404907704279097516176969066954052859034303092304203017673465269083910046797072197513021462525623832944740204134013869050139858531390790495647708915191229243398933616087690961836659003907332471442367030575740438562112659841943033559705567149867719005894, 33315991651715434592994866625691590681868752911868687030535034592072409110482628685486239588735675402503876791106651077233041839541284551583914837436220930695690383031932164236649802375119973280935056923644446791265568948078538728621708739940909701130107905180066844520625136919387087606025971754336141371712725034192061561030273112812367967284513964671528146538438448866572460124570739941303059469021431281755978931081854054181972506754324829108073082778339966095194765675689195798075576529115650254639669734679740844542916229970327119106397924016471251943787445002189532435682621526069166003435328851627432275674698, 31886854712591774988193993570705961148740731153993557912749296209236424417658665626069602502593249984017645991549284615425697719014920393248818543709067955940259889224555497021226999549092878762936231932035527836529227598690960652644501570382256258922303168787962137985412705148384235313819974986850184002374755253471388047914581182115914251717669923809056202543018521310236439680481213611271327723565172301896574240717482761058282658198109825222946113811581243910088812595582750312652415552520676156447196137656163918823221651190108265746806000283396814034990010679097127229504628863972492129559921709655193752548905, 6803561490546836359558974678062635266417338298866054353804863270919151759488914619844175113661896155317820914535647321124020716756308121548196563855085405165700025227679713340865949957446789357300686633908855817343317286875461717852996905965322990421460051322152134839133138078153533947344341047291088444102027876939572930690303269223037130014792923354428231804168392267539788493660456081427383352253998785971370101190552440434142642753313131609493988184007344639391948041238921744532389147071744739769469761553748141581170391915576437459197563042062626492572826598760606220781041389374935831118915478975916887206739, 27350709434485833006016420742124095208280179640967966994358674137545800885477709022173651293721621109105947054125315292475640164565640366145736732233740297382863594280988453284624279991317593082465612397166208712185139574933301823318660413647503671240631264946451886859290148521477027502481440474133370778783610824150758995239636756637888578976360616436388646526834914473035505306030647834619981597158765398500629838857747852842652609583911543915611501535557106850790400962231331267094419997824801352171539055656235069032797891066630479568627057260347599649230244918713681080222640888766576353432413470134955599077127, 35671386532899545488240770694292938408066210836957787180206750642491256244966089713474698625811032487655334346492608636011554775563035476786037556997297480166918221402840499371466163333922820200849291138607871085798532104863025295931133213187087655781157938198348934286494728437065479646927678902040090880288818349169965242349150091562196464895802272430691144980633919479954275713359198467692370108317689044165907503409729041736914278507928077187222041967095123350803302017114540335999980583451899358226323542316308825306403480450848891034654768490144897778335834448404543864336578759258097311471195166357234055454855, 35718191586484312288815117431717095200224792296014117245881297751052429155707288941135311722523637506999547201670444063247598510506117260379173525202927021691308476417115591740690054111914842352230232772561376329714551042491814567895989185081204389612243102611339112505032077796221959236955716794907595530285832370381325863163795215796141657253304892036996627015659453173263703934727583069163910331313001076562642853423331431870579583719370389895494862371614724046821045556973536505162139859510072305429898366845549611370074737034501110330533963264744901653611137465244593385155095090234574593513133378128668230238490, 3132685048431520944746812710794154677947647518494850937261541044142981177763973358159874343169635166909001632095580168661918929046291482917795036374101881420371016569999174709845707356370625758489265364974041466673592028143921896908794428312262206623486286614484134009159535541836361100784576113048812405384095457739875087839984003110435265699928688569793045272251380938889347424226465133017444243896587157229333937381562077059152986782928431186305956912636137509397783684643360075949476458845004563024174821147405469325329875487599495737742237770290426306407181398404768487599544522042464510289834114135520487891278, 37935052475948512364008991295868263936369069266065411738910994156194998497432334366100153286148174776093200774019667595901029943744497535140489592003676953981062316481984051233154915675373552881930916004663461244615868214835611566245023021479286345638529517160617866514767039022318119967777340206055250958707051388898657002828913490729341096684763805815716524108940209701686137997551461558560509063189632562722134670359372668338573979689346209881502636650102108379654700849335149597797749004149497643902004773141760979140259452315331804101004300662746842863473084449501092492751997970411520925927818310964080127585071, 38564320738496358077281423034329397308266087143995831451915045757846413082625469222630956893189680348123598114322503072734423835462300215303037456154963912485201079795307819718763935197141301320751385550394334244009112627233256082444798229001367124575658507703157263727011034026235377137359457535233749216192324497188646443483175217327776780335859098454245880730142254709049829506065086025178976034168594558567916087444450413964377951588162173311814983451539195516405999344140669031501949086191362952315234876867171811064023760617810706991628710485328787642784824079314566254511807983742454660153491008996049156020581, 42274547214377039179072406917030861032875446927697174943888677780560652144900132585815219473891352032776933389920402111188690909905100295896322431744686659989813866322092868509021337192808491373286381288058186323933419640401463939090739053210693911490439967796845469169766967313512679613927082575431188789317822251429137182967758877854604580694691223738296677650898527227829787854409925527310839157129196479471387588427697824151041666030598731208909036589533396118133993630772404954408274383881967374597906805814390518695043984161769185988278565402584750777412581504254034818151073292849135415697184848617468574270772, 25507740848896555992685817177475988133618773399794810465502378428411290892785634458320508771607806687391774059786812597343595556891839891450431875429306142768708267562957850771766284790416603195476093264156487787999292476353497264376068310463836131161221847098254601790157647251961703572752253687109520869098215370844913023122350108216249532350992596391362076766150508154650530728202058993239184063634922926852684067140838830750423394630334612682656189613011215966195164710321346682656682982366991841991455684111662800144063315601950182918709617800285589813183626271927517649790033757439637871046537907844922934035115, 39458639714306925469344734847773792995024795130743105186310080200403331963182215255644991298571378897099555391576386433630051500955525092739351751900936128107257518073747799756180441014636772332651662590203348862733645022970824909497637983864641311483944925694916932474078079821740919559291733221753965356295747024576427891132631184549434205154539522515406658345515519969173992102453873030066906784830904891439608927926230984804193078215229767381727464977380650126853440099985314659373081400573634683343027404214604690508667109514272099586777727001031185613309804249578960114395371066128314251353059553907496190577295, 34747145890943888809912787490496778470824714218443289427803499532636538800515547456899495990450116783519906678808387364876884084632373040049319467741635854225535152316081091290832233413130744104511233103868819925654424738912091224790284162052127857126860844096471613447830047865191650055946114720478417831756170567098397702282639224875260896325169134699945881116123824218639392952478624234465647098168371366884445200780782912305885991540531646649689734526637510337458208005495450284853960830720350971916520326592742512659078214255314700482466861208103250954057107966794630996593726037729571044151043888979809805064739, 20754201605549674465240444060445255494360019810054891850156483124962188673946380228812477885693787986520193496420983909288230448715871142110238055280416134911091206674193862621363520260792421819361076235356212801306588467655368242575458334370909527893723434235262743095397587439153712363444992815750812664390759586850718843605303259508047135464000086461915041512857709012127815746640725791046833870523132600511034409208231333839919471277845450158151537237825906478700793356208313951935729150356152703743001631392829317664210973862708293184862652412968301010996585010986802642721729849039935126182545558283670296249924, 1555531079788973196313206303031471158314062458073991644075788720664575301940932503114341735295303615504531813212316310244740800757241920397292414718059571471703823115427871197580326413937430824554009892049364938464158617219741916993428456707938533845124208148046023734631842133939081489618569393735451148273106343570435828659413124633455743763012458952338799594557869638410486425771513536531238163986700878873536838188286082326395072410411716394230545831369133690710056955141396189403746229463960879584466099552368286961860347687456587950702482060752953149045802564656234105544879309990481242361661742309829172893249, 47360006689123371021740910621319432886180183076290927991519914341827990487611990296055664588724048422138786975592909013826969664756580520218254014044194790764930884163425304736297549963794847495049996544335937035189916601864888646445792293386478208802593452979726448208835811538296897560014516412675582718240509861355389257964178709145307134536489347473242545580562356310525879023331148632905524463933016655135611549367501981340572789317086414981523064199087671497473235320295198579593482666548466694983082930839461018488515487229473520727140375784242538455428295198369103733073657942902222675948523127541859158115543, 42577252771528669681752867547946214963728101837033846189486551974609096056604654268209335063141106973166570908049087115778302243898640260918174270395755672245282188621616954328993712835496296688863735139201201984027996361009167097734997664917989265456572518559081544136820568498779787130591777151939594711281979607891630594025251986829414738518142433400286239459262860897569324029092304647347963095417404286158021944999478088492289885559608230652604125158289492045660310268242893309055952111388231787467397817867845724210511364313820283371945764944953310230031605853866194401733830385734858529356673120153393861950890, 20006460153216294485173134347307633858994633216408611150848783195554848364086449244841039118884159533527821032489886051266610495645384971021513259686644185897093397815126535767138141449169788007521645613396468177541361390709088551574847171251948886140930838761262216089120537713075924678736970809351790040114453313285321830166536249772488611938023800423420329864467415227484570437098439364242786599002441948016596722277236043140383235480172581754884109571629663908051366191746771800452246119098969475576883623370470723155913316225170462456101092589472899080996915829470367655770109925717954509942760902720944869295282, 39042346993027486808117292536746535757085580025628996590253915431835549560222676873407214767636412203479224286670424558844942940137702516318120193988102097801109474849012606770692700881364263034932348615908574635759945387930821005041625809366128297374885798486686074873891248360826829190705667070235684182470069371148542516991121981532865551864187466435447912172142546888800823175376389702361232147653914123648815154187249084767930346107483502725230923184633956324142861331922060646073238751873904202125116643918984375130533150913129361684299936709837181168304830293043697852369241576818778822172166648266261675995004, 9451322234172371308374613340558192645896163443009670073773901854896804798184218151750044624562056706263273575586382485870919828089462610340545622743017234805940962504595861879825242237262928786791604278082969445187917947552748576922109606332272192264114755137741882514034390950023478629637782399776249592331294101670770984880147394999369229230216669488965002010719817394296811905654309327325984090682732435753127407868168852994151667915534709423811188360926736392409225072155478082002869291734622410135280600256213351908444268845850642271096362110987241020592643643680831571291538836771087181799133446782846814087763, 26176823162327109944893612121347579084991025739965436850294123134909706519341804031140907199267726950207357878595106714889739457473014815338843548209725827553788594539149166264254882957079498214988099969072205946548967988363987160322727304139017368974094744055601962310557047249161074367080193916343582280807832717915164575096825532449498976009133557559598889800050291994742495124075450859535190569252584425399965751444176246692780638803685316866810100739429061736623909933118918524853368363797478214579951126394524425169375740376093381809700822229275279544885737880112076296748638956310800693935003393419203089287691, 15679520248082526557530839586074610043128134687983261924469346993781654438042028777227316565225248908168406085885990062041852598188111113713313603126144569298437457589831794662459317575880150634548862618530198076734806758956100653770590130272273718835711776144318689735432268953469515725861759292320040020826082851745573953179900205632409201787185249902572346901809156708107399800457383002840645579080135688372012616338562469878560117051973476899927210791425635678063568764220722644794639754578321532299774443432563013173784663144793295903874505565739534678422474099267884056336248240719641108679517812589616021508675, 33240486422539853372755709571320284670484617665692573175597608994812746114917220616157777007188645555258876046195540795643325226058092919112565656541893328748817563770141915625454899751105099032938581198358862057326700950094393664908928015254191691249065345128581100946177707498434296631526157914282237059389968882370376225530170734319743017848720911348185921083252478783543736904426328200872996841351823275972763355951551141284344435057803834852312169931738703482826181085027058514485872701082573380965760704536010819125689734651366520324440413007370692064530732206281464243098928297880549291664371465237756950038451, 9820587231156668060314305443407236118635869741077152492583696785822728644037312359799026904600355456725492206044624641278224037800036653630715959200024470956869577991552698822236161009369093631967238479274498215457572276719333494296774812930510306837494549545041952923109267483904769042412226696986477758733221207013149785048403455179759375641037204603572067730620292047717371882361259656205138084917911104923778823537295636859603798156821289839504293419406662413325237880245688093119759903477558535467270219502915307763682371092556395732984211929543250539560824351944238396538115850568654230542992064390451173062688, 30720624945510633196969447299879672705502859880315378765991825482151024787345049541772324291904488563028116166346788785317879210737335033479434196406890596105452807536451922541987603725195111051364261303119708018483114435091779413994247375104094805629102145999091751024410911893857166461871274082719833193188613102898584837484608635197873645891850102368002688919151459613408521870986777607539921942873579767091718494392904826838283717618530048460447327837119943595690118144951292840928660212789905049864317140721790402865706593452325893052339687119388858589557685348223679868148613998372521492455204832069753674698806, 9171864669282305897891096738293294149147701851572611219429508505763791032582486031822379181929776942326047964428052429913122031784003002289155234956671173474619891363581484836341586556202018186067510040098639835845052134275056737108886389294627523922905340413781087328018567081305125431528794244766739423369304679639604984858387183424649895084690482541045843008226056925280125310604302924862366035042975465881312152654786617181866006741909225301119404861653048876127850803394965600652906262458893777122460897866265372148090487760837636116966003451269026593439393479188313344024010472658813714401498711390810693593437, 40601093000177411547701336322595594306570877843707566269784057991390759277347333746959889289584588201925919349108042254746511777840552291145917858892166273747935111646718110991055734315546653627971599944164213809012519565439642979566580177591004650383612249366675158257928441121430553047253359575692517922918809867746368859032238317265201075453248709310014589542814115888645507151970061157942612512585265694401874942804119593426693124966109663210436379896810570694314147985990250980578606141449213494472497610674834921043761002975147500872047267272965837949191784741816122403719941768313129884242538266971440156826961, 42841946556776147807090956181612652893307080941112828593848755322204830959593774686195036332186595891056374431562288056958393317026153108430219915879535909111201107800072153405504277812234525511901172508809902732398161587141151525576176096321198663648412269772326482066377024883241385802922458695745112045122099558856190374268518276014862157444026368139907268116514071012015366912752378051772240451818734359176706197951941529689392218750941485767812203026602663613645818093171104541572473878746544620144243889861951116613021483793487709380855914624102182156785398732324019084569833803862606408415918003190542643994077, 16433626522518166481357935079972084587641546119748964572397676613615615830291224504837705400085208927083348456297593440821678327621603496299783130684764375581282016484755130564468708317891168769484219344193652305472482145361136394739986407678726560989351816592753556593276182112761573064505082491093571208663742593153847187523077883488309206225747786850306622827142833225860894595938067982950693813477292033574139855736087112405371447903666169670479882276189272200240393207681702467828295656989042938239006756715095579116933837552411764756518289044699801098147553615760257146649206912605388071208772995754418680286659, 22336735345384741243159571706148540992583367369136467763312741555817016678482865806031053587671173400639887210080200675809358637786322195300189725242717811506644796906603006574480894799755242760595114374104191028869086571126470863825301785314578572848363047053360755515310142605847830103632231366947895748349594430127130792852553179629412131245715040984550503199186038170023565643287540756061817121445413879879081519344492803685832061914011809645410419506220737821111582575894001425766816620835386391114002081082420069979751817624819879123118794659230868287070280529902589296803586349399300253351149511085200349865443, 36591208633611217556609240176635606766608639523840519839608077411508511852936570293417476439775651523952231388648575055912304017209143994201992473246543175036139867593532888678257103938467135800594130691465281530153471813043524367066886562476596744285365875560403497200686369500421114362092835993374958491400850282657050158882733731692166088908003238594652876267272823801847118721141055925882685435156501778726238379560236536015838329753395137718477312775568635580321602007220317033559950528639423806854255720057881813065054984685150053312383694324859930961858099283716988875622477616684314624353644860380269993457072, 37841973810795908795734778397839882083978395852279131056084462090781671589248278086127386206290078342626504168027932336852680970475674159671612742614476622026225227372975312009188927092879238658310979908272583715316209194247843615760095165867407366063303251204450537941785847285878453203972790154041856073112636548466476640348310831679304964454349833074724945252758983833132551005773127904241642759256235910337214532492438749045117081138839458421612695438043013074032503861764984252466343389277338509688510615685378477139035905984101554803907915854253766741179004072222040886376334229531323667381319096706285063048285, 24243683868604935930677951158213395919418406312953772098047680033006508633601210413959313033819092784101039912281712629074382423705860283448273672994950819409529867651904824626401321087195156973429353231222717543840993231563218950693113646048488896113943522254711798277402082257373334670305731186207150742427186616116495050923035957454662428012496642132907523126536154046551736872239611922747310073895534247559408452945390377324393674425485890780390203902894092510650836879329248306762311757489064454112302361244478182401589898365811860183002754502649563777917225267769155197363636489728644278554554968695448943262867, 28500161978977409269840394599038183576923832424510728149057308302547075048121628319199617001772789570358265343238037514517255869835622510884573006664854642189011299442576861440362504112444753609050724291684918397146977270032339872521806926304532294799270194303267014608435105455275039742437085625138205566354877168187622319183902671986450245594937567090593910866756477536938078589100765194712390242181111222697809617468513269695860315141537471272760854041549289935298941009691107870576416198692177530620706181825333629497228007989247321594138943542972629905093619641307718561870556369416442819939099369341222365089455, 22553311194156378714935004108503932855990941289326465447038837096748516731049076422764266614062247250788154460657455124052232695788018790308605343665671700417788601973316240246381774094671948693342493689615760350098917636515662709569304129697317289760927661594783218413337963268998457313580413087910946117019435557069206196842860964640271142620816502221342976316595898654654482988935176005597269917070403178378632475395360680706477065878641346613221063295920105838899596400814499531279285276979238686529972726999313251238727088541287805433180415255446046233861898276321626031000431708956965593906215106891133847122669, 8361821765715502336054897485627553862371543635013690972560169453207540142204930893334948185523969107281386609282600831338784266084664735736650040841861669949917648388561256130991293186832483017154198643702290172876657617122484187988662758793867034618369185363330973307533049209401872858873249243212616893805184561054308628155892104153705794182327871030601086951163307886973909840711618868817969279558872706227400420341561314412297289814132381154581877526866511606197759250002016015411216276786869471554038128716976715849798285138826627093722639834978770050491649028219886866155250425132963069640019770130136881118739, 17526632897269080407792304110366348285548099230273835509623844022030571700647366303852614514836477006764246446207608770144623101760618202362747232914353290810407872819810958777826897984291454706048110532649521282413555056277973418150234889764864963717433150239393886554033276378418629731413690154421426825836222302930610816499239388516250648557335157494890753050080665705306167057634754550365920063420670943284356608046512722238611311284772387884967343853980169422905690772719361771521397496411119044404101000926475317977281267560576027820430281545795371673385458083140307783540876659892836986006695147156495134765208, 42690369755029244321899049781274390285304060158647066380666628239056871902499361765031499956970974625681673531419678206500303117598126666650427388065193153695051654753636425773377165037076879647772034152183971171511412402199028939813128055171382373725672112211641963205158834056535628719343545856513390236275246437456461434399093118676521069368539752752905549800299403250978160032810830020922976965732885224863917679200141707147798491950162694901951863012236924390970345266169131383674216319101430869361834438411940196830477439632518098082798033664268057087868581963931689662009596137053770773544651257421253120286098, 36040692946327927916511833798110921338927712820187625768401749877716755496316670838895271620106312033315366528616645046399794076296263686617970457938111752989327844034416587992842440900567090709938789297183988007054847257334370460201354947466982930898708308036184530313603743783705137687229370812834442062357402879284811522031097086128845933331783062970640846934974777275136755544152725194224751414603239625761079008044393739717720722954344907067185575295082623652668566659360163184361515261302635731523708098775072367946564593148626248501291707354634673446865332769156083914194362414380524868573510092348591165388843, 45586201836056358080053190202689525388900137550203903058089545264615330891412540831098510721163252761817146745607589585530961142270836987368344020983590218341088633214933631281519127583398946400296082613088684632277826219542519040863807646801629071638556494786424359960749341119908611145638513622946783497203033460316071875109297253487853553307004078557865311970840333717560778939634485534197905698103163798073958348773226022283697635809385904588057475441710274685535993185804296078836578561712933294676375513685323325026237830855890437322153766354295167678903958685810074386638282422780060068228454720655817650063514, 18933086743498337008407616643102560165858614129240190652782836890795850666573189644646942723009492034737632693182137255405455218461897750941767193265804690963927875077064309477524120142463406550313137084185760109852615781853631833392285055963020458099249992658650400644447562735914420990876028526408685258011444386557275267654695370476411195363577171031746068885180035159621392506226388032349139758204313694463169590685646603931798503373417253932569004856330094895604244995262589897506094352827203557349403403324598631987828407497550700074426622084685925370385398082011961930310409557895161114441565087343483316521002, 41169206265470691482731109020789872491634172827605818754383345362952261988103025680280529833061362189481114587147585306507328321929663250058067216765531255823758085202136068433502987156268227456850496887794824805115480948504520217597844924829924381193349156188302765422957084241402090708559664883861605478816298158931967514680810286647440593383644518107047297314077158071453688426627540171133744029957663263972682347187741584899650880549997126081129026916580682533541910834155135080612758291421179436318459634424512257597872137947850292281857273903769637320530615219792006151833856672079483989431485220103642555683638, 19480475989238928354214764234617413216376043844572855999475087419463147359314656998325206170119631117380319194325991530079694050912659403374095660525577120170613649868385763111327978380016578341929516386136402382488675313377753552713573412975252503878094874171213470946597114238277990952629240648245332726765030469640356766136902623614516312569227483128705284524737211048494559394851545932970992412142956979345257546918752739760877006405800203517281467672976243077602462175076448920478299783749718815922569668181749463449321508842749426529419190996285732442981489330285246038901663629241941295427189037110431225656784, 39215407646241882032910396742504206237824118634925700411492048714406162577706876433052146176272232465292324101973379239188656385169630671132455542094213022865460609187873792799663067895775644178797561266630419788436421678095321536295464047276010835619872591058979823821941146654284996494685844309789177929045947788070389780584631728488135526069410873365007710297256410050012549166404340653552465425787548541040701940372508007259973843418747672387380067242439718948823516347962853140174341805067293809905441761480343696762976970289627499850588567046974224012248989390552580917605740303521662383222443549435626681951961, 31264377261614120503512885476133023692961161066273366913146927511424031442032726367488447807017269900330292897040657506583721939967821852055089211779943981779620730600397537954668167758473771385795332566305908038391626164928347038996956088752615988448084790643133834975265447009320131696541483090035734432826651196301389060645978713755475560101487873782985893477202779039035212918981973408576498618729973991478024387726099294122052053622245725962462025930421206509786996256100099356335376215928080278174755874129158062442358403207232224148511029610004748351273175347574003986250964120903358884102657205855699431740256, 6398102127974132401625823869076762336350555806073722609276547481690159120413624518696978413744986220360820172247459205863286092771115954019480122000325277557708381757212197051718740651132821515024731559542283422137919286352639385059870671230804471883341596972579809162667276600095889715138484244760194081654849567875986685433717133264699237276094480644634180178781809448078541583382047326199256908873719999505368826840990006055744627081186842401807063439865153970433528093913800994162983701282417483733460603023439101744039376274130510523864090114283086883560564256603671792401301986035017787265085673972361564014894, 4403483894140021240366671213960570391855374115784816006906706631839128585788692418501929025159139830144243248896615467677931360510196255658143319217678641265331957264676035078988300977788382652808122699941481224324150482178960592274976859849026298150867789328781808670877165082254024839507255216407384789688034316111285444931991872131434010430564758231679722406181627596320369652614510522951144582414937220169030729772538036720246259081201432669733154544834035048929125708768518801688951710593531243527693535026543325773989872735058201313007258047735669051105946057845637094692545582691556291218037093234061192212396, 23938136476126428879555056515394239113291273469912028750504800321215969850983033595846610517268852555206823321751301094642995342642463881691667169643575425730696345190891431943801398721795726789536901631899723277097356179929571163898585618275825745101605626215767574380603790810836283794171533997181421063446700968259917014959796565528179813675222722053087135016756867364143711449052549605256828386667130359567157686628202276774031101842700654758528873497874811527759561796074329915176832604995115969910642178257197189537789826614901232352223507073415215529496254072366693397013985942685319401070107669572319095329738, 42243357438924278564661369718338823371682403807785466165805083656555581599530130674154820524455701162155061885747820180037291803405313328899070648484316095039315507694012808644037728668565715165045747935359238964258341912045294480412612011844193893829805678648027546893084405284453496127550632217677844699754407377993352222167000321914780705277265934648283673647081386213933674012397875455209926675104661406022791286818365529059259763932631457899010030042693476139150524238228482928530915048941414335587499084244240212062588142727833391120704463287579227787285383620255472468316476598671405516158040456551659115171577, 18488671513639759823971203643708940927718996456493612344399967172630164899113577324564058326698860668239830459862489126645027087537778393451193141127232130063018372544844380169556231909319418266603665468272956388398687129970470088279662261570446911307260301851995825074897124842111793463319925074323033451785275881312894742882274707347836276064836123391583667629164370286925815050728354649284161561798349733042773238819068755708734679943054158020047024581174266922665837313230716426177936353728421716002329779224741464518117538806604674426041702571126442015099538132484501635964697446059044777795671364815005226048692]
gs = [1614819783039842002931282181135979846638110874919962355984540361882479700194448835753053156865503230738486370220975364080432880308773855801127776069525305953642128558778406634281882193909212138357264027819568441175750009246720206115696349150837624361520455091235334609254130837773916974726082390528469579777377100756632536483537203116918533700548850596185380791253423717280428472919501235541056318277773579683767377576220006528503426732338165775189808495258119385698606488091750602686442774372908654677574914288850093533435603737666397082943114930785232078110520242515147563783543964287111618877209725230179341779088, 20657995639265966100411507201838173100129455538703742398560836543108063894880859089242036146719248798773317794744963073089879234427479085558209775703131510533518827249235936756010282722812298588637548140214449879461237560494774522139267843451311879511825092524808976701917221596097888654692014520370400893462785484736656165803202684587197300478103015446051534416787387831852918643721751691878777363067071284800188847522207081199034100015756463980099019893758378163637736111247233715752465584999039666931714800613134300194614142679342236035921226832190295929942213779754797501798726758669979363206945813643063851176360, 24921268658674399310308512412352718088527826507215330535242412902731772132079569129652101497658016024909960258614645037525916307028704722297253389055296559013506153108092022520234077689840236480706102275670782674809194144796678096672290416764439890618673987293390433734074626958722728318499865682300179126886027024050226248021314376546828226577544167765758939936707340158847932412407386310887693765768138546730084375901955664717482142006126422628128840874507444814256696232468020148334509159906606286974155266036861459340005734541163081672121104362531655490338719821306381053489332770718033915575433883342790686113601, 22918750474519177311844721027326703455819436952545536678988419877623168776091638819747919193506839549275908285665679809002496077220652868202099248663541849683734110643874432177231963994425765217393960983152568295956293763620893776009711109377573239359740858349690727261304704254051659941673954530879260624495741035744427891530360429054789508294981094472834093360591072606444642381657188376271821616535712180082087867191203145196646982074726031442864284407847267968207881067102160783539819333344476912077816248717563885421091806959959938611229432031603922052137253274365646000311430518842932778103054932754151231890499, 30434732620848225801964515442808417004930070678710810590368281128185421000012618182553917214488454883456335652701618292181363953698105443974164562313453593765445509853424971529808196438581478230431653378949554756293672487097076374170852345116113493898657257866161813357625985911502397501826920834490228022626861924338674807038916678659465007522213238927834980832217355976099336017285381855803774326857601684696459125762149549171000406838025179131566543276893956483981711250710758600842568392037408815349011534863118311158437063096121855767618379502063571299101800197141079585663322962192021711705529582608923637465630, 24290751521441502645585302212654559772048121629540105831586831093690598320714305765543385214954127383992958551668596289437844930320103710523267425099363044292428440944203757651544709593257660348622150782727104793141383856567942210215545487653911167406200128516480717470460671464831548323095887398631411521290103612000834383297193099774591049991044435395005944213448730323683769882704551078128951079141685771589277476198508948623270321887998335071980237997932825331110701668243455679203820854602799436301571310587619623510177022108152331708146608300314551577534218672467444003417097511720307172177596785344181591435212, 638026935238431488846484728424954283645362882346903283817006011735026717663298264653712092380850818550070554950514073081747396394819333552618538303721403957400136374707095257908194645579325679524793891825820581546737441754780666099583561430947596252050734721117259440765593799913050326302808375757663775178411875606259542009254293188342852910063071707060845936451149789924099040557014658540164345104424717309108907410524836708666345821365582326636156434937115406640627154424239970091822844132428025606338337516824952795996094145232854401504141051931989209909407800633184166546539348781648790937260917740626944078230, 23675833667267457320910317589449117566993182251971268058611119297449709445951774655136616706759165888315463754864420182715020169184989689984616109984061230391136302646340187026388077553256025465946878437347483659002495634573040932621774291359757386906157912661300760079907116069989452492127723900236554860343079645847726412338862165139791479145172672639186427620108848835095937705339454573151125767602859746725666630087714763020773424608541669328117805412005545754550543421202340552317890583080098627679791452237679886613707545468088489148056592973583905054952677636680628419241943744177209481046446195464933775904565, 45890559998946289999865600647182546954101758018216433219222439972551072175209777655402708642940520249123544446940379828744819523346881064473478746837761338100937373964834468424891406096148982258164801272429959005489196381265949605220166133806782497130338593529524286618077478382967398933424575775804114943274832717224089327912701925798883275368371078592561822449992816976189854161094426549150077061690435499123329838328756575344928796015157306581376229346661910837901846250154645264873336433262079512451389633328405186380679817834670680090541527141148211423133717411324273261186652442436170679028840186849482287117908, 27597815487601197273897993926904168910271613628275209893588405757971370649558619868503721172909815598898858073262451549571401221138773919789778181419021307139305774316573269919020270893527337749999152070912866313113783113569185414546439433281597963242855729216502634996135407654885671777612652545393148408064619341683511861646979499902979452084193860858315781387355147753245883525451700353053885352214048425131246260578737085712541142551729464602905727446167533532464040170611930738769490197031009622572259795183981551428233796076623862554726541448470847584783372813920546081508074032067548528913893116822502039323603, 46504136583839943831963897825675836175328071779479166258496148086188482419872115231434031451496219726825539121217449077567183176066276779829971035813840398535494005775283200824057665495401177158495828697573314711740675745024802606491458133249064031502580157306412280650935351244842544332366436877596925287665969705793088808367691119767173862933268847834750205339658124442443544150014006021460971663674889490353852334494042357985238366457728555388976975559313089678693947154280657833020999580048573510763142820981520860052299404160370588232384926208018386567469667076223598134328080858633471623448819320609094814787966, 34737282426980330062915386971212070691630086334847757630932610984467142619606707023382104858159682455188223773295297051180613171911799399617181672265671057603872389709416840340578133308000591692344173801711724029328086500874915360259962606557096704960646831347940356731895790305705588923361240665420430773981750565930370892246005825995727156227481141009738273782299527887552847725746645207957045208535655795930201201912914468699075091620616521066996483020873998535819317402432621631146857424052423331858935803755489027202426828965133725314519206759044210353598289299709526903239444964987869340637334475950800428764711, 1174068459069492686413171395622526737232363009532641168816653488779758477986459305584151136862224791508983566328890935630807590542855696151673957090729122324134119893530856399852412567308595732813577676251906433067774449433880354247476913832786036785291769975943512683275102909160902597059497873894668068941226851872259182725062654206974069297288317734620870852040107189943317044821361592178748508175589570087066973032703932642416768628262699018945200201367874033779407227828700709813316761534359148565917285855879247246385477165650767414048693947856319917284548514646320321253435363379610995914705335251692953416635, 22182342154380085086263706696627444576401701980611501058310083364065995021919526816027616817443117345099444374070356835649116342264812475215024595715033450573282130083994056966127549668235941764418817781602608325115462069039978507616969840470809300962790529104148077250263252475923811803049893499379224185619196596878028512552632337175649856487947700235891836889990086749701240421219888032829319040240043335066223066671537185289638128202310477547984958635785534041998565677167541866143194888245955568142594667407699206309442936798166723989768102999100706260053801807820688046300898183770000543924185481895136422989630, 28424323901704817246618194744242087808986699565434370996246091801998894744793413108671157532967524166813454938450962530306550537335265882345897107608161286277419019279193944045115528582988254206629892728999811566335652169789294920865906769213155547200265247090608829057360607609608549065966047973085394296210401791754991619150964976377131495973237592459599024931565814182601015506321329529338765394853516984822080664444562104120209100572669860070620039509344017754791705584873592810860019765378932645057074739859170713416148435369086534280494172389388474448862394552723956616357926691870317665857508632378190894751102, 23036002858590047653483884464526971812746142148323480358640993797883601864068512879138475719890346219943380251877403428655779514272749733302700326685170365870858063815451578228271847901499815346400166055113488978488720855088357955514245616693407260661819095793694664435283927174260822608975870220556727181779961313908742369116781405457120737264778115085775554997783811858179277010042428834733981466032088500906965168422361260488381513997092750226819111430969348265667033164436891530640948083523057920837341622608149131400149774467697174837762128530210385927206232553173320368251265749489994594502203825171493009614762, 34804119349316118857788595978659663877289908978069473559519817540829042612818506029509067435995968158328961508754090800048318429360703007697782974118960206416166863081171968069956186877110074424216698185554822092069766214021097452710959955170852997026627921601825376358626589496111326191984182084903433958675817646171140752204331637389628156347419021707734512695440958969970329395541216376717943824038233988044912744435309703177785307584479378086404575695502847363630349722156088177564813179982001347094742971429977933018681461661039866845378800838243281801647240706489624125172085169835570407302283788738699647990494, 27330635396288745424923592026251994100097057892692545074870011760953661188835450304957140250996874903574172410176158477047897681938821576907889073908527517030224705722897034009059336283993319652186862192684820188863832405641996702050243917162956877269531668627964543887421850725512557360626703236302103367235288700217527524119644601324991699943621047729543750965024598606828150637099362634391442569970440163857855175717007706202186982406215759611934047288862587072299936746804686779704624944376814508803777150217898076095277923578419119648909936562649078981957340929039295444511863529533073108067138089417999164602549, 21075157378919297186423097193337801234422474926174153566624778467174398342831850998349701414159478325242330111343445740050291906646311182772694256229184601005206719491953349878168102893983842943298103263551075108523562770403034066589105060820652218181219799770984277827651687525354185015276020608961624930734893411174120426435514445522043911365463718122117521322898620470609715545116293419341344325284290164110779464298207992122241519676938059059998028811666500996478709316969538300103629002377072227055523797644998403402118734031441525872324958881183379692465686237064016571347397357704434565695666973566276465112084, 9453258164761164872425495118420054657180269152547774168708276057996130042196985847183751279520597682828138025480983997460652987468185273381536158565926011608121489768469461624395471024362636093691721052520393445953361041665032844584982245806313945029571204412623832805737205784244546517834976305600030354150826471631136433502201898420045077321224973599641575974721081629306567824276757382673121440581099385084162321662250583112772207427787252924700215760323646055358862322222558501945572911359507009027274616182270009667890186054259291105533810380270934170518097403257958921375057863864138715822520878849382373491581, 23888875837744209358349425089056046222434887004399903498622187703777503094254708768421306010939325539353584713412926478998196220448561308338109443558533566886591725298757748682375049217378632872534562873843265671827343224024577834224441764223720212263155879981240133338747869723553901551586959893977126496007719844558541673603473120267154469542656785286632212091429250280179522123064339586031762464265586717809411435301568654427811134722770312527335597239015407354128876322071656599599858097778726288920793388483627158120256764716180204118956604174762934972017672031652864953272901600741942798126337678192618521258249, 31750700531857206581249192870891508687363045256979630897531040738230791126713018965169463111383528459678080395127480831173586248257339900472869894834920128864693425023026563585430190349072807494789738425177437211847152180438571849701520867034493921168321413746594905579252017493891551052581056515243999850313433944947250137881280068711923437707882080198980527601220568901351602343669109820066403974597014808294243505043521720538380077658742431875855397523104401143078800318577734787265405103127380897283142837155372902312615820032012582079995421260072026057829763041758660841336296836012899427556873013975528712835659, 13354425381664404245575426789743974413162126913116332651056353809845507541308941687214133367023752496171040847646048316681905956766418921677081006271813628504301958860287808163134082039433764968490928787934609764556007752608003772882588381936693836443777989932595913681494372912366008112009652678988820503708909906447264763083408224177073808339770921575217091643753650809872995627220091828086725708897254708725318322615844514586830245981252051161268418636313492346563239035692697858999560928674214578177682880753018126484361404645027600659928308618804220768291931237537455428072516444722968116488091725129426981238317, 34395170607198952132893150958778367572252056471675581406733580245213168295426160011192231858429296427744441696070527044174482580580136340087718533312533659221057414491646771253928416298430978692953352842854700077593520090301328129333064940502698546805889086882331206454812797664237368000852351141472840552832952710946149363552176351076266849272775726964519930794097932610866500855461205491840480001385040886937153238898487802282894785701781767760103348622737208414685637006404330788151083856665483661048541568820059197471297248644579883860467525422582484651507806986391074520300019483939405987796157795784976589203872, 16428186742942678656079970598296440551782245404981121841773652385890603233129324741950363996969413928984632254994040413605825644902325164126821795279219465206797190358253569620021611819261276081142817539420425772850769469414420221640329296953246116980011012954096680255315425138259655065817427037546279293183015068572335499490702941794262048167201960794736643192432073721759424299281127031944593241582597207876368730097890855658955466624803261167033301677906133961834389542597946881858598347053322375842133500387890226151345738995149820373575153072287695703860678587229755593439795687645655097764344856361241029849978, 13435607982921401763667178687348361762812865184382594666723277326681341425845836245307190609301617990709978729335554834927272839791903290275229198541671528686496434964689027211599926496551330136716955113574635281232642116647708286124853837308691997701725855421911309165413568389414318561355737024365342009571058408240324469519043591206175305293475580062167822951705033602446571152350716420000364537633851835358795620407097581181510269830254235276764783676561503663864066155850331988250342889556327936908323443713346547501098082213420964682418107318517241674888549622296406120824103409048373958198823888712728621761646, 22453179044288029797751428598764210931920353449041479140153857500851638819483320992536090578047357540745677508735650433388144289867163174124421421299238404045306364059133766831327404071463154158591839302569657535417440529262188194328772799908464051331262852594531650100934085499402047976529375334777384786275468557248862654857601854796733938395662584242327718664424366871738587453344835215568851176514019713735557282950867168723058101866645641564995178307359436388109157374075861234631654366630326971473095025260901595388180004740179708905539201387945016548463154463616168595451002390828009288398408529910671026413849, 36959995194422760602676089835298560389264559442691419929278405553820475027621950936003627530527566042642776935677061442669286379512755680140932369403708208676890386002531181201596501066966850415238349447321480318457294352601437821879298880597539520938881979911501131956385797083306455222825743491722370433544615606013928813940289936745495001861677006977015591985437694067014809339356931642330920300532412602082296886364967333808391360009712445768400532132676657531044419891534492123752145663508766716963719466741930210211345866961241551521429458244709838929688152346245863331108134994679539937468482418834396256857077, 23206264985613476910442278612239975751032942639533285502426441578875106762756839194801880370263832826563028768230429091631665263043845893985842955562817045646995928151581909680963489718646903355171202917066275280411158711234455859993010198359142829695224861833290055453238717787161864078206935480308787454170394004152445358161793141375871293530200060059167116740856706473575040017925108118162125864892257809876734060790729654933703128909052717407248795890259974639528421558444560910643646271492249088758641728103074223086248000453488074589333370993215994117978863371711920929683765519036778892105063440178392994140524, 8638468760411681293443287087499534296558275502674733732005062502260680916432472915204142752539870727676802272958126128332917046651414163219982380838389382362901923147165245001742461331734324378093810069188437992113976292898159766082760042849237005169951041748945431319365758278712463544990494980174981923353871978247011574605804894184035514994414340438386695336107210540778946553512732855300399389934364991929195657234094958726358718549295157291762932614318707344028612285227412203420120690644194105129605786446898921914204017840908489809666443166967276960446064647657510212161268332913905535307009974046086696280489, 38063224580356709761767288191923671721340486907980183126525605774075546073715472036744468357435426162216037614679323108653653414671769206535864524612764440099846996300522933914783254065963771881480335510193108631693058556122431686083054214517809991049635099198446068376850856827954376666507713141001117872793428331426231348748063929825998014635227090952990565480632726847558041696165494945721728792992616014305078572347935823580171634594667813408809664378551218434667124824316091977337295813917320957304248509709207956211409692947600547955234558021424023985972770725818534540302918558739430441481125113518915232905803, 17190679531019717092609475318775653100713560977845389176026760172918533402548278156800580376325987677582719545328674760089701473994620467878923010614285865478345177204199802296720938762963544400306730998025558722895879303325940327819559414166029991935010046662584072158486391600353946157838552847846667093699592564438313381240723415997021843385192118862360168175887676171959945433876964057606693370725674729265569864115100960881733162443679934054167434746164193538935527684271155788068628303204530870962303538661071868863788797407765019332807217599838306668850931798746637679455165121184097649377059943349334985795404, 16153642699532366958077981575764040119061813610300533234151078235584390308794838456624270183653855573449776409255207350486429079604742588100963600753958764673091077446521591696907866539084410953871124261329947237155107012934606382329916879901001375118702906944812658600818477254240045639850209032124595954175941386769795349102053418233633758949928322275034542526042321306472041566064913741930917882855782443169318012161617628161740457434926582016991936828797107194062414393938686136309676030080142586069133666609876863929795023390418824889106161945607561352855342133126874677696821652263809291667377086818835202102543, 13114705649103273248930638484408822195394474275587646642505088540075251761267669649182305466484381755084808148815866578755803860931391691834648994704960531356370335012374897038553330122678715779645192400689876930492490689849426260217982559765932344689961525007685920788707161715926674486620406467004059999762135783687794839237816124911933892577837435308408461624823483986972706683921175440588316167240556816615981065366552420754205238560849862689296959760364978222202169753374972657328913310604586250973087767029062280700948928822251866052320033622848482461873734271992489602823846170884028289784084550325474116040257, 28676472844409674819211454043333537417713106647606698799451829687605392925306335302147558834003503209985415212642708554375907037741067740450304465816206887289928066940290070488973634834236128527514764077839423501406266628500954193159368370001786201724438953292896890687237677068989501822159195860808809893471341741138938831586168381217313979674252661151770494606188057099114837219528065154890352223326982606381123918556824532229373486450991804079581519272162432571415905649199330330841279133878605305158968416938387576339704812037850805890032797561183612333310580717047492203927459544995224220342105363572335886901509, 20180499883648301699484828721635927997655097600546348002051067999381688765717433520133644606624397479267387074077724427698218538344682202745655325327272114227887640922596442479339680011288757483270587948463002629379455261091240838167412475674192151294162688622218498836197061641792493827593761592762032223260475618582590693740163107288832658627913575151979868072760825229642462642520315041124805781983768714207539906172448573375206245255916774774719175547208973155628228707136350762188586986349673081822858751974361223679077686525903436651060128269631281727301767242695334160555875050947929539704724743067043430202543, 19018555321643217410745602538967222715001047633989482313692322581506892229985695539759536257997642011979517232604926254951296571099564730324677553743933878492443326579117110003170117583193049872358720095294678248940844504698848209856700318474350306752885874811010236514323265620564023210697483088866078671274404930136949990130005968812810106336088607991946214262366137261906057626141126780776132495091770481186561568755900280642914099029972773541353073582023538869745224381783198959763747933469240016483141503611608774479674079575244175518693797305660550184251180414748355369878256202212316526770498136002269268514135, 22460993921712252772368661311556430365957878656782427262521473585816981932613382273306809020226183198361382975471936456087681631998150752608511938778301159085429904234236504896140014543535779262677711710086940700185137632769105023384916954793569584995702186477666311324608145833913109573172381088280026332238012351194439382768216882595236396095741678493215739072718290258694200074127543010803030677809024554208360872275313853272983374414722330078980659082031919024504380176657700807361980602264725976059757047138930340643942095100594115927340488097593538189960298152844791837472769241510566698789836268529079863144608, 39116661013472492055461560682303872061098926474778455724873638383787935289976868104196227732183562046906703005824052992917237502137804195557395431546183828510692424568149715951587069342907039155724765042133033271237767923556688778032408235063942972507451373855354118317609055337499277569134036937728726508118962018541976368882441234950468557759346112567384470301827754140309566028394405479770838596211650066015759126053216431801231796974881955832560408840332832077946972389466761727436759994135500159833932395565479641233051288311070518613988954774142363076843270846879488897886787035049504428700662924723694368139731, 14835051112772440173615074090941271382192334689743819078659863615225740247123589096104764423539008003340799649405745212562909075637941444633022147331296371834727583749960652736867890659069431527586934021877767192968627651516430607294288957100490158765701918478043563250224625288494287192949767633866886552223555135159021905797863936319887880510671794977507164007094169528042005198785754614731633783630493196780440964025474028099209587381651357368627644342042259737780612840194151662291075594811266199866938327542293620551318364867632911323401491668295077914733305222505973095217359782524528496098336039126386412237658, 9026575158448673981320207784570096598203963935968402005704570537891310273913140244573721496353448585103240223970862189164285414759747221612374065315235290952931640453085172087325237824687371502471896840688339197939405656986605636571014312004280787054665948845075491276790064508730136883660544842024911811020232649034543295292681798947940873695031799137983571104798463839535362345890388140497555385380288299934678676989290616304831652774523335797412283672518120450019456792250124274383944914437231308227701632121251670927387382765401405015856876313895491127135550282203524517751659237380068738256619364159056437566106, 15700256510195686949913338482120674471258446877030401034111320300747165212889612627656825913343473426602743265888929674028002343516816013273490164154273822701133182750450639784697694484150324250603699818339120821189566505899936794164298936527214166316268461918789057333706198861476441486277544460211995390486246954103277541574517582775515721651159765477055437602107847385967353801454421768799195211093834287629000876065825833008459101229445856722279369849732705990644616410076523207011593962005674554417811748485944130137785883504118740446665899383278907379428822217817566079564931507865010558560573207665129751607449, 46778876081669163974804073046338419317782753483724342531783681101074958337225417792161490426122359217620921694951744505127695889226690339050751620342960745608672308872997300875078619183474762138553746639941584391445381198803683248733099011891809099735703404437285906144796994781954300745131997584686934807555092061303907189209414710707689614631871858486486922236007122915954262540061992716935186027058406597240032000204290985630734239407262863800077830393986182523488030866210122400915807399263153791913677727144069319921263293024938772096354952593843176234430466959510052290950786159125608572555167593643958244379924, 26735171189581706330432852435994737661539552125073960678508761457309579268095116918977160126563256359269454990050703555573958589421518345165011370600949823563849176829717954775250477966869763986719785215654186928264726130874910713219025343821758822009633935874541443687314692827809206903156662008014237678419515376023070132967711255191900768073991279515629808015424379832930429752390494230082522564451711350524207138881186691137368247338541268134719122265125102615868238444826303485363287649065992184656176446230512442182177402743140176771265456223157300650621566480745598213659709919940942289984828152528132780845919, 24618956964935155621793432374631125401963882855888999060888450426500317536156316233724572186378857906923282579277161845713184669837521990085880400172075489464033526691796065349202652928790643314422551236206982893906920809857237781151044706069735317594101379168630103177358407894615323134485011470653096420491621059777243633052465909547613344358305026572719221043618536753691450866949144517547254013687197858539237870313016127024191556974551568468837337020047964487609432769223071384114355848268959760532266255323205153384611139548882084443527685669595046249511724398040341873795409560716107773127135213430608837412681, 10546608682414770740741687867265040079737500037651444273388903918111533911919252580396059675679410843561629834799014133054244497358500693368356861050309006882916276933314185572178101363707464179677216501454270763673070202671603507769176097949862431133144058531070647009627267126462583736059794678046714290967892501064937847171971396108582237017095330546120046644859582447827987819821331715425876467473088396050998131077639696078307034904866741639898564391751584312341486114531473611026860916976094139049071554195521126141831346365994745397172234376660681766529901537219061778979534112410799541927971668758895844785841, 36802882485379361664138666987512016952657521011634870322191446120523670847474532731808625220255504165001784830682911512717028249707170114526548977996296655725710564948059058189584764923551317045344421186506442258299899836559926527097542770941068967857273117981885624907057914468424335436688581829705948411646092020142523161546630570903427724390982088674907845395597190517182267035427628349507874446947406462922866423155491336393190264444742171829395209890217466643944376657424242951824539590616909765261170732380543624589991460327954811847158324871668707111333220716434096154990592497171227624718575888106447081768174, 2330717692995571718478826244423308013071700719937690962366453190848847369926001891094403008741304120282498440319062933801807781452049531603841043546184562059684768147930340958013912460862192975849385353757576990805113772615955683040519768362014941040734529381979653895148703397509827962824324939021578812212064369237177233472300976314630387396374651725697699166165258031171800587311864355549996794030791461621357071324102470383954232135745466751343454045065099959075858455135539237563988973455528984455506142146415062650571937693995856875278209053982739218436513191848512804221359199586846347146318240565978585042653, 19844851671735501105397505348449700455373433063846623127984186131924550493391657858718315158031675985379808588169259808085098714933722219248582498532036804237534767948826070426028088673183473523898822801130828681940022786325727914218118761016793069578367691548324080502191019815037578386623203613924186544693327678212453142101463353370035512016930762297444871541226782815294409609059780367375438460689791303484893124709668252358534260005786487885999239262311063972369241383306205656943814866601356948833516053834842602926196876588509279159800459595372687468445567212990609588449772485454495486644499331328874051265848, 7589153613116975130119818894783944422353770814591742116400584678009358760450590108714118935074265273117428839263567464413544319964172191341730996824361248553177601200785567545986678612813326806622034907032298328979781103121029681972385027237006842514413242015126697792342435975258577199489374544858061855575230455388212923595962183110140009259398944560617506457467898014288989413607056639755151786301824064814664360056255223691955442276243721415468044125879448025739857705264664812703163788618449051192523636479999003871815292920894714425152531509366033238301956125411242195899713539001482520708101903971867781689680, 16392330992802251760886448021659387544892201183531162607949034437015120025272409481161414839332463455848873152188230295680218495180825794182027460333586708970403555592298540846919222225674238009160220794787327734854553441319094527424576993575291225932805174237065380725472867634432231520123981944789007567064294792162369109104231047520078242619394713520875963129225177962075912419500364678966038384456091687694852693995419877278203239439896971983201869026011877231309657876612759321765756808529583176424621423925406474845461895952805786627252771466219615951756768589883565773733354352924928161689158177311664316086426, 34133890820565217234152440633837864760957404343990116102030288220611808925053170002519628853387396711351302357123493196588525366428177743507000591214222624131035051927933205539888718714601386852182382711272272318976090772637836756350022705379037563315862331384587280089464703148641587602484869668883837974282216130643794305364396589509590778048321207954383364416904543848477837441962656875115508536684842102379992419744744447930248951252841054101697993053825917774477872592687398740696789997530624461986076292265404365112199285697035212708602250265526759044209530853134451419228655924951077754591424160132999212389839, 21650458619674528413315535137578361000280291684182594567910100809554237108836217593575365250822076746408892927192900600423164006967670982481811325221611201655147647438204735561251799934481917495543552033999491377390835769063048703259187319378171568470828113191725676887145938307502958904140172475971234984734719962329730950983243972764286288394383012817417220342592190444966971443363613161380035081406761923459516440190789740652411475166055560739838586378269608682748912099521968469863215214150358352819888020276206184071372933174219778904867980520617902922955944594682121164715570508186176312601753239340267709998534, 7782748046597906319313117022718502268728809386735535897315015386691432634379937580630999969489161991443494752467610843905831825214838818589911637632821156690115878357869266345707659688631818232985546370205701935571955322562449215457603574979964114902409632661077948942010682847474839604069797710821493051524255840800491141740755266704202858997695832152179599445275593789091493066182138918355399974192357510197024454195166910563885503802855890191865454941193272696791866279316495479220965609898101449383025222238758919098826471716666549167710889281159765890547888856923134279038956746166813692155396778104947542356996, 23624155945899499283063368066909226877097579638502383894318298050781467537546952811730058482216775062270289477563713975085039123734595535075362452670778758096786852086749002568519104446997457025793854827264938518604283965674486774190475874615832109935305067302944774542957591321636677370200316908322731212462682197622784875059468701984460457789661027378030732005969748970715868019982636949351810138640872800759018967539628212345587343246349754438683796292901324504503628056065208931542463308840157838978068814451932249453424492232450380659423100642021805370314662274543920056394494951112521345377069099043480945755899, 42444411026711949141192959484742734676112919065612723299565765075033734538284346775594298567300015443941457840697409826806511400621912152963180818276180640216941866505149545975021439441427257791990322373428536906211514309788974386792617796810277888581132167791543827430480153051016694799455005768419304616472696979946931306586245308339888886191285026120567603706610734345197012818627660110285617292777597994913256676677355709921418834686792678211497891096019239786712915629337953205076059549008308263193253322332695520349454133848013689655522804119302202732471012634393617920243262975423574698097558186237112316363171, 9531520025458419973001493563511761746964476752428904663354697419130780105564224074511533517673614495388049820035816304225943414275565274499592333909447740328902675204109203642029293341612161676098731900376053939412850032638709576112729536652604819852445984044472766135105630405529243777496756697949146606800214066344474283365817813130156684906000290719367406049724320891207856347795963132814581732076294868412359920247422735363270489930979520147948601764839819359976946468495254573953824102202570586401101452352433791585792882343714115208386571530443295364040731586943347697320187801775364965653660847673675600169165, 9303893227666191394135365423630786887407144678912480620975117817796813171965165238209426540983328994189576314243428309149781986479229058837783290151277659395909594153470559826882097255125988766217285379665557895899504745110453519095418891738125862306892649560771045882457152090241743093697314938051702194708164697269846811251613027005267906324276344700278082701316829376294202844951672672004856155158300306462350895101942267763605146068873002955851154470240483012693886162064096058665916512002979764434378837602071281379708312444218412296294848677923796942754465658209737572023406879024016500492411559829365686515140, 13584159323410602760439188922984581093926246979061197116081451017473382903420608575667150522624309967415212384347924114442603869979153591730708245886285160989007676866814266194326787402727695938950711584493001488483599086277787595352233681305513396424414350597715245017493556982092885182855193631792737457721424755981833865615537826767780047975873762846284925646418412070951115592228282250667376133494054447065418177033996899254536360874979716642131603823281473776205911684372264422454660618517835856559622245328365870525896993592108711780221273001819621675309477235344290614465070000006350381356301575479106598860772, 45056831433288970336025252366296415827422982056918174021630139450619356926320418954362974362217577378653025421784449787862346268207706694986414310714277410438904548188765087133672556300479131959712202335590656834693666424711198709307204093870087869789231176660099141234286590549271235317747807136707790786571410294985549238910017702615223555515727371265940858566623858032552691489542340284264642396826509796345719485802192468360938117020117587974401669283008782499572182236454211193994273657195331298923273494722060952222258156625533748293508653434848342417078120786738130810064701798438741591405796082567359005023205, 47226331460002711804989452337225665961093400597327228578384473977106521271301330899833003641088141966029677447359516532616530973274075804244543445179988860013534563454958849626085581844896995750301389330547168217904006723131685241855158173698187246986214551512541205665866571621966752379338440994642793167756147610204461521632696583760042496921706596369922468204997929986746085250318155313423122659655103811576231196136437918568366562263437477177879983722234058848285921129893763576009762826924182463829239426209446451353250171366721317062544661646874046793238558998561685401134248778731117480542513389078684652109937, 26281233710243006966281232550403581689596588622786793544180008883059264229026939610954929393152294308430079040836393841500012074838162429925174653757270501200364075147334983142076008085658135747204545814842894846722963094681176656180542190173172458692429669779163971475583175601956654701519182506747195974530654886494696174573210406846729668063389236010685018756620618460582880320032132241135855452884689074479236596841508464201397571351051392274869721989641587857505016193929996814156428618622740553559956849267570150166375602856060121047713629236378098246428650415579012897130938979809710279692625260911194621983149, 3083847482564403328009624290693084825104157023291210791403560236860592917710605757768435856299203379751368568705457694248008097484567343805373483431637192168343540035912711367702204681437206536049546312881942025268807396550271608154995126732920653550195663626860267126539388701779054260413159395317997520272047343292454059476050638724895185824334008226880515938371622982180509174950220719711678692854279231397515322139452677577669508315016589825228595065752141778386288936186779700376543946380955691325251986993252543432284745815992184198578270704306409695233109942997011776486981082813095278557100378461461879107594, 37416058773613929394536205217320494633112576088976254071981633666171386489751420980072765424163567562580240594662289979396550721425734032067716640564548830153611872298556998467328568036679713688746520166969809136725912407943093790306983716789481749006048857640534905591532018205198949711001939450643119748441237812755137556077069438467359065739120236956995145633511052015383283675784563035023750404071953440068380677246769152263492174137269213855219617632265907724831812752322207400142535925797000842013200205795672348296138821145672340129651120070985999900126869732047723971846713323104959095857352283791303154378574, 29357829501317638727516301917573266030187764490254866018876173905432223046821366124765349483868792961000730470108793130253399052831051565673022356832948488704820721269685186635146250055961893608100962488893232034109732222838487245644588619043483366648135249452626506473914331243559793927807396578300882193680211853950230317587967446787656106906429134398888634039527990371793630919260324868601527908240169455531399743614277888333162793629086797567564922867109794781590579899649145082481822487186833513576256928942982322102534885699016901396334035584734729460725305788729688999800717703959814512008799896543676099233212, 3429431359942069701590731273602071755625898939598235082822872201546943339512780025172515046389231974235584677432899696091382000737779192438250803353020956932837658448855901665186720582989970040158513857401295633356939373340090663313422289246577864915957526041508433869261733049971283368193813768170628278573436462516502478323237373450481783607350760430676448079201256489019841507947355971309466028245902447292396003651450018754151819618902046788598717139383120910186972981963030424583465518620597338108889973449632210085271112843095986761594904586020554697225540045496639573589251030274982900314424373416178848635656, 13717592273961775547617220709567333421021672175251043878365351493929885397631387040563235474762915799958816942491529819380822627897640731761880763627981702302873009302682119754337068625579892108387017736377611392831030930873330012664549348091290112176304162961561509948225536695858350990587586272012349255386093407480763611794355194078013080749484506504208117477970804418058021655720850528143295715942413674963036506042403166283932043067646145953897793334617502069173148194960964737829273730209892901708921563009071902880844028503691459638011973121445016832281315578198591359964563330058714817047608894813051750267376, 27097047124189415441224428345985280585791483767124971089453711697097335696474793715807534889262145638481135267654302130668587311389927383228731463377287674588501611019650391617801212697790430798769361690307662252915392546708708703823933591157307323530043011600857023283550638742621956273488180304161613069812380366697237631285558128824319139738980995466097356562161091737807243931151917761938273416925221478021598387118527384595331115291720917162143507475106726010998534950452848777458830994221095687051546882256518617494020549793777591920184846007889065889040892159596068230432969365090535215904063355230115252163009, 1093370327330622138959102309421446308315609517795468409155360597333347011599240109181772528350600108884927188601755224299334986857462098352361189153696219912902145333466897289146243141510579218577580011824983524376332673191028134269522150847787073191673286651916507100153486031541976323024731972145011816754888600313589414255035794919390761230441297098399324356886720205926541126969066706115334617073842648967196737590083990579505748033476058093505690004308344246733929155316208613746525781959485987967863335319679993911439187966543118932294062687899108964842733610550788565144683738755472027915125941769049547058184, 32565896188812411969343241043231348591347743589292477687434617589100335417936917821097771073496743061282958125462847653278068349805929356037152575165539190951248805716956134622172057215101358206264551184677008965077650212105804425339361654511710742066683446445958179652118630806041103967045078905666298763218052427454162115878070657000873528408088486186052402235850701211237706882315341840295151724942680019163390830725924043849072861405622242491086398313543317744565298536524682733196904815148643764147025500148369280991144297323424203007919458585781926712348434056345714592792745410431735199650717023928269587501813, 42956000136775725691982498744603248336431935490750992902428490712510001670141156005808083376283658910525626307948560528688419800761445767216551359287154797526206350960909852418966207732932904985040117125707082801322913254135134774272057166772626581664966735780854650364261801301460270572206727168055160894869807010016069062376237258336504630740622125587986620253230841003005296114969834087559135366750810302790665039881075217324607097342571066688722896197225449759794757981758279403039250673766525774048948316041052015991253671700889563291271634362406386827966684364037328426331422475325869353474169174130969923396692, 3810656889093725698529935313335229993519612399313402446656820299653224906053713888462948881607532028442442278476106930762203564488882204997780033269783593831552208598372697255692195041243031443302417883431284631312918507880083272984004068521422580782901113265313870201673498510281200698998964625069199565568166761967650260618844216716827463217827775507372629475453042520081886753174928409734114371878183159480149901333908066123479387235159392367946366434171032194976821141860410968408336514690601322674208341223869630044101668776015073826253171299050802798505685865824524657060778645799606681965075648290607218814398]
g = 45271426195437984198148734130819758602633909815689072697478701620601435374673859115374977739381723399290678384412185045217122060295726959080235531506689431253052329409248991162086755435524236239059164372248760776929823125679997728474984060374726551469255675878559640618558013763390399453799698222302893713694848361621145466743475696742422956752275573833137869181667151612124053978279138459573664900264490229603163834249353694326197102808037601830972670908019774394079149810806591598567334118064953523756408265128194654597075018359473812617392872386329084774129433549345609748777264532420011155288544759753547510177100
afs = [discrete_log(G(gi),G(g)) for gi in gs]
hs = [discrete_log(G(li),G(g)) for li in Ls]
M = Matrix(ZZ,74)
for i in range(72):
    M[i,-1] = afs[i]
    M[i,-2] = hs[i]
    M[i,i] = 1
    M[-1,-1] = p-1
    M[-2,-2] = p-1
M.rescale_col(72,2^1000)
M.rescale_col(73,2^1000)
res = M.LLL()
ortm = res[:-2,:-2]
ortm = ortm[:-3]
# 测试发现后三组不满足与es正交所以去除
es = ortm.right_kernel_matrix().BKZ()
v1 = -es[1]
v2 = es[0] - es[1]
v0 = es[2]
M = Matrix(ZZ,75)
for i in range(72):
    M[i,-1] = v0[i]
    M[i,-2] = v1[i]
    M[i,-3] = v2[i]
    M[i,i] = 1
M[-1,-1] = p-1
M[-2,-2] = p-1
M[-3,-3] = p-1
M.rescale_col(72,2^1000)
M.rescale_col(73,2^1000)
M.rescale_col(74,2^1000)
res = M.LLL()
(sum([i*j for i,j in zip(afs,res[2])])*otp+sum([i*j for i,j in zip(hs,res[2])]))%(p-1)
otp = (-sum([i*j for i,j in zip(hs,res[2])]))*inverse_mod(sum([i*j for i,j in zip(afs,res[2])]),p-1)%(p-1)
# otp = 128014576779010347641276589457573367112401478547684141654683946467594935856339983682465033576749697579626748196826109013977343102747578712429921277421560812163785175294082899
otp = long_to_bytes(otp)
v1 = -es[1]
v2 = es[0] - es[1]
v0 = es[2]
v0[0],v1[0],v2[0]
for i in range(-256,256):
    for j in range(-256,256):
        ee1 = v0 + i*v1 + j*v2
        try:
            if chr(long_to_bytes(abs(ee1[0]))[32]^^otp[i]) == b'R':
                if chr(long_to_bytes(abs(ee1[1]))[32]^^otp[i]) == b'C':
                    if chr(long_to_bytes(abs(ee1[1]))[32]^^otp[i]) == b'T':
                        print(i,j)
                        # -127 , -101
        except:
            continue
python 复制代码
ee1 = v0 + -127*v1 + -101 * v2
ee1 = -ee1
for i in range(72):
    print(chr(long_to_bytes(ee1[i])[32]^^otp[i]),end='')
# RCTF{___good_basis___bad_basis___How_about_my_1_byte_imbalance_basis___}
相关推荐
Sweet_vinegar2 天前
Wireshark
网络·测试工具·安全·wireshark·ctf·buuctf
梦 & 醒4 天前
【刷题12】ctfshow刷题
数据库·web安全·网络安全·ctf
zhuqiyua5 天前
c语言安全分析(一)——字符串(1)
c语言·c++·安全·ctf·基础
落寞的魚丶5 天前
2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto- WriteUp
ctf·crypto·网鼎杯·2024年网鼎杯
石氏是时试5 天前
[NewStar 2024] week5完结
ctf
真学不来5 天前
MRCTF2020:千层套路
笔记·python·安全·ctf
A5rZ6 天前
CTF-WEB:PHP伪协议用法总结
php·web·ctf
centos088 天前
PWN(栈溢出漏洞)-原创小白超详细[Jarvis-level0]
网络安全·二进制·pwn·ctf
Sweet_vinegar9 天前
变异凯撒(Crypto)
算法·安全·ctf·buuctf
Mr_Fmnwon9 天前
【我的 PWN 学习手札】House of Roman
pwn·ctf·heap