binius_field/arch/portable/
packed_polyval_128.rs

1// Copyright 2024-2025 Irreducible Inc.
2// Copyright (c) 2019-2023 RustCrypto Developers
3// Copyright (c) 2016 Thomas Pornin <pornin@bolet.org>
4
5//! Constant-time software implementation of GF(2^128) operations for 64-bit architectures.
6//! Adapted from RustCrypto/universal-hashes, which is itself adapted from BearSSL's
7//! `ghash_ctmul64.c`:
8//!
9//! <https://bearssl.org/gitweb/?p=BearSSL;a=blob;f=src/hash/ghash_ctmul64.c;hb=4b6046412>
10
11use 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
26// Define broadcast
27impl_broadcast!(u128, BinaryField128bPolyval);
28
29// Define multiply
30impl 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
40// Define square
41impl_square_with!(PackedBinaryPolyval1x128b @ ReuseMultiplyStrategy);
42
43// Define invert
44impl InvertOrZero for PackedBinaryPolyval1x128b {
45	fn invert_or_zero(self) -> Self {
46		// The algorithm is ported from https://github.com/reyzin/GF2t/blob/master/src/main/gf2t/GF2_128.java#L400
47		// The only change is the way how x^(2^(2^k)) is calculated.
48		// Computes self^{2^128-2}
49		// self * self^(2^128 - 2) = self ^ (2^128-1) = 1 if self != 0
50
51		// Contains self raised to the power whose binary representation is 2^k ones
52		let mut self_pow_2_pow_k1s = self.get(0);
53
54		// Square res to get its exponent to be 10 in binary
55		let mut res = pow_2_2_n(self_pow_2_pow_k1s, 0);
56
57		// Contains sel raised to the power whose binary representation is 2^k ones followed by 2^k zeros
58		let mut selt_pow_2_pow_k1s_to_k0s = res;
59
60		// Loop invariant
61		// res contains z raised to the power whose binary representation is 2^{k+1}-1 ones followed by a single zero
62		// self_pow_2_pow_k1s contains z raised to the power whose binary representation is 2^k ones
63		// selt_pow_2_pow_k1s_to_k0s contains z raised to the power whose binary representation is 2^k ones followed by 2^k zeros
64		for k in 1..7 {
65			// Fill in the zeros in the exponent of selt_pow_2_pow_k1s_to_k0s with ones
66			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 with 2^k zeros appended to the exponent
69			selt_pow_2_pow_k1s_to_k0s = pow_2_2_n(self_pow_2_pow_k1s, k);
70
71			// prepend 2^k ones to res
72			res *= selt_pow_2_pow_k1s_to_k0s;
73		}
74
75		Self::set_single(res)
76	}
77}
78
79// Define linear transformations
80impl_transformation_with_strategy!(PackedBinaryPolyval1x128b, PairwiseStrategy);
81
82/// The POLYVAL "dot" operation defined in [`RFC 8542`][1], Section 3.
83///
84/// This is the operation $a b x^{-128}$ in the field
85/// $F_2\[X\] / (X^128 + X^127 + X^126 + X^121 + 1)$, which is a Montgomery multiplication of
86/// polynomials with an R value of $X^128$.
87///
88/// [1]: <https://datatracker.ietf.org/doc/html/rfc8452>
89fn 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
130/// Multiplication in GF(2)[X], truncated to the low 64-bits, with “holes”
131/// (sequences of zeroes) to avoid carry spilling.
132///
133/// When carries do occur, they wind up in a "hole" and are subsequently masked
134/// out of the result.
135fn 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
158/// Bit-reverse a `u64` in constant time
159const 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
168/// Calculates `value^(2^(2^n))`
169fn pow_2_2_n(value: BinaryField128bPolyval, n: usize) -> BinaryField128bPolyval {
170	match n {
171		// value^(2^(2^0)) = value
172		0 => value.square(),
173		1..=6 => {
174			// Use the fact that for finite fields with characteristics 2
175			// (x_0 + .. x_k)^(2^n) = x_0^(2^n) + ... + x_k^(2^n)
176			// Split value into 4-bit nibbles and use precalculated values.
177			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
192/// Table where value[i][k][j] = BinaryField128bPolyval(j << 4 * k) ^ (2^(i+1))
193static 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	// The following code is used to generate `POLVAL_NIBBLE_POW_2_N_TABLE`
3685	// #[test]
3686	// fn generate_nibbles_pow_2_2_n_table() {
3687	// 	let mut results = <[[[u128; 16]; 32]; 6]>::default();
3688	// 	for nibble_index in 0..32 {
3689	// 		for nibble_value in 0..16 {
3690	// 			let nibble_val = BinaryField128bPolyval::new(nibble_value << (4 * nibble_index));
3691	// 			for n in 0..6 {
3692	// 				let mut result = nibble_val;
3693	// 				for _ in 0..(1 << (n + 1)) {
3694	// 					result = result.square();
3695	// 				}
3696	// 				results[n][nibble_index][nibble_value as usize] = result.0;
3697	// 			}
3698	// 		}
3699	// 	}
3700
3701	// 	println!("[");
3702	// 	for n in 0..6 {
3703	// 		println!("    [");
3704	// 		for nibble_index in 0..32 {
3705	// 			print!("[");
3706	// 			for value in results[n][nibble_index] {
3707	// 				print!("{value}, ");
3708	// 			}
3709	// 			println!("],")
3710	// 		}
3711	// 		println!("    ],");
3712	// 	}
3713	// 	println!("]");
3714	// }
3715}