from crypto.Util import number
from gmpy2 import *
from secret import flag
e = 65537
p = number.getPrime(2020)
q = number.getPrime(2020)
n = p*q
print "n"
print n
r=number.getPrime(150)
phi = (p-1)*(q-1)
d = invert(e,phi)
k = (p-r)*d
print "k"
print k
constant = 21984859824026882810575522264245671634373273283085819951236985457203975991204630506817354315760888340497144753325078495829441321520328008
enc = pow(flag,e,n)
print enc
#n = 6208295095230965527051536112000533217839751707756137908689973343594740737273300354882129471790714061579212141521581437573460066428133649162617863798753061370588336642335739339329613056883099651589308826111251776898753907314632389883177359017441888763223292622107128583258543531273336647405476200600917013260267314276022159445864197757712897885890854119653893171237545237981945487975245520840182827388451488702292468728600894312080618460031716132281505447335749736831056784298081375564578927881638220995825783699017195380034033633092930114002940220082046160549839416526065794581431429452394640960314664745748345227111821047784999527563842871234894970512905495663697240904372920397005450669334608992877133419875553875614453855618749883285471661896614833691033148699474686541316002300677547538245923306083943090911305974072563616074243672776429442348786508433149702766447560408164285366303627833919809181061145119509318456203914995302340361618091130936945986909934911722676548619873395539367474494509438516170722972298004960507801571285491242421724552425359334100565459242186463476014933104548497198625413988182897958933335697662011218563183239333745855774679553947704835779907385101526868306238220311371681276863842231
#k = 174702896315117390718298550391733401770697163847889747416364150400419812071457698494398043304401359739938563272125249211135824393385102061842977026829760629419742000557000963040827888604358013660061225334148832195220259528792531111936988654351045546936541543605127776624260793527487095106531932444142586693591607594750134838434470057526225241675399283876710489046107485931333061116247820913203944886266682068729851681413999395889518117948259592988022573702549030153060793486912550292914671330697470182981310074516969558680442408176452549741581379882955106745012064109454462769581833363439333786396266084989594634232957948965219390777777545170747435360180248098889932493057730872369009094398065442899060004383505999512203518664609795157759350078816781770322631263792090749872633814326298094388072222285964930775160710511638462379786468669231646956446691746833228078591390375659486369797990486495500362103141415966391199947702708931019998496563589441223400733409451140485297753692328570193425464759227119448672966411646082176073007418127284333323954117803525715930782589109348511179812599213788322336195029451637432118511059679197840096617262213370886378526356977166213683890645808447823390128172512097177488442334924515499710337871516123611521172247200806205903791817987645980356817928986880798238418424044295831972837153091486095043907068268400119329629419287317761829035888796256156007987635671529878148201972919111890003223978148999780646676130645548906687967084594944669850284116689804534712597140711075997429780131562428140460803670948161951825832257105326362674824886648316277076851327663792233026404886325100529452795193337935126431362534893622991774284118103617317175436518227455386161940363242875774807020460783218591963060392648215987824605731332195705888844735458676177619633219926129455567809866871676456316007682
#enc = 4795383752584993844108516429900258655661133850684807983071809951024460134759443108711074145909903916787198089413007221022708957360387687246839870355853873320697294017198060440536565273293028173149449287858317538701346918185537758158979284778830859951570957039440297443034120895547087835155290991383854801865693151448144864280946260237799144242603047953661573879773697195696931305160351524780656251285150716877471124822978853888136398127235399185024540381484422531594988834393950441752346442081320006303897535117725780985810927050047417232272737534953530835287354839216047459279586160388879667632181304071755107446032180443940895072258776134576187686901154748162848341532366356932681486492014760528711156453506050743800569562706083682519279189677643805371751092585778158805420204598082895239498745045959757904340141459680787846778202752411527631773720922322510572433358025752903092041363930741249051500266046069790070705316167071788993233531210102049461238375258234005083647266408322008954149845330842701381602137178841481123296635974736568689673738594360438783452112994409770607969904487028956775307780187978779426080243193778210339547019908431953870315056108247202334941716764539141863537230973025019209112307218375
#hint:8*r^3+240*r^2+2400*r=constant
solve
n = 6208295095230965527051536112000533217839751707756137908689973343594740737273300354882129471790714061579212141521581437573460066428133649162617863798753061370588336642335739339329613056883099651589308826111251776898753907314632389883177359017441888763223292622107128583258543531273336647405476200600917013260267314276022159445864197757712897885890854119653893171237545237981945487975245520840182827388451488702292468728600894312080618460031716132281505447335749736831056784298081375564578927881638220995825783699017195380034033633092930114002940220082046160549839416526065794581431429452394640960314664745748345227111821047784999527563842871234894970512905495663697240904372920397005450669334608992877133419875553875614453855618749883285471661896614833691033148699474686541316002300677547538245923306083943090911305974072563616074243672776429442348786508433149702766447560408164285366303627833919809181061145119509318456203914995302340361618091130936945986909934911722676548619873395539367474494509438516170722972298004960507801571285491242421724552425359334100565459242186463476014933104548497198625413988182897958933335697662011218563183239333745855774679553947704835779907385101526868306238220311371681276863842231
k = 174702896315117390718298550391733401770697163847889747416364150400419812071457698494398043304401359739938563272125249211135824393385102061842977026829760629419742000557000963040827888604358013660061225334148832195220259528792531111936988654351045546936541543605127776624260793527487095106531932444142586693591607594750134838434470057526225241675399283876710489046107485931333061116247820913203944886266682068729851681413999395889518117948259592988022573702549030153060793486912550292914671330697470182981310074516969558680442408176452549741581379882955106745012064109454462769581833363439333786396266084989594634232957948965219390777777545170747435360180248098889932493057730872369009094398065442899060004383505999512203518664609795157759350078816781770322631263792090749872633814326298094388072222285964930775160710511638462379786468669231646956446691746833228078591390375659486369797990486495500362103141415966391199947702708931019998496563589441223400733409451140485297753692328570193425464759227119448672966411646082176073007418127284333323954117803525715930782589109348511179812599213788322336195029451637432118511059679197840096617262213370886378526356977166213683890645808447823390128172512097177488442334924515499710337871516123611521172247200806205903791817987645980356817928986880798238418424044295831972837153091486095043907068268400119329629419287317761829035888796256156007987635671529878148201972919111890003223978148999780646676130645548906687967084594944669850284116689804534712597140711075997429780131562428140460803670948161951825832257105326362674824886648316277076851327663792233026404886325100529452795193337935126431362534893622991774284118103617317175436518227455386161940363242875774807020460783218591963060392648215987824605731332195705888844735458676177619633219926129455567809866871676456316007682
enc = 4795383752584993844108516429900258655661133850684807983071809951024460134759443108711074145909903916787198089413007221022708957360387687246839870355853873320697294017198060440536565273293028173149449287858317538701346918185537758158979284778830859951570957039440297443034120895547087835155290991383854801865693151448144864280946260237799144242603047953661573879773697195696931305160351524780656251285150716877471124822978853888136398127235399185024540381484422531594988834393950441752346442081320006303897535117725780985810927050047417232272737534953530835287354839216047459279586160388879667632181304071755107446032180443940895072258776134576187686901154748162848341532366356932681486492014760528711156453506050743800569562706083682519279189677643805371751092585778158805420204598082895239498745045959757904340141459680787846778202752411527631773720922322510572433358025752903092041363930741249051500266046069790070705316167071788993233531210102049461238375258234005083647266408322008954149845330842701381602137178841481123296635974736568689673738594360438783452112994409770607969904487028956775307780187978779426080243193778210339547019908431953870315056108247202334941716764539141863537230973025019209112307218375
constant = 21984859824026882810575522264245671634373273283085819951236985457203975991204630506817354315760888340497144753325078495829441321520328008
e= 65537
# hint:8*r^3+240*r^2+2400*r=constant
from sympy import *
r = symbols('r')
result = solve([8*r**3+240*r**2+2400*r-constant],r)
print(result)
r=result[0][0]
kp=pow(2,int(e*k+r-1),n)-1
p=gcd(kp,n)
q=n//p
assert p*q==n
phi=(p-1)*(q-1)
d=pow(e,-1,int(phi))
m=pow(enc,d,n)
import libnum
print(libnum.n2s(m))
b'flag{math_is_interesting}'