// 1004a 高精度乘法2 - double FFT AVX2, base 1e5, size 4096
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <immintrin.h>
#pragma GCC target("avx2,fma")
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,
};
typedef uint32_t u32;
typedef uint64_t u64;
#define N 4096
static double fa[2*N] __attribute__((aligned(32)));
static double fb[2*N] __attribute__((aligned(32)));
static double W[2*(N/2)] __attribute__((aligned(32))); // W[2k]=cos, W[2k+1]=sin
// complex multiply of two 2-complex vectors: a=[a0r,a0i,a1r,a1i], b=[b0r,b0i,b1r,b1i]
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 void fft_fwd(double* f){
for(int len=N; len>1; len>>=1){
int half=len>>1, step=N/len;
for(int i=0;i<N;i+=len){
int j=0;
if(step==1){
for(; j+1<half; j+=2){
__m256d u = _mm256_load_pd(&f[2*(i+j)]);
__m256d v = _mm256_load_pd(&f[2*(i+j+half)]);
__m256d w = _mm256_load_pd(&W[2*j]);
__m256d s = _mm256_add_pd(u, v);
__m256d d = cmul(_mm256_sub_pd(u, v), w);
_mm256_store_pd(&f[2*(i+j)], s);
_mm256_store_pd(&f[2*(i+j+half)], d);
}
} else {
for(; j+1<half; j+=2){
__m256d u = _mm256_load_pd(&f[2*(i+j)]);
__m256d v = _mm256_load_pd(&f[2*(i+j+half)]);
__m128d w0 = _mm_load_pd(&W[2*(j*step)]);
__m128d w1 = _mm_load_pd(&W[2*((j+1)*step)]);
__m256d w = _mm256_insertf128_pd(_mm256_castpd128_pd256(w0), w1, 1);
__m256d s = _mm256_add_pd(u, v);
__m256d d = cmul(_mm256_sub_pd(u, v), w);
_mm256_store_pd(&f[2*(i+j)], s);
_mm256_store_pd(&f[2*(i+j+half)], d);
}
}
for(; j<half; j++){
double wr = W[2*(j*step)], wi = W[2*(j*step)+1];
double ur=f[2*(i+j)], ui=f[2*(i+j)+1];
double vr=f[2*(i+j+half)], vi=f[2*(i+j+half)+1];
double dr=ur-vr, di=ui-vi;
f[2*(i+j)]=ur+vr; f[2*(i+j)+1]=ui+vi;
f[2*(i+j+half)]=dr*wr-di*wi;
f[2*(i+j+half)+1]=dr*wi+di*wr;
}
}
}
}
static void fft_inv(double* f){
const __m256d signmask = _mm256_setr_pd(1.0, -1.0, 1.0, -1.0);
for(int len=2; len<=N; len<<=1){
int half=len>>1, step=N/len;
for(int i=0;i<N;i+=len){
int j=0;
if(step==1){
for(; j+1<half; j+=2){
__m256d u = _mm256_load_pd(&f[2*(i+j)]);
__m256d v = _mm256_load_pd(&f[2*(i+j+half)]);
__m256d w = _mm256_load_pd(&W[2*j]);
w = _mm256_mul_pd(w, signmask);
__m256d vw = cmul(v, w);
_mm256_store_pd(&f[2*(i+j)], _mm256_add_pd(u, vw));
_mm256_store_pd(&f[2*(i+j+half)], _mm256_sub_pd(u, vw));
}
} else {
for(; j+1<half; j+=2){
__m256d u = _mm256_load_pd(&f[2*(i+j)]);
__m256d v = _mm256_load_pd(&f[2*(i+j+half)]);
__m128d w0 = _mm_load_pd(&W[2*(j*step)]);
__m128d w1 = _mm_load_pd(&W[2*((j+1)*step)]);
__m256d w = _mm256_insertf128_pd(_mm256_castpd128_pd256(w0), w1, 1);
w = _mm256_mul_pd(w, signmask);
__m256d vw = cmul(v, w);
_mm256_store_pd(&f[2*(i+j)], _mm256_add_pd(u, vw));
_mm256_store_pd(&f[2*(i+j+half)], _mm256_sub_pd(u, vw));
}
}
for(; j<half; j++){
double wr = W[2*(j*step)], wi = -W[2*(j*step)+1];
double ur=f[2*(i+j)], ui=f[2*(i+j)+1];
double vr=f[2*(i+j+half)]*wr-f[2*(i+j+half)+1]*wi;
double vi=f[2*(i+j+half)]*wi+f[2*(i+j+half)+1]*wr;
f[2*(i+j)]=ur+vr; f[2*(i+j)+1]=ui+vi;
f[2*(i+j+half)]=ur-vr; f[2*(i+j+half)+1]=ui-vi;
}
}
}
__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));
}
}
static char ibuf[30000];
static int ilen;
static char obuf[21000];
static int olen;
static char tab3[1000][4];
static void build_tab3(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; }
}
int main(){
build_tab3();
{
for(int k=0;k<N/2;k++){
W[2*k] = CTAB[k];
int idx = 1024 - k; if(idx<0) idx = -idx;
W[2*k+1] = CTAB[idx];
}
}
ilen = fread(ibuf, 1, sizeof(ibuf), stdin);
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){ int st=pos-5; if(st<sa)st=sa; u32 v=0; for(int i=st;i<pos;i++) v=v*10+(ibuf[i]-'0'); fa[2*na]=v; fa[2*na+1]=0.0; na++; pos=st; } }
{ int pos=b_end; while(pos>sb){ int st=pos-5; if(st<sb)st=sb; u32 v=0; for(int i=st;i<pos;i++) v=v*10+(ibuf[i]-'0'); fb[2*nb]=v; fb[2*nb+1]=0.0; nb++; pos=st; } }
fft_fwd(fa);
fft_fwd(fb);
for(int i=0;i<N;i++){
double ar=fa[2*i], ai=fa[2*i+1], br=fb[2*i], bi=fb[2*i+1];
fa[2*i] = ar*br - ai*bi;
fa[2*i+1] = ar*bi + ai*br;
}
fft_inv(fa);
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)llround(fa[2*i]);
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--;
{
u32 v = outlimbs[hi];
char tmp[6]; int t=0;
do { tmp[t++]='0'+v%10; v/=10; } while(v);
while(t>0) obuf[olen++] = tmp[--t];
}
for(int i=hi-1;i>=0;i--){
u32 v = outlimbs[i];
u32 g1 = v / 1000;
u32 g0 = v % 1000;
obuf[olen++] = '0' + g1/10;
obuf[olen++] = '0' + g1%10;
const char* p = tab3[g0];
obuf[olen++]=p[0]; obuf[olen++]=p[1]; obuf[olen++]=p[2];
}
obuf[olen++] = '\n';
fwrite(obuf, 1, olen, stdout);
return 0;
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Testcase #1 | 190.96 us | 256 KB | Accepted | Score: 100 | 显示更多 |