提交记录 39251


用户 题目 状态 得分 用时 内存 语言 代码长度
saffah_dsh_260814 1004a. 【模板题】高精度乘法2 Accepted 100 119.73 us 160 KB C++ 78.37 KB
提交时间 评测时间
2026-08-15 12:01:13 2026-08-15 12:01:16
// 1004a - double FFT radix-4, real-packing (1 fwd + 1 inv), base 1e5, N=4096
#include <sys/auxv.h>
#include <stdint.h>
#include <string.h>
#include <math.h>
#include <immintrin.h>
#pragma GCC target("avx2,fma")
#pragma GCC optimize("O3,unroll-loops")

typedef uint32_t u32;
typedef uint64_t u64;
typedef uint16_t u16;

#define N 4096
#define NW 3072

static const double CTAB[2048] __attribute__((aligned(32))) = {
    1, 0.99999882345170188, 0.99999529380957619, 0.9999894110819284, 0.99998117528260111, 0.99997058643097414, 0.9999576445519639, 0.99994234967602391,
    0.9999247018391445, 0.9999047010828529, 0.99988234745421256, 0.99985764100582386, 0.9998305817958234, 0.99980116988788426, 0.99976940535121528, 0.99973528826056168,
    0.99969881869620425, 0.99965999674395922, 0.99961882249517864, 0.99957529604674922, 0.99952941750109314, 0.99948118696616695, 0.99943060455546173, 0.99937767038800285,
    0.99932238458834954, 0.99926474728659442, 0.99920475861836389, 0.99914241872481691, 0.99907772775264536, 0.99901068585407338, 0.99894129318685687, 0.99886954991428356,
    0.99879545620517241, 0.99871901223387294, 0.99864021818026527, 0.99855907422975931, 0.99847558057329477, 0.99838973740734016, 0.99830154493389289, 0.99821100336047819,
    0.99811811290014918, 0.99802287377148624, 0.997925286198596, 0.99782535041111164, 0.99772306664419164, 0.99761843513851955, 0.99751145614030345, 0.9974021299012753,
    0.99729045667869021, 0.99717643673532619, 0.99706007033948296, 0.99694135776498216, 0.99682029929116567, 0.99669689520289606, 0.99657114579055484, 0.99644305135004263,
    0.996312612182778, 0.99617982859569698, 0.99604470090125197, 0.99590722941741172, 0.99576741446765982, 0.99562525638099431, 0.99548075549192694, 0.99533391214048228,
    0.99518472667219693, 0.99503319943811863, 0.99487933079480562, 0.9947231211043257, 0.99456457073425542, 0.9944036800576791, 0.9942404494531879, 0.99407487930487937,
    0.99390697000235606, 0.9937367219407246, 0.9935641355205953, 0.99338921114808065, 0.9932119492347945, 0.99303235019785141, 0.9928504144598651, 0.99266614244894802,
    0.99247953459870997, 0.99229059134825737, 0.9920993131421918, 0.99190570043060933, 0.99170975366909953, 0.9915114733187439, 0.99131085984611544, 0.99110791372327689,
    0.99090263542778001, 0.99069502544266463, 0.99048508425645709, 0.99027281236316911, 0.99005821026229712, 0.98984127845882053, 0.98962201746320089, 0.98940042779138038,
    0.98917650996478101, 0.98895026451030299, 0.98872169196032378, 0.98849079285269659, 0.98825756773074946, 0.98802201714328353, 0.98778414164457218, 0.98754394179435923,
    0.98730141815785843, 0.98705657130575097, 0.98680940181418553, 0.98655991026477541, 0.98630809724459867, 0.98605396334619544, 0.98579750916756748, 0.98553873531217606,
    0.98527764238894122, 0.98501423101223984, 0.98474850180190421, 0.98448045538322093, 0.98421009238692903, 0.98393741344921892, 0.98366241921173025, 0.98338511032155118,
    0.98310548743121629, 0.98282355119870524, 0.98253930228744124, 0.98225274136628937, 0.98196386910955524, 0.98167268619698311, 0.98137919331375456, 0.98108339115048671,
    0.98078528040323043, 0.98048486177346938, 0.98018213596811743, 0.97987710369951764, 0.97956976568544052, 0.97926012264908202, 0.9789481753190622, 0.97863392442942321,
    0.97831737071962765, 0.97799851493455714, 0.97767735782450993, 0.97735390014519996, 0.97702814265775439, 0.97670008612871184, 0.97636973133002114, 0.97603707903903902,
    0.97570213003852857, 0.97536488511665698, 0.97502534506699412, 0.97468351068851067, 0.97433938278557586, 0.97399296216795583, 0.97364424965081198, 0.97329324605469825,
    0.97293995220556018, 0.97258436893473221, 0.97222649707893627, 0.9718663374802794, 0.97150389098625178, 0.97113915844972509, 0.97077214072895035, 0.9704028386875555,
    0.97003125319454397, 0.96965738512429245, 0.96928123535654853, 0.96890280477642887, 0.96852209427441738, 0.96813910474636244, 0.96775383709347551, 0.96736629222232851,
    0.96697647104485207, 0.96658437447833312, 0.9661900034454125, 0.96579335887408368, 0.9653944416976894, 0.96499325285492032, 0.96458979328981276, 0.96418406395174583,
    0.96377606579543984, 0.96336579978095405, 0.96295326687368388, 0.96253846804435916, 0.96212140426904158, 0.96170207652912254, 0.96128048581132064, 0.96085663310767966,
    0.96043051941556579, 0.96000214573766596, 0.95957151308198452, 0.95913862246184189, 0.9587034748958716, 0.95826607140801767, 0.95782641302753291, 0.95738450078897586,
    0.95694033573220882, 0.9564939189023951, 0.95604525134999641, 0.95559433413077111, 0.95514116830577078, 0.95468575494133834, 0.95422809510910567, 0.95376818988599033,
    0.95330604035419386, 0.95284164760119872, 0.95237501271976588, 0.95190613680793235, 0.95143502096900834, 0.95096166631157508, 0.9504860739494817, 0.950008245001843,
    0.94952818059303667, 0.94904588185270056, 0.94856134991573027, 0.94807458592227623, 0.94758559101774109, 0.94709436635277722, 0.94660091308328353, 0.94610523237040345,
    0.94560732538052128, 0.94510719328526061, 0.94460483726148026, 0.94410025849127266, 0.94359345816196039, 0.94308443746609349, 0.94257319760144687, 0.94205973977101731,
    0.94154406518302081, 0.94102617505088926, 0.9405060705932683, 0.93998375303401405, 0.93945922360218992, 0.9389324835320646, 0.93840353406310806, 0.93787237643998989,
    0.93733901191257496, 0.93680344173592156, 0.93626566717027826, 0.93572568948108037, 0.93518350993894761, 0.93463912981968078, 0.93409255040425898, 0.93354377297883617,
    0.93299279883473896, 0.93243962926846236, 0.93188426558166815, 0.93132670908118043, 0.93076696107898371, 0.93020502289221907, 0.92964089584318133, 0.92907458125931586,
    0.92850608047321559, 0.92793539482261789, 0.92736252565040111, 0.92678747430458175, 0.92621024213831138, 0.92563083050987272, 0.92504924078267758, 0.9244654743252626,
    0.92387953251128674, 0.92329141671952764, 0.92270112833387863, 0.92210866874334518, 0.92151403934204201, 0.92091724152918952, 0.92031827670911059, 0.91971714629122736,
    0.91911385169005777, 0.91850839432521225, 0.9179007756213905, 0.91729099700837791, 0.9166790599210427, 0.91606496579933172, 0.91544871608826783, 0.9148303122379462,
    0.91420975570353069, 0.91358704794525081, 0.91296219042839821, 0.91233518462332275, 0.91170603200542988, 0.91107473405517636, 0.91044129225806725, 0.90980570810465222,
    0.90916798309052238, 0.90852811871630612, 0.90788611648766626, 0.90724197791529582, 0.90659570451491533, 0.90594729780726846, 0.90529675931811882, 0.90464409057824624,
    0.90398929312344334, 0.90333236849451182, 0.90267331823725883, 0.90201214390249318, 0.90134884704602203, 0.90068342922864697, 0.90001589201616028, 0.89934623697934157,
    0.89867446569395382, 0.89800057974073988, 0.89732458070541832, 0.89664647017868015, 0.89596624975618522, 0.89528392103855758, 0.8945994856313827, 0.89391294514520325,
    0.89322430119551532, 0.89253355540276458, 0.89184070939234272, 0.89114576479458318, 0.89044872324475788, 0.88974958638307278, 0.88904835585466457, 0.88834503330959635,
    0.88763962040285393, 0.88693211879434219, 0.88622253014888064, 0.88551085613619995, 0.88479709843093779, 0.88408125871263499, 0.88336333866573158, 0.88264333997956279,
    0.88192126434835505, 0.88119711347122209, 0.88047088905216075, 0.87974259280004741, 0.87901222642863353, 0.87827979165654158, 0.87754529020726135, 0.87680872380914565,
    0.8760700941954066, 0.87532940310411089, 0.87458665227817611, 0.87384184346536686, 0.87309497841829009, 0.87234605889439154, 0.87159508665595098, 0.87084206347007898,
    0.87008699110871146, 0.86932987134860684, 0.8685707059713409, 0.86780949676330332, 0.86704624551569265, 0.86628095402451299, 0.86551362409056909, 0.86474425751946238,
    0.86397285612158681, 0.86319942171212416, 0.86242395611104061, 0.8616464611430813, 0.86086693863776731, 0.86008539042939014, 0.85930181835700847, 0.85851622426444274,
    0.85772861000027212, 0.85693897741782876, 0.85614732837519447, 0.85535366473519603, 0.85455798836540053, 0.85376030113811141, 0.85296060493036363, 0.85215890162391983,
    0.8513551931052652, 0.85054948126560348, 0.84974176800085255, 0.84893205521163961, 0.84812034480329723, 0.84730663868585832, 0.84649093877405213, 0.84567324698729907,
    0.84485356524970712, 0.84403189549006641, 0.84320823964184544, 0.84238259964318585, 0.84155497743689844, 0.84072537497045807, 0.83989379419599952, 0.83906023707031274,
    0.83822470555483808, 0.83738720161566194, 0.83654772722351201, 0.8357062843537526, 0.83486287498638001, 0.83401750110601813, 0.83317016470191319, 0.83232086776792968,
    0.83146961230254524, 0.83061640030884631, 0.82976123379452305, 0.82890411477186487, 0.8280450452577558, 0.82718402727366913, 0.82632106284566353, 0.82545615400437755,
    0.82458930278502529, 0.82372051122739143, 0.82284978137582643, 0.82197711527924155, 0.82110251499110465, 0.82022598256943469, 0.8193475200767969, 0.81846712958029866,
    0.81758481315158371, 0.81670057286682785, 0.81581441080673378, 0.81492632905652662, 0.81403632970594841, 0.81314441484925359, 0.81225058658520388, 0.81135484701706373,
    0.81045719825259477, 0.80955764240405126, 0.80865618158817498, 0.80775281792619036, 0.80684755354379933, 0.80594039057117628, 0.80503133114296366, 0.80412037739826581,
    0.80320753148064494, 0.80229279553811572, 0.80137617172314024, 0.80045766219262282, 0.79953726910790501, 0.79861499463476082, 0.79769084094339116, 0.79676481020841883,
    0.79583690460888357, 0.79490712632823701, 0.79397547755433717, 0.79304196047944364, 0.79210657730021239, 0.7911693302176902, 0.79023022143731003, 0.78928925316888565,
    0.78834642762660634, 0.78740174702903143, 0.78645521359908577, 0.78550682956405393, 0.78455659715557524, 0.7836045186096382, 0.78265059616657573, 0.78169483207105939,
    0.78073722857209449, 0.77977778792301455, 0.77881651238147598, 0.77785340420945315, 0.77688846567323244, 0.77592169904340769, 0.77495310659487393, 0.7739826906068229,
    0.77301045336273699, 0.77203639715038452, 0.77106052426181382, 0.7700828369933479, 0.7691033376455797, 0.76812202852336542, 0.7671389119358204, 0.76615399019631292,
    0.76516726562245896, 0.76417874053611667, 0.76318841726338127, 0.7621962981345789, 0.76120238548426178, 0.76020668165120242, 0.75920918897838807, 0.75820990981301528,
    0.75720884650648457, 0.75620600141439454, 0.75520137689653655, 0.75419497531688917, 0.75318679904361252, 0.75217685044904281, 0.75116513190968648, 0.75015164580621507,
    0.74913639452345937, 0.7481193804504036, 0.74710060598018013, 0.74608007351006378, 0.74505778544146606, 0.74403374417992929, 0.74300795213512172, 0.74198041172083107,
    0.74095112535495911, 0.7399200954595162, 0.73888732446061511, 0.73785281478846598, 0.7368165688773699, 0.73577858916571359, 0.7347388780959635, 0.73369743811466037,
    0.73265427167241282, 0.73160938122389263, 0.73056276922782759, 0.72951443814699701, 0.7284643904482252, 0.72741262860237577, 0.72635915508434601, 0.72530397237306077,
    0.724247082951467, 0.72318848930652746, 0.72212819392921535, 0.72106619931450811, 0.72000250796138165, 0.71893712237280449, 0.71787004505573171, 0.71680127852109954,
    0.71573082528381859, 0.71465868786276909, 0.71358486878079364, 0.71250937056469232, 0.71143219574521643, 0.71035334685706242, 0.70927282643886569, 0.7081906370331954,
    0.70710678118654757, 0.70602126144933974, 0.70493408037590499, 0.70384524052448494, 0.7027547444572253, 0.70166259474016857, 0.70056879394324845, 0.69947334464028377,
    0.69837624940897292, 0.69727751083088663, 0.69617713149146299, 0.69507511398000088, 0.693971460889654, 0.69286617481742474, 0.69175925836415775, 0.69065071413453472,
    0.68954054473706694, 0.68842875278409055, 0.68731534089175916, 0.6862003116800387, 0.68508366777270036, 0.68396541179731551, 0.68284554638524808, 0.68172407417164982,
    0.68060099779545313, 0.67947631989936508, 0.67835004312986158, 0.67722217013718045, 0.67609270357531603, 0.67496164610201204, 0.67382900037875615, 0.67269476907077297,
    0.67155895484701833, 0.67042156038017309, 0.66928258834663601, 0.66814204142651856, 0.66699992230363747, 0.66585623366550972, 0.6647109782033449, 0.66356415861203988,
    0.66241577759017178, 0.66126583783999227, 0.66011434206742048, 0.65896129298203732, 0.65780669329707864, 0.65665054572942905, 0.65549285299961546, 0.65433361783180055,
    0.65317284295377676, 0.6520105310969595, 0.65084668499638099, 0.64968130739068319, 0.64851440102211255, 0.64734596863651206, 0.64617601298331639, 0.64500453681554404,
    0.6438315428897915, 0.64265703396622686, 0.64148101280858316, 0.64030348218415167, 0.63912444486377573, 0.63794390362184417, 0.6367618612362842, 0.63557832048855623,
    0.63439328416364549, 0.63320675505005719, 0.63201873593980906, 0.63082922962842447, 0.6296382389149271, 0.62844576660183271, 0.62725181549514419, 0.62605638840434352,
    0.62485948814238645, 0.62366111752569464, 0.62246127937415008, 0.62125997651108766, 0.62005721176328921, 0.61885298796097632, 0.61764730793780398, 0.61644017453085365,
    0.61523159058062682, 0.61402155893103849, 0.61281008242940971, 0.61159716392646202, 0.61038280627630948, 0.60916701233645321, 0.60794978496777374, 0.60673112703452448,
    0.60551104140432555, 0.60428953094815607, 0.60306659854034828, 0.60184224705858003, 0.60061647938386897, 0.59938929840056454, 0.59816070699634238, 0.5969307080621965,
    0.59569930449243347, 0.59446649918466454, 0.5932322950397998, 0.59199669496204099, 0.59075970185887428, 0.58952131864106394, 0.58828154822264533, 0.58704039352091808,
    0.58579785745643886, 0.58455394295301533, 0.58330865293769829, 0.58206199034077555, 0.58081395809576453, 0.57956455913940574, 0.57831379641165559, 0.57706167285567955,
    0.57580819141784534, 0.57455335504771576, 0.57329716669804232, 0.57203962932475705, 0.57078074588696737, 0.56952051934694725, 0.56825895267013149, 0.56699604882510868,
    0.56573181078361323, 0.5644662415205195, 0.56319934401383409, 0.56193112124468947, 0.56066157619733603, 0.55939071185913614, 0.5581185312205561, 0.5568450372751601,
    0.55557023301960229, 0.55429412145362011, 0.55301670558002758, 0.55173798840470745, 0.55045797293660481, 0.54917666218771977, 0.54789405917310019, 0.54661016691083486,
    0.54532498842204646, 0.54403852673088393, 0.542750784864516, 0.54146176585312356, 0.54017147272989297, 0.53887990853100842, 0.53758707629564551, 0.53629297906596318,
    0.53499761988709726, 0.53370100180715296, 0.53240312787719801, 0.531104001151255, 0.52980362468629483, 0.52850200154222848, 0.52719913478190139, 0.52589502747108474,
    0.52458968267846884, 0.52328310347565643, 0.52197529293715439, 0.52066625414036727, 0.51935599016558953, 0.51804450409599934, 0.51673179901764998, 0.51541787801946315,
    0.51410274419322166, 0.51278640063356307, 0.51146885043797052, 0.5101500967067667, 0.50883014254310699, 0.50750899105297087, 0.50618664534515545, 0.50486310853126748,
    0.50353838372571758, 0.5022124740457109, 0.50088538261124094, 0.49955711254508189, 0.49822766697278187, 0.49689704902265464, 0.49556526182577249, 0.49423230851595973,
    0.49289819222978409, 0.49156291610655006, 0.4902264832882911, 0.48888889691976323, 0.48755016014843605, 0.48621027612448653, 0.48486924800079112, 0.48352707893291874,
    0.48218377207912283, 0.4808393306003339, 0.47949375766015301, 0.47814705642484312, 0.47679923006332225, 0.47545028174715587, 0.47410021465055002, 0.4727490319503429,
    0.47139673682599781, 0.47004333245959562, 0.46868882203582796, 0.46733320874198853, 0.46597649576796613, 0.46461868630623782, 0.46325978355186026, 0.46189979070246284,
    0.46053871095824001, 0.45917654752194415, 0.45781330359887729, 0.45644898239688386, 0.45508358712634384, 0.45371712100016393, 0.452349587233771, 0.45098098904510381,
    0.4496113296546066, 0.44824061228522, 0.44686884016237433, 0.44549601651398174, 0.44412214457042926, 0.44274722756457013, 0.44137126873171662, 0.43999427130963326,
    0.43861623853852771, 0.4372371736610442, 0.43585707992225547, 0.43447596056965571, 0.43309381885315201, 0.43171065802505737, 0.43032648134008261, 0.42894129205532955,
    0.4275550934302822, 0.42616788872679962, 0.42477968120910881, 0.4233904741437961, 0.42200027079979979, 0.42060907444840251, 0.41921688836322396, 0.41782371582021238,
    0.41642956009763732, 0.41503442447608163, 0.41363831223843456, 0.412241226669883, 0.41084317105790391, 0.40944414869225759, 0.40804416286497874, 0.40664321687036914,
    0.40524131400498986, 0.40383845756765413, 0.40243465085941854, 0.40102989718357579, 0.39962419984564679, 0.39821756215337362, 0.39680998741671042, 0.3954014789478163,
    0.3939920400610481, 0.39258167407295153, 0.39117038430225398, 0.38975817406985641, 0.3883450466988263, 0.38693100551438869, 0.38551605384391902, 0.38410019501693504,
    0.38268343236508984, 0.38126576922216249, 0.37984720892405111, 0.37842775480876562, 0.37700741021641831, 0.37558617848921733, 0.37416406297145799, 0.37274106700951581,
    0.3713171939518376, 0.36989244714893427, 0.36846682995337232, 0.36704034571976724, 0.36561299780477396, 0.36418478956707984, 0.36275572436739723, 0.36132580556845434,
    0.35989503653498828, 0.35846342063373654, 0.35703096123343003, 0.35559766170478396, 0.35416352542049051, 0.35272855575521073, 0.35129275608556715, 0.34985612979013503,
    0.34841868024943451, 0.34698041084592368, 0.34554132496398915, 0.34410142598993898, 0.34266071731199438, 0.34121920232028241, 0.33977688440682696, 0.33833376696554129,
    0.33688985339222005, 0.33544514708453166, 0.33399965144200949, 0.33255336986604422, 0.33110630575987643, 0.32965846252858755, 0.32820984357909266, 0.32676045232013179,
    0.32531029216226298, 0.32385936651785296, 0.32240767880107002, 0.32095523242787521, 0.31950203081601575, 0.31804807738501506, 0.31659337555616585, 0.31513792875252244,
    0.31368174039889157, 0.31222481392182505, 0.31076715274961147, 0.30930876031226878, 0.30784964004153498, 0.30638979537086108, 0.30492922973540243, 0.30346794657201137,
    0.3020059493192282, 0.3005432414172734, 0.29907982630804048, 0.29761570743508631, 0.29615088824362396, 0.29468537218051433, 0.29321916269425868, 0.29175226323498937,
    0.29028467725446233, 0.28881640820604948, 0.28734745954472957, 0.28587783472708073, 0.28440753721127182, 0.28293657045705539, 0.28146493792575805, 0.27999264308027338,
    0.27851968938505306, 0.27704608030609995, 0.27557181931095825, 0.27409690986870633, 0.27262135544994898, 0.27114515952680807, 0.2696683255729152, 0.26819085706340318,
    0.26671275747489842, 0.2652340302855119, 0.26375467897483151, 0.26227470702391359, 0.26079411791527557, 0.25931291513288635, 0.25783110216215893, 0.25634868248994291,
    0.25486565960451463, 0.25338203699557027, 0.25189781815421691, 0.25041300657296528, 0.24892760574572026, 0.24744161916777344, 0.24595505033579459, 0.24446790274782421,
    0.24298017990326398, 0.2414918853028693, 0.2400030224487415, 0.2385135948443185, 0.23702360599436734, 0.23553305940497546, 0.23404195858354346, 0.23255030703877533,
    0.23105810828067128, 0.22956536582051887, 0.22807208317088579, 0.22657826384561011, 0.22508391135979278, 0.22358902922979002, 0.22209362097320359, 0.22059769010887365,
    0.21910124015686977, 0.21760427463848367, 0.2161067970762196, 0.21460881099378692, 0.21311031991609136, 0.21161132736922761, 0.21011183688046972, 0.20861185197826346,
    0.20711137619221856, 0.20561041305309932, 0.20410896609281701, 0.20260703884442111, 0.20110463484209196, 0.19960175762113105, 0.19809841071795373, 0.19659459767008022,
    0.19509032201612833, 0.19358558729580375, 0.19208039704989238, 0.1905747548202528, 0.18906866414980628, 0.18756212858252974, 0.18605515166344663, 0.18454773693861964,
    0.18303988795514106, 0.18153160826112513, 0.18002290140569951, 0.17851377093899759, 0.17700422041214886, 0.17549425337727137, 0.17398387338746385, 0.17247308399679603,
    0.17096188876030136, 0.16945029123396793, 0.16793829497473123, 0.16642590354046422, 0.16491312048997009, 0.16339994938297323, 0.16188639378011188, 0.1603724572429284,
    0.15885814333386139, 0.15734345561623828, 0.15582839765426532, 0.15431297301302024, 0.15279718525844341, 0.15128103795733025, 0.14976453467732162, 0.1482476789868962,
    0.14673047445536175, 0.14521292465284752, 0.14369503315029458, 0.142176803519448, 0.14065823933284924, 0.13913934416382628, 0.13762012158648618, 0.1361005751757062,
    0.13458070850712622, 0.13306052515713918, 0.13154002870288328, 0.13001922272223335, 0.12849811079379322, 0.12697669649688598, 0.12545498341154621, 0.1239329751185122,
    0.12241067519921628, 0.12088808723577722, 0.11936521481099135, 0.11784206150832502, 0.11631863091190488, 0.11479492660651025, 0.11327095217756436, 0.11174671121112666,
    0.11022220729388318, 0.10869744401313867, 0.10717242495680887, 0.1056471537134107, 0.10412163387205473, 0.10259586902243628, 0.10106986275482788, 0.099543618660069444,
    0.09801714032956077, 0.096490431355252607, 0.094963495329639061, 0.093436335845747912, 0.091908956497132696, 0.090381360877865011, 0.088853552582524684, 0.087325535206192226,
    0.08579731234443988, 0.084268887593324127, 0.082740264549375803, 0.081211446809592386, 0.079682437971430126, 0.078153241632794315, 0.076623861392031617, 0.075094300847921291,
    0.073564563599667454, 0.072034653246889416, 0.070504573389614009, 0.068974327628266732, 0.067443919563664106, 0.06591335279700393, 0.06438263092985741, 0.06285175756416142,
    0.061320736302208648, 0.059789570746640007, 0.058258264500435732, 0.056726821166907783, 0.055195244349690031, 0.053663537652730679, 0.052131704680283317, 0.050599749036899337,
    0.049067674327418126, 0.047535484156959261, 0.046003182130914644, 0.044470771854938744, 0.042938256934940959, 0.041405640977076712, 0.039872927587739845, 0.038340120373552791,
    0.036807222941358991, 0.035274238898213947, 0.033741171851377642, 0.032208025408304704, 0.030674803176636581, 0.02914150876419374, 0.02760814577896582, 0.02607471782910404,
    0.024541228522912264, 0.02300768146883941, 0.021474080275469605, 0.019940428551514598, 0.01840672990580482, 0.016872987947281773, 0.01533920628498822, 0.013805388528060349,
    0.012271538285719944, 0.010737659167264572, 0.0092037547820599599, 0.0076698287395310771, 0.0061358846491545152, 0.004601926120448672, 0.0030679567629661379, 0.0015339801862847662,
    6.123233995736766e-17, -0.0015339801862846436, -0.0030679567629660156, -0.0046019261204485497, -0.0061358846491543929, -0.0076698287395309548, -0.0092037547820598368, -0.010737659167264449,
    -0.012271538285719823, -0.013805388528060226, -0.015339206284988098, -0.016872987947281651, -0.018406729905804695, -0.019940428551514476, -0.021474080275469484, -0.023007681468839289,
    -0.024541228522912142, -0.026074717829103915, -0.027608145778965698, -0.029141508764193618, -0.030674803176636459, -0.032208025408304579, -0.033741171851377517, -0.035274238898213822,
    -0.036807222941358866, -0.038340120373552666, -0.039872927587739727, -0.041405640977076594, -0.042938256934940834, -0.044470771854938619, -0.046003182130914519, -0.047535484156959136,
    -0.049067674327418008, -0.050599749036899212, -0.052131704680283192, -0.053663537652730554, -0.055195244349689913, -0.056726821166907658, -0.058258264500435607, -0.059789570746639882,
    -0.06132073630220853, -0.062851757564161309, -0.064382630929857285, -0.065913352797003805, -0.067443919563663982, -0.068974327628266607, -0.070504573389613898, -0.072034653246889291,
    -0.073564563599667329, -0.075094300847921167, -0.076623861392031506, -0.07815324163279419, -0.079682437971430015, -0.081211446809592261, -0.082740264549375678, -0.084268887593324002,
    -0.085797312344439755, -0.087325535206192101, -0.088853552582524559, -0.090381360877864886, -0.091908956497132571, -0.093436335845747787, -0.09496349532963895, -0.096490431355252482,
    -0.098017140329560645, -0.099543618660069319, -0.10106986275482775, -0.10259586902243616, -0.1041216338720546, -0.10564715371341057, -0.10717242495680876, -0.10869744401313856,
    -0.11022220729388306, -0.11174671121112655, -0.11327095217756424, -0.11479492660651013, -0.11631863091190475, -0.11784206150832489, -0.11936521481099123, -0.1208880872357771,
    -0.12241067519921615, -0.12393297511851208, -0.12545498341154607, -0.12697669649688587, -0.12849811079379311, -0.13001922272223324, -0.13154002870288314, -0.13306052515713904,
    -0.13458070850712611, -0.13610057517570606, -0.13762012158648607, -0.13913934416382617, -0.14065823933284913, -0.14217680351944789, -0.14369503315029444, -0.14521292465284741,
    -0.14673047445536164, -0.14824767898689609, -0.14976453467732151, -0.15128103795733014, -0.1527971852584433, -0.15431297301302013, -0.1558283976542652, -0.15734345561623816,
    -0.15885814333386128, -0.16037245724292826, -0.16188639378011177, -0.16339994938297311, -0.16491312048996995, -0.1664259035404641, -0.16793829497473109, -0.16945029123396782,
    -0.17096188876030124, -0.17247308399679592, -0.17398387338746371, -0.17549425337727126, -0.17700422041214875, -0.17851377093899745, -0.1800229014056994, -0.18153160826112502,
    -0.18303988795514092, -0.18454773693861953, -0.18605515166344649, -0.1875621285825296, -0.18906866414980616, -0.19057475482025266, -0.19208039704989227, -0.19358558729580361,
    -0.19509032201612819, -0.19659459767008011, -0.19809841071795362, -0.19960175762113094, -0.20110463484209182, -0.20260703884442097, -0.2041089660928169, -0.20561041305309921,
    -0.20711137619221845, -0.20861185197826332, -0.21011183688046961, -0.2116113273692275, -0.21311031991609125, -0.21460881099378681, -0.21610679707621949, -0.21760427463848356,
    -0.21910124015686966, -0.22059769010887353, -0.22209362097320348, -0.22358902922978988, -0.22508391135979267, -0.22657826384561, -0.22807208317088568, -0.22956536582051876,
    -0.23105810828067114, -0.23255030703877522, -0.23404195858354332, -0.23553305940497535, -0.23702360599436723, -0.23851359484431839, -0.24000302244874139, -0.24149188530286916,
    -0.24298017990326387, -0.2444679027478241, -0.24595505033579448, -0.24744161916777332, -0.24892760574572012, -0.25041300657296517, -0.2518978181542168, -0.25338203699557016,
    -0.25486565960451452, -0.2563486824899428, -0.25783110216215882, -0.25931291513288623, -0.26079411791527546, -0.26227470702391348, -0.2637546789748314, -0.26523403028551179,
    -0.26671275747489831, -0.26819085706340301, -0.26966832557291509, -0.27114515952680796, -0.27262135544994887, -0.27409690986870622, -0.27557181931095814, -0.27704608030609984,
    -0.27851968938505295, -0.27999264308027327, -0.28146493792575794, -0.28293657045705528, -0.28440753721127171, -0.28587783472708062, -0.28734745954472946, -0.28881640820604937,
    -0.29028467725446216, -0.29175226323498926, -0.29321916269425857, -0.29468537218051422, -0.29615088824362384, -0.2976157074350862, -0.29907982630804036, -0.30054324141727329,
    -0.30200594931922808, -0.30346794657201126, -0.30492922973540226, -0.30638979537086097, -0.30784964004153487, -0.30930876031226862, -0.31076715274961136, -0.31222481392182494,
    -0.31368174039889141, -0.31513792875252233, -0.31659337555616573, -0.31804807738501495, -0.31950203081601564, -0.3209552324278751, -0.32240767880106985, -0.32385936651785285,
    -0.32531029216226287, -0.32676045232013162, -0.32820984357909255, -0.32965846252858744, -0.33110630575987632, -0.33255336986604406, -0.33399965144200938, -0.33544514708453155,
    -0.33688985339221994, -0.33833376696554118, -0.33977688440682685, -0.3412192023202823, -0.34266071731199427, -0.34410142598993887, -0.34554132496398904, -0.34698041084592357,
    -0.3484186802494344, -0.34985612979013492, -0.35129275608556704, -0.35272855575521062, -0.3541635254204904, -0.35559766170478385, -0.35703096123342992, -0.35846342063373643,
    -0.35989503653498817, -0.36132580556845423, -0.36275572436739711, -0.36418478956707973, -0.36561299780477385, -0.36704034571976712, -0.36846682995337221, -0.36989244714893416,
    -0.37131719395183749, -0.3727410670095157, -0.37416406297145788, -0.37558617848921722, -0.3770074102164182, -0.37842775480876545, -0.37984720892405099, -0.38126576922216238,
    -0.38268343236508973, -0.38410019501693493, -0.3855160538439189, -0.38693100551438858, -0.38834504669882619, -0.3897581740698563, -0.39117038430225387, -0.39258167407295141,
    -0.39399204006104799, -0.39540147894781619, -0.39680998741671031, -0.39821756215337351, -0.39962419984564668, -0.40102989718357568, -0.40243465085941843, -0.40383845756765402,
    -0.40524131400498975, -0.40664321687036903, -0.40804416286497863, -0.40944414869225748, -0.4108431710579038, -0.41224122666988289, -0.41363831223843445, -0.41503442447608152,
    -0.41642956009763699, -0.41782371582021227, -0.41921688836322407, -0.4206090744484024, -0.42200027079979968, -0.42339047414379577, -0.42477968120910869, -0.42616788872679967,
    -0.42755509343028186, -0.42894129205532944, -0.43032648134008272, -0.43171065802505709, -0.4330938188531519, -0.43447596056965582, -0.43585707992225536, -0.43723717366104409,
    -0.43861623853852738, -0.43999427130963314, -0.44137126873171673, -0.4427472275645698, -0.44412214457042914, -0.4454960165139818, -0.44686884016237399, -0.44824061228521989,
    -0.44961132965460671, -0.4509809890451037, -0.45234958723377089, -0.45371712100016359, -0.45508358712634372, -0.45644898239688397, -0.45781330359887701, -0.45917654752194403,
    -0.46053871095824006, -0.46189979070246256, -0.46325978355186015, -0.46461868630623793, -0.46597649576796601, -0.46733320874198842, -0.46868882203582768, -0.47004333245959551,
    -0.4713967368259977, -0.47274903195034257, -0.47410021465054991, -0.47545028174715598, -0.47679923006332192, -0.47814705642484301, -0.47949375766015312, -0.48083933060033379,
    -0.48218377207912272, -0.48352707893291846, -0.48486924800079101, -0.48621027612448642, -0.48755016014843572, -0.48888889691976312, -0.49022648328829121, -0.49156291610654979,
    -0.49289819222978398, -0.49423230851595984, -0.49556526182577237, -0.49689704902265452, -0.49822766697278159, -0.49955711254508178, -0.50088538261124083, -0.50221247404571057,
    -0.50353838372571746, -0.50486310853126759, -0.50618664534515512, -0.50750899105297076, -0.5088301425431071, -0.51015009670676659, -0.51146885043797041, -0.51278640063356273,
    -0.51410274419322166, -0.51541787801946304, -0.51673179901764965, -0.51804450409599923, -0.51935599016558964, -0.52066625414036694, -0.52197529293715428, -0.52328310347565654,
    -0.52458968267846873, -0.52589502747108463, -0.52719913478190106, -0.52850200154222837, -0.52980362468629472, -0.53110400115125478, -0.5324031278771979, -0.53370100180715296,
    -0.53499761988709704, -0.53629297906596307, -0.53758707629564562, -0.53887990853100831, -0.54017147272989285, -0.54146176585312322, -0.54275078486451578, -0.54403852673088393,
    -0.54532498842204624, -0.54661016691083486, -0.54789405917310019, -0.54917666218771954, -0.5504579729366047, -0.55173798840470745, -0.55301670558002736, -0.55429412145362011,
    -0.55557023301960196, -0.55684503727515999, -0.5581185312205561, -0.5593907118591358, -0.56066157619733592, -0.56193112124468947, -0.56319934401383398, -0.56446624152051939,
    -0.56573181078361323, -0.56699604882510846, -0.56825895267013149, -0.56952051934694725, -0.57078074588696714, -0.57203962932475705, -0.57329716669804198, -0.57455335504771576,
    -0.57580819141784534, -0.57706167285567933, -0.57831379641165548, -0.57956455913940585, -0.58081395809576442, -0.58206199034077555, -0.5833086529376984, -0.58455394295301522,
    -0.58579785745643886, -0.58704039352091775, -0.58828154822264522, -0.58952131864106394, -0.59075970185887405, -0.59199669496204088, -0.59323229503979991, -0.59446649918466432,
    -0.59569930449243336, -0.59693070806219661, -0.59816070699634216, -0.59938929840056454, -0.60061647938386875, -0.60184224705857992, -0.60306659854034828, -0.60428953094815585,
    -0.60551104140432543, -0.60673112703452459, -0.60794978496777352, -0.60916701233645321, -0.61038280627630959, -0.6115971639264618, -0.61281008242940971, -0.61402155893103816,
    -0.61523159058062671, -0.61644017453085365, -0.61764730793780376, -0.61885298796097621, -0.62005721176328921, -0.62125997651108744, -0.62246127937414997, -0.62366111752569464,
    -0.62485948814238623, -0.62605638840434352, -0.62725181549514386, -0.6284457666018326, -0.6296382389149271, -0.63082922962842436, -0.63201873593980895, -0.6332067550500573,
    -0.63439328416364538, -0.63557832048855611, -0.63676186123628431, -0.63794390362184394, -0.63912444486377573, -0.64030348218415145, -0.64148101280858305, -0.64265703396622686,
    -0.64383154288979128, -0.64500453681554393, -0.64617601298331639, -0.64734596863651195, -0.64851440102211244, -0.6496813073906833, -0.65084668499638076, -0.6520105310969595,
    -0.65317284295377653, -0.65433361783180044, -0.65549285299961546, -0.65665054572942883, -0.65780669329707864, -0.65896129298203743, -0.66011434206742037, -0.66126583783999215,
    -0.66241577759017189, -0.66356415861203966, -0.6647109782033449, -0.6658562336655095, -0.66699992230363736, -0.66814204142651856, -0.6692825883466359, -0.67042156038017309,
    -0.67155895484701844, -0.67269476907077275, -0.67382900037875604, -0.67496164610201215, -0.67609270357531581, -0.67722217013718045, -0.67835004312986125, -0.67947631989936497,
    -0.68060099779545302, -0.6817240741716496, -0.68284554638524797, -0.68396541179731551, -0.68508366777270024, -0.68620031168003859, -0.68731534089175916, -0.68842875278409033,
    -0.68954054473706694, -0.69065071413453438, -0.69175925836415764, -0.69286617481742474, -0.69397146088965378, -0.69507511398000077, -0.69617713149146299, -0.6972775108308864,
    -0.6983762494089728, -0.69947334464028388, -0.70056879394324822, -0.70166259474016845, -0.70275474445722508, -0.70384524052448483, -0.70493408037590488, -0.70602126144933963,
    -0.70710678118654746, -0.7081906370331954, -0.70927282643886547, -0.71035334685706231, -0.71143219574521654, -0.71250937056469221, -0.71358486878079364, -0.71465868786276887,
    -0.71573082528381859, -0.71680127852109954, -0.7178700450557316, -0.71893712237280438, -0.72000250796138165, -0.72106619931450799, -0.72212819392921523, -0.72318848930652746,
    -0.72424708295146678, -0.72530397237306077, -0.72635915508434579, -0.72741262860237565, -0.7284643904482252, -0.72951443814699679, -0.73056276922782748, -0.73160938122389263,
    -0.7326542716724127, -0.73369743811466026, -0.7347388780959635, -0.73577858916571337, -0.7368165688773699, -0.73785281478846576, -0.738887324460615, -0.7399200954595162,
    -0.74095112535495888, -0.74198041172083096, -0.74300795213512172, -0.74403374417992907, -0.74505778544146595, -0.74608007351006389, -0.74710060598018002, -0.7481193804504036,
    -0.74913639452345915, -0.75015164580621496, -0.75116513190968648, -0.75217685044904248, -0.75318679904361241, -0.75419497531688917, -0.75520137689653644, -0.75620600141439442,
    -0.75720884650648457, -0.75820990981301517, -0.75920918897838807, -0.7602066816512022, -0.76120238548426167, -0.7621962981345789, -0.76318841726338105, -0.76417874053611667,
    -0.76516726562245896, -0.7661539901963127, -0.76713891193582029, -0.76812202852336542, -0.76910333764557948, -0.7700828369933479, -0.7710605242618136, -0.77203639715038441,
    -0.77301045336273699, -0.77398269060682268, -0.77495310659487382, -0.77592169904340769, -0.77688846567323233, -0.77785340420945304, -0.77881651238147598, -0.77977778792301433,
    -0.78073722857209449, -0.78169483207105916, -0.78265059616657562, -0.7836045186096382, -0.78455659715557502, -0.78550682956405393, -0.78645521359908577, -0.78740174702903121,
    -0.78834642762660623, -0.78928925316888576, -0.79023022143730992, -0.7911693302176902, -0.79210657730021217, -0.79304196047944353, -0.79397547755433717, -0.79490712632823679,
    -0.79583690460888346, -0.79676481020841883, -0.79769084094339093, -0.79861499463476082, -0.79953726910790512, -0.80045766219262271, -0.80137617172314024, -0.8022927955381155,
    -0.80320753148064483, -0.8041203773982657, -0.80503133114296344, -0.80594039057117628, -0.80684755354379933, -0.80775281792619025, -0.80865618158817498, -0.80955764240405137,
    -0.81045719825259466, -0.81135484701706373, -0.81225058658520377, -0.81314441484925348, -0.81403632970594841, -0.8149263290565264, -0.81581441080673367, -0.81670057286682785,
    -0.8175848131515836, -0.81846712958029866, -0.81934752007679701, -0.82022598256943458, -0.82110251499110465, -0.82197711527924133, -0.82284978137582621, -0.82372051122739143,
    -0.82458930278502507, -0.82545615400437744, -0.82632106284566353, -0.82718402727366902, -0.82804504525775569, -0.82890411477186499, -0.82976123379452293, -0.83061640030884631,
    -0.83146961230254535, -0.83232086776792957, -0.83317016470191319, -0.83401750110601802, -0.83486287498638001, -0.8357062843537526, -0.83654772722351189, -0.83738720161566182,
    -0.83822470555483808, -0.83906023707031263, -0.83989379419599952, -0.84072537497045807, -0.84155497743689833, -0.84238259964318585, -0.84320823964184533, -0.84403189549006641,
    -0.84485356524970712, -0.84567324698729895, -0.84649093877405202, -0.84730663868585843, -0.84812034480329712, -0.84893205521163961, -0.84974176800085255, -0.85054948126560337,
    -0.8513551931052652, -0.85215890162391961, -0.85296060493036363, -0.85376030113811141, -0.85455798836540042, -0.85535366473519592, -0.85614732837519447, -0.85693897741782865,
    -0.85772861000027201, -0.85851622426444285, -0.85930181835700836, -0.86008539042939014, -0.86086693863776709, -0.8616464611430813, -0.8624239561110405, -0.86319942171212405,
    -0.8639728561215867, -0.86474425751946238, -0.86551362409056898, -0.86628095402451299, -0.86704624551569276, -0.86780949676330321, -0.8685707059713409, -0.86932987134860662,
    -0.87008699110871135, -0.87084206347007898, -0.87159508665595087, -0.87234605889439143, -0.87309497841829009, -0.87384184346536675, -0.87458665227817611, -0.87532940310411089,
    -0.87607009419540649, -0.87680872380914565, -0.87754529020726113, -0.87827979165654146, -0.87901222642863353, -0.8797425928000473, -0.88047088905216075, -0.88119711347122209,
    -0.88192126434835494, -0.88264333997956279, -0.88336333866573169, -0.88408125871263488, -0.88479709843093779, -0.88551085613619984, -0.88622253014888053, -0.88693211879434219,
    -0.88763962040285382, -0.88834503330959624, -0.88904835585466457, -0.88974958638307267, -0.89044872324475788, -0.89114576479458329, -0.89184070939234261, -0.89253355540276458,
    -0.89322430119551521, -0.89391294514520314, -0.8945994856313827, -0.89528392103855736, -0.89596624975618511, -0.89664647017868027, -0.89732458070541821, -0.89800057974073977,
    -0.89867446569395393, -0.89934623697934146, -0.90001589201616017, -0.90068342922864675, -0.90134884704602192, -0.90201214390249318, -0.90267331823725871, -0.90333236849451182,
    -0.90398929312344334, -0.90464409057824613, -0.9052967593181187, -0.90594729780726846, -0.90659570451491533, -0.90724197791529582, -0.90788611648766604, -0.90852811871630612,
    -0.90916798309052238, -0.90980570810465211, -0.91044129225806714, -0.91107473405517636, -0.91170603200542977, -0.91233518462332275, -0.91296219042839821, -0.91358704794525081,
    -0.91420975570353069, -0.91483031223794598, -0.91544871608826772, -0.91606496579933172, -0.91667905992104259, -0.91729099700837791, -0.9179007756213905, -0.91850839432521214,
    -0.91911385169005777, -0.91971714629122736, -0.92031827670911048, -0.92091724152918941, -0.92151403934204179, -0.92210866874334507, -0.92270112833387863, -0.92329141671952752,
    -0.92387953251128674, -0.9244654743252626, -0.92504924078267747, -0.92563083050987272, -0.92621024213831138, -0.92678747430458175, -0.92736252565040111, -0.92793539482261778,
    -0.92850608047321548, -0.92907458125931575, -0.92964089584318121, -0.93020502289221907, -0.93076696107898371, -0.93132670908118032, -0.93188426558166804, -0.93243962926846247,
    -0.93299279883473885, -0.93354377297883617, -0.93409255040425876, -0.93463912981968067, -0.93518350993894761, -0.93572568948108026, -0.93626566717027826, -0.93680344173592167,
    -0.93733901191257485, -0.93787237643998977, -0.93840353406310817, -0.93893248353206449, -0.93945922360218992, -0.93998375303401382, -0.9405060705932683, -0.94102617505088926,
    -0.9415440651830207, -0.94205973977101731, -0.94257319760144687, -0.94308443746609338, -0.94359345816196039, -0.94410025849127266, -0.94460483726148015, -0.94510719328526061,
    -0.94560732538052117, -0.94610523237040334, -0.94660091308328353, -0.94709436635277711, -0.94758559101774109, -0.94807458592227623, -0.94856134991573027, -0.94904588185270056,
    -0.94952818059303667, -0.950008245001843, -0.9504860739494817, -0.95096166631157497, -0.95143502096900834, -0.95190613680793235, -0.95237501271976577, -0.9528416476011986,
    -0.95330604035419386, -0.95376818988599021, -0.95422809510910556, -0.95468575494133834, -0.95514116830577067, -0.95559433413077111, -0.95604525134999629, -0.95649391890239499,
    -0.95694033573220882, -0.95738450078897586, -0.95782641302753291, -0.95826607140801767, -0.95870347489587149, -0.95913862246184189, -0.95957151308198452, -0.96000214573766585,
    -0.96043051941556579, -0.96085663310767955, -0.96128048581132064, -0.96170207652912254, -0.96212140426904147, -0.96253846804435916, -0.96295326687368388, -0.96336579978095394,
    -0.96377606579543984, -0.96418406395174583, -0.96458979328981265, -0.96499325285492032, -0.96539444169768929, -0.96579335887408357, -0.9661900034454125, -0.96658437447833301,
    -0.96697647104485207, -0.96736629222232851, -0.9677538370934754, -0.96813910474636233, -0.96852209427441738, -0.96890280477642887, -0.96928123535654842, -0.96965738512429234,
    -0.97003125319454397, -0.9704028386875555, -0.97077214072895024, -0.97113915844972509, -0.97150389098625178, -0.97186633748027929, -0.97222649707893627, -0.97258436893473221,
    -0.97293995220556007, -0.97329324605469825, -0.97364424965081187, -0.97399296216795583, -0.97433938278557586, -0.97468351068851067, -0.97502534506699412, -0.97536488511665698,
    -0.97570213003852846, -0.97603707903903902, -0.97636973133002114, -0.97670008612871173, -0.97702814265775439, -0.97735390014519996, -0.97767735782450993, -0.97799851493455714,
    -0.97831737071962754, -0.9786339244294231, -0.9789481753190622, -0.97926012264908202, -0.97956976568544052, -0.97987710369951764, -0.98018213596811732, -0.98048486177346938,
    -0.98078528040323043, -0.98108339115048659, -0.98137919331375456, -0.98167268619698311, -0.98196386910955524, -0.98225274136628937, -0.98253930228744124, -0.98282355119870524,
    -0.98310548743121629, -0.98338511032155118, -0.98366241921173025, -0.98393741344921892, -0.98421009238692903, -0.98448045538322093, -0.98474850180190421, -0.98501423101223984,
    -0.98527764238894122, -0.98553873531217606, -0.98579750916756737, -0.98605396334619544, -0.98630809724459856, -0.98655991026477541, -0.98680940181418553, -0.98705657130575097,
    -0.98730141815785843, -0.98754394179435923, -0.98778414164457218, -0.98802201714328353, -0.98825756773074946, -0.98849079285269659, -0.98872169196032378, -0.98895026451030299,
    -0.98917650996478101, -0.98940042779138038, -0.98962201746320078, -0.98984127845882053, -0.99005821026229701, -0.99027281236316911, -0.99048508425645709, -0.99069502544266463,
    -0.99090263542778001, -0.99110791372327689, -0.99131085984611544, -0.9915114733187439, -0.99170975366909953, -0.99190570043060933, -0.9920993131421918, -0.99229059134825726,
    -0.99247953459870997, -0.99266614244894802, -0.9928504144598651, -0.99303235019785141, -0.9932119492347945, -0.99338921114808065, -0.9935641355205953, -0.9937367219407246,
    -0.99390697000235606, -0.99407487930487937, -0.9942404494531879, -0.9944036800576791, -0.99456457073425542, -0.9947231211043257, -0.99487933079480562, -0.99503319943811863,
    -0.99518472667219682, -0.99533391214048228, -0.99548075549192694, -0.99562525638099431, -0.99576741446765982, -0.99590722941741172, -0.99604470090125197, -0.99617982859569698,
    -0.996312612182778, -0.99644305135004263, -0.99657114579055484, -0.99669689520289606, -0.99682029929116567, -0.99694135776498216, -0.99706007033948296, -0.99717643673532608,
    -0.99729045667869021, -0.9974021299012753, -0.99751145614030345, -0.99761843513851955, -0.99772306664419164, -0.99782535041111164, -0.997925286198596, -0.99802287377148624,
    -0.99811811290014918, -0.99821100336047819, -0.99830154493389289, -0.99838973740734016, -0.99847558057329477, -0.99855907422975931, -0.99864021818026516, -0.99871901223387294,
    -0.99879545620517241, -0.99886954991428356, -0.99894129318685687, -0.99901068585407338, -0.99907772775264536, -0.99914241872481691, -0.99920475861836389, -0.99926474728659442,
    -0.99932238458834954, -0.99937767038800285, -0.99943060455546173, -0.99948118696616695, -0.99952941750109314, -0.99957529604674922, -0.99961882249517864, -0.99965999674395922,
    -0.99969881869620425, -0.99973528826056168, -0.99976940535121528, -0.99980116988788426, -0.9998305817958234, -0.99985764100582386, -0.99988234745421256, -0.99990470108285279,
    -0.9999247018391445, -0.99994234967602391, -0.9999576445519639, -0.99997058643097414, -0.99998117528260111, -0.9999894110819284, -0.99999529380957619, -0.99999882345170188,
};

static const u16 PARTNER[N] __attribute__((aligned(32))) = {
    0, 3, 2, 1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4,
    63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48,
    47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32,
    31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16,
    255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240,
    239, 238, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224,
    223, 222, 221, 220, 219, 218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 208,
    207, 206, 205, 204, 203, 202, 201, 200, 199, 198, 197, 196, 195, 194, 193, 192,
    191, 190, 189, 188, 187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, 176,
    175, 174, 173, 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, 160,
    159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146, 145, 144,
    143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128,
    127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112,
    111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96,
    95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80,
    79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64,
    1023, 1022, 1021, 1020, 1019, 1018, 1017, 1016, 1015, 1014, 1013, 1012, 1011, 1010, 1009, 1008,
    1007, 1006, 1005, 1004, 1003, 1002, 1001, 1000, 999, 998, 997, 996, 995, 994, 993, 992,
    991, 990, 989, 988, 987, 986, 985, 984, 983, 982, 981, 980, 979, 978, 977, 976,
    975, 974, 973, 972, 971, 970, 969, 968, 967, 966, 965, 964, 963, 962, 961, 960,
    959, 958, 957, 956, 955, 954, 953, 952, 951, 950, 949, 948, 947, 946, 945, 944,
    943, 942, 941, 940, 939, 938, 937, 936, 935, 934, 933, 932, 931, 930, 929, 928,
    927, 926, 925, 924, 923, 922, 921, 920, 919, 918, 917, 916, 915, 914, 913, 912,
    911, 910, 909, 908, 907, 906, 905, 904, 903, 902, 901, 900, 899, 898, 897, 896,
    895, 894, 893, 892, 891, 890, 889, 888, 887, 886, 885, 884, 883, 882, 881, 880,
    879, 878, 877, 876, 875, 874, 873, 872, 871, 870, 869, 868, 867, 866, 865, 864,
    863, 862, 861, 860, 859, 858, 857, 856, 855, 854, 853, 852, 851, 850, 849, 848,
    847, 846, 845, 844, 843, 842, 841, 840, 839, 838, 837, 836, 835, 834, 833, 832,
    831, 830, 829, 828, 827, 826, 825, 824, 823, 822, 821, 820, 819, 818, 817, 816,
    815, 814, 813, 812, 811, 810, 809, 808, 807, 806, 805, 804, 803, 802, 801, 800,
    799, 798, 797, 796, 795, 794, 793, 792, 791, 790, 789, 788, 787, 786, 785, 784,
    783, 782, 781, 780, 779, 778, 777, 776, 775, 774, 773, 772, 771, 770, 769, 768,
    767, 766, 765, 764, 763, 762, 761, 760, 759, 758, 757, 756, 755, 754, 753, 752,
    751, 750, 749, 748, 747, 746, 745, 744, 743, 742, 741, 740, 739, 738, 737, 736,
    735, 734, 733, 732, 731, 730, 729, 728, 727, 726, 725, 724, 723, 722, 721, 720,
    719, 718, 717, 716, 715, 714, 713, 712, 711, 710, 709, 708, 707, 706, 705, 704,
    703, 702, 701, 700, 699, 698, 697, 696, 695, 694, 693, 692, 691, 690, 689, 688,
    687, 686, 685, 684, 683, 682, 681, 680, 679, 678, 677, 676, 675, 674, 673, 672,
    671, 670, 669, 668, 667, 666, 665, 664, 663, 662, 661, 660, 659, 658, 657, 656,
    655, 654, 653, 652, 651, 650, 649, 648, 647, 646, 645, 644, 643, 642, 641, 640,
    639, 638, 637, 636, 635, 634, 633, 632, 631, 630, 629, 628, 627, 626, 625, 624,
    623, 622, 621, 620, 619, 618, 617, 616, 615, 614, 613, 612, 611, 610, 609, 608,
    607, 606, 605, 604, 603, 602, 601, 600, 599, 598, 597, 596, 595, 594, 593, 592,
    591, 590, 589, 588, 587, 586, 585, 584, 583, 582, 581, 580, 579, 578, 577, 576,
    575, 574, 573, 572, 571, 570, 569, 568, 567, 566, 565, 564, 563, 562, 561, 560,
    559, 558, 557, 556, 555, 554, 553, 552, 551, 550, 549, 548, 547, 546, 545, 544,
    543, 542, 541, 540, 539, 538, 537, 536, 535, 534, 533, 532, 531, 530, 529, 528,
    527, 526, 525, 524, 523, 522, 521, 520, 519, 518, 517, 516, 515, 514, 513, 512,
    511, 510, 509, 508, 507, 506, 505, 504, 503, 502, 501, 500, 499, 498, 497, 496,
    495, 494, 493, 492, 491, 490, 489, 488, 487, 486, 485, 484, 483, 482, 481, 480,
    479, 478, 477, 476, 475, 474, 473, 472, 471, 470, 469, 468, 467, 466, 465, 464,
    463, 462, 461, 460, 459, 458, 457, 456, 455, 454, 453, 452, 451, 450, 449, 448,
    447, 446, 445, 444, 443, 442, 441, 440, 439, 438, 437, 436, 435, 434, 433, 432,
    431, 430, 429, 428, 427, 426, 425, 424, 423, 422, 421, 420, 419, 418, 417, 416,
    415, 414, 413, 412, 411, 410, 409, 408, 407, 406, 405, 404, 403, 402, 401, 400,
    399, 398, 397, 396, 395, 394, 393, 392, 391, 390, 389, 388, 387, 386, 385, 384,
    383, 382, 381, 380, 379, 378, 377, 376, 375, 374, 373, 372, 371, 370, 369, 368,
    367, 366, 365, 364, 363, 362, 361, 360, 359, 358, 357, 356, 355, 354, 353, 352,
    351, 350, 349, 348, 347, 346, 345, 344, 343, 342, 341, 340, 339, 338, 337, 336,
    335, 334, 333, 332, 331, 330, 329, 328, 327, 326, 325, 324, 323, 322, 321, 320,
    319, 318, 317, 316, 315, 314, 313, 312, 311, 310, 309, 308, 307, 306, 305, 304,
    303, 302, 301, 300, 299, 298, 297, 296, 295, 294, 293, 292, 291, 290, 289, 288,
    287, 286, 285, 284, 283, 282, 281, 280, 279, 278, 277, 276, 275, 274, 273, 272,
    271, 270, 269, 268, 267, 266, 265, 264, 263, 262, 261, 260, 259, 258, 257, 256,
    4095, 4094, 4093, 4092, 4091, 4090, 4089, 4088, 4087, 4086, 4085, 4084, 4083, 4082, 4081, 4080,
    4079, 4078, 4077, 4076, 4075, 4074, 4073, 4072, 4071, 4070, 4069, 4068, 4067, 4066, 4065, 4064,
    4063, 4062, 4061, 4060, 4059, 4058, 4057, 4056, 4055, 4054, 4053, 4052, 4051, 4050, 4049, 4048,
    4047, 4046, 4045, 4044, 4043, 4042, 4041, 4040, 4039, 4038, 4037, 4036, 4035, 4034, 4033, 4032,
    4031, 4030, 4029, 4028, 4027, 4026, 4025, 4024, 4023, 4022, 4021, 4020, 4019, 4018, 4017, 4016,
    4015, 4014, 4013, 4012, 4011, 4010, 4009, 4008, 4007, 4006, 4005, 4004, 4003, 4002, 4001, 4000,
    3999, 3998, 3997, 3996, 3995, 3994, 3993, 3992, 3991, 3990, 3989, 3988, 3987, 3986, 3985, 3984,
    3983, 3982, 3981, 3980, 3979, 3978, 3977, 3976, 3975, 3974, 3973, 3972, 3971, 3970, 3969, 3968,
    3967, 3966, 3965, 3964, 3963, 3962, 3961, 3960, 3959, 3958, 3957, 3956, 3955, 3954, 3953, 3952,
    3951, 3950, 3949, 3948, 3947, 3946, 3945, 3944, 3943, 3942, 3941, 3940, 3939, 3938, 3937, 3936,
    3935, 3934, 3933, 3932, 3931, 3930, 3929, 3928, 3927, 3926, 3925, 3924, 3923, 3922, 3921, 3920,
    3919, 3918, 3917, 3916, 3915, 3914, 3913, 3912, 3911, 3910, 3909, 3908, 3907, 3906, 3905, 3904,
    3903, 3902, 3901, 3900, 3899, 3898, 3897, 3896, 3895, 3894, 3893, 3892, 3891, 3890, 3889, 3888,
    3887, 3886, 3885, 3884, 3883, 3882, 3881, 3880, 3879, 3878, 3877, 3876, 3875, 3874, 3873, 3872,
    3871, 3870, 3869, 3868, 3867, 3866, 3865, 3864, 3863, 3862, 3861, 3860, 3859, 3858, 3857, 3856,
    3855, 3854, 3853, 3852, 3851, 3850, 3849, 3848, 3847, 3846, 3845, 3844, 3843, 3842, 3841, 3840,
    3839, 3838, 3837, 3836, 3835, 3834, 3833, 3832, 3831, 3830, 3829, 3828, 3827, 3826, 3825, 3824,
    3823, 3822, 3821, 3820, 3819, 3818, 3817, 3816, 3815, 3814, 3813, 3812, 3811, 3810, 3809, 3808,
    3807, 3806, 3805, 3804, 3803, 3802, 3801, 3800, 3799, 3798, 3797, 3796, 3795, 3794, 3793, 3792,
    3791, 3790, 3789, 3788, 3787, 3786, 3785, 3784, 3783, 3782, 3781, 3780, 3779, 3778, 3777, 3776,
    3775, 3774, 3773, 3772, 3771, 3770, 3769, 3768, 3767, 3766, 3765, 3764, 3763, 3762, 3761, 3760,
    3759, 3758, 3757, 3756, 3755, 3754, 3753, 3752, 3751, 3750, 3749, 3748, 3747, 3746, 3745, 3744,
    3743, 3742, 3741, 3740, 3739, 3738, 3737, 3736, 3735, 3734, 3733, 3732, 3731, 3730, 3729, 3728,
    3727, 3726, 3725, 3724, 3723, 3722, 3721, 3720, 3719, 3718, 3717, 3716, 3715, 3714, 3713, 3712,
    3711, 3710, 3709, 3708, 3707, 3706, 3705, 3704, 3703, 3702, 3701, 3700, 3699, 3698, 3697, 3696,
    3695, 3694, 3693, 3692, 3691, 3690, 3689, 3688, 3687, 3686, 3685, 3684, 3683, 3682, 3681, 3680,
    3679, 3678, 3677, 3676, 3675, 3674, 3673, 3672, 3671, 3670, 3669, 3668, 3667, 3666, 3665, 3664,
    3663, 3662, 3661, 3660, 3659, 3658, 3657, 3656, 3655, 3654, 3653, 3652, 3651, 3650, 3649, 3648,
    3647, 3646, 3645, 3644, 3643, 3642, 3641, 3640, 3639, 3638, 3637, 3636, 3635, 3634, 3633, 3632,
    3631, 3630, 3629, 3628, 3627, 3626, 3625, 3624, 3623, 3622, 3621, 3620, 3619, 3618, 3617, 3616,
    3615, 3614, 3613, 3612, 3611, 3610, 3609, 3608, 3607, 3606, 3605, 3604, 3603, 3602, 3601, 3600,
    3599, 3598, 3597, 3596, 3595, 3594, 3593, 3592, 3591, 3590, 3589, 3588, 3587, 3586, 3585, 3584,
    3583, 3582, 3581, 3580, 3579, 3578, 3577, 3576, 3575, 3574, 3573, 3572, 3571, 3570, 3569, 3568,
    3567, 3566, 3565, 3564, 3563, 3562, 3561, 3560, 3559, 3558, 3557, 3556, 3555, 3554, 3553, 3552,
    3551, 3550, 3549, 3548, 3547, 3546, 3545, 3544, 3543, 3542, 3541, 3540, 3539, 3538, 3537, 3536,
    3535, 3534, 3533, 3532, 3531, 3530, 3529, 3528, 3527, 3526, 3525, 3524, 3523, 3522, 3521, 3520,
    3519, 3518, 3517, 3516, 3515, 3514, 3513, 3512, 3511, 3510, 3509, 3508, 3507, 3506, 3505, 3504,
    3503, 3502, 3501, 3500, 3499, 3498, 3497, 3496, 3495, 3494, 3493, 3492, 3491, 3490, 3489, 3488,
    3487, 3486, 3485, 3484, 3483, 3482, 3481, 3480, 3479, 3478, 3477, 3476, 3475, 3474, 3473, 3472,
    3471, 3470, 3469, 3468, 3467, 3466, 3465, 3464, 3463, 3462, 3461, 3460, 3459, 3458, 3457, 3456,
    3455, 3454, 3453, 3452, 3451, 3450, 3449, 3448, 3447, 3446, 3445, 3444, 3443, 3442, 3441, 3440,
    3439, 3438, 3437, 3436, 3435, 3434, 3433, 3432, 3431, 3430, 3429, 3428, 3427, 3426, 3425, 3424,
    3423, 3422, 3421, 3420, 3419, 3418, 3417, 3416, 3415, 3414, 3413, 3412, 3411, 3410, 3409, 3408,
    3407, 3406, 3405, 3404, 3403, 3402, 3401, 3400, 3399, 3398, 3397, 3396, 3395, 3394, 3393, 3392,
    3391, 3390, 3389, 3388, 3387, 3386, 3385, 3384, 3383, 3382, 3381, 3380, 3379, 3378, 3377, 3376,
    3375, 3374, 3373, 3372, 3371, 3370, 3369, 3368, 3367, 3366, 3365, 3364, 3363, 3362, 3361, 3360,
    3359, 3358, 3357, 3356, 3355, 3354, 3353, 3352, 3351, 3350, 3349, 3348, 3347, 3346, 3345, 3344,
    3343, 3342, 3341, 3340, 3339, 3338, 3337, 3336, 3335, 3334, 3333, 3332, 3331, 3330, 3329, 3328,
    3327, 3326, 3325, 3324, 3323, 3322, 3321, 3320, 3319, 3318, 3317, 3316, 3315, 3314, 3313, 3312,
    3311, 3310, 3309, 3308, 3307, 3306, 3305, 3304, 3303, 3302, 3301, 3300, 3299, 3298, 3297, 3296,
    3295, 3294, 3293, 3292, 3291, 3290, 3289, 3288, 3287, 3286, 3285, 3284, 3283, 3282, 3281, 3280,
    3279, 3278, 3277, 3276, 3275, 3274, 3273, 3272, 3271, 3270, 3269, 3268, 3267, 3266, 3265, 3264,
    3263, 3262, 3261, 3260, 3259, 3258, 3257, 3256, 3255, 3254, 3253, 3252, 3251, 3250, 3249, 3248,
    3247, 3246, 3245, 3244, 3243, 3242, 3241, 3240, 3239, 3238, 3237, 3236, 3235, 3234, 3233, 3232,
    3231, 3230, 3229, 3228, 3227, 3226, 3225, 3224, 3223, 3222, 3221, 3220, 3219, 3218, 3217, 3216,
    3215, 3214, 3213, 3212, 3211, 3210, 3209, 3208, 3207, 3206, 3205, 3204, 3203, 3202, 3201, 3200,
    3199, 3198, 3197, 3196, 3195, 3194, 3193, 3192, 3191, 3190, 3189, 3188, 3187, 3186, 3185, 3184,
    3183, 3182, 3181, 3180, 3179, 3178, 3177, 3176, 3175, 3174, 3173, 3172, 3171, 3170, 3169, 3168,
    3167, 3166, 3165, 3164, 3163, 3162, 3161, 3160, 3159, 3158, 3157, 3156, 3155, 3154, 3153, 3152,
    3151, 3150, 3149, 3148, 3147, 3146, 3145, 3144, 3143, 3142, 3141, 3140, 3139, 3138, 3137, 3136,
    3135, 3134, 3133, 3132, 3131, 3130, 3129, 3128, 3127, 3126, 3125, 3124, 3123, 3122, 3121, 3120,
    3119, 3118, 3117, 3116, 3115, 3114, 3113, 3112, 3111, 3110, 3109, 3108, 3107, 3106, 3105, 3104,
    3103, 3102, 3101, 3100, 3099, 3098, 3097, 3096, 3095, 3094, 3093, 3092, 3091, 3090, 3089, 3088,
    3087, 3086, 3085, 3084, 3083, 3082, 3081, 3080, 3079, 3078, 3077, 3076, 3075, 3074, 3073, 3072,
    3071, 3070, 3069, 3068, 3067, 3066, 3065, 3064, 3063, 3062, 3061, 3060, 3059, 3058, 3057, 3056,
    3055, 3054, 3053, 3052, 3051, 3050, 3049, 3048, 3047, 3046, 3045, 3044, 3043, 3042, 3041, 3040,
    3039, 3038, 3037, 3036, 3035, 3034, 3033, 3032, 3031, 3030, 3029, 3028, 3027, 3026, 3025, 3024,
    3023, 3022, 3021, 3020, 3019, 3018, 3017, 3016, 3015, 3014, 3013, 3012, 3011, 3010, 3009, 3008,
    3007, 3006, 3005, 3004, 3003, 3002, 3001, 3000, 2999, 2998, 2997, 2996, 2995, 2994, 2993, 2992,
    2991, 2990, 2989, 2988, 2987, 2986, 2985, 2984, 2983, 2982, 2981, 2980, 2979, 2978, 2977, 2976,
    2975, 2974, 2973, 2972, 2971, 2970, 2969, 2968, 2967, 2966, 2965, 2964, 2963, 2962, 2961, 2960,
    2959, 2958, 2957, 2956, 2955, 2954, 2953, 2952, 2951, 2950, 2949, 2948, 2947, 2946, 2945, 2944,
    2943, 2942, 2941, 2940, 2939, 2938, 2937, 2936, 2935, 2934, 2933, 2932, 2931, 2930, 2929, 2928,
    2927, 2926, 2925, 2924, 2923, 2922, 2921, 2920, 2919, 2918, 2917, 2916, 2915, 2914, 2913, 2912,
    2911, 2910, 2909, 2908, 2907, 2906, 2905, 2904, 2903, 2902, 2901, 2900, 2899, 2898, 2897, 2896,
    2895, 2894, 2893, 2892, 2891, 2890, 2889, 2888, 2887, 2886, 2885, 2884, 2883, 2882, 2881, 2880,
    2879, 2878, 2877, 2876, 2875, 2874, 2873, 2872, 2871, 2870, 2869, 2868, 2867, 2866, 2865, 2864,
    2863, 2862, 2861, 2860, 2859, 2858, 2857, 2856, 2855, 2854, 2853, 2852, 2851, 2850, 2849, 2848,
    2847, 2846, 2845, 2844, 2843, 2842, 2841, 2840, 2839, 2838, 2837, 2836, 2835, 2834, 2833, 2832,
    2831, 2830, 2829, 2828, 2827, 2826, 2825, 2824, 2823, 2822, 2821, 2820, 2819, 2818, 2817, 2816,
    2815, 2814, 2813, 2812, 2811, 2810, 2809, 2808, 2807, 2806, 2805, 2804, 2803, 2802, 2801, 2800,
    2799, 2798, 2797, 2796, 2795, 2794, 2793, 2792, 2791, 2790, 2789, 2788, 2787, 2786, 2785, 2784,
    2783, 2782, 2781, 2780, 2779, 2778, 2777, 2776, 2775, 2774, 2773, 2772, 2771, 2770, 2769, 2768,
    2767, 2766, 2765, 2764, 2763, 2762, 2761, 2760, 2759, 2758, 2757, 2756, 2755, 2754, 2753, 2752,
    2751, 2750, 2749, 2748, 2747, 2746, 2745, 2744, 2743, 2742, 2741, 2740, 2739, 2738, 2737, 2736,
    2735, 2734, 2733, 2732, 2731, 2730, 2729, 2728, 2727, 2726, 2725, 2724, 2723, 2722, 2721, 2720,
    2719, 2718, 2717, 2716, 2715, 2714, 2713, 2712, 2711, 2710, 2709, 2708, 2707, 2706, 2705, 2704,
    2703, 2702, 2701, 2700, 2699, 2698, 2697, 2696, 2695, 2694, 2693, 2692, 2691, 2690, 2689, 2688,
    2687, 2686, 2685, 2684, 2683, 2682, 2681, 2680, 2679, 2678, 2677, 2676, 2675, 2674, 2673, 2672,
    2671, 2670, 2669, 2668, 2667, 2666, 2665, 2664, 2663, 2662, 2661, 2660, 2659, 2658, 2657, 2656,
    2655, 2654, 2653, 2652, 2651, 2650, 2649, 2648, 2647, 2646, 2645, 2644, 2643, 2642, 2641, 2640,
    2639, 2638, 2637, 2636, 2635, 2634, 2633, 2632, 2631, 2630, 2629, 2628, 2627, 2626, 2625, 2624,
    2623, 2622, 2621, 2620, 2619, 2618, 2617, 2616, 2615, 2614, 2613, 2612, 2611, 2610, 2609, 2608,
    2607, 2606, 2605, 2604, 2603, 2602, 2601, 2600, 2599, 2598, 2597, 2596, 2595, 2594, 2593, 2592,
    2591, 2590, 2589, 2588, 2587, 2586, 2585, 2584, 2583, 2582, 2581, 2580, 2579, 2578, 2577, 2576,
    2575, 2574, 2573, 2572, 2571, 2570, 2569, 2568, 2567, 2566, 2565, 2564, 2563, 2562, 2561, 2560,
    2559, 2558, 2557, 2556, 2555, 2554, 2553, 2552, 2551, 2550, 2549, 2548, 2547, 2546, 2545, 2544,
    2543, 2542, 2541, 2540, 2539, 2538, 2537, 2536, 2535, 2534, 2533, 2532, 2531, 2530, 2529, 2528,
    2527, 2526, 2525, 2524, 2523, 2522, 2521, 2520, 2519, 2518, 2517, 2516, 2515, 2514, 2513, 2512,
    2511, 2510, 2509, 2508, 2507, 2506, 2505, 2504, 2503, 2502, 2501, 2500, 2499, 2498, 2497, 2496,
    2495, 2494, 2493, 2492, 2491, 2490, 2489, 2488, 2487, 2486, 2485, 2484, 2483, 2482, 2481, 2480,
    2479, 2478, 2477, 2476, 2475, 2474, 2473, 2472, 2471, 2470, 2469, 2468, 2467, 2466, 2465, 2464,
    2463, 2462, 2461, 2460, 2459, 2458, 2457, 2456, 2455, 2454, 2453, 2452, 2451, 2450, 2449, 2448,
    2447, 2446, 2445, 2444, 2443, 2442, 2441, 2440, 2439, 2438, 2437, 2436, 2435, 2434, 2433, 2432,
    2431, 2430, 2429, 2428, 2427, 2426, 2425, 2424, 2423, 2422, 2421, 2420, 2419, 2418, 2417, 2416,
    2415, 2414, 2413, 2412, 2411, 2410, 2409, 2408, 2407, 2406, 2405, 2404, 2403, 2402, 2401, 2400,
    2399, 2398, 2397, 2396, 2395, 2394, 2393, 2392, 2391, 2390, 2389, 2388, 2387, 2386, 2385, 2384,
    2383, 2382, 2381, 2380, 2379, 2378, 2377, 2376, 2375, 2374, 2373, 2372, 2371, 2370, 2369, 2368,
    2367, 2366, 2365, 2364, 2363, 2362, 2361, 2360, 2359, 2358, 2357, 2356, 2355, 2354, 2353, 2352,
    2351, 2350, 2349, 2348, 2347, 2346, 2345, 2344, 2343, 2342, 2341, 2340, 2339, 2338, 2337, 2336,
    2335, 2334, 2333, 2332, 2331, 2330, 2329, 2328, 2327, 2326, 2325, 2324, 2323, 2322, 2321, 2320,
    2319, 2318, 2317, 2316, 2315, 2314, 2313, 2312, 2311, 2310, 2309, 2308, 2307, 2306, 2305, 2304,
    2303, 2302, 2301, 2300, 2299, 2298, 2297, 2296, 2295, 2294, 2293, 2292, 2291, 2290, 2289, 2288,
    2287, 2286, 2285, 2284, 2283, 2282, 2281, 2280, 2279, 2278, 2277, 2276, 2275, 2274, 2273, 2272,
    2271, 2270, 2269, 2268, 2267, 2266, 2265, 2264, 2263, 2262, 2261, 2260, 2259, 2258, 2257, 2256,
    2255, 2254, 2253, 2252, 2251, 2250, 2249, 2248, 2247, 2246, 2245, 2244, 2243, 2242, 2241, 2240,
    2239, 2238, 2237, 2236, 2235, 2234, 2233, 2232, 2231, 2230, 2229, 2228, 2227, 2226, 2225, 2224,
    2223, 2222, 2221, 2220, 2219, 2218, 2217, 2216, 2215, 2214, 2213, 2212, 2211, 2210, 2209, 2208,
    2207, 2206, 2205, 2204, 2203, 2202, 2201, 2200, 2199, 2198, 2197, 2196, 2195, 2194, 2193, 2192,
    2191, 2190, 2189, 2188, 2187, 2186, 2185, 2184, 2183, 2182, 2181, 2180, 2179, 2178, 2177, 2176,
    2175, 2174, 2173, 2172, 2171, 2170, 2169, 2168, 2167, 2166, 2165, 2164, 2163, 2162, 2161, 2160,
    2159, 2158, 2157, 2156, 2155, 2154, 2153, 2152, 2151, 2150, 2149, 2148, 2147, 2146, 2145, 2144,
    2143, 2142, 2141, 2140, 2139, 2138, 2137, 2136, 2135, 2134, 2133, 2132, 2131, 2130, 2129, 2128,
    2127, 2126, 2125, 2124, 2123, 2122, 2121, 2120, 2119, 2118, 2117, 2116, 2115, 2114, 2113, 2112,
    2111, 2110, 2109, 2108, 2107, 2106, 2105, 2104, 2103, 2102, 2101, 2100, 2099, 2098, 2097, 2096,
    2095, 2094, 2093, 2092, 2091, 2090, 2089, 2088, 2087, 2086, 2085, 2084, 2083, 2082, 2081, 2080,
    2079, 2078, 2077, 2076, 2075, 2074, 2073, 2072, 2071, 2070, 2069, 2068, 2067, 2066, 2065, 2064,
    2063, 2062, 2061, 2060, 2059, 2058, 2057, 2056, 2055, 2054, 2053, 2052, 2051, 2050, 2049, 2048,
    2047, 2046, 2045, 2044, 2043, 2042, 2041, 2040, 2039, 2038, 2037, 2036, 2035, 2034, 2033, 2032,
    2031, 2030, 2029, 2028, 2027, 2026, 2025, 2024, 2023, 2022, 2021, 2020, 2019, 2018, 2017, 2016,
    2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000,
    1999, 1998, 1997, 1996, 1995, 1994, 1993, 1992, 1991, 1990, 1989, 1988, 1987, 1986, 1985, 1984,
    1983, 1982, 1981, 1980, 1979, 1978, 1977, 1976, 1975, 1974, 1973, 1972, 1971, 1970, 1969, 1968,
    1967, 1966, 1965, 1964, 1963, 1962, 1961, 1960, 1959, 1958, 1957, 1956, 1955, 1954, 1953, 1952,
    1951, 1950, 1949, 1948, 1947, 1946, 1945, 1944, 1943, 1942, 1941, 1940, 1939, 1938, 1937, 1936,
    1935, 1934, 1933, 1932, 1931, 1930, 1929, 1928, 1927, 1926, 1925, 1924, 1923, 1922, 1921, 1920,
    1919, 1918, 1917, 1916, 1915, 1914, 1913, 1912, 1911, 1910, 1909, 1908, 1907, 1906, 1905, 1904,
    1903, 1902, 1901, 1900, 1899, 1898, 1897, 1896, 1895, 1894, 1893, 1892, 1891, 1890, 1889, 1888,
    1887, 1886, 1885, 1884, 1883, 1882, 1881, 1880, 1879, 1878, 1877, 1876, 1875, 1874, 1873, 1872,
    1871, 1870, 1869, 1868, 1867, 1866, 1865, 1864, 1863, 1862, 1861, 1860, 1859, 1858, 1857, 1856,
    1855, 1854, 1853, 1852, 1851, 1850, 1849, 1848, 1847, 1846, 1845, 1844, 1843, 1842, 1841, 1840,
    1839, 1838, 1837, 1836, 1835, 1834, 1833, 1832, 1831, 1830, 1829, 1828, 1827, 1826, 1825, 1824,
    1823, 1822, 1821, 1820, 1819, 1818, 1817, 1816, 1815, 1814, 1813, 1812, 1811, 1810, 1809, 1808,
    1807, 1806, 1805, 1804, 1803, 1802, 1801, 1800, 1799, 1798, 1797, 1796, 1795, 1794, 1793, 1792,
    1791, 1790, 1789, 1788, 1787, 1786, 1785, 1784, 1783, 1782, 1781, 1780, 1779, 1778, 1777, 1776,
    1775, 1774, 1773, 1772, 1771, 1770, 1769, 1768, 1767, 1766, 1765, 1764, 1763, 1762, 1761, 1760,
    1759, 1758, 1757, 1756, 1755, 1754, 1753, 1752, 1751, 1750, 1749, 1748, 1747, 1746, 1745, 1744,
    1743, 1742, 1741, 1740, 1739, 1738, 1737, 1736, 1735, 1734, 1733, 1732, 1731, 1730, 1729, 1728,
    1727, 1726, 1725, 1724, 1723, 1722, 1721, 1720, 1719, 1718, 1717, 1716, 1715, 1714, 1713, 1712,
    1711, 1710, 1709, 1708, 1707, 1706, 1705, 1704, 1703, 1702, 1701, 1700, 1699, 1698, 1697, 1696,
    1695, 1694, 1693, 1692, 1691, 1690, 1689, 1688, 1687, 1686, 1685, 1684, 1683, 1682, 1681, 1680,
    1679, 1678, 1677, 1676, 1675, 1674, 1673, 1672, 1671, 1670, 1669, 1668, 1667, 1666, 1665, 1664,
    1663, 1662, 1661, 1660, 1659, 1658, 1657, 1656, 1655, 1654, 1653, 1652, 1651, 1650, 1649, 1648,
    1647, 1646, 1645, 1644, 1643, 1642, 1641, 1640, 1639, 1638, 1637, 1636, 1635, 1634, 1633, 1632,
    1631, 1630, 1629, 1628, 1627, 1626, 1625, 1624, 1623, 1622, 1621, 1620, 1619, 1618, 1617, 1616,
    1615, 1614, 1613, 1612, 1611, 1610, 1609, 1608, 1607, 1606, 1605, 1604, 1603, 1602, 1601, 1600,
    1599, 1598, 1597, 1596, 1595, 1594, 1593, 1592, 1591, 1590, 1589, 1588, 1587, 1586, 1585, 1584,
    1583, 1582, 1581, 1580, 1579, 1578, 1577, 1576, 1575, 1574, 1573, 1572, 1571, 1570, 1569, 1568,
    1567, 1566, 1565, 1564, 1563, 1562, 1561, 1560, 1559, 1558, 1557, 1556, 1555, 1554, 1553, 1552,
    1551, 1550, 1549, 1548, 1547, 1546, 1545, 1544, 1543, 1542, 1541, 1540, 1539, 1538, 1537, 1536,
    1535, 1534, 1533, 1532, 1531, 1530, 1529, 1528, 1527, 1526, 1525, 1524, 1523, 1522, 1521, 1520,
    1519, 1518, 1517, 1516, 1515, 1514, 1513, 1512, 1511, 1510, 1509, 1508, 1507, 1506, 1505, 1504,
    1503, 1502, 1501, 1500, 1499, 1498, 1497, 1496, 1495, 1494, 1493, 1492, 1491, 1490, 1489, 1488,
    1487, 1486, 1485, 1484, 1483, 1482, 1481, 1480, 1479, 1478, 1477, 1476, 1475, 1474, 1473, 1472,
    1471, 1470, 1469, 1468, 1467, 1466, 1465, 1464, 1463, 1462, 1461, 1460, 1459, 1458, 1457, 1456,
    1455, 1454, 1453, 1452, 1451, 1450, 1449, 1448, 1447, 1446, 1445, 1444, 1443, 1442, 1441, 1440,
    1439, 1438, 1437, 1436, 1435, 1434, 1433, 1432, 1431, 1430, 1429, 1428, 1427, 1426, 1425, 1424,
    1423, 1422, 1421, 1420, 1419, 1418, 1417, 1416, 1415, 1414, 1413, 1412, 1411, 1410, 1409, 1408,
    1407, 1406, 1405, 1404, 1403, 1402, 1401, 1400, 1399, 1398, 1397, 1396, 1395, 1394, 1393, 1392,
    1391, 1390, 1389, 1388, 1387, 1386, 1385, 1384, 1383, 1382, 1381, 1380, 1379, 1378, 1377, 1376,
    1375, 1374, 1373, 1372, 1371, 1370, 1369, 1368, 1367, 1366, 1365, 1364, 1363, 1362, 1361, 1360,
    1359, 1358, 1357, 1356, 1355, 1354, 1353, 1352, 1351, 1350, 1349, 1348, 1347, 1346, 1345, 1344,
    1343, 1342, 1341, 1340, 1339, 1338, 1337, 1336, 1335, 1334, 1333, 1332, 1331, 1330, 1329, 1328,
    1327, 1326, 1325, 1324, 1323, 1322, 1321, 1320, 1319, 1318, 1317, 1316, 1315, 1314, 1313, 1312,
    1311, 1310, 1309, 1308, 1307, 1306, 1305, 1304, 1303, 1302, 1301, 1300, 1299, 1298, 1297, 1296,
    1295, 1294, 1293, 1292, 1291, 1290, 1289, 1288, 1287, 1286, 1285, 1284, 1283, 1282, 1281, 1280,
    1279, 1278, 1277, 1276, 1275, 1274, 1273, 1272, 1271, 1270, 1269, 1268, 1267, 1266, 1265, 1264,
    1263, 1262, 1261, 1260, 1259, 1258, 1257, 1256, 1255, 1254, 1253, 1252, 1251, 1250, 1249, 1248,
    1247, 1246, 1245, 1244, 1243, 1242, 1241, 1240, 1239, 1238, 1237, 1236, 1235, 1234, 1233, 1232,
    1231, 1230, 1229, 1228, 1227, 1226, 1225, 1224, 1223, 1222, 1221, 1220, 1219, 1218, 1217, 1216,
    1215, 1214, 1213, 1212, 1211, 1210, 1209, 1208, 1207, 1206, 1205, 1204, 1203, 1202, 1201, 1200,
    1199, 1198, 1197, 1196, 1195, 1194, 1193, 1192, 1191, 1190, 1189, 1188, 1187, 1186, 1185, 1184,
    1183, 1182, 1181, 1180, 1179, 1178, 1177, 1176, 1175, 1174, 1173, 1172, 1171, 1170, 1169, 1168,
    1167, 1166, 1165, 1164, 1163, 1162, 1161, 1160, 1159, 1158, 1157, 1156, 1155, 1154, 1153, 1152,
    1151, 1150, 1149, 1148, 1147, 1146, 1145, 1144, 1143, 1142, 1141, 1140, 1139, 1138, 1137, 1136,
    1135, 1134, 1133, 1132, 1131, 1130, 1129, 1128, 1127, 1126, 1125, 1124, 1123, 1122, 1121, 1120,
    1119, 1118, 1117, 1116, 1115, 1114, 1113, 1112, 1111, 1110, 1109, 1108, 1107, 1106, 1105, 1104,
    1103, 1102, 1101, 1100, 1099, 1098, 1097, 1096, 1095, 1094, 1093, 1092, 1091, 1090, 1089, 1088,
    1087, 1086, 1085, 1084, 1083, 1082, 1081, 1080, 1079, 1078, 1077, 1076, 1075, 1074, 1073, 1072,
    1071, 1070, 1069, 1068, 1067, 1066, 1065, 1064, 1063, 1062, 1061, 1060, 1059, 1058, 1057, 1056,
    1055, 1054, 1053, 1052, 1051, 1050, 1049, 1048, 1047, 1046, 1045, 1044, 1043, 1042, 1041, 1040,
    1039, 1038, 1037, 1036, 1035, 1034, 1033, 1032, 1031, 1030, 1029, 1028, 1027, 1026, 1025, 1024,
};

static double f[2*N] __attribute__((aligned(32)));
static double W[2*NW] __attribute__((aligned(32)));

static inline __m256d cmul(__m256d a, __m256d b){
    __m256d b_sw = _mm256_shuffle_pd(b, b, 0x5);
    __m256d p = _mm256_mul_pd(a, b);
    __m256d q = _mm256_mul_pd(a, b_sw);
    __m256d p_sh = _mm256_shuffle_pd(p, p, 0x5);
    __m256d q_sh = _mm256_shuffle_pd(q, q, 0x5);
    __m256d re_v = _mm256_addsub_pd(p, p_sh);
    __m256d im_v = _mm256_addsub_pd(q, q_sh);
    return _mm256_blend_pd(re_v, im_v, 0b1010);
}

static inline __m256d load_tw(const double* W, int idx, int step){
    __m128d lo = _mm_load_pd(&W[2*idx]);
    __m128d hi = _mm_load_pd(&W[2*(idx+step)]);
    return _mm256_insertf128_pd(_mm256_castpd128_pd256(lo), hi, 1);
}

static const __m256d NEGMASK = {-1.0, 1.0, -1.0, 1.0};
static const __m256d SIGNMASK = {1.0, -1.0, 1.0, -1.0};

static void fft_fwd_r4(double* f){
    for(int len=N; len>1; len>>=2){
        int m=len>>2, step=N/len;
        for(int i=0;i<N;i+=len){
            int j=0;
            for(; j+1<m; j+=2){
                __m256d X0=_mm256_load_pd(&f[2*(i+j)]);
                __m256d X1=_mm256_load_pd(&f[2*(i+j+m)]);
                __m256d X2=_mm256_load_pd(&f[2*(i+j+2*m)]);
                __m256d X3=_mm256_load_pd(&f[2*(i+j+3*m)]);
                __m256d t0=_mm256_add_pd(X0,X2);
                __m256d t1=_mm256_sub_pd(X0,X2);
                __m256d t2=_mm256_add_pd(X1,X3);
                __m256d t3=_mm256_sub_pd(X1,X3);
                __m256d i_t3=_mm256_mul_pd(_mm256_shuffle_pd(t3,t3,0x5), NEGMASK);
                __m256d p1=_mm256_add_pd(t1,i_t3);
                __m256d p3=_mm256_sub_pd(t1,i_t3);
                __m256d o0=_mm256_add_pd(t0,t2);
                __m256d o2=_mm256_sub_pd(t0,t2);
                __m256d w1=load_tw(W,j*step,step);
                __m256d w2=load_tw(W,2*j*step,2*step);
                __m256d w3=load_tw(W,3*j*step,3*step);
                __m256d o1=cmul(p1,w1);
                o2=cmul(o2,w2);
                __m256d o3=cmul(p3,w3);
                _mm256_store_pd(&f[2*(i+j)],o0);
                _mm256_store_pd(&f[2*(i+j+m)],o1);
                _mm256_store_pd(&f[2*(i+j+2*m)],o2);
                _mm256_store_pd(&f[2*(i+j+3*m)],o3);
            }
            for(; j<m; j++){
                double x0r=f[2*(i+j)],x0i=f[2*(i+j)+1];
                double x1r=f[2*(i+j+m)],x1i=f[2*(i+j+m)+1];
                double x2r=f[2*(i+j+2*m)],x2i=f[2*(i+j+2*m)+1];
                double x3r=f[2*(i+j+3*m)],x3i=f[2*(i+j+3*m)+1];
                double t0r=x0r+x2r,t0i=x0i+x2i;
                double t1r=x0r-x2r,t1i=x0i-x2i;
                double t2r=x1r+x3r,t2i=x1i+x3i;
                double t3r=x1r-x3r,t3i=x1i-x3i;
                double i3r=-t3i,i3i=t3r;
                double p1r=t1r+i3r,p1i=t1i+i3i;
                double p3r=t1r-i3r,p3i=t1i-i3i;
                double w1r=W[2*(j*step)],w1i=W[2*(j*step)+1];
                double w2r=W[2*(2*j*step)],w2i=W[2*(2*j*step)+1];
                double w3r=W[2*(3*j*step)],w3i=W[2*(3*j*step)+1];
                f[2*(i+j)]=t0r+t2r; f[2*(i+j)+1]=t0i+t2i;
                f[2*(i+j+m)]=p1r*w1r-p1i*w1i; f[2*(i+j+m)+1]=p1r*w1i+p1i*w1r;
                f[2*(i+j+2*m)]=(t0r-t2r)*w2r-(t0i-t2i)*w2i; f[2*(i+j+2*m)+1]=(t0r-t2r)*w2i+(t0i-t2i)*w2r;
                f[2*(i+j+3*m)]=p3r*w3r-p3i*w3i; f[2*(i+j+3*m)+1]=p3r*w3i+p3i*w3r;
            }
        }
    }
}

static void fft_inv_r4(double* f){
    for(int len=4; len<=N; len<<=2){
        int m=len>>2, step=N/len;
        for(int i=0;i<N;i+=len){
            int j=0;
            for(; j+1<m; j+=2){
                __m256d X0=_mm256_load_pd(&f[2*(i+j)]);
                __m256d X1=_mm256_load_pd(&f[2*(i+j+m)]);
                __m256d X2=_mm256_load_pd(&f[2*(i+j+2*m)]);
                __m256d X3=_mm256_load_pd(&f[2*(i+j+3*m)]);
                __m256d w1=_mm256_mul_pd(load_tw(W,j*step,step),SIGNMASK);
                __m256d w2=_mm256_mul_pd(load_tw(W,2*j*step,2*step),SIGNMASK);
                __m256d w3=_mm256_mul_pd(load_tw(W,3*j*step,3*step),SIGNMASK);
                __m256d x1=cmul(X1,w1);
                __m256d x2=cmul(X2,w2);
                __m256d x3=cmul(X3,w3);
                __m256d t0=_mm256_add_pd(X0,x2);
                __m256d t1=_mm256_sub_pd(X0,x2);
                __m256d t2=_mm256_add_pd(x1,x3);
                __m256d t3=_mm256_sub_pd(x1,x3);
                __m256d i_t3=_mm256_mul_pd(_mm256_shuffle_pd(t3,t3,0x5), NEGMASK);
                __m256d o0=_mm256_add_pd(t0,t2);
                __m256d o1=_mm256_sub_pd(t1,i_t3);
                __m256d o2=_mm256_sub_pd(t0,t2);
                __m256d o3=_mm256_add_pd(t1,i_t3);
                _mm256_store_pd(&f[2*(i+j)],o0);
                _mm256_store_pd(&f[2*(i+j+m)],o1);
                _mm256_store_pd(&f[2*(i+j+2*m)],o2);
                _mm256_store_pd(&f[2*(i+j+3*m)],o3);
            }
            for(; j<m; j++){
                double x0r=f[2*(i+j)],x0i=f[2*(i+j)+1];
                double x1r=f[2*(i+j+m)],x1i=f[2*(i+j+m)+1];
                double x2r=f[2*(i+j+2*m)],x2i=f[2*(i+j+2*m)+1];
                double x3r=f[2*(i+j+3*m)],x3i=f[2*(i+j+3*m)+1];
                double w1r=W[2*(j*step)],w1i=-W[2*(j*step)+1];
                double w2r=W[2*(2*j*step)],w2i=-W[2*(2*j*step)+1];
                double w3r=W[2*(3*j*step)],w3i=-W[2*(3*j*step)+1];
                double b1r=x1r*w1r-x1i*w1i,b1i=x1r*w1i+x1i*w1r;
                double b2r=x2r*w2r-x2i*w2i,b2i=x2r*w2i+x2i*w2r;
                double b3r=x3r*w3r-x3i*w3i,b3i=x3r*w3i+x3i*w3r;
                double t0r=x0r+b2r,t0i=x0i+b2i;
                double t1r=x0r-b2r,t1i=x0i-b2i;
                double t2r=b1r+b3r,t2i=b1i+b3i;
                double t3r=b1r-b3r,t3i=b1i-b3i;
                double i3r=-t3i,i3i=t3r;
                f[2*(i+j)]=t0r+t2r; f[2*(i+j)+1]=t0i+t2i;
                f[2*(i+j+m)]=t1r-i3r; f[2*(i+j+m)+1]=t1i-i3i;
                f[2*(i+j+2*m)]=t0r-t2r; f[2*(i+j+2*m)+1]=t0i-t2i;
                f[2*(i+j+3*m)]=t1r+i3r; f[2*(i+j+3*m)+1]=t1i+i3i;
            }
        }
    }
    __m256d invn = _mm256_set1_pd(1.0/N);
    for(int i=0;i<N;i+=2){
        __m256d x = _mm256_load_pd(&f[2*i]);
        _mm256_store_pd(&f[2*i], _mm256_mul_pd(x, invn));
    }
}

struct DuckInfo {
  uint64_t abi_version; const char *stdin_ptr; uint64_t stdin_size;
  char *stdout_ptr; uint64_t stdout_limit; uint64_t stdout_size;
  char *stderr_ptr; uint64_t stderr_limit; uint64_t stderr_size;
  const char *IB_ptr; uint64_t IB_limit;
  char *OB_ptr; uint64_t OB_limit;
  uint64_t tsc_frequency;
} __attribute__((packed));

static char tab2[100][3];
static char tab3[1000][4];
static void build_tabs(void){
    for(int i=0;i<1000;i++){ int v=i; tab3[i][2]='0'+v%10; v/=10; tab3[i][1]='0'+v%10; v/=10; tab3[i][0]='0'+v%10; }
    for(int i=0;i<100;i++){ int v=i; tab2[i][1]='0'+v%10; v/=10; tab2[i][0]='0'+v%10; }
}

#ifdef LOCAL_TEST
extern uintptr_t jd_getauxval(uintptr_t);
int jd_main(){
    DuckInfo* di=(DuckInfo*)jd_getauxval(0x6b637564ull);
#else
int main(){
    DuckInfo* di=(DuckInfo*)getauxval(0x6b637564ull);
#endif
    build_tabs();
    for(int k=0;k<NW;k++){
        int c = k; if(c>2047) c = 4096-k; if(c>2047) c=2047;
        W[2*k] = CTAB[c];
        int s = k-1024; if(s<0) s=-s;
        W[2*k+1] = CTAB[s];
    }

    const char* ibuf = di->stdin_ptr;
    int ilen = (int)di->stdin_size;
    int pa=0;
    while(pa<ilen && (ibuf[pa]==' '||ibuf[pa]=='\n'||ibuf[pa]=='\r'||ibuf[pa]=='\t')) pa++;
    int a_start=pa; while(pa<ilen && ibuf[pa]!=' '&&ibuf[pa]!='\n'&&ibuf[pa]!='\r'&&ibuf[pa]!='\t') pa++;
    int a_end=pa; while(pa<ilen && (ibuf[pa]==' '||ibuf[pa]=='\n'||ibuf[pa]=='\r'||ibuf[pa]=='\t')) pa++;
    int b_start=pa; while(pa<ilen && ibuf[pa]!=' '&&ibuf[pa]!='\n'&&ibuf[pa]!='\r'&&ibuf[pa]!='\t') pa++;
    int b_end=pa;

    int sa=a_start; while(sa<a_end-1 && ibuf[sa]=='0') sa++;
    int sb=b_start; while(sb<b_end-1 && ibuf[sb]=='0') sb++;

    int na=0, nb=0;
    { int pos=a_end; while(pos>=sa+5){ pos-=5; u32 v=(u32)(ibuf[pos]-'0')*10000+(u32)(ibuf[pos+1]-'0')*1000+(u32)(ibuf[pos+2]-'0')*100+(u32)(ibuf[pos+3]-'0')*10+(u32)(ibuf[pos+4]-'0'); f[2*na]=v; na++; } if(pos>sa){ u32 v=0; for(int i=sa;i<pos;i++) v=v*10+(u32)(ibuf[i]-'0'); f[2*na]=v; na++; } }
    { int pos=b_end; while(pos>=sb+5){ pos-=5; u32 v=(u32)(ibuf[pos]-'0')*10000+(u32)(ibuf[pos+1]-'0')*1000+(u32)(ibuf[pos+2]-'0')*100+(u32)(ibuf[pos+3]-'0')*10+(u32)(ibuf[pos+4]-'0'); f[2*nb+1]=v; nb++; } if(pos>sb){ u32 v=0; for(int i=sb;i<pos;i++) v=v*10+(u32)(ibuf[i]-'0'); f[2*nb+1]=v; nb++; } }
    for(int i=na;i<N;i++) f[2*i]=0.0;
    for(int i=nb;i<N;i++) f[2*i+1]=0.0;

    fft_fwd_r4(f);

    for(int k=0;k<N;k++){
        int kk = PARTNER[k];
        if(kk < k) continue;
        if(kk == k){
            double pr = f[2*k]*f[2*k+1];
            f[2*k] = pr; f[2*k+1] = 0.0;
        } else {
            double Xr=f[2*k], Xi=f[2*k+1];
            double Zr=f[2*kk], Zi=f[2*kk+1];
            double Sx=Xr+Zr, Sy=Xi-Zi;
            double Dx=Xr-Zr, Dy=Xi+Zi;
            double Pre=0.25*(Sx*Dy+Sy*Dx);
            double Pim=0.25*(Sy*Dy-Sx*Dx);
            f[2*k]=Pre; f[2*k+1]=Pim;
            f[2*kk]=Pre; f[2*kk+1]=-Pim;
        }
    }

    fft_inv_r4(f);

    int outlen = na + nb - 1;
    u64 carry = 0;
    static u32 outlimbs[4002];
    int nout = 0;
    for(int i=0;i<outlen;i++){
        u64 c = (u64)(int64_t)(f[2*i] + 0.5);
        c += carry;
        outlimbs[nout++] = (u32)(c % 100000ULL);
        carry = c / 100000ULL;
    }
    while(carry){ outlimbs[nout++] = (u32)(carry % 100000ULL); carry /= 100000ULL; }
    int hi = nout-1;
    while(hi>0 && outlimbs[hi]==0) hi--;

    char* out = di->stdout_ptr; char* o = out;
    {
        u32 v = outlimbs[hi];
        char tmp[6]; int t=0;
        do { tmp[t++]='0'+v%10; v/=10; } while(v);
        while(t>0) *o++ = tmp[--t];
    }
    for(int i=hi-1;i>=0;i--){
        u32 v = outlimbs[i];
        u32 g1 = v / 1000;
        u32 g0 = v % 1000;
        *o++ = tab2[g1][0]; *o++ = tab2[g1][1];
        const char* p = tab3[g0];
        *o++=p[0]; *o++=p[1]; *o++=p[2];
    }
    *o++='\n';
    di->stdout_size = (u64)(o-out);

#ifdef LOCAL_TEST
    return 0;
#else
    asm volatile("mov $60, %%eax; xor %%edi, %%edi; syscall" ::: "rax","rdi","rcx","r11","memory");
    __builtin_unreachable();
#endif
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #1119.73 us160 KBAcceptedScore: 100


Judge Duck Online | 评测鸭在线
Server Time: 2026-08-18 17:27:55 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠