1use std::{
12 num::Wrapping,
13 ops::{BitXor, Mul},
14};
15
16use super::packed::{impl_broadcast, PackedPrimitiveType};
17use crate::{
18 arch::{PairwiseStrategy, ReuseMultiplyStrategy},
19 arithmetic_traits::{impl_square_with, impl_transformation_with_strategy, InvertOrZero},
20 packed::PackedField,
21 BinaryField128bPolyval,
22};
23
24pub type PackedBinaryPolyval1x128b = PackedPrimitiveType<u128, BinaryField128bPolyval>;
25
26impl_broadcast!(u128, BinaryField128bPolyval);
28
29impl Mul for PackedBinaryPolyval1x128b {
31 type Output = Self;
32
33 fn mul(self, rhs: Self) -> Self::Output {
34 crate::tracing::trace_multiplication!(PackedBinaryPolyval1x128b);
35
36 montgomery_multiply(self.0, rhs.0).into()
37 }
38}
39
40impl_square_with!(PackedBinaryPolyval1x128b @ ReuseMultiplyStrategy);
42
43impl InvertOrZero for PackedBinaryPolyval1x128b {
45 fn invert_or_zero(self) -> Self {
46 let mut self_pow_2_pow_k1s = self.get(0);
53
54 let mut res = pow_2_2_n(self_pow_2_pow_k1s, 0);
56
57 let mut selt_pow_2_pow_k1s_to_k0s = res;
59
60 for k in 1..7 {
65 self_pow_2_pow_k1s *= selt_pow_2_pow_k1s_to_k0s;
67
68 selt_pow_2_pow_k1s_to_k0s = pow_2_2_n(self_pow_2_pow_k1s, k);
70
71 res *= selt_pow_2_pow_k1s_to_k0s;
73 }
74
75 Self::set_single(res)
76 }
77}
78
79impl_transformation_with_strategy!(PackedBinaryPolyval1x128b, PairwiseStrategy);
81
82fn montgomery_multiply(a: u128, b: u128) -> u128 {
90 let h0 = a as u64;
91 let h1 = (a >> 64) as u64;
92 let h0r = rev64(h0);
93 let h1r = rev64(h1);
94 let h2 = h0 ^ h1;
95 let h2r = h0r ^ h1r;
96
97 let y0 = b as u64;
98 let y1 = (b >> 64) as u64;
99 let y0r = rev64(y0);
100 let y1r = rev64(y1);
101 let y2 = y0 ^ y1;
102 let y2r = y0r ^ y1r;
103 let z0 = bmul64(y0, h0);
104 let z1 = bmul64(y1, h1);
105
106 let mut z2 = bmul64(y2, h2);
107 let mut z0h = bmul64(y0r, h0r);
108 let mut z1h = bmul64(y1r, h1r);
109 let mut z2h = bmul64(y2r, h2r);
110
111 z2 ^= z0 ^ z1;
112 z2h ^= z0h ^ z1h;
113 z0h = rev64(z0h) >> 1;
114 z1h = rev64(z1h) >> 1;
115 z2h = rev64(z2h) >> 1;
116
117 let v0 = z0;
118 let mut v1 = z0h ^ z2;
119 let mut v2 = z1 ^ z2h;
120 let mut v3 = z1h;
121
122 v2 ^= v0 ^ (v0 >> 1) ^ (v0 >> 2) ^ (v0 >> 7);
123 v1 ^= (v0 << 63) ^ (v0 << 62) ^ (v0 << 57);
124 v3 ^= v1 ^ (v1 >> 1) ^ (v1 >> 2) ^ (v1 >> 7);
125 v2 ^= (v1 << 63) ^ (v1 << 62) ^ (v1 << 57);
126
127 v2 as u128 | (v3 as u128) << 64
128}
129
130fn bmul64(x: u64, y: u64) -> u64 {
136 let x0 = Wrapping(x & 0x1111_1111_1111_1111);
137 let x1 = Wrapping(x & 0x2222_2222_2222_2222);
138 let x2 = Wrapping(x & 0x4444_4444_4444_4444);
139 let x3 = Wrapping(x & 0x8888_8888_8888_8888);
140 let y0 = Wrapping(y & 0x1111_1111_1111_1111);
141 let y1 = Wrapping(y & 0x2222_2222_2222_2222);
142 let y2 = Wrapping(y & 0x4444_4444_4444_4444);
143 let y3 = Wrapping(y & 0x8888_8888_8888_8888);
144
145 let mut z0 = ((x0 * y0) ^ (x1 * y3) ^ (x2 * y2) ^ (x3 * y1)).0;
146 let mut z1 = ((x0 * y1) ^ (x1 * y0) ^ (x2 * y3) ^ (x3 * y2)).0;
147 let mut z2 = ((x0 * y2) ^ (x1 * y1) ^ (x2 * y0) ^ (x3 * y3)).0;
148 let mut z3 = ((x0 * y3) ^ (x1 * y2) ^ (x2 * y1) ^ (x3 * y0)).0;
149
150 z0 &= 0x1111_1111_1111_1111;
151 z1 &= 0x2222_2222_2222_2222;
152 z2 &= 0x4444_4444_4444_4444;
153 z3 &= 0x8888_8888_8888_8888;
154
155 z0 | z1 | z2 | z3
156}
157
158const fn rev64(mut x: u64) -> u64 {
160 x = ((x & 0x5555_5555_5555_5555) << 1) | ((x >> 1) & 0x5555_5555_5555_5555);
161 x = ((x & 0x3333_3333_3333_3333) << 2) | ((x >> 2) & 0x3333_3333_3333_3333);
162 x = ((x & 0x0f0f_0f0f_0f0f_0f0f) << 4) | ((x >> 4) & 0x0f0f_0f0f_0f0f_0f0f);
163 x = ((x & 0x00ff_00ff_00ff_00ff) << 8) | ((x >> 8) & 0x00ff_00ff_00ff_00ff);
164 x = ((x & 0xffff_0000_ffff) << 16) | ((x >> 16) & 0xffff_0000_ffff);
165 x.rotate_right(32)
166}
167
168fn pow_2_2_n(value: BinaryField128bPolyval, n: usize) -> BinaryField128bPolyval {
170 match n {
171 0 => value.square(),
173 1..=6 => {
174 let bases_form = BinaryField128bPolyval::from_montgomery(value).0;
178 let result = (0..32)
179 .map(|nibble_index| {
180 let nibble_value = (bases_form >> (nibble_index * 4)) & 0x0F;
181
182 POLYVAL_NIBBLE_POW_2_N_TABLE[n - 1][nibble_index][nibble_value as usize]
183 })
184 .fold(0, BitXor::bitxor);
185
186 BinaryField128bPolyval(result)
187 }
188 _ => value,
189 }
190}
191
192static POLYVAL_NIBBLE_POW_2_N_TABLE: [[[u128; 16]; 32]; 6] = [
194 [
195 [
196 0,
197 257870231182273679343338569694386847745,
198 156848903502620073002649233113080659995,
199 239261039241284857122685270850462023706,
200 138239711561631250781995934269155836340,
201 225968759283435698393647200247658578357,
202 39876839873547476187114211808410337711,
203 292430159072681492038837553261675807150,
204 98362871688083774594881722460745505605,
205 180775007426748558714917760198126869316,
206 79753679747094952374228423616820681566,
207 337623910929368631717566993311207529311,
208 45193751856687139678729440049531722481,
209 297747071055821155530452781502797191920,
210 111655151645932933323919793063548951274,
211 199384199367737380935571059042051693291,
212 ],
213 [
214 0,
215 58486031814536298407767510652335273046,
216 178116551435178726969110146077567960419,
217 225968759283435698393647200247660343605,
218 247236407215994352360108113212172686909,
219 199384199367737380935571059042080383595,
220 79753679747094952374228423616848925534,
221 21267647932558653966460912964513736456,
222 337623910929368631717566993311665054687,
223 279137879114832333309799482659329857417,
224 159507359494189904748456847234100504252,
225 111655151645932933323919793064008192746,
226 90387503713374279357458880099515446754,
227 138239711561631250781995934269607805364,
228 257870231182273679343338569694838419585,
229 316356262996809977751106080347173668055,
230 ],
231 [
232 0,
233 66461399789245793645190353021337746937,
234 217993391308726203156224358003104800658,
235 199384199367737380935571059157767676523,
236 292430159072681492038837555135728449838,
237 316356262996809977751106082227421430999,
238 159507359494189904748456849085097191100,
239 98362871688083774594881724310383762245,
240 111655151645932933323919823048391234282,
241 135581255570061419036188350131082997523,
242 319014718988379809496913724558473448824,
243 257870231182273679343338599791687528577,
244 180775007426748558714917789821420334020,
245 247236407215994352360108142832414643773,
246 58486031814536298407767540246547379286,
247 39876839873547476187114241408332433839,
248 ],
249 [
250 0,
251 18609191940988822220653778601401462439,
252 297747071055821155530460457622423399024,
253 316356262996809977751113663909850760407,
254 21267647932558653966583730878504937224,
255 39876839873547476187237465325724731823,
256 319014718988379809497035031477342719352,
257 337623910929368631717688211204452213727,
258 257870231182273679345303656318697631873,
259 271162511140122838074341572620978445862,
260 45193751856687139680701496326562028273,
261 58486031814536298409739967349754278998,
262 279137879114832333311740874819832698761,
263 292430159072681492040778747312613488942,
264 66461399789245793647129839305932291577,
265 79753679747094952376168284111340770142,
266 ],
267 [
268 0,
269 156848903502620073034090619102053206043,
270 138239711561631251285058110092716573108,
271 39876839873547476684110605014256814511,
272 98362871688083782643876535637717293893,
273 79753679747094960451770934332981449566,
274 45193751856687147630671731343075351281,
275 111655151645932941268055644747646079722,
276 58486031814536427191684521483883885654,
277 119630519620642557335147407205583993933,
278 90387503713374408598139051557635831266,
279 66461399789245922912112475073311817209,
280 135581255570061546267264980845293317907,
281 21267647932558781184554235216427656968,
282 18609191940988949326826925789478989479,
283 159507359494190031879154216102625420988,
284 ],
285 [
286 0,
287 178116551435180787511782319382345762147,
288 247236407216027321042862886088617514557,
289 79753679747127523529853561971552490334,
290 337623910929896130641643359334782297055,
291 159507359494719274574439141546192152252,
292 90387503713895417847461093774772483554,
293 257870231182794306230514538684248387713,
294 66461399797685776430412209391213624825,
295 239261039249724177192208668063496501402,
296 180775007435218475930634469198939712452,
297 18609191949460459228844576774070808231,
298 271162511148461053912412059108535131686,
299 98362871696421139558848825741078436677,
300 156848903510950103197464736950865299483,
301 319014718996711446879679892207416659320,
302 ],
303 [
304 0,
305 217993391443765927719774059921118846866,
306 292430161233317085055632785823953189166,
307 159507361628773159797524062937919923900,
308 111655186216102421592643514059987063530,
309 319014753681160725072553761796716776824,
310 180775041580080639499993211466584058820,
311 58486065934339976372071230218218615894,
312 18609745063700634520232834786934730407,
313 225969312362715774679006953675190628661,
314 279138434199326982520040559929817618313,
315 156849458699823041826239663160299030555,
316 119631066073955721122549855720546155597,
317 337624457326918910265647573210635789279,
318 178117097352037574397969659131701445987,
319 45194297878874656644264537468805094129,
320 ],
321 [
322 0,
323 297755921019210152323725356590955686512,
324 21409247346782602658822114375021537032,
325 319154611036582705165962090067959500152,
326 260135821809856858421117792262963228801,
327 47467377946770304826181941841305836273,
328 281376151886078664014573812269701191561,
329 68697475243084862253755822752094633465,
330 145246145695693966822579740040210352155,
331 187778595218559846847834631612436701803,
332 166642361028252397903813120575859699475,
333 209185043345803886299918492339579602275,
334 232538107716108840466152718694752286874,
335 104928565635870552399882256065482429162,
336 253770598570151300893271873695214985106,
337 126171613794486132665603349599199770082,
338 ],
339 [
340 0,
341 40324634372617999512535311081733652917,
342 52358463841815512885467028422704765777,
343 76045779856145996093613793637333244644,
344 64124727922227168137456745680115709203,
345 61704055998917712829768707175603057830,
346 31061105458190978867624800427264552514,
347 12005143459644333776742043456166768631,
348 180606641436428195032486640543552196914,
349 204086778980865546091078152448708956295,
350 213654202435862367246283605726488382051,
351 253770598570151300893271873695214980054,
352 244424368131921646030273465382967370785,
353 225575893919449045725618808695674267028,
354 192082295354309340427872695298668298096,
355 189869511787081219304727767365223349957,
356 ],
357 [
358 0,
359 223274903438309879474749285774463931181,
360 302497585382065024252623204101775241950,
361 90947071906185862033652462501769781747,
362 54740581287343245588265848619163397608,
363 189869511787081219304727767365202624197,
364 269481778258828833908243502258249146166,
365 145246145695693966822579740040232373275,
366 283013614477419450097155629021580680835,
367 152961782771027244584625349323787849134,
368 73733757992937112300154533418073582685,
369 192082295354309340427872695298337210224,
370 337316744744362882549512925893756056427,
371 119952303745193634799416642211706888262,
372 40324634372617999512535311082085990837,
373 246816223995670851319074828702731063960,
374 ],
375 [
376 0,
377 290638981076399398737153156171552385082,
378 82996303705419440496969439621574198186,
379 304183119424583984374455174493163973520,
380 131635663080286762338084679692877052578,
381 246816223995670851319074827344447656600,
382 124244421832763915470499200810354129160,
383 180606641436428195032486641986728317234,
384 332980462907510422955676256672053176869,
385 42736422376641146334296913563358216735,
386 261781123623376989670036452293486651791,
387 40324634372617999512535289383911211445,
388 204086778980865546091078138069443645575,
389 89300509177751058283764820174153611453,
390 223274903438309879474749308865281856301,
391 166642361028252397903813141470792710935,
392 ],
393 [
394 0,
395 162307414899983685186625870503431807577,
396 225575893919449045725622132514774197652,
397 281376151886078664014570131177782413261,
398 9664890125632547786444600997214050638,
399 166642361028252397903724125009407965975,
400 232538107716108840466093821224051834074,
401 283013614477419450097250209011801972355,
402 154638242010120764583113615955424810208,
403 19011444964036499024245696302931719865,
404 294935031971748449199194204610392732020,
405 223274903438309879473327297282939622189,
406 152961782771027244583682989792384503214,
407 12005143459644333775954806257085149175,
408 290638981076399398738666436015093049402,
409 213654202435862367247652976056327424611,
410 ],
411 [
412 0,
413 102869127681642316069426059746662239748,
414 119952303745193635017246450744760262726,
415 31061105458190978626380760438209883714,
416 316187897006489617553951897218068644967,
417 213654202435862361413870162745681726051,
418 244424368131921642170368825558092669985,
419 332980462907510429154070495814614231589,
420 273785567278136738409524938479857845880,
421 170945689506564640534745557712013691004,
422 201735489174301370194709518052473742910,
423 290638981076399305545715375634438285370,
424 42736422376641084575822663513680003615,
425 145246145695693915230202661027219704859,
426 162307414899983784360933696784408683097,
427 73733757992937202043208469749566794845,
428 ],
429 [
430 0,
431 182867065761423487922176319312397363083,
432 89300509177765333978096842360102484157,
433 269481778258813023738838779571474669366,
434 253770598570379712002584036473815141334,
435 73733757992554879252755343273065966685,
436 337316744744109919839037362905364427627,
437 154638242010526982547970062836706940128,
438 234811405257087509824187864094210571631,
439 76045779859763423251743846764612737764,
440 323717298595392245894033745548513560018,
441 162307414893876291120240590193793081945,
442 19011444959989095655794440591556687545,
443 180606641433047037008236445188491006258,
444 102869127688141803507129209847176318468,
445 261781123629258390452807873032638769551,
446 ],
447 [
448 0,
449 112239319671160833684766866218664318719,
450 12005144395216237519360784602406678519,
451 124244420796628653362593200358242564360,
452 192082310323459800309772553638506856304,
453 261781098573351995316711109074364475791,
454 204086762402701352364582130835658608775,
455 273785593900037283241627750185524283000,
456 21409486853189960769219847812438554380,
457 90947308977892097244814211890630894067,
458 33330862349984906370076874753474468091,
459 102868727427464781443695687263139220996,
460 170945424255937485713251257037895567484,
461 283013392889847172836352839731389849219,
462 182867491711832205235821306603060357003,
463 294935417415230148907023765683582251380,
464 ],
465 [
466 0,
467 260139653912374588187481527261635506369,
468 145307459335977643084399500018966793243,
469 232470203555571336738448191640541101274,
470 41305652617156819701651470741836710325,
471 293293353533718509669500996219466396020,
472 151875316202427184941352916456212778414,
473 236556098131193626514055806649833667951,
474 68054755754436635911325582984353684305,
475 319719850764414783070863122895020977040,
476 125466263022525215414534880388198373194,
477 209805127813910890972637521559054215051,
478 58662314758545041801254867759269731044,
479 318458499770747858984077334725712390693,
480 86985285825462065806501664697420076799,
481 173826793359576787596671728189600736830,
482 ],
483 [
484 0,
485 243487086751779679414388037411359798546,
486 59641392193207661429821422612682330415,
487 207294249151998045227027880729451881533,
488 185968493527641208338742280960878121715,
489 80780833654632676493405233969976616929,
490 222265212244684571512383255338587931612,
491 21409486853189960769219847812438554318,
492 133606441454109197151537000494673243965,
493 281371907876045070031592279328812997167,
494 96188142267698538281057389267315752466,
495 339538605024596081658225006150685543168,
496 318243998182898077804458086574487518670,
497 117337973307096686085867818881164609756,
498 260139653912374588187481527261635505377,
499 154984769363628480033687776703121644019,
500 ],
501 [
502 0,
503 173104085495641494272765172820422620117,
504 331861223660728197458660616572609969501,
505 164245488650173804161199899840687754888,
506 96547379103211105809838574742248084953,
507 269298377001131245103415183887258691084,
508 235317425989932295352345688946383841412,
509 68054755754436635911325582984349621073,
510 8170502524014943880616234191891029398,
511 175620166556178957773292631547706322499,
512 339699236604341125163875060199030153419,
513 167093694207430477084215033041810133790,
514 104384915447258411660446379130072500303,
515 272146126166954911417919245969371462554,
516 243487086751779679414388037411294786834,
517 70570015419396690121897594426978682567,
518 ],
519 [
520 0,
521 130728040384239102089859747070256470368,
522 318458499770747858984077334710123861509,
523 188489102639662730168476519982321651557,
524 310115211506268601291531938352741310552,
525 184883623056899455191625003407661381944,
526 9111915769123978187212749363006994013,
527 133606441454109197151537000228385271613,
528 176622599274600478210805596634620495240,
529 306683186100672102417623988394675920104,
530 142833073837939464255736700848812299149,
531 12201415485204317529125595733311769325,
532 145790652305983650995403989808111904208,
533 21221162814037255103639049673989864624,
534 173104085495641494272765168559815062485,
535 298265902474564278892029820355230509749,
536 ],
537 [
538 0,
539 196748612731044054769159180919406352525,
540 117337973307096686085866797271316007132,
541 271505835823069613502703392622322765905,
542 269041698013798771160262213401839177159,
543 125466263022525215414652642731228714314,
544 194243570328606460837568639761928488219,
545 8170502524014943880598782743334968726,
546 319641636857602551598581847708953795707,
547 133571084028771837491665725637482022134,
548 223636238017046345197533208803437008039,
549 80058125790697383168634306728366509098,
550 77257294868095183180418138751670178236,
551 231427510187206668687155604728503601457,
552 130728040384239102089580523893359499616,
553 327473813534273900167770167928119722477,
554 ],
555 [
556 0,
557 283851653039256543444874706284488542137,
558 272146126166954911350967022931349896090,
559 33514836843226518073893447023327296547,
560 209805127813910889901401952947483949483,
561 96188142267698545998730302103751392786,
562 108225974848881378107269278962965791281,
563 176622599274600477067107464064628295048,
564 262439270835290086302368410827101018812,
565 22452180221554715630024777039701499141,
566 13056537122093313886114328458186711334,
567 292893855869998781936649176721516013215,
568 117932810699214180011086692227114345239,
569 187685275375079007734312069487893013678,
570 196748612731044036469989059799531149453,
571 87145917405207204362300592511532244788,
572 ],
573 [
574 0,
575 1326322675877054207671876868288129995,
576 21221162814032867322750029892610079920,
577 19982490672809599667580555898011195259,
578 339538605024525877164000478281761278720,
579 339699236604846910575890708845154164939,
580 319719850764953594681288894368179124144,
581 319641636857527598197765740700122012795,
582 49244297463504749363589058372784926729,
583 50445345655067177163600767152822754242,
584 57131314731780947445447975628192484537,
585 55850445174130523317677948490309674866,
586 290419987540012896259802681073215175433,
587 290455344953010865245610501621651787970,
588 283851653038057289031816994143180015545,
589 283731241397369753340131362581393992818,
590 ],
591 [
592 0,
593 30248801818673942262254909604762419347,
594 231427509899649060344355212222933240113,
595 245714501225811359868050358234435488162,
596 167093689606508743585556615221215269662,
597 142833106985092226113286373232031273869,
598 281371943187602770894951544221141604911,
599 262439265923144010417979480027376097980,
600 280888641291291326142053135034824077796,
601 262608733185992475616907563189078733175,
602 166540286480319716403913517625631127765,
603 142953242187002798776369953077090990150,
604 232470768540494550552196429917798900474,
605 244772842084345880838322449733520630377,
606 1326244081539840057448984072689396683,
607 29569358869729520508781416014196943704,
608 ],
609 [
610 0,
611 214104114233232107522591426454475710026,
612 187666429999658653967788824428691973294,
613 58806950898887778120803866737266326244,
614 11899889478477749451055305228296276717,
615 225808569820447441572862515442164257959,
616 177934344801662738886076615195343433283,
617 48922375058275590050620167600373280777,
618 190398231655643991216884883652740427472,
619 61392060274382991746304527844517589146,
620 2753880575327554359060271353212258942,
621 216667147227186363098775373813287113780,
622 180518157282062581132188880203123713085,
623 51655476144618737813123703115302435447,
624 14464219368728066271522200763933327507,
625 228561150964138972890290065149810712281,
626 ],
627 [
628 0,
629 55608715974243145436592252813071543565,
630 291586857484678184178762867882989637843,
631 322380937729585173709318382881054408158,
632 44993206406483372646572544593356459322,
633 10699888277145884232395205700651311159,
634 332997378974118160708274497279219719657,
635 280888641291291326142053135034824077540,
636 121738704400521819538447536367548289955,
637 151884355961198605961324728892337569454,
638 171198212434334147718323291210420978544,
639 224796819872556790851163070086528691837,
640 162578071965707489228197720218096492185,
641 111129364406370152308260350819028120468,
642 214104114233232107522591426454475705930,
643 181809140743308591374516384968442766151,
644 ],
645 [
646 0,
647 328819571542321579418323582459312945719,
648 218022128669174448896133332645379810169,
649 110854570849764363378529497398101580110,
650 292889956839853423877381149412128602014,
651 57451898497976265748168885882003590569,
652 159990346713341944351250187189286966503,
653 190398231655643991216884883652723650256,
654 108378091954404515757386874988550912490,
655 221859156968460057069985120327859848157,
656 326394689847547772655604225227023768211,
657 3889277075494095633632931431216701604,
658 188502802933181192359611199488456740468,
659 163079846227502183395351755145138697283,
660 55608715974243145436592252812803108109,
661 296031056052831007366611339351660418874,
662 ],
663 [
664 0,
665 115049772404444718921353000395354906279,
666 51655476144618737813123703188334701175,
667 149297927446709971925881943378694665424,
668 58193836750218430471578770171316053875,
669 166540286480319716403913516599149672916,
670 17424094667069633553719298518979923204,
671 121738704400521819538447535268036662179,
672 332948789900282744738547145614901802803,
673 229906406971029910390771744442083568020,
674 293301839204825545202224470046260043076,
675 183652323267041711686092999418689356771,
676 278785514673114136859508776303678771264,
677 179704840216729940088834664429003165415,
678 328819571542321579418323564867126901303,
679 215239510733398648797164068945142654096,
680 ],
681 [
682 0,
683 156483734801201170220944865347888444217,
684 111129364406370152308265137061594870676,
685 50692870473342791253382721460157563053,
686 159070131635894903735405193564058237255,
687 2753880575327554358992999864587274878,
688 48109057992942949007338290761603222227,
689 108378091954404515757314817394512984554,
690 152511713761469888539630388520311559284,
691 9331120465419373246448485371737335629,
692 44062089205240869743887997833396398048,
693 112484123058270490384520166356942050521,
694 6768058306545473070627399584733769011,
695 149781229343021416679937794092898442762,
696 115049772404444718920200078890748059303,
697 46795178874392055436748444306546683294,
698 ],
699 [
700 0,
701 47577027770669645407233507820364711748,
702 163079846227502183709022947999680328771,
703 118940139592753236375392522511506551559,
704 216667147227186368117514459490265023540,
705 171198212434334143309619012683465360240,
706 289359446601163912301058589003766509687,
707 332948789900282740016180662745256589107,
708 228674957902926823486557353001320989518,
709 191087912308676476820609386283071767562,
710 285416518730391591573476369657929676557,
711 326253922196147270915998524861325078601,
712 19988456236534349586534539008029165434,
713 59496631551920268743123337520540696638,
714 156483734801201094663081139433565025081,
715 114909004753044221610200143422147146877,
716 ],
717 [
718 0,
719 123052857658952953860790867675419260142,
720 179704840216750496844129579669364362983,
721 291947171853548875512022357237815540233,
722 224796819872885698935881996510822723197,
723 326394689847258843812006682663622597267,
724 61392060274693760961954830752813654170,
725 152511713761160403529809043451586778228,
726 18467353313177653117063337898475972574,
727 108288932909369844277358569386612020016,
728 184540933531310342686678164155455613241,
729 284819959794150201118043459600847052247,
730 219296094814558464344492039444100680099,
731 330198814171320751054523200139037654349,
732 47577027765717885250091986720768214852,
733 169269503323374703188769338152563078058,
734 ],
735 [
736 0,
737 295477653010842449873013406375615561184,
738 149781230690228931687502986404342259210,
739 232470769813405257855837142298481239018,
740 3889298630814335773195073964855910564,
741 293301820269584851193675034987121057092,
742 151884376327769922819576126983254982318,
743 228674937620517219834886929054069703502,
744 62228778093029372371121183437694569024,
745 319815604020693648159608983337235937184,
746 125601730796386679801319500670672950346,
747 170416020083641950553219849551280056746,
748 58807276764028847852826236191944993508,
749 322292104470754755867803447053601576708,
750 123052533140399295434064084519398683886,
751 173930977669130860465523596758224619790,
752 ],
753 [
754 0,
755 227366667924788583399538454161073939459,
756 59584922143623804535566660302495432766,
757 180601578758176432529915460600862532669,
758 185064972734299498030666083997887759331,
759 42821149271118325448111962100810950624,
760 223193900586281679433610406691429303261,
761 17138125317392737244159530838195627998,
762 140417756693200486188778762051312959037,
763 258775067338816120262064368720168393278,
764 92302702217820727854693444727941529091,
765 317009856358500587861444282057098975744,
766 301201539749613823594401138773221195230,
767 97804461719583066445331962874445470173,
768 274210005078283795906552493411130047968,
769 134625046015461435909332315473580055011,
770 ],
771 ],
772 [
773 [
774 0,
775 257870231182273679343338569694386847745,
776 58486031814536298407767510652335273046,
777 316356262996809977751106080346722120791,
778 66461399789245793645190353021337746937,
779 319014718988379809496913694474603216376,
780 39876839873547476187114211815730940335,
781 292430159072681492038837553268996409774,
782 18609191940988822220653778601401462439,
783 271162511140122838072377120054666931878,
784 45193751856687139678729919807008316145,
785 297747071055821155530453261260273785584,
786 79753679747094952374228903379862491998,
787 337623910929368631717567473074249339743,
788 21267647932558653966461392727527302920,
789 279137879114832333309799962421914150665,
790 ],
791 [
792 0,
793 156848903502620073034090619102053206043,
794 178116551435180787511782319382345762147,
795 319014718988381870063488129844545080696,
796 217993391443765927719774059921118846866,
797 279137879249872057862705540258043582345,
798 45193751991728430700926324317028391665,
799 111655151780974224338310237721599120106,
800 297755921019210152323725356590955686512,
801 199393049331126377723381387043775308395,
802 135590105533449718287579139433759878931,
803 21276497895946953204868393804894217992,
804 90396353779422710052466234761227089378,
805 66470249855294224366439658276903075321,
806 257879081248321598435519679670702993537,
807 239269889307332776243963568777832790170,
808 ],
809 [
810 0,
811 40324634372617999512535311081733652917,
812 223274903438309879474749285774463931181,
813 246816223995670851319074828702412280472,
814 290638981076399398737153156171552385082,
815 261781123623376989670036474026239289743,
816 166642361028252397903813120578998041367,
817 131635663080286762338084678886681508514,
818 162307414899983685186625870503431807577,
819 133325052601539264093130647854178247660,
820 294935031971748449200618482287273554292,
821 260135821809856858421117443648807448769,
822 213654202435862367246283811400862616163,
823 253770598570151300893271668012653988822,
824 9664890125632547786391766166038272334,
825 33331263150384816023282367615749773563,
826 ],
827 [
828 0,
829 102869127681642316069426059746662239748,
830 182867065761423487922176319312397363083,
831 261781123623377873034747413069574252943,
832 112239319671160833684766866218664318719,
833 33331263248510835906757487636578998523,
834 294935032029640638896719626287421829492,
835 192082295451776925596132869863896448880,
836 260139653912374588187481527261635506369,
837 189865679674031292403366823621734842053,
838 98570428986446696399028505115490981706,
839 9658459329520401222719256463767918926,
840 201739283196845387220744543831405667902,
841 290635186902836275133420873351210854458,
842 40331022008279586611335617874175771061,
843 110599319959852205556273645461210501041,
844 ],
845 [
846 0,
847 243487086751779679414388037411359798546,
848 173104085495641494272765172820422620117,
849 70570015419396690121897594426641041095,
850 130728040384239102089859747070256470368,
851 283731241391140546783540220492887911538,
852 298265902474564278892029798227559000757,
853 116047924121670883847576107793942749095,
854 196748612731044054769159180919406352525,
855 46738778467731309959299154111950351775,
856 29568950632448627751693503679654177624,
857 214105292069195883179146047816067128906,
858 327473813534273900166320008848106422765,
859 86985285825462065806501456013329446143,
860 154728090376296006090550674563877270072,
861 259585715830819637786385253524281149226,
862 ],
863 [
864 0,
865 283851653039256543444874706284488542137,
866 1326322675877054207671876868288129995,
867 283731241391141367517476793073307774066,
868 30248801818673942262254909604762419347,
869 259585715921782676790617737141709883178,
870 29568950686236247018914134075764812632,
871 260139653777995217056753069419734723809,
872 214104114233232107522591426454475710026,
873 154985622759642956449346189913084582387,
874 215238940290628546093933413016321832321,
875 154721804422937415968900401539802690104,
876 244345733414084848881022773990639804121,
877 130724190842226983569046681532935559520,
878 243478280065313255994174910601673946386,
879 131136020223951924104207211588322357931,
880 ],
881 [
882 0,
883 55608715974243145436592252813071543565,
884 328819571542321579418323582459312945719,
885 296031056052831007366611339351928854330,
886 115049772404444718921353000395354906279,
887 169269503328325178568300370503034303402,
888 215239510733398648797164086537328698512,
889 181067202491066426651106501843099863453,
890 156483734801201170220944865347888444217,
891 122852069442916605800713827285719686708,
892 173931302103485333411259717240448764174,
893 227361149762807107671630229431958676483,
894 46795178874392055437901365811153530270,
895 14464219368728066271521936812675825811,
896 282233562964697166068735031331390347177,
897 336969308772912939832414396395768199844,
898 ],
899 [
900 0,
901 47577027770669645407233507820364711748,
902 123052857658952953860790867675419260142,
903 169269503328326463345910859252159574954,
904 295477653010842449873013406375615561184,
905 336969308688753573602776093801278028452,
906 173931302187684518892250379914245196046,
907 214104114149071457125098480832697536074,
908 227366667924788583399538454161073939459,
909 181804271617815462500158330008933884743,
910 329140437968585407641222931698057253101,
911 282238429396431475253060496218969200553,
912 155892693948020089875793228438065568227,
913 115044903363149651325683325522228518567,
914 55603200421858695338907983958663425293,
915 13457335936772354947921740959623391817,
916 ],
917 [
918 0,
919 106627033877493223645330825769652577237,
920 229496665865546422224087327435004409465,
921 335717965150798440301441765285532439980,
922 179743185806878577550893044931407505210,
923 285861130539686915093102431941642814703,
924 57978251347016227995573074554119819587,
925 164376006932186866720742133803764380310,
926 12317201729003879567771121464704163335,
927 118901859561473702533763199434803985874,
928 220502727794684403544344211801813002366,
929 326766036080535191838011881333910686635,
930 189401758477277314397490031097878362429,
931 295477653010842449873013301956376058600,
932 46325684222810991791615735818031091524,
933 152765774654360448211576181015432244369,
934 ],
935 [
936 0,
937 19847511692389215153302814407197658237,
938 289608876205009190142645635433417738386,
939 285861130539686136050230806871541417199,
940 164844469387150420326107367749926953196,
941 152765774759902518201787223251411643537,
942 220502727743629049909523617636626180222,
943 227366667811836223215061598201321137155,
944 326769221180675405731059249952441781163,
945 333942807705886640156469466520158422998,
946 58765492521418906872103749588962329401,
947 46334426541327198576464062571416538948,
948 183218422701491419022002895011213929287,
949 179741259611891102001182729749894129466,
950 106619631431616173770098647410000782293,
951 126070515513791067950102680323943100328,
952 ],
953 [
954 0,
955 96337373516962719991260254982822927679,
956 107973124129767330307407813645709566203,
957 33579744779549416111900092586465230276,
958 21304247305657099048703894616190711751,
959 117631065091115118727594800160208644856,
960 86720818807770418824111941822550644540,
961 12317208254504983057388812554996779523,
962 104328994654932113244074540108016458561,
963 8000998007649757745084923378125276798,
964 41579073240346794292089899859496696762,
965 115965765776978863501453735227131422341,
966 125580991937839513924058945725621103750,
967 29263213817089001289918854823134359993,
968 20275166932707510738306107824092155005,
969 94672402524328601553673408875235676482,
970 ],
971 [
972 0,
973 170902522708617098831530239681596843332,
974 237829500085731075366227290996859001577,
975 67120401251287490080729939075813195693,
976 265407443283704292901296040915132609542,
977 94672402579199304518019621426295247170,
978 155892680823751130134462376344611008239,
979 326769221086346154051417043298343996331,
980 81411989479627725145513061511657337808,
981 252126254623467563806968254783751181972,
982 191176056588979666802804669198507338041,
983 20278753432336478183517119835457916029,
984 333080605866832902654994250620115830742,
985 162198858728786895843487598540844049042,
986 96331191555124642959604972030396177727,
987 267061053273715286352637404350161549435,
988 ],
989 [
990 0,
991 75742463657029859177377022870289393452,
992 180479599312043162301633133047274283256,
993 254196286162244053707420507622638094292,
994 320683500258605073192442376236159262357,
995 268140969890652115892690051794450577849,
996 157547227320735615272144198168390991469,
997 104329018741531457619718548816992196929,
998 328676831246232495868395250297840442153,
999 276145436402868409578606081615350578181,
1000 149557654276719059796715273405446339537,
1001 96331191555124642959605185619098705149,
1002 8005217120234164781375621727303583164,
1003 83735044037451809056243316013305520784,
1004 172481062083250101037284991115586528580,
1005 246207423161426143134599346192926196328,
1006 ],
1007 [
1008 0,
1009 240475793848285196368128420052778720919,
1010 175492896267660224630716200673678455224,
1011 65045359798882890769480339558569504559,
1012 18360756201997228579913399282693627135,
1013 246207423102698950535550043423299945064,
1014 183218408714802110581477278629168622919,
1015 81411989419043304945157665937315771344,
1016 235502485070283797172648886195839765099,
1017 7673342488663363047545928882744366332,
1018 70670145005283547055083681707622726611,
1019 172485002099382660071392498597150942532,
1020 251203480867893933974686686232976021140,
1021 10747807487815671901936743419938228227,
1022 75738493196467608686172662821389608748,
1023 186191871315852361564612721393352161723,
1024 ],
1025 [
1026 0,
1027 78387427924390474594210038843135751789,
1028 162942614788606975755651127743674655634,
1029 85637966470749762732081083176639190527,
1030 243464824058818822635058590831837597398,
1031 188507635714758894686937322751906134203,
1032 273468007445121066943384452271005723972,
1033 328676836475291221809841531476052843305,
1034 160296299026920073857496218838463083475,
1035 88306349533853347630919908279554213310,
1036 2671002029341381189225020838112907329,
1037 75738493196467608686172382445907748396,
1038 276138986615802518956208842439594917125,
1039 326027924526799494488621344992497978216,
1040 240818485440948494991611715380700618391,
1041 191176041554818361446236431250559756538,
1042 ],
1043 [
1044 0,
1045 100651964642358712132659799393645579709,
1046 83736382815365844020421089037406528145,
1047 155892680823212850065714640853431889708,
1048 261089261057347800834305216560426460487,
1049 191176041475899679219354898262057445626,
1050 333080570590110317203401100705403783126,
1051 235502485149820235770914953129422162539,
1052 255778457024331691024481431252399272379,
1053 185873831316563364621689112637937613830,
1054 338382837634493226708548568702412051242,
1055 240813313426190074083465780893252689559,
1056 5352406154534857060074145325577049340,
1057 105995730643750535706307477816484419905,
1058 78392640424430450559172598099134379629,
1059 150540332189098068696486046785154366416,
1060 ],
1061 [
1062 0,
1063 251983765602931355545728148188023207791,
1064 102137424574115335524413372457083207137,
1065 320700857001036352859860484291510422158,
1066 60912411197639260541295366588835391183,
1067 191746400058430460756504065646641467808,
1068 128964939462951411640294863149422517038,
1069 293219078323002057496206500926433078337,
1070 270816626426363345471504673438631410915,
1071 157093839572603212372981747064295951244,
1072 180004301405767794512870902483958939906,
1073 78392640424430450559172752161048852077,
1074 306294548466492853445178860138222475820,
1075 122270193681264676131482285937282903363,
1076 226928624241925720058521941115928684493,
1077 30793284928553420786369209848399794338,
1078 ],
1079 [
1080 0,
1081 287866886263390034303527888526621522109,
1082 286156277029650268428969512736562979097,
1083 21052593228732039666324186574865963428,
1084 276124875193879307095110743021906929695,
1085 30793284795670815561810679854037340322,
1086 33210069221091123461160766552687249670,
1087 255778457156905180743215612417739829691,
1088 219904113563592780667137542605781319273,
1089 167476737094211867962462107108265166548,
1090 151741232052363013080371017876670390128,
1091 226931466182633499036468119799194560461,
1092 142000446683946426178388369350148363894,
1093 236963119018460219990975411799355403979,
1094 251992453939153562509024999946787207023,
1095 134266923943827566660866659839840358354,
1096 ],
1097 [
1098 0,
1099 108837819676602134008538055300797295510,
1100 232361711702835670603919924098263054180,
1101 339193813524515410347891868508478217458,
1102 70302254155050922035858068226045174788,
1103 134266923943827566660866659845137043346,
1104 204932257146102966897733135796219843424,
1105 270902299324529170127375426622624332022,
1106 88713659328749638362900010273679354781,
1107 25737076431344973472363106497983266827,
1108 314292932997609272837473939082785742073,
1109 251992453939153562509024784214879090543,
1110 157337499463773815149128125191964118937,
1111 52834204895705298896052719347823092751,
1112 287866886263390034303527532062523701501,
1113 182687142410906768457034078839908553579,
1114 ],
1115 [
1116 0,
1117 214138924702651479259905324090302230144,
1118 58650855066843515883062413019383393538,
1119 187452756775374047147868312317275767682,
1120 53719089288974712626537637446078840299,
1121 182687142508613360943516402651425100651,
1122 5931347269017442235369996203694674153,
1123 219904113463257057034896903599571320425,
1124 113765645770624783224722725538678651775,
1125 325078662172681887613830420541774124543,
1126 161552009958709756055581865717783058045,
1127 287862906712092476572569882210623469821,
1128 167480718446765696950421800666081592980,
1129 293625460826456284220778278515958376468,
1130 108831244074618171486020144322312792982,
1131 320310410398268382485449192013066175766,
1132 ],
1133 [
1134 0,
1135 113508234047371793212162632753078039025,
1136 69141509584883449290311604659922497896,
1137 129437786691643149271810811345318576281,
1138 36706587772594557598589518290832861976,
1139 104975475081112011075032448242082601705,
1140 63269539045826922726509138035384867440,
1141 163482734091651156213739157415923166081,
1142 189419796508045866500492598781926708464,
1143 292284957784649654395022908136379344129,
1144 247925818941517936181472283960910898584,
1145 318849267408634879404821325443191149673,
1146 198208215340823773115583295709443538920,
1147 255842142893170979141413151145450229273,
1148 214138924702651479259905420718474612352,
1149 324982211727535464709247413867016765297,
1150 ],
1151 [
1152 0,
1153 245918819677944206986276694309834117866,
1154 42427464390495024094166894074307214321,
1155 221861785911633884782657519815054993691,
1156 323664135718138596701953227911125340772,
1157 99013452341392856285299406940263268494,
1158 314467779089198440477493271284638542229,
1159 113765645797823195795597975638137060223,
1160 247160822928467412599664232579056572516,
1161 1263279983719886515118906440234060430,
1162 220788349767312158852886756130770805653,
1163 41333116596378497286190120802277306751,
1164 99100189991893937179302412461544933888,
1165 323730570824964331020587318431988406506,
1166 113510016522538038092553150859334087153,
1167 314232736311352094766661024025628615451,
1168 ],
1169 [
1170 0,
1171 132134444507563989279804642608978131817,
1172 256666043039320606255619157395453335829,
1173 215917768799360663617230892261610201724,
1174 59736460983963627673195870710316512924,
1175 105803310356681321070942007027003641333,
1176 316235665861961519759342242725655015305,
1177 189419796508045866500492598786473333984,
1178 112875259095320107917219286646162996579,
1179 73786775563175509127288486658884290058,
1180 199316354846434588243990785973527340150,
1181 327793678078054031711510530375042572063,
1182 159643193002756736799631293414065671167,
1183 36481118608991622652582993202097516694,
1184 245918819677944206986276992277484196586,
1185 290322552028290565432231218456188692867,
1186 ],
1187 [
1188 0,
1189 138162200162106146856189846239272202254,
1190 255734095803441432208096413511488265993,
1191 222757526531183443358100450721588391687,
1192 40401168790738955186126198092847495011,
1193 161614966613167857124703588837805967213,
1194 295090624103055807561024852792346929258,
1195 247160823012337849966100841024119412836,
1196 251771089228256548792036355959366554371,
1197 290562462351648651350758086829385212685,
1198 166224922814238312766130598156008508426,
1199 35872668017072725335305065135101328388,
1200 216734958820883384684906688855304479840,
1201 261840717624876193949396106373080142958,
1202 132139941040547236069375698247281343337,
1203 6106962269800930755211083073261636455,
1204 ],
1205 [
1206 0,
1207 235386097265099356138819415342372355444,
1208 61955731221291169793207413168229643852,
1209 212061435481499584664089862765012257592,
1210 270349593301815576607554119799449337435,
1211 162782534029938715134243726018648982319,
1212 305718817129636666672246682423020537879,
1213 112875259095320107917219286639210870115,
1214 172874259206779890853378553921358510105,
1215 67935557449354414449803247437018056045,
1216 229387286752397648307386388678987173461,
1217 39252891392017175541327511121373737761,
1218 97600557949657108833453071752326776386,
1219 330274734132650054820064116306060016438,
1220 138162200162106146856189390624712257550,
1221 285641980796551387322880612959434870138,
1222 ],
1223 [
1224 0,
1225 182154685624690884084689853392260553035,
1226 28428210982386244179211857561561847345,
1227 207913284804331515648425457617890054010,
1228 43885241467799889072974764430194711673,
1229 223363729051978117098759407092170802482,
1230 69623152924344956999533272428457937480,
1231 251771089100012451142565015520198988547,
1232 177394625388385652746897444133827852092,
1233 16601095151117258228871390521607646839,
1234 191532905212005027950907186920415224077,
1235 33388135508432512408553478518228072518,
1236 218611502240100029890923703810465999685,
1237 60473309585066855399318213895486829070,
1238 235377692659915800385052394056778513780,
1239 74590900778488894549694763437227910207,
1240 ],
1241 [
1242 0,
1243 306118318367914003974349542648453061896,
1244 223786536317313598786074810082906375275,
1245 103801929601034605357691081292151806307,
1246 271296725852871553674624032779671429498,
1247 56273607594303610132366024291122625650,
1248 133267465066386485642196953932931228945,
1249 172874259206779890853378553926459045913,
1250 315420801592062439758824687295130156122,
1251 14662567999729816703477640048740294994,
1252 91802042754108710738730461174871242801,
1253 217143486366671348482560315704227063097,
1254 44290606167885180181054952960162880800,
1255 264673136554934602625577767168289636392,
1256 182154685624690884084690187660975266123,
1257 147905359195210905996781292427392910403,
1258 ],
1259 [
1260 0,
1261 69374855838055653307012172260954508049,
1262 330277931229166286240428951321242053426,
1263 271537234196776294732640409678967971875,
1264 97349664591141096668618188660097062687,
1265 166224922845614584509702920049141488654,
1266 235636373968545044652528615172184718381,
1267 177394625482473931435864803542860117820,
1268 115687059833419536245361751253105729829,
1269 131892616922324713395403801342647855668,
1270 233205266270251089166992100255800904215,
1271 206366199415284017779303329565716562182,
1272 40148652319513078639887422927309502010,
1273 55854938878886795817154491399724825899,
1274 306124484537346164139215772987019812104,
1275 279784039174956750559320626919920522777,
1276 ],
1277 [
1278 0,
1279 48412356878409488242711065954445783632,
1280 254519827678239465592223864134308999183,
1281 206120497209764493646061485342237999711,
1282 157319030835070893183386321440757251589,
1283 109253276660120781493377186386668063829,
1284 267342102176442396977323332517136158218,
1285 315420801592062439758824687287647517786,
1286 336383828131970062593139978625928742171,
1287 289080038066628009358564621517945059147,
1288 88287694377929582186019782432080098580,
1289 135583650370121638072610187417282938692,
1290 185155361695254436954052189217142520606,
1291 232782378169908546635992753038557169998,
1292 69374855838055653307011681878768519953,
1293 21740086380283133264527761534303074625,
1294 ],
1295 [
1296 0,
1297 153123899488180572146770870102652588076,
1298 264679302724364637757952623488912867880,
1299 239499686673936821455200923815526257156,
1300 301929188574764123140014052845575254817,
1301 191532905176717984980684274038610273037,
1302 48153755722071306584175901361163268361,
1303 115687059695389221865041850601853378853,
1304 416358571381762679885732858212483929,
1305 153373453086703211861747172255548969845,
1306 264928208859214444438324846920427487601,
1307 239914096538279228200189397661021262173,
1308 302343600005100642779754151515873947768,
1309 191781809748049484061775157836370845780,
1310 48403310923726259597701985480372220496,
1311 116103416661162714835180063374276747900,
1312 ],
1313 [
1314 0,
1315 122372012214658210329187511924225015926,
1316 55854938977301527227801024749771324714,
1317 156904621724633969369376093914088308060,
1318 184905807602781036750572351702509959239,
1319 285890099346566889817597057896792930353,
1320 214165800802919842482304396952254301549,
1321 336383828131970062593139978621633774875,
1322 279367682040206538888147188973413324097,
1323 188935922525983094576877316673850234167,
1324 329861573154211183095626505382448441451,
1325 218195753219257063256761052314361964573,
1326 118591127649603341711828456751493934342,
1327 6937801163983072474147984412629069168,
1328 153123899488180572146770588627675877420,
1329 62792577634419762612917853755292160090,
1330 ],
1331 [
1332 0,
1333 210229348414856650513948552304550588206,
1334 232788909105799713529602905354881911118,
1335 65179885568828116010876001548281800288,
1336 65594295601530321004118170133714625849,
1337 233205266330292390002620229052229700119,
1338 210643759715219779047609153840543181943,
1339 416358492153600165621395264668533593,
1340 258485460857782072420320767288291175425,
1341 122781230622713645510192390548359775023,
1342 145342742227917570072321089700321813839,
1343 323663392977017506603983340537208261217,
1344 323248983539764459697658192616568113464,
1345 144926385759806257821726204515033966102,
1346 122366819917799675501558981427895795830,
1347 258069103122009837219603259502626385752,
1348 ],
1349 ],
1350 [
1351 [
1352 0,
1353 257870231182273679343338569694386847745,
1354 243487086751779679414388037411359798546,
1355 155758039029975231802736771432857056531,
1356 106627033877493223645330825769652577237,
1357 194356081599297671256982091748155319252,
1358 307189072572590685414975739530838169287,
1359 49318841390317006071637169836451321542,
1360 75742463657029859177377022870289393452,
1361 333612694839303538520715592564676241197,
1362 191193999930105464954841235817550156350,
1363 103464952208301017343189969839047414335,
1364 139303673560445280524187233753563907321,
1365 227032721282249728135838499732066649336,
1366 297586137328707182444666657787134243307,
1367 39715906146433503101328088092747395562,
1368 ],
1369 [
1370 0,
1371 251983765602931355545728148188023207791,
1372 113508234047371793212162632753078039025,
1373 309661664763790023643549110511362950814,
1374 235386097265099356138819415342372355444,
1375 16656731989753898212733783821621152283,
1376 303652387791359337826759385881734057093,
1377 119480517169937358742709678854199786474,
1378 48412356878409488242711065954445783632,
1379 204668328346407768949460165041890182463,
1380 150280759418343907940326798584115233697,
1381 271979236268937855961362021676086310094,
1382 198710983608234410252869762390512013092,
1383 54395012788767788435062989563302328395,
1384 255350423418720957069343535839202377429,
1385 166864787443058444007936100262251481530,
1386 ],
1387 [
1388 0,
1389 36108373860388248882524745257896227859,
1390 107462852541199175002341370780282945032,
1391 100952204431938659279623894681344002587,
1392 309463287943331626001103783614824310891,
1393 324302065601124890204529396406332316792,
1394 244624066252278125150219673238599997027,
1395 216845120648462578346712450340938064496,
1396 17431598707954140956757187766594831645,
1397 29528844185849307142543802279652864270,
1398 124644404315115836768976775350199941909,
1399 94290080032113229350273366942997270278,
1400 305458975332124734823739491721299881334,
1401 338825815725152238383101235813199272293,
1402 240703636933192551035901273700273066878,
1403 231617608857282366356742902886247704429,
1404 ],
1405 [
1406 0,
1407 128651717122703462791434453030781024418,
1408 287680477298463815892759348393066525237,
1409 245431231857174916991038674775017327255,
1410 4560632282904425623002763041257821411,
1411 132461737970413527984183141980932369473,
1412 291118578351513275434211217506520426198,
1413 249614752007707876244906275544055750260,
1414 78627259180680302055905769350546595489,
1415 122197548675391177598281147400206116355,
1416 302119993299835325494408435522633362580,
1417 174810900714374544343649418771358618678,
1418 74817583120936360773916271877795875394,
1419 117637910258414632477863803521392931552,
1420 297936128330392577055653178260544977015,
1421 171371805846157581618321156160454983893,
1422 ],
1423 [
1424 0,
1425 321010387648919323909634098958788928912,
1426 37764662026201632647473626934165849016,
1427 316239103582845427957597312553009833512,
1428 321273564283547938350654905370053508385,
1429 266503587536805248113886731731982513,
1430 316160177444795912998841581922406088345,
1431 37687763496719118629092050858694974217,
1432 66769580771098834556198754263890010911,
1433 260170427652235784851254578714795640463,
1434 61572525981136727809931147356238864551,
1435 297509318637010322738019231970601354551,
1436 259907311882128473850313058993931738686,
1437 66503138053112466814092158203512093614,
1438 297588183945123481743047746180988378502,
1439 61649363685712019350217700633740228630,
1440 ],
1441 [
1442 0,
1443 70473647940667405100701995664097790730,
1444 301465170130378865618697866368640094236,
1445 286826036389353973738057994908647414550,
1446 115596234133751371974172097843455194815,
1447 132859138578525143958328418386212568501,
1448 239567753515706487155070456334947051171,
1449 171800958100060967804830391009175416233,
1450 284407100096833765604909483666227274283,
1451 299005792139074131820660053008757221665,
1452 73412685369391896047571123563439796791,
1453 2982970554206165228958128750478948669,
1454 174138419873964910114824414591186293908,
1455 241947685546287230525825968627273113502,
1456 130003482056443994249919062278166201480,
1457 112701269192510256076187093197298274178,
1458 ],
1459 [
1460 0,
1461 157988797629662718772456268162318131931,
1462 45039944016179827502423264280282863418,
1463 115943536182481326245799627599861642721,
1464 333665577128264445742550343084205956995,
1465 188574771405167907197790046039479336280,
1466 290975172804107822697744963697347872953,
1467 228940350161101097161382333120443165282,
1468 215485766464300784934686261533129272278,
1469 282827119022744978840839559340934138125,
1470 175455098452360442376508654206084742380,
1471 325852429038864549071289819811912785463,
1472 118429387705630821277509341199679304789,
1473 63486913535402127359088605191634015886,
1474 160809554823726780218100739244851471215,
1475 18781880284263528033808158699544560052,
1476 ],
1477 [
1478 0,
1479 205735327836060500879902891538914091006,
1480 5128994491218880524142855400967381876,
1481 203521815756586855388002931105047133322,
1482 298819225652282276840506117350904880841,
1483 162214239954421553289600604702936056119,
1484 301847438905569751809660686695900708285,
1485 161930163156853398953533698507755151939,
1486 181765125653320208890308070690755616693,
1487 24557583420091107374016205677510295627,
1488 185289677476525128770775873251971349697,
1489 23439663606346370476758757337956131647,
1490 138825423614306021836744604424733868412,
1491 322627971496366609827500570342570090114,
1492 143115342227660906169936879211123466760,
1493 320905646254780753184523323658956996086,
1494 ],
1495 [
1496 0,
1497 112815527909892419252066845990219798294,
1498 64613568125284904020043341596316984620,
1499 133272715111214974117863498875696656954,
1500 333282057293468567315450060870035701102,
1501 231808488489121026575960724272934431352,
1502 268710870751067447683152289409751783490,
1503 211309246877618496365748526085878763348,
1504 192185086266263218634152026868738908742,
1505 260918000932375816962421234678072784208,
1506 212726425751930311505758314932349142890,
1507 325447416634511796967861837076548440188,
1508 141138519762713003805374470077963083560,
1509 83664466853067124317584095862431238206,
1510 120556464392009236352760426553063275012,
1511 19176093970987026980799782426162867474,
1512 ],
1513 [
1514 0,
1515 235466509122814452183606037107043411277,
1516 315299219670844537653142040338156547542,
1517 122379040055597231626313343417661245595,
1518 74033909598923476371108547957916359340,
1519 178902428217684424722988847343914057697,
1520 290467515431761118949357499986656507770,
1521 143074734567429979023902645289225359927,
1522 93341406997750458438362646923946706756,
1523 328474223568369509265087202480696091145,
1524 227363155978199187912795118262776998546,
1525 34776668892863758071610013343991762911,
1526 150922203572706746930917590011745246696,
1527 256124242343181464987090462689020786853,
1528 208350740774520102571948659296058830910,
1529 60624439780758718113366992893151171955,
1530 ],
1531 [
1532 0,
1533 179204884797933999761254235929095331683,
1534 179404667676948479066168738983854106242,
1535 215803804139440759324198438902970849,
1536 185500676541056771562460356927527539886,
1537 17777035384754001545589178859967810509,
1538 17893718646765474553886921955898634796,
1539 185633345154746952618056544090211446095,
1540 32943584460285726520456434903534451146,
1541 210148782124835585382965405256110892713,
1542 210270520718364795070481782830912823112,
1543 33070954313996545665555153260093538347,
1544 195763006193459416750458791463245442404,
1545 28698141501246014508182830878769263111,
1546 28902929084906221569216119185348463590,
1547 195973399605059932804111300988021363845,
1548 ],
1549 [
1550 0,
1551 104572222113536243421529212860000182053,
1552 58608469171737174686634870817502365995,
1553 131242852945549901529490089529789421070,
1554 123900696415243763562785156604037585519,
1555 26073268595858843829963429549137675594,
1556 150379044934850330011736576873615577924,
1557 84458301671561818849993359002932530273,
1558 302818040835390138236314035219483709933,
1559 230596444582607933911736331850662858440,
1560 276184572371620480166524118510267553990,
1561 172035522531288172911464623069288024035,
1562 253751561213040333745571048598658321282,
1563 319415285861064624133329221308734674087,
1564 195320279254542663937591954435852075689,
1565 292901072893924126485257638424158346636,
1566 ],
1567 [
1568 0,
1569 42499248636408773861011849013666735360,
1570 330134146949500087585140335831680082554,
1571 307905974487808935968891036545863092090,
1572 319191525108397681019907080906219252925,
1573 318822675863106148132762467588984244669,
1574 11296066736165480008768070056337215175,
1575 31270722782921840305168844178739129287,
1576 39678991342927478648922308239194910639,
1577 2829394591313598873537073290267298479,
1578 305080611085146763759776205180215758293,
1579 332958263031131835571869730893749774549,
1580 316335015157251435635825162608496345874,
1581 321688241843482666833078739153647527442,
1582 28777945846797975766880137074808775016,
1583 13787515122889943617416262527708791912,
1584 ],
1585 [
1586 0,
1587 220025134522718086694358623820098064275,
1588 29855662791508642448387516825999952121,
1589 239191947086802298062295912079129741162,
1590 4110540432897542298135598563507270457,
1591 221404201021028984892059355671955979434,
1592 28424348815401723020871280381780409280,
1593 235133654151663392499959722535908668499,
1594 248501306099558419941707599956261925536,
1595 41812612760354302846879037484939787571,
1596 229324961122679058801795292527124822617,
1597 11969160303517101723454950076925375946,
1598 247092100261686574102346919909679268249,
1599 37734889588891658667173460583959875082,
1600 233371855022201224855214775610780895584,
1601 13409195393366963733959604469744731891,
1602 ],
1603 [
1604 0,
1605 298236674095086167145673453942460728324,
1606 175784403654623172817377470068689438203,
1607 133424251059870722781014898247826588159,
1608 109259726354529253586953088477137174775,
1609 237167958035627046495698930263616046323,
1610 284519377146104271066165293654738470156,
1611 72205279128166827889996560701975511304,
1612 127313704349052339962600806682297731231,
1613 254681857611165848957567761050434587803,
1614 292395810521063051606811815414205910372,
1615 79292401299616164519293815063008201056,
1616 18552445154306398656149693995402791016,
1617 315916730662321037565563590758669700204,
1618 183162370513527461506208007804286504339,
1619 140345215615702211652747400513676429719,
1620 ],
1621 [
1622 0,
1623 80090861076616738313607217365339652241,
1624 103816185552824193768076063614373870391,
1625 152002978501999480035304469724187786150,
1626 315148659827552406192090466600980318470,
1627 278263560496406257161198113065100429719,
1628 216732508766905614583298566341249610289,
1629 211751477404728800976444897670495400608,
1630 147812540799034057767553016767358400053,
1631 110924837337220662412110748916140455588,
1632 44082230968557596730375221536113118466,
1633 39093403337312535833587720040225541523,
1634 172990547230104025346683168811155160883,
1635 253073606768978500245665753667027320738,
1636 271487057197683938487981246942228857860,
1637 319671241064433030215250988835611444373,
1638 ],
1639 [
1640 0,
1641 45182146882099234263372257915303426760,
1642 141423046756544718668382479150209906861,
1643 100485656431568093278999808272834871909,
1644 242209146042813812633028623456684536113,
1645 201762498838635145872943170079267752953,
1646 292860438497137318248401492869940103580,
1647 337203938086506769545642970755351786324,
1648 256079545555701643186226776166649385162,
1649 299548224253601203236878007194010364418,
1650 226977178759498612985478739149457483879,
1651 185094780344509724790424059646892872367,
1652 157601310141495923178343852695345013243,
1653 116209674971248987989435841453290511155,
1654 38495648980031034862048035965674494294,
1655 81125700826076799341163074754343101342,
1656 ],
1657 [
1658 0,
1659 203774121447755042695206750842555694423,
1660 48180262135344818725840158829415359646,
1661 251817829371997766921034850853523986889,
1662 38721226478240246892345594290639602991,
1663 176019350453957182069786908080091265144,
1664 75923094386193275693026416305723662769,
1665 213108541637944864021356144895478504678,
1666 107881435942767611646385784391283162936,
1667 266366181194367488380390788597065564783,
1668 155634456225048825075476930179239205798,
1669 314172516656449651073234147164748523249,
1670 101064705353778734108960976856359680535,
1671 283484753268581159696393170226329929536,
1672 138527660614695849797241455866339221129,
1673 320977470780339892828754554695575282654,
1674 ],
1675 [
1676 0,
1677 27592145877086441647285109364529409817,
1678 227657473312482606918930643573975757328,
1679 254584518015217849801533090527141862665,
1680 169586870233978507181610400123434835772,
1681 142680178610501411380748160710532509733,
1682 282876377919576154585993522410641370412,
1683 255305559316205389795982686256032809525,
1684 91576874667712514312421659911224724389,
1685 106541333862963295266750951384767997116,
1686 318517161399729318829484817399070439861,
1687 334145748213648411192615762425827563180,
1688 79006936925057441993389846188254467225,
1689 63398663264354274112863484144669375360,
1690 191684403036878413563249562667722843785,
1691 176741229911746966324474277269830371728,
1692 ],
1693 [
1694 0,
1695 292835195169222857447946411292904979424,
1696 70427970955663673147895807316275342639,
1697 309325545474218625952868208633103865551,
1698 71349191750778829405302494718924092028,
1699 310890628787209051383683812959805114780,
1700 1779450694891265495228746491642208083,
1701 293887660881697782996947113837060924595,
1702 76456499539553454246061522956908755014,
1703 305447199500646005956543667470819066790,
1704 17939780539633152106655602937775936873,
1705 278063452219069626445437807377004801673,
1706 16167002935765014460289581997400066618,
1707 277017619032798621128363207035978904026,
1708 75528646535147046687111682294827755285,
1709 303875443413545121644141775268117503221,
1710 ],
1711 [
1712 0,
1713 242483404435489016928575511701170499626,
1714 249246982409722707109264702159840327414,
1715 18524246388776668552773890012876539612,
1716 74761996994562021496830731341662656647,
1717 189177316700084749620628887715724601517,
1718 175113335732374209989639897936850955889,
1719 71534290805991030635166980848529219163,
1720 139947943867407809891588501402663005641,
1721 296606804457540533421476456154437590499,
1722 280195958568742298242809964810634763071,
1723 133791810076725779046429613438441532181,
1724 108282051363504795063968874931852031310,
1725 307190714205738811294926262115526706532,
1726 312313498502008416493630224397297877944,
1727 123088559898033274313510546914283926418,
1728 ],
1729 [
1730 0,
1731 334511824843695250902566952474285855650,
1732 221025768293795618229588518664979545655,
1733 124784562999470173425516260975489101205,
1734 318431603289763736716383197972201615043,
1735 26787391808179085944350370002695912801,
1736 98070512742820877583615610418558718196,
1737 237179330686203459299096766288517301078,
1738 73568962877470105114534667418540129889,
1739 272411251338922097965556460781424963011,
1740 192825645179536479302094140938245488726,
1741 141856067677854202793660494671698695156,
1742 288231858050949623191371101205430079650,
1743 47186570225908129578395700609124877056,
1744 168310503092439931467092426767286398613,
1745 177077081943586170432373397629742988599,
1746 ],
1747 [
1748 0,
1749 214444877673592263959271293175471893588,
1750 70011093128356395410873537450086304694,
1751 199380013737289010050434822473172412386,
1752 160317341734237681038962210968849109119,
1753 289519469772005037856414118849324858411,
1754 101272389833997591408653190909312719817,
1755 315550454649062626829035003314522044317,
1756 303779074085415810775419574975361394916,
1757 92865130676728134083804646342705431728,
1758 276656565976063394315385053384121131858,
1759 150818234829833557982969451955156373254,
1760 207454478939786885300496363352888408219,
1761 81450653648186288298015959362369361103,
1762 224275480102022015109324680571351364397,
1763 13196022270505127512321506116679442297,
1764 ],
1765 [
1766 0,
1767 48644483982955961333036213824059966978,
1768 295301644189036422775542121011913720295,
1769 333228978905907095327270776857371412453,
1770 4046360477306232706498278227318323588,
1771 52607596557655408508937094115612901254,
1772 293937463851258995412636191149408008291,
1773 331948038825064027182933358950111231585,
1774 173909961449601723226899246789513139255,
1775 221052975320220814453161363890923033141,
1776 123601657938102768692911661684975719888,
1777 160028009501565657718124746679210890194,
1778 172626262936099118251535086083785747891,
1779 219686361029032912438645213745131318193,
1780 127562336599005822474334490489746189396,
1781 164071611506598272336464113310484720214,
1782 ],
1783 [
1784 0,
1785 158786898235759218379370213391528683013,
1786 139751257656482737322139486117957179630,
1787 40324076955429943694459700822627548907,
1788 285736590921736986510253538852525250440,
1789 214690504235572041321470526492578148749,
1790 254992428982790637531793454456885514086,
1791 266681556562471103549144750407649356131,
1792 253668074809790943844997594413621186954,
1793 268024076170435933655888253608425879439,
1794 287059646386092472068041935545399085412,
1795 213344091038174286699647463841393897313,
1796 138408059177062590185376305139182274050,
1797 41649089717489243961806354023368220679,
1798 1347093336523014693194983466822180588,
1799 157463182914712868825924463035639036137,
1800 ],
1801 [
1802 0,
1803 154467471393295932666869015401455781671,
1804 287930908222757693196767852943837709657,
1805 229500243280592658144500468213962424958,
1806 89558645635000911780761942151028431079,
1807 73548975060776361226471653087243657152,
1808 207344800019135894974245466769264025022,
1809 318726500786695794344681945330152413849,
1810 217478864397459859924094992789104364824,
1811 286665361545720826227181278757337926207,
1812 163503441919719536934937853374247553089,
1813 20212400412349340952545788330502049638,
1814 299059301846958770191355548545840600575,
1815 197774012930730305165816748629359973080,
1816 74944319174342706324608402682754306214,
1817 101460611992234558408948141089722898305,
1818 ],
1819 [
1820 0,
1821 289581677261041561897686087566017629969,
1822 315025000383443310541068759147324688426,
1823 70641131532794462682664591295397480251,
1824 155140661589675754103626659979974539871,
1825 230519283562754605258240883547948643662,
1826 202419634705756316217304318172817338997,
1827 87168229328996482087990030713027181924,
1828 157101171432987831729230197410654893484,
1829 233840012905486914691954397780851538621,
1830 205776209264304597557973911670125002118,
1831 89164259833092745503493630501147865751,
1832 3362436810317013584802616782025215987,
1833 291583570013770603962795616277808169186,
1834 316979647978122609498624131569206265817,
1835 73955998623758039890696334324126615752,
1836 ],
1837 [
1838 0,
1839 33375687455205965690141968044050467243,
1840 18772151328077663655940590166654909299,
1841 30595912596324714817162302816573797080,
1842 127400329862051398555574271241336995805,
1843 94061160931378823291051822739405207158,
1844 108700972737259301517274988226881635502,
1845 96851422428457706255746801665798835461,
1846 34686748540168721837008021070495466430,
1847 4005873342029989600827149044019104277,
1848 26621194465421894305503445959688927437,
1849 17429937889153689114822089546359697766,
1850 92713764655929409551324000436877589603,
1851 123430833859890561924428071964044244424,
1852 100852071101491844663484571909475534608,
1853 110017214118494838475993256618861383355,
1854 ],
1855 [
1856 0,
1857 142557718319989055960497667868902044744,
1858 204276755227304706610555539879200103865,
1859 322430510899894376021684361549594569201,
1860 100099440421421516290034088769502092364,
1861 43126839424966953252014411606122342404,
1862 280302065526494283854585840637474079221,
1863 247068488660992990411847459989678568893,
1864 67795007683230940462328984439225653514,
1865 117300676185345775616326517448097213762,
1866 226875186715931665984766389944384226483,
1867 257294139218497074638911075145289052411,
1868 159915695183286959470521493823905695046,
1869 25843251431850595010282142351533388046,
1870 300243939649549185308381606255074777343,
1871 184593922418323448428025923431679962295,
1872 ],
1873 [
1874 0,
1875 241014879826802652884321190546421874485,
1876 53577120657478938422393806264636087735,
1877 208851480086309698613405319949777199746,
1878 111790340761326214820311958858250694717,
1879 299469906058187859482212157881330028296,
1880 165263561288061309034794325792271412618,
1881 267202688584474608627906684304753480383,
1882 177360190450521354328204250081940326855,
1883 64133050343520107333854273238070572786,
1884 230126642502936959011226691108268987504,
1885 32488211271539200736803604552569367365,
1886 278412860357539873997158143248262527482,
1887 133118054921041404584240442485267236559,
1888 331283106055263535086655044210439840845,
1889 101577089356121838343689593382077275000,
1890 ],
1891 [
1892 0,
1893 184571072164321673160934975500593685570,
1894 260416637046516146643488014663771828680,
1895 97290417850625115435914776944543880586,
1896 223485321750300704213632659133974465665,
1897 46495342735150315877931246707111897283,
1898 143285946156658009797525641916232858953,
1899 299163409625957889276804822572384721163,
1900 103426934543560748803375430181082694269,
1901 264621959038447063286504804101533296191,
1902 188943262689882720586936023419525280693,
1903 6637020723360394005663398755842152439,
1904 305634017932200074636336869620718325500,
1905 147824061687681430299150567203610110654,
1906 50534414569240466995858965861595381556,
1907 229787925707974944851939856533947685750,
1908 ],
1909 [
1910 0,
1911 19447331994011670875000446158982370122,
1912 192906396926322971512075051373311615243,
1913 212017074169507595019970029587958641217,
1914 268417495442936946936825280900397104007,
1915 264922652571582691005306236508861180109,
1916 118048165292717717150590863822826871436,
1917 114886475916280908529954719745467337158,
1918 85154471660405767231789292280843992783,
1919 104600379996058689560617637065346100613,
1920 278059427258399216905642284733916323780,
1921 297171522930726093473842253737368046734,
1922 183430621297825784172372823919062713672,
1923 179934354936472625039799801502790637058,
1924 33059849832275402960415092613951284291,
1925 29899579033533652116635978268162406153,
1926 ],
1927 ],
1928 [
1929 [
1930 0,
1931 257870231182273679343338569694386847745,
1932 266786759892852949388199578575565176960,
1933 14233440693718933536476237122299707521,
1934 101111878675432610900377979481020981713,
1935 188840926397237058512029245459523723728,
1936 176310652324984248633877543695852708177,
1937 93898516586319464513841505958471344464,
1938 250966701830782098116717187190591323400,
1939 168554566092117313996681149453209959689,
1940 154830062799430892435905341604334976392,
1941 242559110521235340047556607582837718409,
1942 320173194081251010510216199321854123225,
1943 67619874882116994658492857868588653784,
1944 74989097535883974108891787076537998425,
1945 332859328718157653452230356770924846168,
1946 ],
1947 [
1948 0,
1949 210594188342113965277739702847521208883,
1950 153876015816761300102630214137303165186,
1951 315928029300620928225840046479756415793,
1952 216151539108471713113591954657010414448,
1953 81019029257357751420869525829707548995,
1954 278297801908853565688959973884643777138,
1955 105262214592459811816032222132489723969,
1956 199785370505675521191924152228345662667,
1957 10819213067625007410830681427413399288,
1958 305131532710966803934106066100296066505,
1959 164662117533612503659969776555162279930,
1960 70199994178611835709212928147196723131,
1961 226960200189807337561556177801498264968,
1962 94476269948199523101962458356281104057,
1963 289094120827203745590684721810312621194,
1964 ],
1965 [
1966 0,
1967 293693637348468044461383356986586405528,
1968 277145126646314800851331080546589982273,
1969 16549878200686124479066024193852974297,
1970 37781212375063512540046701983890477574,
1971 256038402505513729095908944828437661854,
1972 272389518479576148558065654902353079367,
1973 21428739084525262023166999860791817951,
1974 248109879942513693134471191514834064688,
1975 136056022260443707429228926788464103336,
1976 141106106656590929254178866109142362993,
1977 243058443299259936813262130760042213865,
1978 221671404859403633599497151401059796790,
1979 162451601631788364828511583826954444206,
1980 157204122506314796649573116804342511991,
1981 226920246411564905973521105577961448431,
1982 ],
1983 [
1984 0,
1985 68575159164471713268669985959296484586,
1986 129581713931181525085354605295048338570,
1987 110220123018176114054115002129465075808,
1988 98756606192437585906616846947295481239,
1989 161983050552716028054742777865578809725,
1990 57444071069082469956517707160552268061,
1991 32733765357454594130258836751119885815,
1992 52617904504866256677224910352912741612,
1993 26599135229031276303680321191891054598,
1994 94257412668070509079887691937777965158,
1995 156175392834649412778777174409322568844,
1996 146038589646728772276947607535793420667,
1997 125326996800218770217371439394175516049,
1998 16794598438369632688599841273711105521,
1999 84019755028702708375933099904275501339,
2000 ],
2001 [
2002 0,
2003 256300036644234500009939696366956964194,
2004 143626608416403553178929439469330556044,
2005 229774346203250097625453118389210910190,
2006 289699347739025497380267332490000184417,
2007 33415187867221740441099969034140802307,
2008 241916455284421799117283261789667414253,
2009 155763661550383183821875259208776071567,
2010 240978315036828713801968922894915549864,
2011 156325360433821291766247336513806717898,
2012 288815159178881009111979601218217958948,
2013 34011203793009750229572032042848368454,
2014 144515507487570057797406388149616283337,
2015 229173619449527431466022019791335155627,
2016 944149149742385429652836454516550213,
2017 255732329175559752044943299239964017447,
2018 ],
2019 [
2020 0,
2021 66245235809722862261830073412894415178,
2022 98203160935286170045795563429375348805,
2023 159794962486157396268281973511929252111,
2024 127216488314781047960947439410249375887,
2025 146731052065477646152583837445533727173,
2026 29680396324683396270200784363896385738,
2027 52516894425063153820147922638025681280,
2028 70117366852670753300537029114661242549,
2029 6761736815737218442883737777191018495,
2030 166325508344310075537894543820829529840,
2031 102306400538522331794085858750021881786,
2032 142835466453466835930822046939491837498,
2033 120478212723272418862647859750529073008,
2034 45962892774763136490052538581375399551,
2035 25600616633459042139745755195597877045,
2036 ],
2037 [
2038 0,
2039 179028922626972748983270213592713796494,
2040 329528631260558208839623702666447246241,
2041 150573053993624860910159397014598928431,
2042 335565033902603834579395994606204211378,
2043 163312316170648479786504865235647449916,
2044 15429526498180378299721116559169061651,
2045 187691983230701096013155242034393815197,
2046 201791451705483783251357807922114427107,
2047 23096186647808356548926644190818034541,
2048 127810847802216915178788337393683802946,
2049 306432770763063641216696392826417197260,
2050 143208236584695780822854951308549335121,
2051 315127319886929783457237838520937264095,
2052 207795737389606475220774391269728713712,
2053 35866916904103841808623834709214617726,
2054 ],
2055 [
2056 0,
2057 233030064795216725938124962551985620488,
2058 286443336991386466789559324406033424891,
2059 159762103739944297484374220122675767283,
2060 291788629153734245032627164356609985428,
2061 155247224410178771778903737999700921756,
2062 17251584088406902359685461275382278767,
2063 217606524499932266424549285324813118567,
2064 244889805515065035314583994485089490157,
2065 31174441894346537031695991898423399141,
2066 147891978086873746993924047595984647446,
2067 255279280669039306737876927205528285982,
2068 132551504128064192278511759664730185593,
2069 272447777425468872371762434373935815025,
2070 240291859225522021705497361607332576898,
2071 36602820744323483762041657700208736394,
2072 ],
2073 [
2074 0,
2075 67413404129884801397579232408853039167,
2076 51500819886361882579248454718260814563,
2077 26636057452239459823082217340695800540,
2078 248064002109844311295949840197801496812,
2079 180983893746534498894737034245574498515,
2080 207535170092573108420452162090200003087,
2081 232067285797537386550661897613192510000,
2082 113217355265062799564873962474859330911,
2083 137718045916604071528813666673505252704,
2084 153621503387923552673443138255788859324,
2085 86593021367905463670699986301092501379,
2086 318618745652389616601369187261268536755,
2087 293784789658207069241190894306193237388,
2088 267242640718511528841647483462007263056,
2089 334603739044373018890006104913788946287,
2090 ],
2091 [
2092 0,
2093 225136112030470239420646330527356500524,
2094 245206454912652839533794131293110502282,
2095 22797606971861897972970051452919658918,
2096 245056169141989431840855805935349514153,
2097 22616238386233905873352290292143654277,
2098 192488417428225859305496789643050019,
2099 225276586186145531652196264140024382991,
2100 132485019241498199741191298813478390454,
2101 269771230495622812019529446959665016986,
2102 292194647061189749601323858359431645500,
2103 152264248514170238698639423715896062736,
2104 292387124069635333962498578923145983263,
2105 152404731543350468801476732613275668275,
2106 132334724597252482924510440574462424725,
2107 269589873318745347660676274552632003769,
2108 ],
2109 [
2110 0,
2111 170256816675272675094676939457856753159,
2112 124413881746772160272343020312029784093,
2113 294504337025318666906220044268770174490,
2114 273246876777869253048290024114992077884,
2115 103052367719465222879335333574623695419,
2116 191452050594028201810338457436593140769,
2117 21423902932195295347083125149593401894,
2118 159096474900175474343114449125349781910,
2119 329184339053911553879409611578126417809,
2120 56045006212507845445568192449190861195,
2121 226299221616658486114578261557370673036,
2122 247411383114772132699670989413122944426,
2123 77385826478830809172139519852352037805,
2124 308009951009265107895933902794246768055,
2125 137818043122754178481163434481816275888,
2126 ],
2127 [
2128 0,
2129 82556333358327259180082921852705977850,
2130 91276787051089036976876935905099375390,
2131 163082264788183883178730726299952994020,
2132 258342307569795572200471352408013426198,
2133 335303893911153322656606290011848080364,
2134 179371426974002683895585524073479908616,
2135 245795126025443731236192645884773243122,
2136 316689560007611203569343981146239153758,
2137 276956905460981610825790424286931977124,
2138 227191337460256681993482667186235626816,
2139 197975479528032907384492580945743569082,
2140 58625491605242090196019348733641783368,
2141 23931917038399531956164172152158440882,
2142 139161971402654374249178449878070172502,
2143 115198155720578911665330204877577629356,
2144 ],
2145 [
2146 0,
2147 191579640796461577234179737465918603198,
2148 9618839987816463129226108742392601065,
2149 200860776601925462155583210199374095959,
2150 291435186237533279809032025042304691661,
2151 100193267925129679913082213770529395315,
2152 293078656190398385899428669394420446244,
2153 101499037815506960770012155210230598554,
2154 278478311870904910742272385217574865157,
2155 87231182957461422438803505660681402043,
2156 285433493411447406139487151321930911980,
2157 93859044914320471673202097990140555090,
2158 14292301607127426685098340581763376328,
2159 205866727682684511293063073662773943158,
2160 18589025096477501377645215991069228321,
2161 209836135708215288331934018478879081119,
2162 ],
2163 [
2164 0,
2165 124397886254327910557727807049695638285,
2166 76295216491348422029564759995761630335,
2167 134188539373141947397472751796507848562,
2168 243289890729438280588099283003198324670,
2169 311796227508779310460887352021068844211,
2170 189259244445505720633031226372072383425,
2171 281734848731335032344131203475338268876,
2172 186561774743811319117405578942972888264,
2173 278869603254466026549838602758423132101,
2174 240920326743957857640279288639865100471,
2175 309262132933352553640464064371132214202,
2176 78910258480258823542536591314624297846,
2177 136639050138590237565482287678353541243,
2178 2951750270898409574052502612959864585,
2179 127181860115916892802095016664825238532,
2180 ],
2181 [
2182 0,
2183 253054865378944152222362744441934608741,
2184 259419235328027061885918223879243249505,
2185 166541865766678884044144261298021813764,
2186 64254495620876491796549240553359599897,
2187 189033012958674193378676011592117031036,
2188 323649593455246311239785263284850777720,
2189 102497173926978146029759651729879705373,
2190 115731435604604358391627580548116727434,
2191 310299620011667770768577977151011635183,
2192 197033460318866447711104449511391130091,
2193 56304531826442793835117234151473809550,
2194 137283830246893951979247283232902852499,
2195 288647556498966024002029035085912332022,
2196 218563015541947364505342088779097610482,
2197 34628330820325929910876247830411665815,
2198 ],
2199 [
2200 0,
2201 139130449179702975772848479806911888911,
2202 292601408469630520586637669199493742639,
2203 239985202240916122698493310792621063712,
2204 168177801682388816926802598950697896660,
2205 29483505442545601087954128008762635483,
2206 216192454261807530662028911336666909435,
2207 268580199427498784616467414478120056052,
2208 120842839533593687103308172736812672214,
2209 66809106038648987194278172870379756249,
2210 179162814765969021818254976925117818105,
2211 316865351683701180213140153443544636150,
2212 48416346707012948597179459998989872642,
2213 102055465641917927351550719321792696333,
2214 330045044906242405127619798655382498861,
2215 192612507421449909131462674727509790754,
2216 ],
2217 [
2218 0,
2219 87137431676161442757294384625329935072,
2220 333771188563158404760474272861500876295,
2221 248025333099365228124330058503760295143,
2222 202078996222938976785595932321499783930,
2223 289153508992236328892669613666650009626,
2224 131754565826577822169862204133240538365,
2225 45946933015364371537121747617255364125,
2226 109632888652732836514088960370231945485,
2227 26525044927402934043744703516376021997,
2228 225156015532228864287432274128831581962,
2229 309613896935944762716061286203876548074,
2230 269150354339401759704317328347709574135,
2231 186021621930702374949222241446908696855,
2232 65659334241064488088959128378560622064,
2233 150096484823679454048256974773654830864,
2234 ],
2235 [
2236 0,
2237 314954625498241020199839907173632274369,
2238 183965493898332408577686671153718587638,
2239 136352206372148405951412997578893565751,
2240 49749633628401182406673704142589095833,
2241 268002425513122652965364289085176283224,
2242 232672530538166338125097051948704079727,
2243 90351575911390159958749104721106792622,
2244 164730832546320250681017475770845529432,
2245 200859074512319924496515813326426729113,
2246 321052497305643597921229369437157324206,
2247 39183583769596734680996118677989923439,
2248 125629879755008262527885642611862792897,
2249 237191313562254113380960553426883740928,
2250 282985866269797257996052731839575005751,
2251 74556627099331258231853326627987256822,
2252 ],
2253 [
2254 0,
2255 170887188022427483290038438139299155572,
2256 287670687048825784436182042033285371630,
2257 118160921201619859729338866012137904282,
2258 291145242465031422433791642872157044663,
2259 121661445861472167885721157637245972931,
2260 4506007396293446743500328190615611737,
2261 175356836500733096473764805191514007341,
2262 142631241656895717917261007744116525646,
2263 313378074771026324985908455533938852922,
2264 238132299057848489252057897852733430944,
2265 68669100989272445603293265191207686868,
2266 234304010636981688322691142188150224377,
2267 64856397218336897912975271969564539789,
2268 138478972347123730050382217242612392727,
2269 309220600324419686603999208645994753379,
2270 ],
2271 [
2272 0,
2273 74325993175842327792114603387377490172,
2274 329285521750960498984992314918968934137,
2275 255631048733512492124772568581861254661,
2276 112248311284109066584747236217240862225,
2277 132385871197223040241975896449147447021,
2278 217703447535357076601543508852641890536,
2279 196904934599315923736037925694538586132,
2280 26180215559016295166097716677967872397,
2281 48311932476795313094125791146331412849,
2282 303106614489099464668788402067076464500,
2283 281643801298812409109866560396789786504,
2284 95372703193760777433781061352418361244,
2285 149095327141166662575647386125126051680,
2286 234577767769479521098565535053862142309,
2287 180196766665102633013262475074070714777,
2288 ],
2289 [
2290 0,
2291 329676329310842870988737268603030595662,
2292 216042637586292014492266224509814711286,
2293 120363071088977944916933911306721676216,
2294 73698972411873674257990123337486550270,
2295 275756357155926753467493740128003042480,
2296 199351332595179071112018103062296782600,
2297 146199227733062514832231126238326165318,
2298 78855846555170379166010920633940150217,
2299 259647550764090571475608616160610643847,
2300 204510802579876648647130928065341006911,
2301 130087824866000164526357850681104944241,
2302 16132193051219259061101569876764934967,
2303 324537608942968429186875817234871593849,
2304 232172234162246414886171272225285103809,
2305 115226946562543056650639891927572777103,
2306 ],
2307 [
2308 0,
2309 181871475732417350345006214809630013175,
2310 216322581292386291128913853705930120299,
2311 56394078371784470855695362940300978844,
2312 48271443762366205324576267107822465612,
2313 229310365060352835552327069856181781691,
2314 179355144467124936349804251594133106215,
2315 18929316046330146655538236781617453264,
2316 267900217683144232977225419179556811187,
2317 86859835868199417282345733524045481796,
2318 142505228386401274937530882297447624152,
2319 302932516957878741634839513008621181743,
2320 316164339311325702596334499870321722367,
2321 134294324096021302138104321264544593160,
2322 105534728733939394535108856441964027796,
2323 265461771504013259723633538772386752867,
2324 ],
2325 [
2326 0,
2327 205642327864657701520085250427755924828,
2328 23152453080828409831102112290317810126,
2329 185916793406852541846885381917055890578,
2330 244146965599582305971001321045470661369,
2331 59948865920283491125568733693615884197,
2332 221690282994496408006949059936789394231,
2333 80349401665778047432703396878104755819,
2334 179799047753849240224549201547328037954,
2335 39800516495620262781503603205686339870,
2336 199628428149910406654638187149304864140,
2337 16751909356142715708462162315314630864,
2338 65012581455620026055049276568131858107,
2339 226455257213842258558440161045939774439,
2340 44549738151382428708082133901604018037,
2341 248849632258328211326689975881652787753,
2342 ],
2343 [
2344 0,
2345 23748651451408808233717389192708729292,
2346 231842296068915823090326915865819313521,
2347 254832115287505422337716374537852869821,
2348 204584009685636332138424867591490466252,
2349 181048264396427632981354908303981467648,
2350 73783872684182905086908453594979370173,
2351 51006916359158419308644383726461758833,
2352 240842431991830013147393585164920163127,
2353 219225309711394394825605646913271866107,
2354 36364962681347388986481403258753220166,
2355 13990359691606633802306601562247845770,
2356 59617361773063245143959857151155862267,
2357 81104654720418217830925736136616760119,
2358 173728115487024246169203581882545868682,
2359 195972932412009866316257020309315626566,
2360 ],
2361 [
2362 0,
2363 192105303670013956448028883387139823652,
2364 37533860231788442880293867681392152069,
2365 187062241557870761768460656657070413345,
2366 148015512697621277957975617126084589977,
2367 340100038939484501195467463807603974589,
2368 153390876420209519129929483324032284572,
2369 302898491728969473801540768055252676536,
2370 48303397485389390110016970412830177698,
2371 240345091081479341666976930659295437190,
2372 74987951321199861673968661158925694887,
2373 224535803127284474238921625173967695747,
2374 99755165978687995886340353208673894459,
2375 291817626860988851929676407365028878367,
2376 115896756812216355628839911258459000382,
2377 265465384777563161134509251944945407514,
2378 ],
2379 [
2380 0,
2381 157831125011955218148439033753091787400,
2382 189886812369900781116849503150161375875,
2383 330188337202453056557878076143621437451,
2384 334126420848896021500211944962252870216,
2385 188601161403101714700002023302038378688,
2386 156208765922493703731042339548900466891,
2387 4286839838871266528866354712567671363,
2388 97289471132280056430368787354808214250,
2389 84470516845966151872344315408535693410,
2390 265739723661814293208805868616551911529,
2391 235723476195043674985455931735076707041,
2392 237179844134020866599498236087207456930,
2393 261619199671482313615786363606020569642,
2394 80698424528193494702638780571453637153,
2395 98408806428880582275019967026574854313,
2396 ],
2397 [
2398 0,
2399 123165461915321352370796868063407409720,
2400 53018134384910935530425705737813241,
2401 123135236541680161494730839262502090433,
2402 74327322877857075887488336158079495057,
2403 142570856536510273499411431619788153257,
2404 74275118047486817711310514121172211560,
2405 142601566852427531144384501254517874000,
2406 169085722597639542582438346218750774409,
2407 47335409474148843404386638319542732465,
2408 169136722313468423335297216615012528240,
2409 47303165682009801916863415101611244104,
2410 96858772586595770497137194690655037208,
2411 27200418498005248180903141806847077664,
2412 96807288096850668458834920809257819105,
2413 27231849154489482406381463959173878233,
2414 ],
2415 [
2416 0,
2417 302355370332170387458670967200800644197,
2418 144116666973742041951694440322056343284,
2419 190226832768374772266756368808857653905,
2420 270283408978134017642829020510027517057,
2421 53341567925617685132134037216945836260,
2422 222300009779489029455718308743326220917,
2423 90776482074783057503693301457297169936,
2424 227181040016056794106172997833881031260,
2425 97859152673978728418112690289632939577,
2426 263865514646011135305199186961253817512,
2427 50454217413546888092815657854732157133,
2428 129930959463773349711588821808710688477,
2429 173839647174775033988630832562336498360,
2430 18381189856457518286277249189215490089,
2431 317205529570851206994314236001207012428,
2432 ],
2433 [
2434 0,
2435 203657466502966174469662304348858681637,
2436 283402178320016620021899397822056200039,
2437 101033141624730031700100760508238429762,
2438 237274653294824487942991308557983735916,
2439 58104069247247123813015479492699482441,
2440 137845942715839383354319724856326461195,
2441 338304951498017977073565742044465634862,
2442 162341550003285883683120301844658128175,
2443 301853370963118588875285089643538091018,
2444 232721956126025104754717122688941781576,
2445 71963248803983497682548230143904086893,
2446 266680098457119480701647199601778550083,
2447 108455229787365758637377271358288030822,
2448 39326168896506908285529104529613885988,
2449 176304146135925283184070422060351658753,
2450 ],
2451 [
2452 0,
2453 39680387023541662951530911917668063138,
2454 176177973065046643997946855147392015153,
2455 203790158976391533846595866817728433299,
2456 304271036924990145882998988130232241654,
2457 331239058586585665813841494296064645716,
2458 128119213599016113986162621994289993415,
2459 167113887839404033796766116788704788837,
2460 44326558014189388325164109502272800548,
2461 80433022145514706086396094874158682246,
2462 220414801559068607531602514208118381589,
2463 244621814347495161416564540302533970871,
2464 262774443276517109538359944886449048274,
2465 287667168845611722852859596296196447600,
2466 86701640355963459814760424170056225251,
2467 123452268739504488392074837601853818433,
2468 ],
2469 [
2470 0,
2471 100462352442725188488243327465693490287,
2472 233753000725645714116882798468864843894,
2473 303476301023043792144437357256777075737,
2474 13166934090203316744543430359279474487,
2475 88328831228157315892898324457015589720,
2476 220968156923657174849639461421385692993,
2477 315902973971547543610943724821775063854,
2478 78061579540865170769857776280883613899,
2479 150443016297668043060934853654211951780,
2480 198559551515955239874907945941178020029,
2481 296363118293731062281608395115568946386,
2482 68277547311061313716180950004008142844,
2483 160554227899469497481675803498602785683,
2484 208060329699737748511464143170921588618,
2485 285881012502563685230138654933946321893,
2486 ],
2487 [
2488 0,
2489 95004180685890124453041926390889771375,
2490 72040833085226788684982341921088613093,
2491 150595693640524679118448982649345203082,
2492 107913486034884014749552322447846759533,
2493 29690894287927322723232443517499583746,
2494 137065905826156389542922285836513015432,
2495 43058690349050484903028538150724405223,
2496 65669810387662484254407047551984589559,
2497 157008082272964308601500156930142055320,
2498 9746041177108350652682696795731914770,
2499 85299850323887209079940022833037640061,
2500 127984479478894232258015565522108057242,
2501 52098405960551426304836007031308580853,
2502 114949122215377062994842444565001055359,
2503 22613892093369472534044191006692629776,
2504 ],
2505 ],
2506 [
2507 [
2508 0,
2509 257870231182273679343338569694386847745,
2510 158198716603327944474456666114022956662,
2511 240610852341992728594492703851404320375,
2512 112706582612445606551849620168191570656,
2513 200435630334250054163500886146694312673,
2514 47569417818926533633244741918957448342,
2515 300122737018060549484968083372222917783,
2516 79818398790947758477136105598071005587,
2517 337688629973221437820474675292457853330,
2518 99772581047884414295742706628859346917,
2519 182184716786549198415778744366240710628,
2520 139267977251788072032867720880502215539,
2521 226997024973592519644518986859004957554,
2522 42234132915615181209066242172830207237,
2523 294787452114749197060789583626095676676,
2524 ],
2525 [
2526 0,
2527 167041751106306395189359585100780352492,
2528 262974258571125822426219092242070132137,
2529 245231812169542026977884473971227190853,
2530 173381974829985716267321843736812320512,
2531 340091336262487196901695854447407711468,
2532 95241502931241199039044492300655239849,
2533 77166831809351675712015648620537352517,
2534 221498947801704923320535354022897838838,
2535 291143593279145990537716662672958413082,
2536 132205506920974551569460906636000149343,
2537 41033597833715863778038522173356870835,
2538 48947825480942051021812424091508612598,
2539 118924695679076306179079336898357243418,
2540 299107410051714042914962045278609295455,
2541 208267890637718065784056484674313943987,
2542 ],
2543 [
2544 0,
2545 286160087542363526817960411777477763461,
2546 19130135770378679613579373496784313766,
2547 288672094199906716406318403295310461987,
2548 84089278682774702448726043484517990893,
2549 308440202303783744857885193505882726504,
2550 65336396290631247900758944194878266443,
2551 306299931258248114521675961619931053518,
2552 119682955445706008336651789859021301499,
2553 187766208400319336896174000764436825982,
2554 112227882099783320712351464562759072605,
2555 174326830224754346412980875070192327384,
2556 134631567327664872206486412398535386902,
2557 236610155722378484378159350626208302739,
2558 142462595650791980798145934003599506096,
2559 250419971742745530168581330394830805813,
2560 ],
2561 [
2562 0,
2563 94466213980794086480792388792922466897,
2564 90700792953314913172949037835639880804,
2565 4225589922465595786107406111673718325,
2566 7735682590892965114073084853313512293,
2567 88727619838080991628116366531470444852,
2568 87633005679736023193160306515701587713,
2569 9283972735219364305243339404256359760,
2570 24675994926775993988399503889765468616,
2571 113658963251903209676921473708254520217,
2572 115207861710371558548999224313969374636,
2573 23582069894676747339251571142177529853,
2574 30913533651206170785855396369308920493,
2575 106754862149292712346894572000094830844,
2576 110979761993532011437856005555857741513,
2577 27147503993911697930911453271119477912,
2578 ],
2579 [
2580 0,
2581 306848061119282991547254631436208617373,
2582 206920606660907682141737427571645511959,
2583 166754444881932283425870409047799156362,
2584 122889255216207211832666424325372318870,
2585 248126022055466412963333311501392388875,
2586 265642643268875780736029285372777819521,
2587 43865192280658518037598883953921612316,
2588 289553841453798324629138933319406647984,
2589 83818028985849328877171261148740078893,
2590 88380661244436437873912393587361874855,
2591 218853820782438413004862871053673182266,
2592 177647105429401380906292854939109158438,
2593 132244554715181109098964702658535971259,
2594 39954137970933794791777120776874858289,
2595 330760554191921253133357401230889394348,
2596 ],
2597 [
2598 0,
2599 74668349477502051068838491052626274432,
2600 311356125195596245918462563910857597729,
2601 279229310979663349947139713642639707041,
2602 817640024823955942644130070456895324,
2603 75360369764307373614285757886339674076,
2604 311872611368789599957943453520720962685,
2605 279869408931698351998446712842202631421,
2606 183631450854446853076670846330132587079,
2607 236658244910264739923028456283862502087,
2608 127746802532119103931379858820478026086,
2609 117261422042636619594254907501910796774,
2610 184406234147457922522333722608288032027,
2611 237390525780434338128633401520456437147,
2612 128303508723255480992806063249507436090,
2613 117858703828318673449914173048774373050,
2614 ],
2615 [
2616 0,
2617 309021958815093758004788772567921643954,
2618 197127872520161627010694327959924931024,
2619 165104749136049992170642703132102010978,
2620 67443089327163592470239875230447697760,
2621 290801885123405809562185206626622713554,
2622 221900016065421210400154704884102170288,
2623 104401951082493795344856935887260833538,
2624 48688877993019073314385168447378764057,
2625 272296174200660893715519370343911383211,
2626 235171161915965192924750932567167944905,
2627 117756903522482568476129044449935989115,
2628 29389414505592215208414108361849359993,
2629 338160114498949650692147955818940473291,
2630 173221523498169967323184774185376724905,
2631 141117351934950261088251265494379423259,
2632 ],
2633 [
2634 0,
2635 292444195638985206837360217948328464432,
2636 27546602889723629476358945617870125447,
2637 266821678644061209483466301127888103863,
2638 192090749357886770198217951759129722833,
2639 101695700733686114204701599287587090401,
2640 175759842531848923995352982140302509654,
2641 117266265837453866811232817513720927846,
2642 142856633304244096260481819858003914523,
2643 243890537209840515080442547497302753067,
2644 169810979532621477737474891548538279580,
2645 217675763556084836612788979071121032876,
2646 334936795244291441947947487998719578314,
2647 53131779405294985412591650389595963642,
2648 318034400944382591714833399877202389325,
2649 68130857037628927260553164081265260925,
2650 ],
2651 [
2652 0,
2653 154900418830622349220162250857843367486,
2654 227440994875065493859075068455118194339,
2655 297182218029841883582336884338963372189,
2656 199373251110171198789296064217815597976,
2657 299685592494216118236681004109409541542,
2658 83608613150208617622978141486094878011,
2659 98938297430061662454495885585600453381,
2660 186394088452105665173280707727549078307,
2661 330575659217292878577435994122705470749,
2662 52014985133451794194938251006735900032,
2663 111203514198305865123337206704360965054,
2664 34268309944871683379076880856069396667,
2665 145298201320085270765212607403782489733,
2666 237746773679314369408924335048212291096,
2667 263627853974926628905926135076275519526,
2668 ],
2669 [
2670 0,
2671 116454755043449498074295417791869243721,
2672 139953853900681858643907287372565686865,
2673 83525863902684855193596548316175268632,
2674 114690431329230488925393007406905601882,
2675 2434140155171338497301604120453643795,
2676 83755387248406746981465135092146701579,
2677 139064918990211692692420467459043578946,
2678 277487899892841374704042879318506517624,
2679 179935945209372288950881582012999722289,
2680 246613818396419263109338531527249567273,
2681 316461543271783598663223422262135050080,
2682 178836565088080801505678341807169215266,
2683 277927868449394333769392380508749974123,
2684 318685228073681126818811619584026063219,
2685 245059950035464316157054721700141064250,
2686 ],
2687 [
2688 0,
2689 153506762105213462249947407563145912468,
2690 58337434899253981776352096254714358280,
2691 117798656733967514791186601691606026908,
2692 231197744333124646008029235106492160012,
2693 295853250095846080412223273153322236056,
2694 178181156390166936630297083748021252612,
2695 326243104976142508646595836560668201616,
2696 199116324541631126932862501563857589356,
2697 306637489182109495206698586333987468536,
2698 252797546934488154945343061824840269412,
2699 272924544174780685352853108605296402160,
2700 74620934442852093900450025397365296224,
2701 100186253553754885377936910209068068084,
2702 26252770551095180027585104226123146856,
2703 128583544228462128032213002650829637372,
2704 ],
2705 [
2706 0,
2707 258466072431112891843749754060632929246,
2708 56094515646059309878710784148482855077,
2709 308721803971672235513648414426843194235,
2710 182237539339512961465812736831042245742,
2711 100249893689192165895969922120156243888,
2712 216886240943474092821139374821209982155,
2713 129392128360319857355644835965965727509,
2714 333702429121695241737349445587185368142,
2715 76420249973967605922057333491587895184,
2716 278139196302805656578264216463246257387,
2717 25657250613037283668725319610821828405,
2718 151643228414600451053287610508936783904,
2719 234482449891233074816448606828666166270,
2720 117169477490859496520954748066184312965,
2721 205141249533087069582864323043912747867,
2722 ],
2723 [
2724 0,
2725 123972332237280113814098570054494318940,
2726 251306062434364382809283961380269546148,
2727 298141576427728927629881457736901635064,
2728 66448089634467630565185679286184389414,
2729 144519067101919337641564509557894994554,
2730 187351837053706077456924755481366786434,
2731 278756678826151145704585976581086871774,
2732 319274774865960101228733978679178982286,
2733 230569912405372788079135445053946430162,
2734 102671763187481173587120434909654886698,
2735 21900766157808616900936593206176569462,
2736 257618292962037544374076314001715976360,
2737 208082789832540017648113225225460820468,
2738 165824823262525622788956320465353835020,
2739 44552521045605571132308739361441968976,
2740 ],
2741 [
2742 0,
2743 32658596114937112854908320133686779965,
2744 235318078499736982891011110958466237982,
2745 225435496519000170373600618770534950435,
2746 34701663688872339191975176395906798258,
2747 3378177797799745242979875233926656655,
2748 227400882157146699092434872778529723564,
2749 238606809910540735722789359053386822801,
2750 278962473389346664962914011833964145971,
2751 267589699989342109331897996402447600910,
2752 128720503831408213375548390322844019501,
2753 159878523299532793641652919766107114256,
2754 270858676303328944447483486912964820865,
2755 280906724707011502140877315168051732412,
2756 163234917739743379337489179654413089183,
2757 130743167271419356221965015956430494114,
2758 ],
2759 [
2760 0,
2761 42637357214645879051158872521335837594,
2762 58905951133893450338521729034751364453,
2763 16301045935596471317533909766099951359,
2764 215723789209571083619413326153498964878,
2765 173263294817283269200361354360641036308,
2766 188886600051653549148477962708886486763,
2767 231335411936910358236945446468565134705,
2768 122673603109553280107185125036370209817,
2769 165290190978257843196385235047886339971,
2770 149012673450561785934358416076650865020,
2771 106386998906323490951412258780804510438,
2772 337628786604201003954269983308500148119,
2773 295189061240922510265822207375403158541,
2774 279554236208821493339958459923367678706,
2775 322023817123087623159029996539993145704,
2776 ],
2777 [
2778 0,
2779 284169138572966915747286949681395160695,
2780 194965338464075827857963740971136903132,
2781 94894608171874142828194075988213805483,
2782 139970537786029998922266682283071516340,
2783 250588773599291579575120819621097273539,
2784 334808002945288470254323438330362513768,
2785 61359019470869999890129952374525828895,
2786 216190466297067707143428347176140584655,
2787 158740051945199872055749208175374950584,
2788 63845490679198132365474414681843847443,
2789 305394300629734480361489185023970510692,
2790 271046267367731854289490442956600285307,
2791 40050143194270159294057376715194289676,
2792 118661708410350798945787289543168917415,
2793 186827072250462406734982396077565422032,
2794 ],
2795 [
2796 0,
2797 289038294678580830241515292441760628656,
2798 33737890190231057667070339387442429328,
2799 255312665363431112414350571315643843104,
2800 224283438273645666339230462091440381918,
2801 151249892259366716759747918396768034926,
2802 236409275070091464866357821335306904142,
2803 139112119423345025997483051730492448254,
2804 177474836977945941772824146620675090556,
2805 123569711248386453927703548253503264716,
2806 208552647236955163102903090772318885356,
2807 92500916678921761348520763434144492124,
2808 60142420989227671471479309764536973218,
2809 324735380705563208394049772241237821458,
2810 69611423039988293508509385730867546674,
2811 315257687800763202684288836745866950018,
2812 ],
2813 [
2814 0,
2815 272167986054957947836062060122339716918,
2816 13214160606868962585763594065604639154,
2817 262113997601703543336623351200866064004,
2818 229564924376327300481923827928796518430,
2819 128214625877592092105919691984137811752,
2820 219677902145491903901516897509231665580,
2821 140263601190660425619791810771104239258,
2822 203382923059029495799679555642865166742,
2823 113999594201219494289951295221331756704,
2824 192669670236858720243659919276399841316,
2825 122556086871525637921262510313033203474,
2826 71397832498740588434563377346395992456,
2827 331596248960154316463486175610459512510,
2828 80118692706812857284810443421620537402,
2829 319720409529466854403949762805635753740,
2830 ],
2831 [
2832 0,
2833 11140972895376840310063487720240696896,
2834 315238662204267387118820085207214014958,
2835 304774486880226712272747528105549139886,
2836 209272982675433826112169472544731795943,
2837 198144193036361652654483283711980232615,
2838 149331769513526471619439349844528386057,
2839 159808126192229723454205364165170372169,
2840 267155616490485748008780625828558389448,
2841 256031519848368054452421287248506654344,
2842 50285099483204917237842950030294810918,
2843 60755766465384103935383397335676964710,
2844 113715489482924957964795362292178637103,
2845 124850768244381095487525162212197900143,
2846 245429740913432385002876567603560517825,
2847 234970257951902486460816014912251551361,
2848 ],
2849 [
2850 0,
2851 189445130109480093514806390875294409345,
2852 147841868746773481539761557557038819833,
2853 300055065684122830560636620195624782712,
2854 230720035186726883456568772656629170062,
2855 46641144045273186850838844367545048335,
2856 258754242103777079111848439560205375095,
2857 101268267858936864777823842410492867830,
2858 239842103979592921568089825113435895634,
2859 78311006621786292788417722585357440467,
2860 291550842032191032063889305448172314283,
2861 114082071226725640317438991789114489898,
2862 34543849714440306664738652559760640220,
2863 201342532397475618839026897718348180061,
2864 157875227528965281573418083867496767781,
2865 329982951982810924304695405783174169508,
2866 ],
2867 [
2868 0,
2869 64860937193463316784850646972483007775,
2870 145515432316618572825614218091398634321,
2871 124545102168311420502299511952996527694,
2872 195475891522010153609502162875192417648,
2873 217684664020254317260271833108489431151,
2874 338236788407715283178101092718459258401,
2875 274806411719557147072233347071083606846,
2876 266084474014210909779956222399545118518,
2877 330841522167974629160306364544163838505,
2878 219775683492223890447022680238291653735,
2879 198867622878007083063380735585934893432,
2880 121132573657791444755962268822352368198,
2881 143445230123120526620893681824961095513,
2882 72235401365301137474915968098460240151,
2883 8742760214119872791639465119579405320,
2884 ],
2885 [
2886 0,
2887 312620670181545914161389510900359614765,
2888 36425844326488381196648607619778011361,
2889 319470703494439088110852009174159405516,
2890 309786457538995840620517197707157076496,
2891 2981648023226763911473276299161217853,
2892 322223221047096522077771957782716914417,
2893 33694808370945843701939657836168694748,
2894 306337614729506700488993451335862378210,
2895 17648445660570540950112778503363563471,
2896 336383728457849608747189472808616607235,
2897 29417835495440229895070747443793227566,
2898 20565574061240624178394301057128244466,
2899 303439209518274147984579973079448384991,
2900 26748560754718960005245731480529945619,
2901 339197680171492794225579450684273956158,
2902 ],
2903 [
2904 0,
2905 315463607126911539693065174802620790556,
2906 335839745341799428460146772361047041459,
2907 23907716861625996996974900200639648431,
2908 231850744829174997904512057083115500433,
2909 89352957418702482054258185116708422797,
2910 110018069580866516115502265470007875106,
2911 254633507665962074482344021631769715006,
2912 265990032319312480085656949408640641417,
2913 49595636886700991055849618920315625109,
2914 70052862033219206735961987836163148858,
2915 289645230247126268345406367509621570342,
2916 136199247745635340215369873677534616088,
2917 184944786190673964342031919429026802948,
2918 205861032373379010817373422695647952811,
2919 158902136153600761236124841814405843127,
2920 ],
2921 [
2922 0,
2923 334535296322467902615007623797698931282,
2924 24003082947399711525955057288396100905,
2925 310561432884898822246852669210453639035,
2926 323452941420740903552094680036321520734,
2927 11941690173106447250433929893389059596,
2928 299533669406320393357393087757244479863,
2929 35833046149329837070177063015406080805,
2930 60496661901084352995333940476353993283,
2931 284694209529330958245142685015972999185,
2932 84478201836414182605973679239700090730,
2933 260699047267078569919247360371312829752,
2934 296199745449073306033523355935599474205,
2935 49808922877698252809384817655754038351,
2936 272300550724477919137428510399267922740,
2937 73720436477389730627642931366820825446,
2938 ],
2939 [
2940 0,
2941 282049879206158327835920132072400674782,
2942 236021307327422747284307768918192408199,
2943 135087182576106474114694026264598878553,
2944 129405869864219915499910797422287241172,
2945 241143191885262009901481517718553190410,
2946 277531615597888882934000618011885730131,
2947 6617291445811937372045196695100499597,
2948 202222194691409875886900749543979453696,
2949 101116234820420885876837493254190224094,
2950 55425803675807100262518767560692222855,
2951 336971216244785570308114389331245306969,
2952 331602023166248676237980221880072942292,
2953 60193946560488809374410390497082928394,
2954 96910141630908010295801186298432582739,
2955 208485693678657336085621869108935601037,
2956 ],
2957 [
2958 0,
2959 87828985283684915763810560126485420294,
2960 186482303782685028185297666288696048303,
2961 274278216536174031981986271567059116969,
2962 174874412081716497826207653581030292207,
2963 257354439157746335662433029156419904489,
2964 20959869952738344074941261372154429504,
2965 103469618838724820560831437400731916614,
2966 308781379220349075045366682263866789920,
2967 226457446859993652186704026261636057382,
2968 132954238165046320110181816611617467023,
2969 50620701606974798856611421489446466441,
2970 143238419555064412294472577337539341007,
2971 55586298209150750889648563214009037769,
2972 307766099258087760201966685376550309984,
2973 220125629679741667933930714369679870310,
2974 ],
2975 [
2976 0,
2977 102442895435912881268925253670162405362,
2978 48809465150727037593580906427501108850,
2979 140449457144766465984561475102467541376,
2980 305415517989099165233959389522510637308,
2981 224417138188710960200822088389309660942,
2982 257188741120236486970873047956927002254,
2983 186660298582915886561195247605757747580,
2984 246123966750123117769317411541631245268,
2985 324622577141513913647213723182465158182,
2986 209444844863548427086237065881535104422,
2987 277145754568196650418365866893669290580,
2988 123520278590899123671697026019367088936,
2989 23910108641199383706709211168023012570,
2990 159951290838358194606609797587019345242,
2991 70805875679004782584574738905257851560,
2992 ],
2993 [
2994 0,
2995 169775102495641905468249648733871238921,
2996 322514635029751221326715993202683142125,
2997 187563651487672931201260343769996767460,
2998 278275574986554245310794180810557960408,
2999 232451743706794661312224386603961835473,
3000 47830834089895694529223587458777149237,
3001 122634849137706297378798927825837326396,
3002 113188783435709768684622191746563721942,
3003 56648672575420557899260330663766205919,
3004 222673330131566388129454888560312292667,
3005 287425679621498620848362334823811185202,
3006 176115914623468675886242167893847013902,
3007 334673675820510970103431742063261783303,
3008 157995099521670902212800812158894253539,
3009 12491388703644262805071554162768071402,
3010 ],
3011 [
3012 0,
3013 312488370455239246739590476019272040052,
3014 88061197623535933085233591029871155360,
3015 224851977939461428011531573488385042132,
3016 262945494517308591158783373095480097137,
3017 62174669567782175236642278478212548357,
3018 180684417026525061485792275604555194833,
3019 144852743119237854313427910812871745445,
3020 280728288871105484052438523859294309194,
3021 74630818280176889789418233918349505854,
3022 192809230393883001531199768831353508842,
3023 162304205930882073243356407807312522654,
3024 30422814202837787323284527367778546235,
3025 337562467952064459497601417151262592079,
3026 112801367429856547088668103459816942235,
3027 254940860648755772941391237549861475567,
3028 ],
3029 [
3030 0,
3031 302591392846294634100290863470146599918,
3032 149509682827797539426909778847864075320,
3033 196551801029024926439949929708885086166,
3034 169951336871047723193741534457103693219,
3035 208021997654750353832901107541718404685,
3036 20779159796460292278214430360315789723,
3037 313724096633619432306504516184671468149,
3038 195220204615906488660262972015562248497,
3039 150841105809694587108655374475830586079,
3040 301259970339688660789913902001475216649,
3041 1331597205478114828660765332171874023,
3042 315055042662752459332216483539427812498,
3043 19448384504791262165356224610183012220,
3044 209352772471127250657498375509082525866,
3045 168620390049556380414985926533196802884,
3046 ],
3047 [
3048 0,
3049 322070703018569581082648657510270837668,
3050 328526433032332026656967886610487286472,
3051 7203907578845740827789464742682081644,
3052 323802191358434853000606978546153460239,
3053 2443122231901813263913661518573449643,
3054 6303025705411119274399385020225620167,
3055 328243469860447019385216959306336578403,
3056 261914718892743369370369300177146636935,
3057 73473576932187855717047027348973898019,
3058 66695440283036654650612112198199930959,
3059 255718606229974183017252304227872986091,
3060 72531037574245814498090259418080540808,
3061 261673418295775185443798597746045737772,
3062 257491752133574999253099580495044895296,
3063 69096899860793444193138859191622189540,
3064 ],
3065 [
3066 0,
3067 120080286081238310988305115576180922902,
3068 50408078810539560288371466793256716315,
3069 169780990064928321239291704432239596045,
3070 157761360330911921090731578756266526170,
3071 59779657409305122512541586518660538316,
3072 110676519258798369337893528425320058305,
3073 12072627709944211191253817585891629015,
3074 11040625070074700831513898647890871897,
3075 109125365131415661491626829511193074767,
3076 60658500766662110337637157593440407106,
3077 159450118729584103550022355517041185876,
3078 168655604675960232403126817892171498371,
3079 48804923120215851272798265179270027669,
3080 121031737929654919140968239698273913752,
3081 1803072594520420398484063888078770574,
3082 ],
3083 ],
3084 [
3085 [
3086 0,
3087 257870231182273679343338569694386847745,
3088 115400531736427742431386470831837969649,
3089 197812667475092526551422508569219333360,
3090 323751871034818873338977191420813101930,
3091 65881639852545193995638621726426254187,
3092 219660176756399817843399906885394741147,
3093 137248041017735033723363869148013377434,
3094 171688445801029861438036399367953592888,
3095 89276310062365077318000361630572229177,
3096 287075127771110984950210111787060711113,
3097 29204896588837305606871542092673863368,
3098 152496020511178136792471587723531254098,
3099 234908156249842920912507625460912617811,
3100 48397382725917860030079571238984844707,
3101 306267613908191539373418140933371692450,
3102 ],
3103 [
3104 0,
3105 223264453680112236623117437595964100619,
3106 4309811482531319361485591621042378161,
3107 219037720859344918675350790627952707002,
3108 276727330035314254677718410112429530875,
3109 159302703774672709041452895739411582704,
3110 280559044558039504171542128240577088330,
3111 155387914412981063620206055681939823425,
3112 250489449530417920404826011339639191475,
3113 36583142532023136135213007257504589752,
3114 254279945745669575929563095723263943170,
3115 32875721155776564558169180405770957321,
3116 144040757004546807547914454660006439240,
3117 270716438824198222486318700672682113347,
3118 148059470892029959276745893273095732473,
3119 266614646274989757373262176928359132402,
3120 ],
3121 [
3122 0,
3123 45555238132626908928850866365498790242,
3124 277059847591471458122912439036152090530,
3125 321893026554651372516393237381219720896,
3126 303480497505215813257987717536647450911,
3127 263299611179633647907807707394128838781,
3128 69452134661065891914459435324839567037,
3129 29878427936851749920162055925536788447,
3130 336751196271393032670023626411143098802,
3131 296513687440230544389640399476814930128,
3132 60106737910242154913626610905620676112,
3133 20591277473417960156306185724283711346,
3134 33271516327466419451445529456437354669,
3135 78768497318445041124025291387419619791,
3136 267715257458546973874113381390577069839,
3137 312605069623109075067627006759216250477,
3138 ],
3139 [
3140 0,
3141 65937206050436102570389933672553304588,
3142 148024581898357657774197960481884536986,
3143 125983053531026935992740801308642759318,
3144 260210719506331734029690596930149977117,
3145 322139380988225454079321997819364793873,
3146 229451444345426410702340452719463468167,
3147 208718466098406457962095698290093809291,
3148 300028579383010366379322517472384290115,
3149 276710080647619718054601680616439570255,
3150 189971058371882172884084315944361233881,
3151 254464471234029164366572589423355322325,
3152 45804616228775323455836350919864877406,
3153 26494641700199830966064148685905908562,
3154 102567874951775449705349872541016588740,
3155 165752757896703652764156691009288393672,
3156 ],
3157 [
3158 0,
3159 163699241571878903541285508488642353454,
3160 105774665833407877333206052434503288682,
3161 70055241533795150862553134445784112708,
3162 119450975141636208577631857065421659338,
3163 46492971407419636794213948872049133028,
3164 29648632104777525490647461667176913824,
3165 145432621100647397739843699150721761934,
3166 102059704355393509091417570496290939044,
3167 74274028207841985910136983301687097738,
3168 4426722572406384755816730152988485582,
3169 160108975713082858183209075777247149792,
3170 28051711637185890508270346673878580334,
3171 146535776447292020319056477775407572288,
3172 120346519108554124537277054922305436420,
3173 44771679839240104123643407966972617258,
3174 ],
3175 [
3176 0,
3177 165127298684196497962878639525396191161,
3178 7353300658734830714468428885572420507,
3179 161763043874702480581316968930042450978,
3180 59338177452325304627127017383952900108,
3181 107159969049217051225167931126054418357,
3182 54727776150602565161002905314319688599,
3183 113100959574734389048447891563534873646,
3184 124048382586407137230800568820832068115,
3185 44407221808920454898539216900054414762,
3186 118108705120367256322792460135448011144,
3187 49018946291518393440159921591211456049,
3188 151484113632836497880049151016677999135,
3189 18342337945931554689239254957175248294,
3190 154849682115828938708284544807313506692,
3191 10990361121707008912890234543731709501,
3192 ],
3193 [
3194 0,
3195 244455997102339481978343757354279176508,
3196 79989575470467350039102845267052886936,
3197 185790395725503647032793261546985058980,
3198 307681384406559648241865486724995495269,
3199 107095103472412147557585152429230734425,
3200 291537935268932213927041711395226799869,
3201 144536239431928965856003497150180050881,
3202 87551830320088445046435421132963993676,
3203 327267179180007213290716650993459220848,
3204 167403221647875982960795759784771724244,
3205 268629709580193057875042943594919439080,
3206 221506506775732864805482452870631288105,
3207 22992033497790721369395551795522659349,
3208 205417475419218640865369089732382561969,
3209 60321271318719258461692271453807386509,
3210 ],
3211 [
3212 0,
3213 39331672406946012661852641170525364651,
3214 284931924281592139487560524783933694382,
3215 270897162743068758547759474970065502213,
3216 284407760188173628977659024784391760695,
3217 266354121738563390115637099618791115420,
3218 4886383060382912191093298337689553561,
3219 40178406516594077106676563281661356850,
3220 160986792996508060029521975896052558950,
3221 133649328100731452875300307942192369101,
3222 232983751317963464555425673455079312840,
3223 237682761347103110477973933980234378339,
3224 229842791299206173378189933933060556625,
3225 235922994287201236954583022623956641530,
3226 163089902112287476131292189520730105599,
3227 137112858135718296806866848857789826900,
3228 ],
3229 [
3230 0,
3231 297226911655600213571950790773616886051,
3232 11513152892589451122204577720612617249,
3233 286046400761531894694153675924224720130,
3234 182217747694461988133883692425938908254,
3235 115051212884844069437950268078587508093,
3236 172449297997682737794672167207016089727,
3237 125151654904259904278302783999978178908,
3238 92116024131545528360023611851675551936,
3239 205818520928667450336440665079892871651,
3240 103543422619667411653005833549868610785,
3241 194723763765625936029506276165848266178,
3242 271625806111116556396371183573162720414,
3243 26267345405867372613609521657351880125,
3244 261776795019781981989640018505904947391,
3245 36448349414048709691571257788315943324,
3246 ],
3247 [
3248 0,
3249 190191783177644420856372852008861472919,
3250 180545622579222723180517324004936806835,
3251 11663371104519509632153514224627280164,
3252 67190482116606640720217394641199002261,
3253 252023388904593301998141039628603877890,
3254 241087287414539789891645325228655444774,
3255 77480145819372359346380032370714450865,
3256 123949267716748403238949661709667227421,
3257 279357747676541362847453817201651601290,
3258 290997425873570255758725637860638271150,
3259 114280064278530907433050391477292219961,
3260 148477139933174365496056594818348098952,
3261 298610023236836575468424194905121668383,
3262 308881835371037148576371535380045780027,
3263 137522538868031054690809913552188787884,
3264 ],
3265 [
3266 0,
3267 23631132624457205849785156221259340863,
3268 195828435853385839329174735992830483127,
3269 173568740187223257982372832417182058120,
3270 128357465152667810539870548674025352753,
3271 150657402027213166461204657004349370894,
3272 324017840594845205833793718260875998342,
3273 300429546047681295952317919875170887865,
3274 320507119756491988594919084483977408269,
3275 298870508903811597648370459776943797042,
3276 130660304007254199652967700081962988986,
3277 153585272533172113991315232441777056133,
3278 193484830733331535665735774400777552188,
3279 170519620365824365544966920639471279363,
3280 3805912502122534336387899066229906315,
3281 25399685911954050566422356094291216308,
3282 ],
3283 [
3284 0,
3285 256469144642366013421437851273427489065,
3286 113262243542095122690917637290503315937,
3287 199091699674411564387591865988172165320,
3288 307317378535008581152200242403175241941,
3289 52842117877411208763738841729667041788,
3290 236637289760732946970232383410410174772,
3291 152801633631022181346007145127318136861,
3292 143313719554355951815475029897180174037,
3293 227480345252237031275325206296651909116,
3294 83599637218459877895580038305416967988,
3295 337741332001020762377051120958166165021,
3296 187265936117990961323670004004118744576,
3297 101105426752582800172234236904577392425,
3298 289561917156283464234909894919875227617,
3299 33426422053914181081554083014450708168,
3300 ],
3301 [
3302 0,
3303 320273100353730833271901817883798340087,
3304 42555734724166532327076557535052001717,
3305 277734443755876514558725081483920437314,
3306 196553533433609541522881377818768141170,
3307 131824945170224115156348304249180678789,
3308 239080501897262773260240860558114298567,
3309 89304264551205125857435717374561950512,
3310 231304054676726267347247194363057066998,
3311 126203006767140365804970127819908305409,
3312 188752442457633374322718812342191759939,
3313 168740542696311368816262288325810365364,
3314 82232336906815191355531301784143771780,
3315 272735894227075661609720286031698639219,
3316 39703882663755035718603928530719131953,
3317 315260251085970095368617066332522137798,
3318 ],
3319 [
3320 0,
3321 340272012535288650244725515872213657632,
3322 5817431235411524961845589102433349222,
3323 334458658084305247516182108498164500038,
3324 218399783815526002531209784314175851592,
3325 121875007815961480505172768256565535848,
3326 212915998396609974535812314799148999214,
3327 127357312638996857595361658406743984654,
3328 54999670067205836124500960781453627596,
3329 285278021542965680697776300915142293740,
3330 59819977481487830231569856553105047210,
3331 280461466394171293397131855829254723210,
3332 187664083359664982947748399909719547012,
3333 152616062828074110165831471114965185700,
3334 182512726634038127659265182960454709986,
3335 157766263476141858775749528887141096130,
3336 ],
3337 [
3338 0,
3339 128115471343654966200615147346371409406,
3340 103920196789209795134661373078961253630,
3341 61541234797901493448768716588982999296,
3342 314192238896022567807897691211025658290,
3343 186409241903641000973127959324608775244,
3344 215924019521558428121236293503061679436,
3345 257970517307770444181640601134950295730,
3346 128515588058472222657489464531478905200,
3347 1064904559135239334538666229413311630,
3348 61816869511211053920928342428781243790,
3349 104860271970919490399348433435050907760,
3350 187338292318221624477723005220090327234,
3351 314456826024473499857639251778938422588,
3352 259024374281946260903478035919185206332,
3353 216313111469186922105602608921184872898,
3354 ],
3355 [
3356 0,
3357 316510607369516078234799230509541711300,
3358 334950057105119541713465054972486776622,
3359 29080454284072331171490148858283240170,
3360 106160351345508832174909371587861216802,
3361 215002723242158221998692659627817935846,
3362 239430878574111030739495068420619798796,
3363 119947502792610917148575650217047741640,
3364 44057458903706442727337602558306942744,
3365 275443918428734260936861058422924813020,
3366 290893903025286917484662921711782430774,
3367 70145851078146859098455281514669463026,
3368 147505791503392159950221622482651382074,
3369 171331127119281865705572287814090775806,
3370 198084134255933795762369546100292679188,
3371 163620390398692929463919832607755348944,
3372 ],
3373 [
3374 0,
3375 248095954804351631468257238777846924315,
3376 308995811994782975368608452212185186505,
3377 110096961275766008279029136835537061074,
3378 181785309680901153469980324742705967692,
3379 66996719201875418152587925460118304343,
3380 128545652795576043188637801430515626629,
3381 289862344515329190940773930145716844190,
3382 252629876478904987301171291626527937549,
3383 6205857624254252321361581278487629846,
3384 114940966642809887283871727492035187908,
3385 314847126874791979742116465780814680287,
3386 72838456807675163820587093357952607809,
3387 186640514885212015287351220514008080986,
3388 296055691828872625511740222288846972552,
3389 133087865990125048569173171767596638867,
3390 ],
3391 [
3392 0,
3393 184672110578227328335082190038270164173,
3394 264987067319259383619344363396639010565,
3395 103286002737609857579081598738336814024,
3396 30382609737327399166058814063837047028,
3397 207639714742615376318561988803406517305,
3398 278482945893065192464935054872002775025,
3399 121537781835716084656737776470062955324,
3400 127564269192856930302611963752747206574,
3401 283257683428067220982353575900225125219,
3402 202942769774701828858723633793729374379,
3403 24278309567827279174780883181158143078,
3404 97264830023248396627510489428741353306,
3405 260206934051448201614255113616127906711,
3406 189363740938024421385893684834404450399,
3407 6109695946875724078507937185893710994,
3408 ],
3409 [
3410 0,
3411 303655499634279949530593567921084293209,
3412 182560476752361308699518191528830879340,
3413 145084181358750305201017670775627523637,
3414 257307523220052733305694439350249432088,
3415 50356443850202627597492724435506709569,
3416 96724665598158346415764193559832388212,
3417 229569986139304831575573592454037537325,
3418 304292031972816023927580467710899739388,
3419 817451591430799109493680670025497253,
3420 145858698871565981244006928397480467600,
3421 183156671161949468663763992105540418761,
3422 49841570574581062683453352891592539876,
3423 256617896545603380607027890019197198013,
3424 228840044352380439175155807997500864648,
3425 96166881062870415606108380229137586385,
3426 ],
3427 [
3428 0,
3429 241544791824338212630605595760903404571,
3430 203625206709996176846305542846347143507,
3431 59187569648682465133000187493920789832,
3432 66098205571913209903551721372391156650,
3433 175529988220552984207989720499206789041,
3434 224030834169654532342220514852970906361,
3435 38864693772537284501252264685698711266,
3436 54902228798727428905786581699635532173,
3437 208658238352760960077810551159781617046,
3438 234593185978437546841668252401982486750,
3439 7699296719186187343633495784916419781,
3440 33187984740218878568369390904106351143,
3441 230289080562167702386942262139749779004,
3442 172503926096195613397159730855257707380,
3443 69705804978465450354391204317223399279,
3444 ],
3445 [
3446 0,
3447 68692267328362828672973348732987746272,
3448 278044679638370375208993371327234027580,
3449 301074427627184832681133717604261173212,
3450 330579915053284713416828047251822997077,
3451 269993077033235586750145334083047803317,
3452 55319160001653171858213575971908509289,
3453 34828373886828998617970203597414988169,
3454 98015874427623479158008147291147662320,
3455 162251771401227604291181292179060118544,
3456 202792266313831323208703851036066137036,
3457 227619766326081095383010568834414076972,
3458 235347579228228019965946666527707176357,
3459 173650806357019566948331759681016871493,
3460 127788887932945808345296051767418989977,
3461 111066330321117863407416747569202137721,
3462 ],
3463 [
3464 0,
3465 328692832092672683046161177361678270347,
3466 31644255456802854384432074203925922553,
3467 298461530428519483892398655470175239538,
3468 7230701207596193361720794169130249788,
3469 321961241688256168123271436803746337207,
3470 24917251412258739914938874456857062597,
3471 305686347202028643006157431582223094606,
3472 75039844005373392741762569528046676954,
3473 275419102272532084817750514291791139921,
3474 63441180739678733952928670961264961827,
3475 288430719311069358125677497256405227176,
3476 81107265357259886107503064568765351398,
3477 268853870726986582903062778276240357997,
3478 56880449353763569760001229874878039839,
3479 294492342429110880141112916785135073428,
3480 ],
3481 [
3482 0,
3483 46686485648248525928066206893520359533,
3484 17137826324667796081128214074010996938,
3485 63781472828832879055555713519177629863,
3486 316505691640288308974913067417483458729,
3487 272511090130682185800050986180421560516,
3488 301695315076221112970579392908992456803,
3489 257740951174744438160154234871489673230,
3490 318142695777355221357448976085263624707,
3491 271533448119991558124891307652193860206,
3492 302714435728685436425180263618272901833,
3493 256062349246627314370150870245719386788,
3494 1686412086893507108008852922356011690,
3495 45669982540788182531800803339311481543,
3496 18112893583466326175185397837905298016,
3497 62136701959926765951766344985168974349,
3498 ],
3499 [
3500 0,
3501 189833875198310313948850623311318067499,
3502 242486748807403418156073091656395061625,
3503 75421101676105690638671948856965419090,
3504 280550016304126210333106399916052006270,
3505 124777933344480592260985314316657552469,
3506 134764939256661832789521116872534506503,
3507 313294853007521378962698491845434021164,
3508 321705902790718787559512679773536426460,
3509 165939990438452716538720863319713984759,
3510 90945398780991089856746539251386966181,
3511 269479536661752804022321201632750717326,
3512 43915030086145605855918813509402221730,
3513 233742085003532471290678853331200013705,
3514 201235372722843562317646357774608836059,
3515 34166151130003694351183781216433507568,
3516 ],
3517 [
3518 0,
3519 170207256407294096523362738221697050676,
3520 335306537234746352302608770949610042461,
3521 165224261035748566593792836988773915753,
3522 260875546406707495596419549712421216599,
3523 90794873282839691615016441605134109027,
3524 74454897452425330632293071377144386826,
3525 244659820617215033563919867365919505726,
3526 77537430153528212253939273179514703116,
3527 247701519688204495287124074967106004280,
3528 263294129289565680916734170182314359121,
3529 93171294176327326312159117174080164197,
3530 337748020136817517014853262926236707931,
3531 167624839635566340903660377904944039023,
3532 3106771537729148174938595622209198086,
3533 173271774367277819731622331090560987186,
3534 ],
3535 [
3536 0,
3537 105523191435724596960339044852258783469,
3538 331939979339953752184098641062230702486,
3539 243053191637407726519797356715047418235,
3540 41856479235576369636636051414419038305,
3541 106495403341863272913064830523444797580,
3542 306740520352630599971565166342879566327,
3543 225507056676094879764233863904348641562,
3544 180348104376407431641895381089842192440,
3545 266919411475907736033412050985301713109,
3546 167589666846319442888970252764677298606,
3547 65753290293082815735904501700159936835,
3548 203125488557699897446218612142548811865,
3549 286716295731786440528297957236502872244,
3550 129484754086442290060387656032777320911,
3551 61200877992482079146334135100390111522,
3552 ],
3553 [
3554 0,
3555 74674286699724614770854075078044145432,
3556 255707982033051078898727364615427559113,
3557 330241407031424344292511497784366094801,
3558 121257488696728992792809887891672506983,
3559 131702149873882172709086146326257366399,
3560 206563992844266805586798868902625422510,
3561 217056053725238044561485950160956423094,
3562 252249852100079661077630798563571676735,
3563 177992980599406335175623840898755191079,
3564 166953702045866238731639718522061306102,
3565 92670240593531485102013902990233202670,
3566 307035323084349042321921884469529121880,
3567 296175847927272957442894493501356131136,
3568 51358525342848131827298965084077300369,
3569 40619102134773334428422978272152112521,
3570 ],
3571 [
3572 0,
3573 268064326789695659113159460258533911876,
3574 79150965421928886205686185526114581936,
3575 321842661481865029361825557921327370484,
3576 292154152933675811205378479553038920841,
3577 24432848446162003865274349884443361741,
3578 298085792006668279375697463813151445305,
3579 55715688912613067796513217380612603005,
3580 32120107126905468666104652838578838955,
3581 278480165838208416331113539147184926959,
3582 47363816238907063395749918189660971035,
3583 311095165109216960553726865007265451359,
3584 260366677964328837022786035462643675426,
3585 13684377250071795442955811588324252774,
3586 330204924310054237151455944700079541394,
3587 66131202174723302402578422380391702998,
3588 ],
3589 [
3590 0,
3591 233832804497114037767588152625300233233,
3592 137908113464379268264368009130352197478,
3593 266067198322008072063912565970328740727,
3594 234664961388271975554361656777807011605,
3595 41706404561115920044282918945817838340,
3596 286173140790158076451223103942020472947,
3597 160340691724569933140072573041819614306,
3598 174117487416406920420940587565714898215,
3599 59936015491108298966095695095167852854,
3600 304714729720406658597618265944128995905,
3601 99481228967860796457813857623165640272,
3602 67079875592212184486528800606045430322,
3603 209506955668137291805346177714483543587,
3604 113935863407168037999179024270093147476,
3605 332793464356551550056789519904863191365,
3606 ],
3607 [
3608 0,
3609 60908477740325367289249550306794988637,
3610 339814420978552888001725396273777543407,
3611 279757947074865824625406188548965919922,
3612 20426869768678011361725237459485514938,
3613 45923789436826961828539753411570710759,
3614 320322895449779194839636797236946392149,
3615 293974742716170965205181585758758187016,
3616 80894630361294277609843497063080240570,
3617 22644721772949118923830606862198325735,
3618 259855581066151243812128960589843443029,
3619 317253688687138951258207617785046649096,
3620 68484759880900331591371424130877061376,
3621 40329311665208262586821263506003041629,
3622 271330269573964311099687262063874306543,
3623 300336829194701393164579022161043166642,
3624 ],
3625 [
3626 0,
3627 8050674427028198889798271502647169000,
3628 156964401753595750379404544622840526127,
3629 149002012386168829683859194182461438663,
3630 173432742585216802961933793868062506086,
3631 176078220131446907497086588718326723470,
3632 324912212735542773105288933606729812297,
3633 322178450454245146615616542624176899745,
3634 41760083012109243670148477584339835205,
3635 33750982621680030182610819293550024365,
3636 140215655502955541778195310564035996778,
3637 148136501591797040124002970599809426306,
3638 208789343703196824986023638586554230051,
3639 206185409759418532391978427899615685323,
3640 312396567004392266096543421181285797900,
3641 315088755574214583187945914377850888164,
3642 ],
3643 [
3644 0,
3645 33544281351084041288659792119726140234,
3646 96530154658957837405747528554784446334,
3647 108516019074382738059312800550287293492,
3648 302815682216673935023436712516382714867,
3649 333533863000007250810253730753679556793,
3650 227708944546440945686013874407077198989,
3651 237201016032263952002621459783758567367,
3652 152130048094493940323197237654752689769,
3653 142639102267627118321323043369471546659,
3654 78321384607332041441795117443564054807,
3655 47604329522569217901582691242814128733,
3656 193584477633347619504374042826664056218,
3657 181602679826271442102661747267790765776,
3658 288754250483796741982317782970926056164,
3659 255214035780675731877392302431649376686,
3660 ],
3661 ],
3662];
3663
3664#[cfg(test)]
3665mod tests {
3666 use proptest::{arbitrary::any, proptest};
3667
3668 use super::*;
3669
3670 proptest! {
3671 #[test]
3672 fn test_pow_2_2_n(a_val in any::<u128>(), n in 1..4usize) {
3673 let a = BinaryField128bPolyval::new(a_val);
3674 let result = pow_2_2_n(a, n);
3675 let mut expected = a;
3676 for _ in 0..((1 << (1 << n)) - 1) {
3677 expected *= a;
3678 }
3679
3680 assert_eq!(result, expected);
3681 }
3682 }
3683
3684 }