/*****************************************************************************/
/* */
/* REGENERATE CYCLES */
/* 09/25/11 (dkc) */
/* */
/* This C program regenerates cycles for the 3n+c sequence given entry */
/* points. The number of even and odd elements in the extended sequences */
/* are counted. */
/* */
/* "jump=0" indicates a no-jump attachment point */
/* "jump=1" indicates a one-jump attachment point */
/* "jump=2" indicates a multiple-jump attachment point */
/* "jump=3" indicates a jumped-over attachment point */
/* */
/* "delta" denotes the number of odd elements in the jump minus j where */
/* t=u(mod 2^j) (for one-jump or multiple-jump attachment points). The */
/* domains of the cycles are also computed. */
/* */
/*****************************************************************************/
#include <stdio.h>
#include <math.h>
int main () {
int sin[2325+2676+2409+2643+2952]={
1166,938,3170,4376,1094,1184,296,74,3998,2000,500,8210,5870,2702,1514,3656,
914,1766,7544,1886,1208,302,614,2432,608,152,38,
502,4708,1384,346,32896,8224,2056,514,694,7198,5302,13384,3346,1756,
4498,2188,3304,826,139816,34954,10708,3934,3466,1852,1774,27874,10954,3958,9082,8974,
40186,21994,11602,4852,4762,3826,1936,484,592,148,898,838,3088,772,646,2926,
5956,1618,1108,1276,1612,3634,1864,466,676,628,13942,21718,72262,63352,15838,10162,
4312,1078,10108,4096,1024,256,64,16,4,
12482,11132,7082,3158,3032,758,1682,1352,338,974,16118,10322,3782,12644,6596,3212,
5024,1256,314,620,1430,2060,3320,830,3086,16928,4232,1058,3806,4700,13502,13778,
4754,2216,554,710,8270,264716,86426,32912,8228,2036,884,668,16658,5564,4052,1262,
5678,7940,91214,14870582,8365958,6705992,1676498,472394,177650,58454,34136,8534,6056,1514,1070,7370,
3266,5300,1496,374,1466,1052,7622,63512,15878,12716,4832,1208,302,
718,772,1474,2086,38626,22984,5746,7144,1786,3424,856,214,940,1012,2614,1714,
6136,1534,1078,1390,1024,256,64,16,4,1258,11968,2992,748,4468,6064,1516,
10780,2524,976,244,3370,8350,3634,29248,7312,1828,1876,5272,1318,16126,6550,2722,
2788,5254,3532,4354,3706,3982,1996,3868,1228,4504,1126,9052,2200,550,9322,9814,
3640,910,844,5758,2662,15046,8170,31894,9850,6898,7036,1822,1186,1924,1798,10618,
85138,50524,9976,2494,1438,1042,7522,5488,1372,760,190,574,1282,1978,22486,7204,
11590,6712,1678,1132,4300,14710,25504,6376,1594,13534,5578,26332,5440,1360,340,2398,
1402,7756,43924,72988,14188,4066,3544,886,
-66682,-24502,-9118,-10174,6566,2966,1616,404,2804,2048,512,128,32,8,2,13994,
7352,1838,4406,2156,908,674,4946,9482,31676,5336,1334,1004,692,1454,3626,2978,
7862,3452,6854,3074,10148,6674,8024,2006,1256,314,1436,548,2624,656,164,2462,
1574,1094,914,3164,4244,3518,1934,2642,4622,3776,944,236,
1264,316,19804,10750,27058,262156,74992,18748,74074,28282,11110,7510,4618,2236,5512,
1378,1270,5728,1432,358,1462,3604,1180,2674,2956,2092,3388,8806,6214,4756,1396,
766,8104,2026,10048,2512,628,622,2920,730,778,796,3754,1912,478,4702,946,3766,
5062,4108,2416,604,2650,1498,1066,904,226,433594,163102,269122,57934,38962,31486,66424,
16606,25114,9922,19522,5284,4918,
1472,368,92,992,248,62,1298,1856,464,116,2432,608,152,38,722,776,
194,578,644,626,740,932,680,170,632,158,1352,338,968,242,596,1184,
296,74,542,1568,392,98,1040,260,554,572,1424,356,914,848,212,
766,35074,31996,29296,7324,1942,1234,3562,3268,5518,4006,2008,502,694,4786,
18610,181222,68464,17116,3292,1348,2734,1654,1126,928,232,58,87562,50518,19450,
11752,2938,4546,6238,14884,13528,3382,1774,1384,346,1600,400,100,
23408,5852,1604,1718,1370,4094,2042,4130,3590,5534,2582,14282,26234,24542,9710,
4148,9422,4040,1010,1946,5822,2690,2780,1028,1556,5102,2420,3428,2180,1880,470,
1460,2774,5372,1514,74348,11342,4760,1190,
1330,1006,1834,4426,3706,1930,2380,13930,18628,4000,1000,250,958,4624,1156,
724,100276,11752,2938,1714,1150,4738,2284,2596,994,880,220,5596,2842,3166,2794,67876,
13234,5470,3766,32278,29644,34828,20128,5032,1258,47452,14614,14740,4948,7114,4840,1210,
1228,8086,9232,2308,940,2806,4090,2038,3604,4192,1048,262,
71828,13976,3494,3236,2402,1682,2552,638,6008,1502,9554,3248,812,2726,2804,1034,
896,224,56,14,2426,1418,1040,260,926,129110,127112,31778,12326,8204,3578,1850,
1202,5426,16358,10472,2618,1490,6584,1646,4670,10040,2510,4532,1358,3560,890,842,
824,206,2588,3506,8744,2186,1328,332,1364,764,3968,992,248,62,4208,1052,
2858,1580,3200,800,200,50,1310,27986,30884,6776,1694,15386,6278,4802,2240,560,
140,8042,3524,4658,18062,17654,7190,7250,4184,1046,3362,
-51398,-682268,-190616,-47654,-354218,-247598,-138002,-51242,-458186,-106802,-39542,-55142,-125258,-56102,-85418,-145994,
-81854,-81386,544,136,34,25348,6922,90022,41248,10312,2578,2722,2278,3136,784,196,
1504,376,94,1558,7714,39628,5356,2974,1624,406,3532,200632,50158,19318,9994,
19378,12172,2602,4612,4162,10468,4216,1054,904,226,688,172,4636,1378,2044,892,676,
1462,10588,2494,1444,1678,1138,1912,478,
3596,1184,296,74,1316,9860,8678,3764,3434,3206,1712,428,590,1058,3314,8336,
2084,48188,49226,28964,135344,33836,6854,3080,770,6140,2660,9698,10604,2498,10064,2516,
1982,2684,2414,1688,422,668,986,3332,3380,6176,1544,386,2570,2720,680,170,
1370,1280,320,80,20,1202,6626,8012,2012,5042,8402,40682,24158,175034,75308,14630,
5996,1634,3800,950,866,3152,788,1496,374,650,1640,410,47702,18398,14924,3308,
1130,1910,1226,1964,878,1364,1658,3710,5114,2930,7850,5690,3866,12872,3218,37400,
9350,4016,1004,698,1760,440,110,524,608,152,38,536,134,560,140,
896,224,56,14,518,704,176,44,
4204,2458,1432,358,1618,1348,2134,2476,1972,880,220,3724,7048,1762,10360,2590,
9118,8098,5266,2374,3670,3340,30418,9448,2362,1396,772,2878,4852,1420,3160,790,
1720,430,4690,2212,1204,736,184,46,2716,11746,5614,10960,2740,1024,256,64,
16,4,3286,3124,1096,274,970,874,838,712,178,21466,8560,2140,5500,4744,
1186,2350,7120,1780,844,1744,436,592,148,538,
6758,31826,12446,10592,2648,662,5096,1274,3638,5498,2342,7118,5282,2492,5768,1442,
1052,1574,6146,2816,704,176,44,512,128,32,8,2,18404,3962,2018,1268,
1316,758,3068,1718,3878,9062,18854,28016,7004,3248,812,11168,2792,698,16838,38708,
6338,2888,722,782,5384,1346,1016,254,1694,3788,8648,2162,1322,1388,3014,12464,
3116,4628,11978,13508,3044,1082,25586,10106,3314,1754,2546,1466,4634,2198,9656,2414,
2636,5822,3926,4124,2438,16292,3566,3284,6356,3194,1856,464,116,6032,1508,794,
1118,11888,2972,2114,1304,326,1478,9548,10196,4004,1262,1988,884,4148,78074,37136,
9284,2252,20726,19916,15992,3998,5246,9002,18458,6086,18296,4574,7814,32876,16298,7058,
3158,
574,10762,11308,2632,658,2986,2560,640,160,40,10,7834,5686,2644,3562,
2974,1732,5254,2482,6370,12220,2614,1492,1786,2284,940,688,172,544,136,34,
9520,2380,958,2590,1624,406,664,166,808,202,7684,25168,6292,7576,1894,1222,970,
13678,11950,34150,13318,5506,26314,20110,8266,12436,10492,2290,3784,946,4912,1228,742,
790,
2690,6026,7520,1880,470,3596,12704,3176,794,3806,1940,3254,5360,1340,764,656,
164,1328,332,944,236,5576,1394,2066,2444,2678,8006,14936,3734,3434,7370,8654,
3758,1922,9950,4244,4226,4946,4064,1016,254,608,152,38,908,6170,9494,5864,
1466,12020,27770,67814,19970,13802,10358,15296,3824,956,692,4604,1376,344,86,1934,
1238,36854,4100234,3462008,865502,325076,158306,102902,233348,50696,12674,13946,76640,19160,4790,6332,
1700,1760,440,110,554,
1198,3532,3928,982,5896,1474,1066,14404,3214,7654,8896,2224,556,4522,2170,2776,
694,8086,7438,27526,30154,14212,3178,1792,448,112,28,7330,3262,3118,13000,3250,
1732,838,2872,718,760,190,1390,2062,10354,4396,6952,1738,6274,2866,1588,8284,
9532,3964,2398,2632,658,748,22234,17374,11056,2764,3604,3046,5008,1252,
734,3062,3008,752,188,2522,1460,788,662,1658,1136,284,4358,3002,1640,410,
668,3488,872,218,596,626,1076,716,4952,1238,1982,7940,9398,6572,3134,16688,
4172,4052,1274,992,248,62,5504,1376,344,86,1334,2036,896,224,56,14,
4196,1490,6152,1538,8588,3290,1748,842,830,12134,16130,7016,1754,1172,
520,130,1360,340,5848,1462,1312,328,82,21862,13762,9028,3826,3094,8218,15184,
3796,16102,9172,48052,40780,10468,3688,922,2932,3682,3358,1774,1180,736,184,46,
532,3904,976,244,2548,3520,880,220,556,2692,2044,898,1792,448,112,28,
2656,664,166,1936,484,1582,1108,7840,1960,490,21886,8722,8254,3610,11602,
18484,80872,20218,19504,4876,12214,4336,1084,718,784,196,1342,1018,3304,826,3142,
5302,2392,598,9196,2194,3220,6220,3178,28306,16000,4000,1000,250,
1322,5126390,1922912,480728,120182,45584,11396,11402,58382,80486,30698,22166,8828,2144,536,134,
566,728,182,584,146,4184,1046,908,686,22904,5726,12260,7622,3374,4994,4736,
1184,296,74,1514,3698,5570,11240,2810,2870,1592,398,3572,2294,1376,344,86,
548,6974,2864,716,650,3266,8324,9458,10430,3836,1442,7670,3392,848,212,4238,
6002,7514,5516,1550,6128,1532,1118,52172,10298,7082,11348,18764,4034,9296,2324,9368,
2342,1394,3626,27998,20708,11186,11888,2972,20222,6590,2756,14642,14804,7424,1856,464,
116,13184,3296,824,206,11474,9614,9404,23390,15074,119288,29822,9290,5402,4328,
1082,1898,4808,1202,3464,866,836,6212,12698,8432,2108,6182,2834,8480,2120,530,43472,
10868,4346,3734,1916,1172,1730,6380,1712,428,596,19016,4754,8558,5480,1370,2060,
902,854,3512,878,2240,560,140,542,1496,374,656,164,
1906,11482,4822,5794,2416,604,4336,1084,6394,2914,2938,1618,2554,1474,1318,2032,
508,4516,2824,706,1102,3382,10678,5008,1252,26806,29788,29884,53278,53482,20572,10876,
8824,2206,10996,2578,16708,2956,2122,1312,328,82,1024,256,64,16,4,904,226,
4084,1282,1264,316,7108,32866,12706,3874,2902,6442,2932,1066,916,688,172,2614,
5416,1354,20122,8062,14398,76378,29158,17692,9916,45646,40966,24334,22984,5746,
-14602,-14278,530,716,4706,2282,22460,7610,29948,9716,6404,1718,5300,2762,1682,1148,
1616,404,962,878,8726,48068,9530,14558,9482,3572,4460,5786,4316,16340,7862,11132,
4424,1106,932,692,2042,4622,5516,4784,1196,12452,2852,1052,280904,70226,26852,5552,
1388,4328,1082,24254,14936,3734,13910,50360,12590,97988,18890,6218,2654,2786,1562,2534,
19688,4922,10184,2546,1472,368,92,2600,650,1088,272,68,
4996,3124,3322,2890,2920,730,20470,8194,11866,12448,3112,778,1732,3190,1714,
6376,1594,6106,29758,17104,4276,13720,3430,1804,856,214,598,742,796,1018,1918,
2686,3010,3718,1912,478,
1298,2048,512,128,32,8,2,3134,1694,1154,1946,4106,14636,2966,1742,1172,
15302,8336,2084,1994,87536,21884,4622,2252,4052,6608,1652,33602,20198,17888,4472,1118,
938,5402,7022,3152,788,54002,42842,38612,25664,6416,1604,1748,23654,18308,6446,2936,
734,794,524,2012,896,224,56,14,
1810,1198,1972,1186,964,700,2980,1078,3376,844,4084,4246,5056,1264,316,6706,
3034,1762,1180,1630,3790,3430,8560,2140,1900,3268,1132,2944,736,184,46,1324,
2788,1042,910,8452,2104,526,1594,1672,418,676,646,8074,2818,1576,394,3592,
898,856,214,4276,1510,6130,3400,850,838,10402,4420,1348,772,664,166,3754,
3466,5536,1384,346,1006,1864,466,694,3052,7426,3304,826,2320,580,628,
524,1448,362,656,164,25514,10088,2522,1466,1070,3374,5318,4292,1514,1088,
272,68,920,230,1430,3662,6578,4016,1004,8234,3608,902,1808,452,974,2990,
4994,4796,7262,13418,5552,1388,4904,1226,980,704,176,44,1838,4022,4502,5120,
1280,320,80,20,4094,16922,6866,7694,11384,2846,6392,1598,15362,17468,9506,3584,896,
224,56,14,
4264,1066,9724,2344,586,2968,742,1120,280,70,10510,4462,2194,2536,634,6574,
2986,5710,2662,1660,832,208,52,2212,1924,1948,886,5704,1426,2104,526,718,
790,44278,31372,7270,2956,1516,3832,958,880,220,562,1618,
-86374,-38002,-31054,-86482,-23410,-69934,-26734,-29596,-179284,-33094,548,4586,3884,1250,10040,2510,
1736,434,50540,9998,4004,8924,2168,542,2120,530,4910,2294,1382,1040,260,2588,
4388,7016,1754,2240,560,140,3794,31802,79754,46166,17834,11336,2834,7826,14144,3536,
884,4346,5522,11228,2492,30794,18626,18194,27266,25484,5300,2618,61286,23504,5876,3518,
38408,9602,10580,4280,1070,1214,8582,3740,5180,2984,746,1724,
4720,1180,4990,9346,5836,3988,1270,2020,1198,30124,9778,3664,916,694,1696,424,
106,562,1072,268,1558,2182,2422,2668,2056,514,2110,3718,3070,11038,11794,7516,
32854,19786,7942,4852,1432,358,2602,1498,1084,2938,1624,406,1534,38740,7786,3442,
1882,1228,4864,1216,304,76,6646,5044,1468,3100,5176,1294,4222,8104,2026,1282,
2434,2920,730,796,2530,4114,22648,5662,7258,3244,2218,1354,1030,1936,484,982,
1858,3424,856,214,1426,12250,5116,8254,7606,5584,1396,784,196,
2504,626,758,17786,5918,3524,1184,296,74,1928,482,704,176,44,932,698,
1112,278,2720,680,170,3476,2630,7580,3440,860,1550,2180,1418,34310,62726,95402,
63740,52940,57152,14288,3572,
2692,16894,5668,5428,2836,2104,526,35038,8602,6148,8146,64198,24598,9748,3562,
19486,8506,6094,7228,3484,4474,3826,5716,3148,1114,1936,484,
8900,3386,13214,5480,1370,9542,3602,3338,17702,7946,41840,10460,2486,2738,2852,2114,
8864,2216,554,2960,740,1520,380,596,2744,686,782,818,1772,2276,1952,488,
122,4418,
1834,7900,5290,4588,14596,3262,3148,5614,6862,2830,2704,676,652,2770,1564,1840,
460,2542,6262,9670,10654,7306,2974,2986,3292,3832,958,1852,4486,6280,1570,1114,
2374,4498,2212,940,842038,1069972,151384,37846,102490,45142,92626,35260,11230,7630,4072,1018,
12586,18418,7432,1858,1222,3526,5470,4390,10636,6982,8386,3670,13894,14218,4918,10492,
4264,1066,4552,1138,952,238,17296,4324,1336,334,449986,169270,218500,41494,129076,221638,
189502,107908,20758,199546,195010,73654,97486,108502,240838,205702,176056,44014,260134,251044,47596,202678,
260782,252250,108322,41146,
-18994,-33466,-18382,3038,175004,167336,41834,16214,10436,3608,902,5576,1394,10034,8816,
2204,9032,2258,1556,818,4442,2192,548,998,1934,188234,71114,27194,10724,2348,1976,
494,4202,2102,2498,10292,2456,614,1772,1814,2336,584,146,962,3968,992,248,
62,2552,638,
2440,610,1660,838,2224,556,1000,250,6232,1558,1360,340,3898,4870,3964,1270,
1486,1084,730,3118,1696,424,106,4414,2182,2830,1588,3172,3802,5710,2668,2776,
694,4078,2056,514,1606,3520,880,220,568,142,580,1480,370,8140,17506,11164,
2620,1018,5098,10732,2350,1408,352,88,22,928,232,58,1324,1108,16888,4222,
2110,1318,6070,39406,15304,3826,8356,8032,2008,502,
3542,1856,464,116,1352,338,2792,698,1712,428,608,152,38,542,1076,1622,
1136,284,3182,4586,3452,18992,4748,1418,4640,1160,290,4574,2210,9290,29792,7448,
1862,1226,12458,7232,1808,452,7328,1832,458,5168,1292,770,13160,3290,3170,
8300,2084,3386,3224,806,830,4268,1328,332,590,2162,3776,944,236,572,1004,
716,662,776,194,1442,30170,18290,13982,4856,1214,7490,16412,3488,872,218,
1222,2008,502,3124,1114,946,2314,1396,790,1852,5464,1366,14950,9730,
3274,1756,3250,3286,4366,4408,1102,10276,6652,12004,19780,3706,1918,66166,34036,6910,
5380576,1345144,336286,429904,107476,20680,5170,4096,1024,256,64,16,4,22372,6634,3016,754,8920,
2230,10810,4582,3898,1990,2440,610,1096,274,3574,5068,2746,1558,2176,544,136,
34,934,1846,6490,2962,14752,3688,922,874,856,214,4606,24094,34786,10708,2536,
634,766,175618,38266,14878,23122,14302,71164,827866,310978,100756,19420,10702,100270,87112,21778,
17182,26038,
3842,1970,1268,2186,1874,1232,308,5786,11132,4454,6272,1568,392,98,566,8054,
264662,382994,144152,36038,25220,5258,5696,1424,356,596,1010,908,2702,17774,9020,3860,
3158,6752,1688,422,2870,12428,20366,37424,9356,7370,4052,1496,374,28466,11204,2630,
5912,1478,3350,8540,29924,6140,3050,1784,446,1574,1730,1178,6758,8216,2054,4358,
8288,2072,518,12908,19232,4808,1202,980,1064,266,1280,320,80,20,1226,2594,
1502,2168,542,1628,1928,482,710,2864,716,2816,704,176,44,4328,1082,22148,
4682,30896,7724,9188,2252,3464,866,854,3494,5462,31616,7904,1976,494,
2716,3442,48148,14866,16600,4150,2086,1312,328,82,4408,1102,24820,12928,3232,808,
202,1438,12184,3046,1672,418,4552,1138,21904,5476,556,634,17854,78766,23080,5770,
4570,3118,1804,868,7810,9106,19132,5956,6982,3148,1120,280,70,4180,2500,3208,
802,29194,17746,26764,5548,1570,8998,3904,976,244,5704,1426,10546,22072,5518,4012,
1282,3598,1984,496,124,6574,2776,694,790,826,4090,13480,3370,3220,2230,1366,
1042,4018,14614,6010,10456,2614,1510,1096,274,4666,3658,3382,1798,1204,2020,14350,
4252,3040,760,190,9268,3478,1834,2356,3652,22390,8926,5686,2662,1528,382,2554,
13360,3340,1156,3004,4990,6568,1642,2248,562,10384,2596,2182,1348,4126,4612,4462,
3742,3154,8296,2074,2398,2932,
1556,7286,2978,3002,5054,2426,4568,1142,1250,2030,1292,13100,4262,3722,7298,5432,
1358,1040,260,1400,350,662,21416,5354,26276,13454,5576,1394,2114,2516,14612,10700,
22874,39344,9836,2312,578,1652,3218,4856,1214,986,1454,1076,2762,7808,1952,488,
122,2624,656,164,4838,9212,2258,10886,102092,29858,18122,27248,6812,1808,452,16034,
10346,61268,65156,19652,6854,7754,14126,5828,2966,5648,1412,1724,854,2642,7268,4526,
2228,
1828,874,5278,3754,14368,3592,898,868,694,5764,1612,8536,2134,4324,1342,
15556,3448,862,9208,2302,6142,14728,3682,1912,478,
1352,338,2072,518,1622,3854,5780,1616,404,608,152,38,1568,392,98,6752,1688,
422,572,7562,3368,842,848,212,932,2126,4322,3746,2048,
512,128,32,8,2,5312,1328,332,1424,356,
1864,466,1594,6346,36964,11728,2932,6184,1546,4408,1102,946,640,160,40,10,8044,
3628,6082,5542,39076,12322,6730,8458,6370,9316,3952,988,718,802,1870,1234,2026,
4240,1060,1630,1144,286,2548,12556,2698,4138,6022,2626,4492,1564,826,5374,
33244,6766,3070,1684,4978,4132,2494,1468,808,202,41560,10390,23842,11590,4192,1048,
262,1006,910,874,3268,9352,2338,2518,4300,7696,1924,3112,778,2356,9262,4006,
9586,6724,2950,1762,2212,1954,970,8182,4570,43174,6748,1798,1438,1072,268,
4016,1004,722,13148,3746,5696,1424,356,4562,18596,56888,14222,4934,2384,596,1502,
11204,7262,15488,3872,968,242,4994,7634,29636,15038,85562,33686,13166,3998,5966,
2612,3662,1964,902,872,218,17522,47276,9398,4058,9224,2306,19574,7874,7418,4664,
1166,1262,9236,3932,5318,2528,632,158,3536,884,11114,7586,8936,2234,14768,3692,
1226,2024,506,1748,1826,4076,1298,15032,3758,2054,1304,326,656,164,962,3044,36476,
7778,9098,6452,9008,2252,956,9746,30068,10196,4202,3698,73088,18272,4568,1142,
4858,2356,976,244,580,3652,3820,2410,1438,145402,55060,10858,4606,6424,1606,6316,
3112,778,826,844,1714,1732,2302,4480,1120,280,70,14200,3550,4684,2524,5938,
2488,622,5128,1282,6910,8368,2092,1924,4048,1012,724,670,7774,6052,1786,1204,
760,190,2698,1546,1114,952,238,4642,35746,13156,6964,1840,460,5506,69010,20344,
5086,5656,1414,3334,4948,1462,2158,7072,1768,442,700,
3410,1814,3590,13874,5738,3806,5252,1520,380,8666,3374,3236,1142,3506,1850,1628,
1796,872,218,998,5612,4910,4100,1304,326,28454,30806,33440,8360,2090,2822,12416,
3104,776,194,608,152,38,
7366,3298,5734,2686,3244,1144,286,1018,1912,478,1072,268,586,12496,3124,
2218,2476,1000,250,1480,370,
47282,27938,12488,3122,3098,8282,126608,31652,10244,3704,926,884,3044,2198,4574,2252,
1256,314,13244,3020,1364,6404,2894,1622,2630,1796,1922,2354,2666,4136,1034,3422,
1820,878,866,5636,2732,2522,7916,5960,1490,2180,2066,2504,626,1694,1172,10010,
17030,8516,5546,34526,13484,4790,28436,14546,9524,10388,6932,5474,
2584,646,2860,8290,3646,3394,1810,1216,304,76,2242,1378,1054,1936,484,628,
2080,520,130,586,1366,6094,31204,6388,5050,4078,2986,1780,6472,1618,1144,286,
1504,376,94,1396,8332,12790,31366,22300,9910,30076,9802,3310,9064,2266,7876,2014,
2476,5932,30160,7540,3538,1864,466,712,178,604,1672,418,694,622,3376,844,
2908,2158,3616,904,226,46762,14092,6910,5230,33076,13924,3148,3880,970,146548,32860,
8476,5536,1384,346,
2792,698,800,200,50,956,2960,740,1046,1934,5654,4526,24074,9566,10628,10412,
4274,2144,536,134,1604,5870,18242,18836,4070,7460,7598,32822,19808,4952,1238,2042,
1304,326,1802,1214,3224,806,13754,5696,1424,356,992,248,62,13976,3494,8144,
2036,920,230,3926,3554,5714,2450,4520,1130,962,2306,2924,2168,542,3014,
5092,2506,15298,9952,2488,622,772,1564,832,208,52,39382,12094,5074,8854,
5944,1486,1096,274,1132,1102,952,238,628,2824,706,1744,436,2596,6064,1516,1156,
1672,418,1582,8746,247876,71062,24892,5206,2344,586,4378,10372,4264,1066,21886,598,
1372,796,688,172,1264,316,808,202,5458,6316,1912,478,718,1078,1246,1006,
916,10924,2398,1438,1348,1726,1186,2014,1294,1024,256,64,16,4,2668,1318,
17728,4432,1108,18574,7504,1876,7096,1774,1204,13624,3406,1816,454,6172,1696,424,
106,7306,1192,298,21874,10642,13846,23494,28042,39868,8014,3544,886,3082,8278,2992,
748,1048,262,3634,10708,83104,20776,5194,8752,2188,
674,13136,3284,8144,2036,1922,6818,30632,7658,12110,11138,18482,18158,169496,42374,16430,
8888,2222,2894,5306,4334,33836,6884,5468,3110,1706,3500,1196,764,1052,5228,1520,
380,998,914,9602,16538,10652,9050,6440,1610,3104,776,194,5864,1466,2174,1556,
1880,470,716,240044,45548,9080,2270,1916,1214,1286,1022,1232,308,1436,9194,
13568,3392,848,212,7952,1988,11480,2870,1616,404,
1102,3496,874,868,206050,30304,7576,1894,2416,604,2656,664,166,1444,9220,2242,
1576,394,688,172,13186,4654,5410,4126,26794,10588,11998,29902,27796,5752,1438,15322,
6286,7870,14350,14674,6652,13348,4774,4036,4990,17464,4366,6250,2884,4846,25240,6310,
4900,2992,748,10756,2458,1462,2170,1354,1048,262,1498,4630,5800,1450,1084,
19696,4924,18238,27472,6868,1828,2344,586,760,190,9976,2494,7546,3370,1804,1858,1468,
8518,6142,15034,6178,8014,9328,2332,3550,13864,3466,1840,460,1480,370,3712,928,
232,58,562,2668,2116,2602,1516,22612,4780,7114,3208,802,
10622,7328,1832,458,1076,3398,5438,4412,2594,1514,5222,5774,3992,998,6098,2828,
3764,2756,1058,938,8588,6194,2864,716,2696,674,794,2264,566,5114,13376,3344,
836,698,3926,17768,4442,3836,2432,608,152,38,29102,194168,48542,28658,11288,2822,
4952,1238,9488,2372,986,2378,1616,404,1004,4316,3722,1994,1508,824,206,20828,
973226,1050014,591986,222536,55634,21404,13232,3308,220412,63344,15836,7886,
2656,664,166,604,26254,8332,2104,526,1096,274,379630,61540,75718,28936,7234,
11116,2626,6742,3070,2986,3034,4798,3988,2476,1006,8110,4282,3364,16048,4012,1294,
1312,328,82,7300,7714,9082,23176,5794,7462,3340,1168,292,11674,15940,9298,24796,
3868,1492,1774,1762,4060,5410,7138,8596,3772,37918,63190,24238,10090,7030,3178,3142,
1720,430,3328,832,208,52,6442,4978,10702,3958,2026,2494,3016,754,5356,1546,
2224,556,646,784,196,
3404,5318,13778,15020,3062,5786,7460,3134,1718,8828,2198,1568,392,98,1412,1754,
4058,6002,71450,62864,15716,7856,1964,1226,18584,4646,6434,4976,1244,776,194,1466,
5030,16526,6740,7508,9290,24794,23498,39368,9842,14210,9350,5912,1478,2486,3212,13850,
14264,3566,1880,470,1082,6884,6644,48116,31430,6302,2906,
1228,7198,6124,5164,6712,1678,2302,61972,618928,154732,67858,25990,85300,12946,5398,7582,
7684,1984,496,124,1588,1174,8518,27610,8716,54682,16330,16918,20320,5080,1270,3652,
556,3496,874,2338,1420,8512,2128,532,40732,12814,8566,9808,2452,3748,1246,8170,
5416,1354,4354,2176,544,136,34,
-1400104,-350026,-327370,-5911942,-2216434,-2292700,-3458332,-1433800,-358450,-1347646,-254722,-5818144,-1454536,-363634,-1365274,-766606,
-2421694,-3340702,-938620,-6257002,-2638108,-3446986,-7349530,-4132750,-1305604,-2770924,-519004,-656392,-164098,-2616238,-5573200,-1393300,
4784,1196,3506,3452,10454,12668,19202,4526,6404,1934,10196,2456,614,1706,1184,296,
74,572,1502,8474,3722,1940,908,1616,404,620,80144,20036,3770,1958,2462,7538,
4814,13802,5720,1430,2168,542,5108,752,188,3950,5918,11912,2978,1790,66158,58406,
34214,20606,53036,12752,3188,1142,3614,8996,6350,12536,3134,18086,11534,9782,21794,7082,
3200,800,200,50,1994,1292,1724,6848,1712,428,5378,3992,998,1922,1664,416,
104,26,554,1574,2246,2624,656,164,18908,10562,5774,24092,10106,4334,6242,
2708,1052,2816,704,176,44,4316,4406,50306,11870,15128,3782,3488,872,218,626,2222,
4460,6998,3932,4244,1340,5270,3788,2426,1454,3812,
4432,1108,2836,3784,946,1894,1486,1102,958,904,226,31954,19336,4834,37180,7516,
1954,16528,4132,2524,1018,21874,13666,11542,6844,1828,1876,2854,1756,874,47182,18238,
7384,1846,3232,808,202,2758,25276,5284,2848,712,178,1462,562,1678,1174,
2470,1648,412,622,778,3244,7696,1924,1972,5674,6076,1684,3298,13150,5476,2902,
2944,736,184,46,1570,6376,1594,10210,9868,6538,8104,2026,6196,11098,18472,4618,
6484,6466,4294,65614,25150,9976,2494,1480,370,
884,2930,23510,9362,12758,5330,11180,2642,7778,7412,138530,135776,33944,8486,3728,932,
5024,1256,314,3098,2876,17012,8282,3398,1820,1454,1364,1748,1856,464,116,2936,
734,2288,572,2120,530,5990,2792,698,4388,5954,7616,1904,476,1022,4160,1040,
260,2702,1832,458,1622,1154,3566,1958,1280,320,80,20,1370,2156,950,902,
1694,4394,3836,3614,4934,2396,1292,788,1586,10208,2552,638,4874,4106,3674,4610,
6482,12638,7310,2804,9884,10370,11342,7736,1934,1670,1172,
2734,12394,5194,2494,6652,3994,2044,6112,1528,382,12238,82864,20716,7192,1798,2266,
1396,808,202,622,4456,1114,964,9964,4168,1042,3034,1684,862,3322,1792,448,
112,28,802,4024,1006,39502,47908,6316,3142,2896,724,682,934,3166,5266,2374,
2572,14914,8272,2068,9028,5326,13942,9208,2302,3508,1204,772,4654,34324,6982,4516,
15856,3964,6166,4834,30898,9646,25516,8542,9802,4222,5164,2818,10798,109468,126982,41902,
86752,21688,5422,
4256,1064,266,2096,524,4778,16028,5876,1784,446,13364,203528,50882,19628,10880,2720,
680,170,5042,2438,7532,4880,1220,776,194,620,
1606,1150,1282,12850,13444,12958,4000,1000,250,1510,1114,1996,922,1888,472,
118,592,148,3328,832,208,52,1384,346,1564,5458,11938,17770,11164,13486,6304,1576,
394,652,670,1408,352,88,22,556,16036,29482,49894,19258,12202,12886,5380,21688,
5422,56194,57226,35458,77110,29464,7366,3310,3382,1816,454,718,3706,3454,1930,9448,
2362,2698,7180,1894,1258,1060,6358,2932,2194,5332,8728,2182,1366,1870,7612,3652,
10690,17980,2920,730,1780,15928,3982,6046,2542,3058,5182,2416,604,9724,2326,
1420,814,6532,8584,2146,17494,7108,25150,8032,2008,502,736,184,46,4738,5674,28978,
27052,5620,2950,1654,1168,292,3874,14578,14902,6136,1534,1390,2572,1030,934,898,
9214,3550,3226,3184,796,3778,9232,2308,7666,9070,5812,3004,2740,2140,
5342,2552,638,788,10148,4226,16496,4124,1322,3722,8222,3632,908,1088,272,68,
1592,398,698,662,6476,1952,488,122,8342,13766,4832,1208,302,2978,2834,2966,
7046,2942,1652,5504,1376,344,86,2282,4532,2423192,605798,835028,354884,76436,542372,153914,
199256,49814,53132,8432,2108,944,236,2078,1328,332,1304,326,1052,746,3236,10688,2672,
668,674,1862,1484,2564,23324,4922,2768,692,27824,6956,37868,12596,22964,100598,
175928,43982,17042,10958,4658,3992,998,5954,7628,12794,104918,69926,8762,15548,3464,866,
2006,4802,
8068,2062,2386,1444,820,2164,6880,1720,430,3190,8500,3784,946,904,226,634,
3502,5134,3358,3262,3208,802,850,868,712,178,616,154,2056,514,742,1306,
2542,53212,17938,7276,412564,58978,22666,7336,1834,1792,448,112,28,1738,1450,1576,
394,1072,268,2722,1570,1138,976,244,12712,3178,3460,1198,3676,3610,3514,14332,
5404,4432,1108,67792,16948,5566,4504,1126,4582,31828,8362,3034,44950,92578,35266,13774,
7390,5530,4324,1360,340,3694,13198,39214,12970,4006,4330,6286,15628,9202,4000,1000,
250,
3548,6716,27938,10886,9812,2390,2720,680,170,614,578,3908,8678,7274,3278,55496,
13874,80912,20228,15464,3866,2000,500,644,3746,13520,3380,1184,296,74,11198,
12062,36848,9212,6500,1958,2408,602,776,194,13358,70220,16394,6698,3062,3098,1712,428,
1496,374,1586,1202,1526,2234,1388,1766,27200,6800,1700,12290,36434,11210,4754,
2300,3584,896,224,56,14,7634,3110,2894,19676,16922,6896,1724,3056,764,2936,734,
3542,3368,842,866,2360,590,16130,32312,8078,22592,5648,1412,
19432,4858,25264,6316,1852,898,1882,4204,37468,7576,1894,4744,1186,2044,934,10684,
2554,6022,8668,2176,544,136,34,1396,6310,719524,153358,58060,21916,4660,4582,13492,
8308,6748,1816,454,2188,2458,4690,3562,7288,1822,1234,2104,526,748,4420,2620,
1042,2068,9226,24778,139966,53038,20440,5110,4078,2080,520,130,1450,2698,15310,6292,
20404,11224,2806,12952,3238,50488,12622,5284,4564,10612,46900,22402,13978,14410,52480,13120,
3280,820,2962,
560,140,578,13112,3278,12302,7190,3248,812,704,176,44,1856,464,116,
1412,48104,12026,8144,2036,1952,488,122,1448,362,1874,4202,12698,8522,8324,23318,9296,
2324,12212,4814,47504,11876,5258,17426,17324,3800,950,908,722,3230,17648,4412,1586,
29060,90758,34586,20834,23690,72998,27926,11024,2756,5222,2510,2846,1766,1214,1532,2708,
3788,1262,11168,2792,698,1772,884,1628,3602,5660,3194,3176,794,1826,6794,
4958,2360,590,6416,1604,5498,4472,1118,1280,320,80,20,
1624,406,32794,12850,76858,29374,183028,34870,25000,6250,2896,724,688,172,195334,111256,
27814,17026,24370,500812,142234,53890,81394,36340,7366,5524,1588,850,3622,3418,1834,1240,
310,3130,1726,66154,25360,6340,1858,1804,1888,472,118,26788,60964,40552,10138,
4354,6610,7738,3454,13840,3460,1642,1168,292,5308,7846,5794,2596,5890,17242,7018,3184,
796,43486,59524,9880,2470,2770,
1958,4280,1070,2042,7466,3068,2246,15944,3986,2048,512,128,32,8,2,554,
1124,764,1598,2282,1610,5360,1340,1760,440,110,1970,1292,2618,3110,5252,1538,
1130,1286,3338,5846,11894,29876,55310,37940,15566,69242,23966,14864,3716,1250,1022,13136,
3284,1430,5282,2534,4766,4064,1016,254,1526,8198,7712,1928,482,734,1796,890,
8780,6332,3164,2258,1400,350,1580,626,788,5012,1808,452,638,1742,16268,18644,
3590,4796,2732,6224,1556,5498,3104,776,194,225896,56474,52262,46724,9314,4046,
82934,133316,25550,39032,9758,6872,1718,
832,208,52,1756,1216,304,76,568,142,5248,1312,328,82,4006,2056,514,
3064,766,6628,13594,12838,5368,1342,4414,6358,2938,10732,2566,1516,838,868,23512,
5878,2758,1588,3694,2008,502,742,87466,50584,12646,5296,1324,802,3034,2872,718,
1432,358,688,172,586,1714,
1166,992,248,62,578,1712,428,1328,332,3728,932,3242,48098,28442,126344,31586,
19154,15068,3380,9488,2372,2054,4208,1052,752,188,590,776,194,1496,374,1076,
4862,2378,15320,3830,2048,512,128,32,8,2,1388,
3070,7894,9298,4042,3718,7468,5788,3016,754,838,5572,1600,400,100,574,3040,
760,190,
3248,812,3212,2294,6974,13346,60938,23408,5852,14066,12482,4484,1604,11888,2972,3896,
974,3464,866,1658,1178,998,1952,488,122,602,782,3302,
1420,1174,3802,14560,3640,910,898,3526,1966,1294,1042,1978,4252,1354,
10816,2704,676,1582,1150,988,742,1444,1798,1480,370,1600,400,100,
1988,3488,872,218,4220,2912,728,182,626,5324,1556,1832,458,1652,1952,488,
122,656,164,11426,12290,10322,16136,4034,8204,2096,524,21650,166190,55076,135572,39524,
17594,9026,23444,7988,13748,14990,5192,1298,6362,24884,116420,51764,29570,132656,33164,6776,
1694,2546,7754,5756,3236,8378,5138,26222,9068,2258,11642,5444,4946,70934,
27158,10742,4586,3974,2048,512,128,32,8,2,8702,4580,7430,3344,836,3002,2870,1634,
4028,2102,1346,29258,17852,6812,1934,1520,380,7700,3560,890,2042,13220,19904,4976,
1244,1628,2750,3182,27626,16934,6908,4694,2318,302066,386834,10179518,4296506,1814192,453548,85598,
57758,979268,415778,353462,133106,172994,168584,42146,38210,
694,1786,1228,1864,466,1108,766,3298,13180,8212,2098,5296,1324,1768,442,724,
5134,20224,5056,1264,316,11236,2476,2092,1984,496,124,2704,676,1072,268,
21116,6062,4808,1202,1010,938,4124,2558,22088,5522,2630,12368,3092,41000,10250,12326,
20144,5036,3668,2660,1058,956,
5644,1618,4024,1006,4240,1060,3106,6460,1888,472,118,604,40564,12808,3202,48088,
12022,5068,1510,1126,982,928,232,58,1432,358,694,820,1630,1438,1384,346,
1594,2296,574,2572,1042,3538,
1862,2882,2828,14066,9314,11384,2846,1628,866,3206,8144,2036,14552,3638,5912,1478,
43136,10784,2696,674,12230,10124,6722,4448,1112,278,2150,1586,2294,10574,4526,2258,
2672,668,686,818,
61666,23686,140668,40966,43288,10822,7618,3418,5776,1444,832,208,52,2572,6358,
15586,6406,20356,4378,15766,24514,9754,35692,31522,12382,8368,2092,5884,3058,1708,4792,
1198,14146,5866,2632,658,808,202,3442,1852,1924,922,6856,1714,1204,3994,9772,10744,
2686,2914,1654,339442,127852,97132,75262,43738,483604,60244,9454,5602,2662,4912,1228,3184,
796,38932,5404,11704,2926,2848,712,178,628,
602,788,710,1916,20624,5156,1844,908,1808,452,6206,8288,2072,518,3470,8960,
2240,560,140,1646,50174,34316,41036,15092,3392,848,212,7502,26402,42578,29012,6002,
2672,668,8882,3482,1868,3578,1904,476,12362,5198,13946,5792,1448,362,698,824,
206,4184,1046,1994,1310,3776,944,236,1472,368,92,
33040,8260,3730,5350,8428,2170,4504,1126,4162,3748,6826,20380,4384,1096,274,2764,
2530,2830,1624,406,9040,2260,34960,8740,4222,2146,2614,1720,430,724,3100,1144,
286,670,814,868,29314,17896,4474,6448,1612,2380,2542,1516,1198,1012,2704,676,
5368,1342,1066,28480,7120,1780,3424,856,214,21892,7564,6016,1504,376,94,598,
3676,1252,1882,15358,6322,9904,2476,336808,84202,284314,700294,1622290,580132,120142,45616,11404,
5986,4774,4054,21406,8590,3784,946,
2786,62516,18992,4748,1454,11306,15788,3524,20234,12836,10514,14402,22808,5702,2702,
4568,1142,992,248,62,1004,752,188,8408,2102,1352,338,4082,6122,96194,126326,
47936,11984,2996,2252,986,1964,932,2714,2936,734,8336,2084,4622,6554,5096,1274,2126,
12602,8498,9848,2462,2012,2468,
568,142,2800,700,19648,4912,1228,1756,3130,1738,1216,304,76,1432,358,1612,
1864,466,2242,1618,2728,682,820,718,3286,4372,1384,346,694,3238,3232,808,
202,640,160,40,10,2962,10258,5344,1336,334,2608,652,1594,1162,1000,250,
658,4024,1006,20872,5218,14194,19486,44434,28888,7222,4066,3808,952,238,8038,5932,
7876,54640,13660,8746,3844,1528,382,5068,2836,1096,274,6316,4996,1690,1198,
928,232,58,586,784,196,5752,1438,10204,10342,7228,14302,39904,9976,2494,6370,
14626,4390,3880,970,2566,2854,3016,754,6982,5338,9286,6634,3052,2266,1414,2206,1366,
3862,13654,11638,6532,1906,7822,9280,2320,580,26938,10666,4564,1420,1810,2350,8476,
6256,1564,3340,2428,7210,3268,5122,
656,164,596,1370,7118,4628,1640,410,2222,3872,968,242,11510,19160,4790,13400,
3350,13814,22076,7622,9116,3548,25478,24182,35198,21212,11918,37052,11834,26450,10484,6956,
11108,2648,662,1448,362,4526,34436,7022,21500,7460,1964,17774,53828,10658,4562,2276,
992,248,62,11870,8090,5462,41516,46862,22808,5702,7496,1874,1268,4040,1010,944,
236,4742,6686,5174,7256,1814,10898,4652,
-27914,-9902,-15014,-17318,-36164,-23702,-11918,-16418,-43778,-16238,-23366,592,148,1456,364,634,
1894,1276,2320,580,2932,3940,7090,13570,35698,86686,58498,52222,24082,40450,64816,16204,
3604,2428,2488,622,4480,1120,280,70,598,790,862,7828,3616,904,226,2878,
10636,2560,640,160,40,10,1420,832,208,52,3022,1840,460,652,688,172,
724,1618,87442,173464,43366,16828,25702,10204,91816,22954,14326,5938,12112,3028,2266,27160,
6790,3112,778,1852,4228,8602,31282,44188,7204,11290,10150,4372,2644,2158,2974,5524,
2968,742,844,4804,4714,4066,6118,2860,1102,1300,1780,2002,17458,26692,13948,836266,
471814,177496,44374,17206,7018,5362,11938,12760,3190,1762,4174,2164,2128,532,1564,1210,
10006,4318,22948,45472,11368,2842,
602,3200,800,200,50,30578,47534,18392,4598,6548,38300,7748,3596,6146,4874,
13112,3278,1796,1922,2498,2822,8168,2042,3878,23288,5822,2750,1598,1166,1004,4604,
1430,1394,96188,18602,28148,11492,5552,1388,3056,764,710,2354,9224,2306,2714,4982,
9626,10814,4622,2300,998,4280,1070,968,242,3164,1160,290,1580,1214,1022,950,
1700,1988,1976,494,752,188,
5680,1420,13810,5746,2722,1588,1216,304,76,4060,2560,640,160,40,10,3658,
6346,18670,11920,2980,1126,6034,2830,3010,1696,424,106,7366,32764,8542,45370,10882,
4648,1162,109048,27262,13132,15952,3988,67756,32518,69214,184396,91540,193954,73300,17518,11272,
2818,1624,406,2512,628,1378,1084,5602,2668,3820,4306,2182,14494,66298,23512,5878,
7654,14296,3574,5710,4630,5518,4522,3964,17902,11488,2872,718,1822,
596,680,170,632,158,3704,926,4910,6842,3134,72356,26552,6638,8300,4802,6626,
2858,1640,410,722,6050,2696,674,1184,296,74,4160,1040,260,10190,6080,1520,
380,12350,107120,26780,11066,4718,6680,1670,2360,590,2966,2732,2210,1616,404,644,
1382,2198,
682,12916,61732,18784,4696,1174,20782,8362,153046,66628,18646,9928,2482,2818,2824,706,
9514,13492,10438,20854,16858,46504,11626,9952,2488,622,802,5392,1348,3448,862,892,
736,184,46,586,3196,1168,292,1504,376,94,604,1018,12034,6712,1678,1198,
4876,182482,104068,11266,6388,13564,3112,778,3358,1828,1936,484,1558,2608,652,1384,
346,664,166,1042,2008,502,6634,9064,2266,7954,5896,1474,5878,21778,13672,3418,
6028,2032,508,2098,2602,4894,2404,10924,4366,2206,1396,11896,2974,1684,3412,3814,
2068,3574,2518,3124,6598,2746,15298,10522,17938,11512,2878,1648,412,646,1798,20368,
5092,2854,6226,4924,1492,
584,146,4814,7724,2018,24254,19016,4754,10646,4562,8372,3404,1208,302,1082,
42668,8570,8450,9836,2414,1676,884,8864,2216,554,1736,434,13076,5102,2432,608,
152,38,1214,4436,2672,668,1388,830,9782,4238,11726,5264,1316,5462,2618,6266,6992,
1748,1916,4274,18578,28142,8912,2228,2108,2510,2036,3062,1718,453842,490616,122654,53810,
559826,145502,373202,358292,102194,454850,386486,342692,424952,106238,241982,161954,105086,333002,188738,883226,
714530,341642,193598,95204,73982,566702,160382,179522,154178,132794,169598,182654,179450,356786,1027844,436328,
109082,2629856,657464,164366,211598,
-18050,-444008,-111002,-67214,-17906,-95546,826,880,220,10660,4174,9916,6892,3364,13900,48940,
15190,9970,3802,1996,3316,1192,298,682,610,3280,820,724,706,2344,586,790,
1870,7000,1750,2410,1474,4336,1084,3166,5380,3202,3418,1852,3490,22552,5638,4018,
2128,532,670,3274,1798,2398,4732,5098,2482,1696,424,106,1156,8194,5524,
1606,2308,2554,1528,382,17374,17368,4342,3868,4306,5848,1462,2248,562,
3272,818,878,1922,1292,42962,16682,14234,11156,4424,1106,986,1718,28328,7082,10592,
2648,662,1706,9698,4208,1052,1724,2006,4406,11174,76442,61592,15398,106586,23804,
15926,19598,12452,2906,1934,2516,41504,10376,2594,1544,386,716,14072,3518,5882,2654,
2762,3236,1178,23954,9554,4154,2168,542,7754,5342,3896,974,1976,494,2786,1616,404,
2156,5504,1376,344,86,1952,488,122,1034,6944,1736,434,734,4856,1214,18122,
9716,2366,4532,3452,8258,3668,4838,16718,10832,2708,2642,1562,26114,10364,6314,6326,
38102,34862,21038,13262,8888,2222,2678,8918,10238,120236,53438,147452,4013042,1505462,4840754,1815854,
1022846,976028,275936,68984,17246,
4540,4888,1222,1030,958,1270,1048,262,670,4306,8572,2206,20398,10678,4576,1144,
286,1624,406,724,7156,3442,5620,3010,22144,5536,1384,346,10966,4684,1450,3538,
6454,2992,748,712,178,2866,5134,1714,4162,19444,6898,8536,2134,1372,2362,2758,
1606,1174,1012,3772,1720,430,2254,4402,6430,7456,1864,466,
1514,3998,2072,518,1148,788,22970,90020,26750,10604,6284,1886,1280,320,80,20,
4502,6536,1634,2336,584,146,830,884,21512,5378,6446,2990,1694,1208,302,686,
2810,8210,6050,3722,8096,2024,506,5294,2558,1532,860,734,848,212,14528,3632,
908,1130,3674,2234,9848,2462,1496,374,578,96176,24044,7148,3584,896,224,56,
14,1748,3458,4496,1124,662,4106,8390,3362,4880,1220,1904,476,3188,5576,
1394,2216,554,6770,5240,1310,1064,266,4208,1052,770,3530,4604,1436,842,3146,1616,
404,7346,5564,
2512,628,3490,1882,2872,718,3628,30898,12160,3040,760,190,1540,862,1918,1024,
256,64,16,4,574,1756,3274,1924,934,6190,8836,2230,7480,1870,2374,4726,
13402,7732,13150,8830,6400,1600,400,100,592,148,
4796,4970,2438,14678,9692,57698,54236,45296,11324,8414,15488,3872,968,242,3500,2420,
1028,4022,3698,2108,12986,5444,3230,4664,1166,15254,10016,2504,626,1460,848,212,
614,1910,2510,12338,6470,5024,1256,314,692,704,176,44,1448,362,710,
638,3266,264572,114344,28586,11294,35630,49760,12440,3110,11954,6968,1742,10880,2720,680,170,
2752,688,172,1030,2518,1714,4138,43726,16972,9070,3976,994,1996,7072,1768,442,
2902,1822,1258,6262,2650,4966,39310,15316,14362,14848,3712,928,232,58,3820,1732,
1924,1978,3874,3616,904,226,1564,868,3328,832,208,52,94504,23626,52432,13108,
8260,3760,940,1138,6514,11338,29104,7276,6154,343060,2856208,714052,202264,50566,23416,5854,
2770,
9788,2384,596,3158,1760,440,110,3776,944,236,620,692,1634,6746,5234,5030,
2462,1700,3452,2762,12254,4454,2246,1418,3956,2552,638,1466,2264,566,788,3308,
1196,800,200,50,2276,3086,5252,12578,19034,12146,20138,10652,4334,21002,19832,4958,
2402,7718,3470,4820,2672,668,2228,2066,4478,
652,1624,406,1828,4288,1072,268,1516,3232,808,202,1462,6556,170608,42652,34402,
10684,14314,5944,1486,9472,2368,592,148,604,2992,748,3298,1936,484,10228,2494,
12334,13144,3286,4864,1216,304,76,6016,1504,376,94,3358,8932,3556,7528,1882,1282,
3244,2332,10912,2728,682,832,208,52,586,796,2548,1054,1522,11902,45868,
11332,2602,1552,388,6538,3028,1144,286,5044,1138,4924,7798,7996,9742,8794,3874,
2098,2974,8446,54616,13654,32098,10036,2458,1498,12856,3214,10606,11686,8014,53644,16528,
4132,6322,4756,1468,13522,18976,4744,1186,1342,
14132,15476,10496,2624,656,164,608,152,38,2774,6728,1682,1208,302,264566,1642604,
2646722,993098,316802,119378,45344,11336,2834,1640,410,10388,6194,2900,1418,1634,1190,3746,
1982,2558,2882,1658,2792,698,6770,3116,6662,178724,34088,8522,5276,4736,1184,296,
74,
2746,3364,11314,29098,17812,6454,2998,1702,1216,304,76,592,148,1486,
3052,1150,4498,8368,2092,970,1990,1324,826,3592,898,3502,1996,952,238,1078,
982,946,5308,3214,2014,2944,736,184,46,1024,256,64,16,4,
4904,1226,6254,2924,1424,356,2072,518,17534,7154,4682,10628,4436,432062,162602,316322,
179378,44516,11054,4724,4742,18692,6704,1676,4256,1064,266,4358,10304,2576,644,1628,
884,3122,12248,3062,1874,21266,16532,15164,3422,1862,
724,3958,13030,97756,28942,17728,4432,1108,31606,52396,24856,6214,14494,7780,2038,6478,
5092,1534,4048,1012,1156,796,1672,418,736,184,46,1474,1132,2830,3040,760,
190,16684,9790,14488,3622,71608,17902,11518,10366,12958,7132,3454,6106,7360,1840,460,
19618,7936,1984,496,124,5254,11356,4642,2320,580,688,172,2824,706,844,8440,
2110,7198,4702,3316,1480,370,718,1852,2056,514,772,916,8908,19120,4780,4768,
1192,298,12262,107098,42520,10630,18160,4540,4612,1444,850,898,
5054,21506,7064,1766,2444,2138,1382,2228,998,2012,3284,1196,3176,794,878,
584,146,2204,3686,3524,5306,2570,1544,386,1124,5120,1280,320,80,20,1274,1058,
1754,1238,3866,2030,3932,15890,17618,9536,2384,596,692,710,1850,3254,2726,2984,
746,860,29822,42458,16502,8630,4562,4028,41486,37760,9440,2360,590,12326,8384,
2096,524,1598,4184,1046,5228,4568,1142,2150,2660,3590,3470,5684,1646,5216,1304,
326,1634,3110,3200,800,200,50,12032,3008,752,188,2786,5792,1448,362,716,1652,
890,914,108554,41288,10322,6458,3002,1706,1220,10382,11516,12002,10166,5048,1262,3446,
3122,29336,7334,5576,1394,11840,2960,740,8078,9572,6764,10466,7658,3452,9212,10544,
2636,2192,548,
892,748,2278,3316,49072,12268,10678,6610,5170,4360,1090,3412,4198,6466,9526,6124,
27202,78232,19558,13756,3160,790,26176,6544,1636,1912,478,760,190,652,1108,3226,
10918,3646,1948,946,1984,496,124,604,694,2398,1480,370,1660,4990,2452,4870,
2386,2794,5116,1540,9490,6790,2926,1678,1210,6250,8032,2008,502,16456,4114,3766,
3694,1966,1318,5494,3898,9652,39298,32464,8116,41536,10384,2596,2182,1630,1192,298,
3010,
4478,3998,5288,1322,2198,1406,2702,1778,47732,9266,16454,6752,1688,422,740,1244,
18884,10730,7490,7394,9002,6518,3026,48044,9590,4178,18572,4064,1016,254,2216,554,
1766,1658,2372,3764,7004,2084,9650,16940,3758,2138,15986,23168,5792,1448,362,
9392,2348,1022,2540,1058,3656,914,10046,5342,11270,4808,1202,6248,1562,87098,67592,16898,
16034,16292,139196,41666,2468000,617000,154250,88220,13424,3356,1490,87410,3830,2018,4466,8366,
3110,1748,1946,4322,6410,5060,4898,6896,1724,11108,11756,2786,5114,5546,4574,47414,
18362,7646,25472,6368,1592,398,1130,2090,2630,1568,392,98,2846,
8848,2212,1330,3286,3304,826,892,3142,6784,1696,424,106,622,5518,18154,
7390,6082,6280,1570,2662,2680,670,6064,1516,1882,1288,322,3952,988,5356,2962,
1852,5446,28960,7240,1810,1528,382,3088,772,2926,8434,8488,2122,1378,2692,4600,1150,
3736,934,2068,970,946,1546,1162,1018,964,2314,1450,1126,2194,1636,17110,11080,
2770,1798,42832,10708,2590,14164,3238,3040,760,190,730,856,214,1576,394,
2152,538,784,196,1114,1000,250,676,1060,1168,292,1204,808,202,658,610,2368,
592,148,1384,346,712,178,1600,400,100,664,166,1744,436,1042,1312,328,
82,1690,1216,304,76,
1280,320,80,20,3404,4898,2420,1604,884,1442,1124,794,1244,1808,452,668,
1646,2384,596,2240,560,140,12320,3080,770,872,218,1082,1766,6974,17126,26414,
16316,14210,5912,1478,194678,167030,143702,318662,1379924,293192,73298,28070,30782,17954,7316,27620,
5762,2744,686,1844,
5092,103864,25966,30868,12868,12886,5416,1354,3958,2068,13264,3316,2392,598,808,202,
5314,37114,22336,5584,1396,1852,1282,10132,5596,25132,5296,1324,832,208,52,1474,
87406,89188,23746,90742,34612,11194,7756,2038,1348,7096,1774,51376,12844,2992,748,724,
5578,4036,35404,7222,3292,6388,3256,814,15244,3442,7846,3526,1906,17638,7198,3046,
1726,1714,3748,4354,15964,1552,388,37444,28438,11248,2812,5164,
2372,7988,9806,4262,2222,1418,3974,28412,5912,1478,1664,416,104,26,4784,1196,
2138,16232,4058,8000,2000,500,8186,23252,12740,96152,24038,7784,1946,7214,3290,6038,
7838,3524,14450,9590,12524,6380,4922,26168,6542,3038,1724,908,1448,362,11240,2810,
13046,12020,108266,71180,13874,9266,6674,5216,1304,326,8348,2150,1628,890,12038,6422,
205502,77648,19412,8810,5660,1646,1202,1886,1292,3554,8618,10160,2540,4568,1142,3950,
2066,2624,656,164,1508,
2812,2254,11668,2584,646,7006,5404,10912,2728,682,1216,304,76,7696,1924,946,
940,5350,7294,5566,4594,2308,1018,31306,5500,3010,1714,1228,3298,1822,2488,622,
2044,2038,10198,17662,11398,51922,20056,5014,11488,2872,718,4378,6538,4684,4756,3550,
3460,1234,1048,262,2836,3064,766,1894,3970,2074,5080,1270,8182,42016,10504,
2626,1570,1174,5266,2560,640,160,40,10,5062,47062,64318,37642,116536,29134,75496,18874,
10084,2476,6322,2956,23008,5752,1438,2272,568,142,
662,1838,43376,10844,74684,34292,7016,1754,1244,8912,2228,1004,1748,914,2768,692,
716,3092,1166,13358,50222,155198,100886,58214,357968,89492,17366,11234,10868,2624,656,164,
1616,404,8696,2174,6662,4496,1124,1184,296,74,614,1292,1958,9032,2258,1832,
458,758,1892,3578,1928,482,9668,12422,6926,8636,6428,112916,21758,288572,124526,244136,
61034,23474,7628,5528,1382,
7048,1762,2458,10990,4708,2680,670,838,5110,2464,616,154,9700,33454,13132,
6976,1744,436,2698,8182,3328,832,208,52,83086,31744,7936,1984,496,124,610,1810,
3646,1954,2566,6244,3004,1150,1018,3700,4348,1402,3970,3898,6076,1726,1234,7588,
5518,2656,664,166,24706,15364,5788,1672,418,1702,2590,1558,2116,2062,1360,340,
9232,2308,1060,8026,7756,5302,2518,1888,472,118,2536,634,3322,5590,5128,1282,
2188,1684,16336,4084,4510,2278,3088,772,682,21790,8758,3490,3430,3574,2032,508,
7264,1816,454,10612,3652,2494,1522,5812,4516,4546,4024,1006,964,1738,1546,6724,
3358,1846,1492,9154,6616,1654,5356,1780,3538,3844,2548,3862,3814,3736,934,5326,
2584,646,4186,5806,2764,2710,3886,2044,970,2428,1042,9964,1978,4456,1114,3382,
1186,2134,1942,13750,4894,2422,1708,3196,3058,4816,1204,4156,1366,1612,10936,2734,
4030,2098,2572,
1502,1676,902,926,10070,4364,1406,1424,356,2942,1856,464,116,1136,284,6398,
2828,1118,1784,446,1154,6236,3446,1880,470,764,1298,14120,3530,2972,4724,2798,
2756,6860,1874,139886,105974,40328,10082,20756,6068,3176,794,1916,2126,14732,3350,1844,
1988,9638,4202,9260,2324,2180,5204,53000,13250,45512,11378,12392,3098,3212,1190,1034,
3604,1264,316,19600,4900,3166,13768,3442,5062,4318,19420,26134,422008,105502,312658,152260,
29788,9670,6910,10732,5920,1480,370,6964,1894,2536,634,826,898,1282,1390,11704,
2926,56092,26458,10510,11662,12634,5326,7288,1822,13648,3412,1228,1816,454,1726,844,
1708,9718,19438,50056,12514,4000,1000,250,682,1732,5398,5494,16576,4144,1036,1762,
20074,8116,2110,7450,3382,3118,3082,1744,436,670,4414,10366,39256,9814,266326,328486,
186244,27220,5692,15052,5704,1426,2734,
20696,5174,11336,2834,1652,4316,4496,1124,800,200,50,608,152,38,4658,2336,
584,146,644,710,3398,5666,2714,3050,2006,26162,10400,2600,650,1214,2156,6152,
1538,1166,2186,1646,4172,6602,2888,722,860,8582,10040,2510,2654,2966,64580,12698,
5246,4424,1106,1004,7574,264542,150278,129596,37922,14810,8384,2096,524,3020,3644,2498,
1526,9032,2258,1436,5360,1340,1850,4964,1520,380,1580,17780,225176,56294,38312,9578,
7412,6542,4454,12092,4874,2402,1490,1148,1796,926,1994,1592,398,1862,4370,2228,
2606,23432,5858,2786,1634,1202,1040,260,638,1832,458,1160,290,698,33758,20462,
19562,4706,2354,1472,368,92,
4744,1186,3802,1516,874,1966,5476,16258,10324,4378,12100,7906,9472,2368,592,148,
2074,7258,7726,5080,1270,1066,2974,11278,4204,1378,3964,1570,4126,35914,21676,4654,
4108,1360,340,2386,9820,5230,2440,610,3316,2602,2938,13036,3034,4384,1096,274,
7888,1972,1828,34906,25222,10048,2512,628,40792,10198,4414,4000,1000,250,16960,4240,
1060,4150,2146,4612,4342,2218,2722,5098,2290,7690,5800,1450,12064,3016,754,5746,
6934,3190,1786,5608,1402,1306,10954,7636,3622,1948,6904,1726,2866,3946,3694,2596,
15952,3988,1954,4450,6556,2650,4810,4180,3412,2434,4324,7528,1882,5962,4828,3286,
1822,8014,3772,4990,3784,946,8212,9670,4216,1054,4936,1234,10120,2530,6268,3460,
4972,1522,6718,8230,3676,3502,5788,1846,1282,3124,6772,11632,2908,7408,1852,4582,
2308,
2786,3044,5648,1412,1874,15626,56774,46838,11246,4808,1202,4682,13100,2876,1130,6230,
7868,2066,2570,12056,3014,10670,4592,1148,806,31358,12350,5222,11252,9974,3470,1892,
7472,1868,4394,24968,6242,4988,1526,1688,422,4070,45014,13694,5726,2738,4244,7682,
5798,
1648,412,1594,7576,1894,5992,1498,1456,364,2962,1702,6958,5392,1348,844,5338,
2536,634,3592,898,928,232,58,4582,15742,8452,2176,544,136,34,604,3754,
7858,3538,1918,2446,2854,8416,2104,526,1774,2476,3202,1792,448,112,28,1486,
2314,6964,2014,6334,4372,64312,16078,10522,3994,2158,2692,1096,274,694,3394,1864,
466,766,
5906,7550,264536,66134,34784,8696,2174,28340,11006,19784,4946,83852,25064,6266,2942,725264,
181316,26534,16406,8624,2156,29384,7346,5246,41462,21746,14642,8324,16190,38546,25310,28226,
27530,10916,11492,13220,29798,18242,7166,32714,12860,12950,82658,24284,13058,4124,15158,19700,
4286,53738,20744,5186,15650,5438,18134,28250,11186,6866,11054,12140,26396,11414,6518,31364,
9596,53012,10532,30170,11906,
15946,16270,6694,2920,730,5740,5632,1408,352,88,22,2158,1402,87388,16978,11032,
2758,4342,10438,9520,2380,1372,850,1960,490,55636,20308,9130,8482,20644,7288,1822,
1276,832,208,52,9286,4180,16744,4186,10114,4396,3076,5188,29068,11464,2866,3094,
3454,1888,472,118,
926,4298,3902,10616,2654,3272,818,368972,69776,17444,9962,7088,1772,12878,6728,1682,
22424,5606,2696,674,12074,8276,3812,31688,7922,34898,48992,12248,3062,1742,
1846,2524,45184,11296,2824,706,2452,1054,3712,928,232,58,616,154,652,838,
2062,7438,14242,12838,1327414,748156,516748,110710,63760,15940,7246,26446,44572,33034,12982,8788,
2242,3100,6790,4024,1006,15214,245290,92578,62410,23998,48460,18490,7528,1882,1300,2308,
7168,1792,448,112,28,4846,20206,47110,39244,15574,10246,13000,3250,1954,5062,3844,
2818,8464,2116,10408,2602,1570,9256,2314,1462,3682,54580,10828,85816,21454,24580,9742,
17158,26590,25258,10066,12010,5098,2506,1534,47992,11998,12946,3106,133510,1011028,190162,62824,
15706,6484,1810,1756,
4304,1076,1490,1154,1028,788,2324,2648,662,3386,1994,4862,65768,16442,5666,2720,
680,170,10352,2588,2216,554,47396,9482,6158,4952,1238,3872,968,242,686,1874,
1298,1082,1346,1100,8894,382628,72338,27722,8834,3908,1328,332,11666,4970,5828,1688,
422,17426,7130,4916,3620,1274,1400,350,9542,13280,3320,830,7934,10694,51338,23816,
5954,2828,6626,3080,770,884,1166,2144,536,134,5006,771428,145238,125372,16880,4220,
28010,55334,112898,42932,9452,36446,24788,17492,
3844,9538,16912,4228,7516,14320,3580,1546,4150,2152,538,1792,448,112,28,640,
160,40,10,5338,4492,1438,9052,5146,4384,1096,274,5002,8218,6112,1528,382,
1150,1366,1108,8092,12952,3238,1810,7552,1888,472,118,1450,8602,6328,1582,2716,
12052,3436,1240,310,712,178,2980,5608,1402,2278,1216,304,76,610,21772,4678,2350,
2626,8164,6274,15868,3274,3094,1756,2530,24334,19234,33874,24154,15076,9190,4042,3418,
3412,13462,5644,1654,114490,65890,677872,169468,24874,28954,17776,4444,8056,2014,9736,
2434,
674,2000,500,55592,13898,16796,3746,3296,824,206,1082,6218,8534,9242,19658,54008,
13502,5660,1658,4952,1238,5618,4652,7022,3230,1808,452,2144,536,134,43640,10910,
4688,1172,11672,2918,3590,2054,1622,4868,
12778,6712,1678,2416,604,3364,1228,10606,15424,3856,964,778,1264,316,1582,4174,
3478,17782,27358,16882,6928,1732,922,2554,3118,5146,4336,1084,1798,4354,2230,24280,
6070,101230,101446,88432,22108,10168,2542,51874,20050,8116,3226,3526,5812,5308,2986,15460,
3496,874,
2030,7430,7880,1970,14720,3680,920,230,2150,37700,6740,1862,5948,42908,73526,42854,
213674,80726,46904,11726,45824,11456,2864,716,10322,3950,9860,9338,4100,22172,86516,16820,
3752,938,950,
15934,6574,3064,766,886,2956,2794,10948,4576,1144,286,706,1894,7444,14962,12394,
16012,5548,1828,5104,1276,838,2524,1072,268,9004,2314,15322,15772,3556,4306,3538,
3214,1804,2512,628,34966,10882,7618,5782,2674,12262,11614,4954,7024,1756,928,232,
58,7726,3496,874,17716,10318,4468,9166,4036,2632,658,2098,17914,14068,5986,4864,
1216,304,76,5728,1432,358,6088,1522,4144,1036,10912,2728,682,634,7372,4528,
1132,1504,376,94,6844,1882,4432,1108,5566,2686,1606,2848,712,178,1318,
12046,5116,1558,1486,1156,1822,1282,2218,7672,1918,1234,2242,2758,3334,7708,2044,982,
1324,
98714,57026,174854,66170,38720,9680,2420,2180,14522,9668,7232,1808,452,193430,73136,18284,
4028,1616,404,3314,7850,5036,1544,386,8642,662,848,212,5834,6878,2984,746,
10262,4448,1112,278,704,176,44,608,152,38,614,830,1562,2378,4118,2144,
536,134,650,5996,1724,1292,842,5312,1328,332,4376,1094,1010,3776,944,236,
644,48008,12002,7988,3746,9614,6230,2936,734,1256,314,1676,914,3620,
1648,412,2752,688,172,1762,1546,1180,3112,778,892,13744,3436,4276,1402,1126,
2134,2626,1942,2482,8290,3382,4048,1012,790,17524,3886,6130,4762,2386,5374,18118,
11692,4192,1048,262,8488,2122,1396,862,5968,1492,880,220,2944,736,184,46,
2890,1684,916,772,13834,5788,4570,2314,1468,5806,7750,5860,3412,1240,310,5032,
1258,1072,268,1576,394,748,9208,2302,12286,31240,7810,13096,3274,1828,7264,1816,
454,1756,3592,898,5050,2494,19576,4894,272320,68080,17020,144082,142858,54172,27898,11062,
8242,4840,1210,1054,
1718,48896,12224,3056,764,11222,19088,4772,1496,374,8174,4484,1442,1142,3284,1514,
1478,13358,7364,1982,2618,1862,104138,26126,23696,5924,1712,428,5156,1568,392,98,
638,1154,1034,3014,6284,7886,12878,27026,10736,2684,2258,1448,362,3932,2558,2942,
3158,8882,26828,14174,9476,2378,1892,956,1772,6074,4742,5744,1436,20168,5042,2492,
2204,1844,4454,6614,13256,3314,2018,1358,25406,15794,6524,3338,5714,2744,686,3512,
878,6398,5102,2324,7334,9044,13904,3476,3662,4124,10448,2612,
39256,9814,4282,14794,9826,21652,7594,5776,1444,4954,3820,1318,1096,274,5236,7882,
5938,23062,9250,5890,7828,3706,5542,2680,670,2464,616,154,1948,5218,29374,22462,
18088,4522,4048,1012,7648,1912,478,4192,1048,262,700,
1646,1220,1850,4424,1106,3902,2066,6128,1532,890,3614,1958,18518,5300,4724,4856,
1214,1058,2102,8582,7586,5774,2768,692,4238,2192,548,5666,4694,2384,596,48002,
28508,5948,1718,1538,2372,2174,1418,6692,
9874,4306,2218,7456,1864,466,778,26860,50674,19606,19408,4852,1738,2920,730,3676,
2542,2938,1882,1792,448,112,28,1516,3232,808,202,2272,568,142,1588,
2336,584,146,2252,2144,536,134,1586,15860,3578,1946,1334,2300,5378,2570,1568,
392,98,1418,1136,284,2990,4496,1124,25742,24590,23618,7700,2048,512,128,32,
8,2,1058,4298,2216,554,812,7598,6278,5042,21416,5354,2612,1094,2126,4664,
1166,3854,6122,2900,1148,5636,1850,1298,2738,9038,10496,2624,656,164,6230,9104,
2276,4610,2354,21026,10082,3524,5654,6788,2012,9146,4034,2192,548,2306,1706,1244,
5330,57152,14288,3572,1274,1082,1010,3308,4250,2198,54074,20882,11000,2750,8390,
50752,12688,3172,2404,2188,1366,24508,5200,1300,23488,5872,1468,880,220,646,1240,
310,10900,6208,1552,388,5608,1402,6688,1672,418,3808,952,238,694,7066,29320,
7330,4228,423520,105880,26470,6982,3022,1738,10420,17866,13606,11116,6616,1654,2890,4588,
3160,790,6454,3472,868,1756,934,2998,7588,3646,1972,7990,6886,2662,1960,490,
3286,14950,4552,1138,2152,538,21754,32446,12772,5104,1276,844,2836,242398,91504,22876,
4894,2440,610,1996,3322,9118,4024,1006,982,97336,24334,9730,9370,39250,23590,81988,
22924,4282,
7568,1892,4502,2294,1466,2360,590,1226,2204,1370,6110,7766,3518,3680,920,230,
692,2438,1520,380,2276,6362,7244,1964,974,1334,1106,10088,2522,4814,2414,1910,
1322,2258,9812,4274,8354,9926,4328,1082,2198,1430,1142,1034,2096,524,704,176,
44,614,836,3230,18944,4736,1184,296,74,1556,1952,488,122,27098,20366,6788,
10484,9548,2396,3086,1928,482,3284,43652,26036,11456,2864,716,740,5390,2576,644,
9164,2324,2168,542,11060,10682,6248,1562,8840,2210,4742,2384,596,1682,17378,17540,
13076,5192,1298,87362,4364,1424,356,4466,10574,4034,166094,47774,39458,36170,21860,14672,
3668,2546,8144,2036,2234,2684,2762,3068,2738,6896,1724,5492,2900,2330,43622,16964,
10034,21338,31094,12266,8414,9224,2306,69866,40814,10010,56384,14096,3524,13538,14300,4196,
28628,9566,64430,27494,10916,18350,
-82172,-73046,-26786,-62678,-22898,-37298,-84296,-21074,-21746,-135326,-53192,-13298,-45182,-26084,-298784,-74696,
-18674,-89786,-71174,-189902,-93944,-23486,-207884,-38372,-51554,-29858,-76028,-29306,-180686,-146324,-39638,-14258,
-39998,-69374,-168518,-62588,-61598,-58682,-33914,-121862,-45092,-35042,-36434,-41186,-49124,-85412,-71804,-60626,
-117164,-21362,-52382,-46802,-54308,-102908,-28658,-39098,-49466,-28082,-48164,-108038,-39908,-58532,-32114,-64676,
-36002,-37694,-28946,1894,2542,13072,3268,20632,5158,7726,14704,3676,7252,1966,7414,5686,
4714,2374,5728,1432,358,2326,2824,706,11302,17116,12424,3106,3508,1264,316,2866,
3616,904,226,952,238,7396,2182,9508,2398,24196,17944,4486,35602,11074,16972,
7504,1876,958,3688,922,1726,4336,1084,2938,1708,1996,2164,1012,796,13732,2992,748,
1678,68314,26224,6556,14218,5938,4588,2806,3094,3256,814,5956,3454,5794,4642,4156,
4234,2194,16114,12742,11284,2722,3346,2002,1624,406,1744,436,688,172,1564,11032,
2758,4966,3838,6118,4324,1858,8224,2056,514,4228,21172,4576,1144,286,2698,1618,
1516,1942,2608,652,7558,597568,149392,37348,4612,5362,2506,1546,1186,
1634,1220,836,764,7928,1982,2582,7214,5576,1394,1130,2678,5144,1286,868118,
198530,75056,18764,16808,4202,3974,23936,5984,1496,374,3200,800,200,50,626,842,
4442,2312,578,824,206,
5224,1306,2254,3154,5548,1648,412,2290,4222,2296,574,4954,4306,6520,1630,
1522,3736,934,958,2872,718,2506,12352,3088,772,60142,32086,12640,3160,790,904,226,
3442,177754,101506,301684,86368,21592,5398,2632,658,9436,6898,7138,13972,12082,349798,131782,
50026,22852,14536,3634,46534,18058,14656,3664,916,6394,5116,38596,29362,32638,8290,15430,
6178,20830,6922,9910,4324,35896,8974,59656,14914,36328,9082,6628,4870,2434,
1838,1298,2252,1382,1454,1154,19652,9452,76682,67592,16898,7268,3566,1946,6728,1682,
2468,2216,554,3128,782,902,1598,1208,302,722,1928,482,3056,764,752,188,
644,1886,1316,1892,2054,5564,1652,9596,2408,602,5708,1868,1328,332,1112,278,
2324,3872,968,242,1658,17372,3866,7988,24446,9776,2444,43616,10904,2726,1832,458,
3278,
16918,26362,13330,5608,1402,2800,700,1720,430,10162,4420,1438,2332,25804,13780,
3004,2368,592,148,2746,7498,6514,3052,188686,277462,267694,98974,57196,62326,190144,47536,
11884,35488,8872,2218,1690,12754,5392,1348,862,2008,502,2476,4732,2854,5302,18100,7846,
9514,3742,3628,7246,7822,10276,2536,634,1852,2044,2098,1396,10216,2554,3286,6190,
15994,8956,4042,19972,4354,2242,1450,1474,1162,1654,73990,1246798,792226,297694,168976,42244,
8530,3808,952,238,5254,9766,11134,7786,3256,814,3880,970,24346,29602,11710,8110,
3976,994,982,9838,5902,13516,8596,22750,14320,3580,2530,1558,6922,2680,670,1900,
11224,2806,28060,23338,7630,6658,3106,1774,2500,1078,8170,3364,1240,310,1798,39358,
23662,11734,15460,3508,5032,1258,1420,3490,1918,2602,
3266,3590,3062,3248,812,1754,1268,848,212,650,854,2006,2654,5138,5942,
4868,10478,146402,218816,54704,13676,5372,4484,3158,3302,24572,16148,3638,3572,1280,320,
80,20,614,6056,1514,1178,1052,5624,1406,3674,1988,11780,3710,5132,2738,1838,
18530,24092,20204,7208,1802,1286,2360,590,3818,2042,1376,344,86,1574,4238,10322,
24902,12260,2792,698,872,218,692,740,1172,830,8972,7400,1850,1304,326,1892,
1334,2276,1388,1916,5696,1424,356,1118,3842,3224,806,3752,938,962,2618,1592,
398,5462,4598,4112,1028,2432,608,152,38,1214,16748,6236,26468,4790,4220,16802,14498,
25010,8102,316988,136628,26228,5528,1382,7292,30734,43856,10964,2666,1610,
5542,4552,1138,2236,1030,7486,3418,61594,41764,8356,14776,3694,1996,2524,1084,814,
916,4462,2284,1390,1132,1228,18922,100474,87676,17050,13576,3394,3436,1552,388,1636,
24658,43936,10984,2746,5218,7366,11194,12346,13318,19150,7792,1948,976,244,3004,1174,
1660,922,3370,14452,8998,6010,7972,4936,1234,
1598,1520,380,1124,3380,2480,620,728,182,680,170,5648,1412,5864,1466,2354,
4892,5486,4532,2804,2318,7610,5810,7808,1952,488,122,2084,11984,2996,2372,5768,
1442,20570,13100,3068,1502,121346,306482,261500,37844,15224,3806,3938,22406,9014,3992,998,
986,65426,66902,25700,13748,5396,14912,3728,932,3086,5030,2498,8132,8294,3722,30920,
7730,9428,13424,3356,5000,1250,87350,33368,8342,3740,3452,1556,109220,33272,8318,3410,
14882,36320,9080,2270,
4144,1036,1822,9262,13594,5710,7726,12136,3034,1750,4360,1090,1378,3172,3502,12802,
4672,1168,292,5188,7060,1936,484,6754,7102,85972,16732,79246,69772,21154,5878,4240,
1060,47794,34186,13432,3358,98284,22492,9910,5068,2956,2362,1498,1174,19588,3826,10156,
6466,2890,1696,424,106,652,1714,5026,2476,4036,5674,2740,1126,2164,1018,994,
7240,1810,7942,5998,5554,7456,1864,466,2416,604,3934,23926,11854,12910,13864,3466,
1912,478,30766,34006,24772,21820,28786,399964,146584,36646,22144,5536,1384,346,742,1948,
3730,3016,754,886,2134,5644,3118,7762,5494,4078,5374,11776,2944,736,184,46,
4846,5860,22468,10048,2512,628,730,
11036,15338,40070,36722,14384,3596,4430,3632,908,3296,824,206,1850,16904,4226,2198,
12260,2912,728,182,38504,9626,6284,5564,3098,3530,2066,1388,4370,2252,
6424,1606,1216,304,76,628,71332,148636,21976,5494,2674,6892,1906,5236,4762,6274,
16768,4192,1048,262,712,178,5212,6238,19306,12394,8506,65476,30538,18712,4678,2368,
592,148,1576,394,1756,20278,8218,26488,6622,12826,22114,21574,8704,2176,544,136,
34,2944,736,184,46,3142,1792,448,112,28,1078,1018,2194,9808,2452,2224,
556,718,1276,2494,7408,1852,8368,2092,1006,4978,8488,2122,2728,682,1918,3034,
221482,126118,47908,137086,60058,41266,57214,26362,12886,5446,2656,664,166,676,16966,6976,
1744,436,3778,3994,5788,1888,472,118,658,10108,6436,11266,15508,5896,1474,5734,
2764,1132,826,13852,3022,1924,8668,4114,15904,3976,994,3754,3646,3436,1258,2242,
620,1730,2510,1556,9584,2396,1064,266,8612,3584,896,224,56,14,3014,3500,
1568,392,98,1592,398,764,758,2756,2312,578,1862,
3238,7438,5722,2686,2902,11986,5110,7234,3328,832,208,52,1084,9664,2416,604,
1708,9070,6640,1660,3922,2086,10132,28132,5890,2824,706,880,220,1600,400,100,
634,2950,13714,5758,4198,10312,2578,1582,2428,2326,6352,1588,1300,4372,5344,1336,
334,1726,2488,622,1888,472,118,3022,3760,940,5272,1318,7402,4630,4918,7072,
1768,442,1516,3562,5380,1624,406,3064,766,2092,3028,37834,50116,10012,4354,2248,
562,826,203404,302398,110902,96496,24124,282364,61330,23614,
-18886,-6466,-11074,-89806,-62158,-48334,-16906,-52744,-13186,-27652,-41692,-24196,-51976,-12994,-14338,-27598,
-42214,-15214,-13762,-17266,-29404,-17122,-18442,-37318,-13378,-24682,-22126,-23278,-25732,-16258,-22738,-18418,
-15202,-20146,-31486,-20362,-15106,-21358,-25006,-31972,-16498,626,2498,1952,488,122,662,
3848,962,1628,3614,7802,3542,3266,2114,22868,4904,1226,1076,818,4442,2282,1472,
368,92,2966,15782,10418,5588,1664,416,104,26,1994,1364,872,218,698,878,3668,
1304,326,1724,6098,7826,50162,23396,11552,2888,722,4424,1106,17726,63284,12482,4058,
2138,1418,1148,22244,6926,11408,2852,8108,3482,1922,3362,2024,506,806,1466,1166,
19004,68576,17144,4286,66122,25412,4652,4496,1124,8222,12176,3044,2876,7532,120146,60614,
35636,7298,239702,102896,25724,761588,143414,94028,27986,16874,6944,1736,434,2438,2912,728,
182,3158,3104,776,194,14684,9122,3644,5192,1298,16088,4022,16574,667238,376862,362096,
90524,31454,44816,11204,2654,8366,9986,14846,64202,24692,5246,18086,11714,3896,974,3428,
2834,19184,4796,8042,3632,908,1796,3038,8852,2276,2714,1634,1538,4724,1502,6908,
1030,3082,5530,12010,10414,4522,9130,13504,3376,844,1198,1066,7660,6394,20272,5068,
1792,448,112,28,622,850,2020,2110,1408,352,88,22,6718,3136,784,196,
20782,8410,12358,5176,1294,1102,
6782,69674,40736,10184,2546,12980,4514,4874,4286,14222,718994,914996,188492,35960,8990,6032,
1508,9578,6932,3494,1928,482,4064,1016,254,6824,1706,2504,626,6332,3092,2414,
1760,440,110,1112,278,722,218558,107330,93494,35678,13586,22214,8948,13250,14114,11750,
5024,1256,314,9488,2372,14618,6458,21470,21998,7268,23186,34364,
1294,5614,22708,4876,2806,3124,1204,844,18334,18406,14932,3418,1900,2080,520,
130,2296,574,3184,796,44326,47620,12286,153514,58186,22438,211996,60694,35686,30646,18784,
4696,1174,2206,4798,15058,4606,22294,14086,7720,1930,1342,3670,3610,1972,988,9448,
2362,1504,376,94,3016,754,1630,4312,1078,2152,538,820,772,2404,1420,2176,
544,136,34,8530,3040,760,190,2824,706,4402,2320,580,20194,31714,72928,18232,
4558,10792,2698,7072,1768,442,784,196,4042,2134,2746,1648,412,5284,3454,8128,2032,
508,8254,8044,3808,952,238,1270,2260,1042,28666,11368,2842,1684,934,22570,9082,
4024,1006,19918,30232,7558,4966,8776,2194,5158,9370,4132,12628,2986,1738,
2396,2222,2798,3122,1790,13166,8954,3602,1970,1358,2312,578,836,776,194,692,
1748,11762,5030,41408,10352,2588,2276,1046,3824,956,1982,4544,1136,284,1628,2006,
4634,159668,18272,4568,1142,3548,2546,1574,21068,42866,16694,106904,26726,58904,14726,35378,
13886,14078,18206,24560,6140,8468,14456,3614,3098,9980,19610,8972,17540,3908,1352,338,
746,15272,3818,10406,146384,36596,6230,8198,14780,4898,2456,614,9332,
14422,6028,1750,1276,1264,316,26584,6646,3112,778,2110,1678,8698,6442,12154,8386,
60496,15124,4972,1552,388,
2474,5036,49226,26108,5516,1862,1610,8870,14108,3266,13622,25286,8198,3392,848,212,
3038,1760,440,110,662,3932,1358,1130,3902,2084,2138,23612,5048,1262,1094,1394,
2336,584,146,1634,7790,3542,12776,3194,9086,4028,1376,344,86,67352,16838,5822,
2804,6818,10814,4676,7412,9734,3824,956,800,200,50,1580,4496,1124,1868,7430,
3176,794,18608,4652,5468,1646,1238,172652,233132,256586,243014,69434,106088,26522,358034,202946,
297932,32858,489752,122438,35522,164618,242312,60578,253544,63386,140468,137894,105962,92354,43610,343238,
97622,149540,80474,207014,175652,50954,235850,98198,75956,553274,672560,168140,241682,137498,303956,131180,
33466,19504,4876,5008,1252,856,214,1702,10354,4504,1126,14026,5032,1258,11596,16186,
14242,5962,2764,56278,86896,21724,10174,7276,9652,4288,1072,268,3064,766,1984,496,
124,1588,24394,7948,6304,1576,394,1198,2188,3874,2074,7258,5314,2614,8356,3214,
3142,5602,2722,1642,8572,3964,2668,6736,1684,1324,93244,27778,11038,7762,3532,3952,
988,7438,4924,2938,7678,5872,1468,1966,9784,2446,2818,1678,2494,2956,4198,7096,
1774,5518,4114,2164,4684,3412,3316,8194,3694,5638,7708,
4640,1160,290,2378,1514,1190,3722,2018,7238,7886,14126,22934,14456,3614,5126,16292,
3380,1256,314,740,1760,440,110,7400,1850,1316,1274,1100,2138,1424,356,2750,
5276,13214,18182,312104,78026,29882,11828,2840,710,5780,1706,1262,5612,3134,5600,1400,
350,4532,1472,368,92,5114,2540,2270,83846,56210,16898,18092,6644,1868,25364,5378,
11126,7814,12998,14528,3632,908,3110,2948,8030,36704,9176,2294,2846,
910,964,1828,2176,544,136,34,1576,394,21718,7198,3322,8038,14266,14020,5500,
1654,218662,243226,208180,90784,22696,5674,15328,3832,958,982,1366,1474,2386,7678,3502,
1936,484,4984,1246,1090,2170,17182,7066,8920,2230,9406,4150,4096,1024,256,64,
16,4,1558,1528,382,766,79930,53422,20656,5164,1816,454,4312,1078,3124,4276,
4762,6976,1744,436,3142,3310,1864,466,3934,2098,4636,1492,6004,30580,55738,44434,
20536,5134,2548,6094,2908,1168,292,1852,970,10054,3340,2962,3040,760,190,694,
20260,6064,1516,1600,400,100,
3032,758,908,794,2006,1376,344,86,656,164,632,158,1136,284,5168,1292,
866,6164,5264,1316,3518,8246,3716,22796,4898,9074,8588,2234,2816,704,176,44,
1682,4382,2324,18116,16532,166058,124208,31052,6446,19772,3872,968,242,6482,8432,
2108,1388,884,1808,452,5354,4052,2648,662,872,218,3968,992,248,62,7568,1892,
14588,17504,4376,1094,1034,2564,43334,16874,8912,2228,2186,21338,13562,9188,6788,18062,
18362,11888,2972,2888,722,3572,1496,374,764,1766,1286,1106,3896,974,2672,
668,2402,8108,2144,536,134,674,23654,9494,4184,1046,1016,254,43586,68852,20924,4034,
15884,3602,6002,6644,3428,8426,5348,4538,4112,1028,14426,9674,21548,4664,1166,2654,
1838,10532,7406,8702,3278,3644,1604,5186,62054,23894,9584,2396,7784,1946,719612,58628,
218546,272114,131906,1116296,279074,152588,29234,32642,161066,40322,192302,661292,124616,31154,914012,523748,
127046,48266,494108,138788,61514,268598,101348,140786,141236,41282,235304,58826,2690576,672644,646712,161678,
311372,59006,294362,167138,216602,123398,46898,1234844,262736,65684,139466,137978,79172,183386,104714,69578,
195938,253052,319796,91502,139076,
8410,3778,3334,3436,21616,5404,4558,17890,6124,5254,4516,32650,12868,2902,4342,6064,
1516,3796,1336,334,1228,1906,7198,14182,9538,39874,15406,15964,9700,3856,964,3580,
18070,9418,4156,7702,5044,1570,1534,13630,34108,26656,6664,1666};
unsigned char cflag[2325+2676+2409+2643+2952+1]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,
3,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,
3,3,3,3,3,0,0,0,1,1,1,1,2,2,2,3,3,3,3,4,4,
4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,10,10,10,
10,11,11,11,12,12,12,13,13,13,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,
1,1,2,2,2,2,2,2,2,2,2,2,0,0,0,0,1,1,1,1,2,
2,2,2,3,3,3,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,
3,3,4,4,4,4,5,5,5,5,6,6,6,6,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,
4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,
6,6,6,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,8,8,8,
8,9,9,9,9,9,9,9,9,10,10,10,10,11,11,11,11,11,12,12,12,
12,12,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,
3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,
3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,2,2,2,3,3,3,3,4,4,4,4,4,0,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,
4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,
2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,
4,4,4,5,5,5,5,5,6,6,6,7,7,7,7,7,0,0,0,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,
3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,
4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,
7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,10,10,10,10,10,
10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,13,13,13,13,
13,13,13,14,14,14,14,14,15,15,15,15,15,15,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,
3,3,3,3,3,3,3,4,4,4,4,4,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,
3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,
5,5,5,5,5,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,
7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,
0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,
3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,
2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,
5,5,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,
7,7,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,
9,10,10,10,10,10,10,10,11,11,11,11,11,11,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,
3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,0,0,0,0,0,1,1,2,2,2,3,3,3,3,
4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,8,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,
11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,
12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,
1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,
3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,
5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,
7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,
5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,
9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,11,11,11,
11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,
2,2,2,2,2,2,2,2,2,
0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,
3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,
5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,
7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,
3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,
2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,
5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,
3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,
7,7,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,10,10,10,10,
10,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,1,2,3,4,4,
5,5,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,
9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,
7,8,8,8,9,9,9,9,9,9,9,9,9,10,10,10,10,11,11,11,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,
2,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,6,6,
7,7,7,7,7,8,8,8,9,9,9,9,10,10,10,10,0,0,0,0,0,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,
3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,
5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,
3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,
6,6,6,7,7,7,7,7,7,7,7,8,8,8,8,8,9,9,9,9,9,
10,10,10,10,11,11,11,11,12,12,12,12,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,
3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,
6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,5,
5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,10,10,10,10,
11,11,11,11,12,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,
3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,
5,5,5,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,
2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,
2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,
4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,8,
8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,11,11,11,12,
12,12,12,12,12,12,13,13,13,13,13,13,13,13,14,14,14,14,15,15,15,
16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,20,20,20,
21,21,21,22,22,22,22,23,23,23,24,24,24,25,25,25,26,26,26,26,27,
27,27,27,27,27,27,27,28,28,28,29,29,30,30,30,31,31,31,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,
1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,
4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,
5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,
1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,4,
4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,7,7,7,7,7,8,
8,9,9,9,9,9,9,10,10,10,10,10,10,11,11,11,12,12,12,13,13,
13,13,14,14,14,14,15,15,15,15,16,16,16,17,17,18,18,18,18,18,19,
19,19,20,20,21,21,21,22,22,22,23,23,23,24,24,25,25,25,26,26,27,
27,27,28,28,29,29,29,30,30,30,31,31,31,31,32,32,33,33,33,34,34,
35,35,35,35,36,36,37,37,38,38,39,39,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,3,3,3,3,3,
3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,7,8,8,8,
8,9,9,9,9,10,10,10,11,11,11,12,12,12,13,13,13,14,14,14,15,
15,16,16,17,17,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,
2,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,
0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,
3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,
5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,
1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,
4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,6,6,
6,6,6,7,7,7,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,
10,10,11,11,11,11,11,11,11,11,11,12,12,12,12,13,13,13,14,14,14,
15,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,0,1,
1,2,2,3,3,3,3,3,3,3,4,5,5,5,5,5,5,6,6,6,7,
7,8,8,9,10,10,10,10,10,11,11,12,12,13,14,14,15,15,16,17,17,
18,18,19,19,20,20,21,22,22,23,23,24,25,25,26,27,27,28,28,29,29,
30,31,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,33,
33,33,33,33,33,33,33,33,33,33,33,33,33,34,34,34,34,34,34,34,34,
34,34,34,34,34,34,34,34,34,35,35,35,35,35,35,35,35,35,35,35,35,
36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,37,37,37,
37,37,37,37,37,37,37,37,37,37,38,38,38,38,38,38,38,38,38,38,38,
38,38,38,38,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,5,5,
5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,
3,3,3,3,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,2,2,2,2,2,3,3,3,0,0,0,0,0,0,1,1,1,2,3,4,
4,4,5,6,7,7,8,9,10,11,12,13,13,14,15,16,17,18,18,19,20,
21,22,23,24,25,26,27,28,29,29,29,29,29,29,29,29,29,29,29,29,29,
29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,
31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
31,31,31,31,31,31,31,31,31,31,31,32,32,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,
2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,4,4,4,5,
5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,10,10,
10,11,11,11,11,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,
3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,
6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,8,
9,9,9,9,9,9,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,
2,2,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,
3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,
9,9,9,9,9,9,9,10,10,10,11,11,11,11,12,12,12,13,13,13,14,
14,14,15,15,16,16,17,17,17,17,17,17,18,18,18,18,18,19,19,19,20,
20,20,21,21,21,22,22,23,23,24,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,
2,2,2,2,2,2,2,2,2,2,2,2,
255};
int cval[166]={2003,2005,2009,2011,2015,2017,2021,2023,2027,2029,2033,2035,
2039,2041,2045,2047,2051,2053,2057,2059,2063,2065,2069,2071,
2075,2077,2081,2083,2087,2089,2093,2095,2099,
2101,2105,2107,2111,2113,2117,2119,2123,2125,2129,2131,2135,
2137,2141,2143,2147,2149,2153,2155,2159,2161,2165,2167,2171,
2173,2177,2179,2183,2185,2189,2191,2195,2197,
2201,2203,2207,2209,2213,2215,2219,2221,2225,2227,2231,2233,
2237,2239,2243,2245,2249,2251,2255,2257,2261,2263,2267,2269,
2273,2275,2279,2281,2285,2287,2291,2293,2297,2299,
2303,2305,2309,2311,2315,2317,2321,2323,2327,2329,2333,2335,
2339,2341,2345,2347,2351,2353,2357,2359,2363,2365,2369,2371,
2375,2377,2381,2383,2387,2389,2393,2395,2399,
2401,2405,2407,2411,2413,2417,2419,2423,2425,2429,2431,2435,
2437,2441,2443,2447,2449,2453,2455,2459,2461,2465,2467,2471,
2473,2477,2479,2483,2485,2489,2491,2495,2497};
unsigned int size[166]={
27,71,77,120,60,70,47,43,39,60,91,72,119,74,129,65,85,62,62,92,156,79,76,36,56,
79,67,44,76,93,37,27,34,100,50,74,78,98,110,134,81,25,39,95,95,75,38,21,60,84,
63,122,73,108,76,84,59,55,154,88,91,83,26,142,98,97,92,83,91,70,102,54,43,18,
28,28,121,31,22,38,36,73,59,87,54,135,72,134,69,77,50,117,101,77,117,60,99,42,
64,65,57,105,49,44,42,92,131,81,109,117,52,76,85,90,69,163,64,87,118,145,49,
66,69,52,30,100,88,97,40,50,35,113,78,100,92,43,40,31,95,98,150,189,36,78,65,
138,125,57,84,119,30,128,27,90,192,38,60,126,77,21,112,91,77,102,197,44};
unsigned int conv[27*2]={5,3,6,4,8,5,9,6,11,7,16,10,19,12,24,15,27,17,38,24,
46,29,57,36,65,41,76,48,84,53,130,82,149,94,168,106,233,147,252,159,317,200,
336,212,401,253,420,265,485,306,504,318,569,359};
int hflag=0; // selects which c value to histogram k values
int hflag1=0;
unsigned int indmin=0; // selects (l,m) value
unsigned int indmax=7; // Note: Could include different (l,m) values.
unsigned int bypass=0; // normally set to 0
unsigned int wflag=1; // normally set to 0
unsigned int infin=0; // normally set to 0
int k,max,temp,order,s[500],t,u,savek,oldk,c,olds,cmax,cmin,delta,locmin,locmax;
unsigned int g,h,i,m,iters,j,count,first,odds,evens,flag,lodds,levens,jump,jcnt;
unsigned int flag0,offset,index,sumtu,total,stu[1000*2],county,countn,countx;
unsigned int histo[100],mincnt,hismin[10],savjmp,second,histoj[100],histom[10];
int lastodd,glomax,usave,tmps,cyccnt,mcount,hcount,icount,lcount,oddsum,oldt,oldu;
unsigned int jumps[500],mflag,attcnt,savind,newhis[100],oldhis[100],histon[20];
unsigned int histoh[200],histoi[100],histox[100],badcnt,badcntu,primary,jmpcnt,tempi;
int glomin,a,badcomp,savet,lastt,evensum,hsum,jsum,compcnt,sum;
unsigned int firstt,savjump,savcnt,tmpcnt,twojmp,lasthop,jmphop,offset1,jmpsum;
unsigned int twojmp0,twojmp1,twojmp2,twojmp3,glohop,glojmp,tmpjump,histoy[100];
unsigned int histoz[100],histow[200],histov[200],histos[200],offset2,badtucnt;
unsigned int concov[27*3],histot[30],histou[30],offset4,concove[27*3],offset5;
unsigned int histoa[30],histob[30],patcnt,cyccntu,cyccntb,histor[100],equcnt;
unsigned int histod[400],offset6;
double lambda,d,dmin,dmax,del,maxdel,mindel,sumrec,tempf,chain,rat,oldchn;
double ratdel,tempg,cap,cam,bp,bm,savchain,maxcmp,mean,std,var;
FILE *Outfp;
Outfp = fopen("out0cj.dat","w");
for (i=0; i<100; i++) {
histo[i]=0;
histoj[i]=0;
newhis[i]=0;
oldhis[i]=0;
histoi[i]=0;
histox[i]=0;
histoy[i]=0;
histoz[i]=0;
histor[i]=0;
}
for (i=0; i<200; i++) {
histoh[i]=0;
histow[i]=0;
histov[i]=0;
histos[i]=0;
}
for (i=0; i<10; i++) {
hismin[i]=0;
histom[i]=0;
}
for (i=0; i<20; i++)
histon[i]=0;
for (i=0; i<30; i++) {
histot[i]=0;
histou[i]=0;
histoa[i]=0;
histob[i]=0;
}
for (i=0; i<27*3; i++) {
concov[i]=0;
concove[i]=0;
}
for (i=0; i<400; i++)
histod[i]=0;
badcnt=0;
badcntu=0;
badtucnt=0;
badcomp=0;
compcnt=0;
cyccntu=0;
cyccntb=0;
equcnt=0;
maxcmp=0.0;
primary=0;
rat=log(3.0)/log(2.0);
ratdel=rat/(rat-1.0);
offset=20;
offset1=60;
offset2=90;
offset4=15;
offset5=20;
offset6=100;
index=0;
maxdel=-1000000.0;
mindel=1000000.0;
county=0;
countn=0;
countx=0;
cyccnt=0;
mcount=0;
glohop=0;
glojmp=0;
twojmp=0;
twojmp0=0;
twojmp1=0;
twojmp2=0;
twojmp3=0;
jmphop=0;
for (h=0; h<166; h++) {
c=cval[h];
iters=size[h];
printf("c=%d \n",c);
for (i=0; i<iters; i++)
s[i]=sin[i+index];
//
// compute order (of loop)
//
sumtu=0;
total=0;
olds=0;
glomax=0;
glomin=1000000000;
a=0;
mflag=0;
attcnt=0;
patcnt=0;
savind=0;
sumrec=0.0;
oddsum=0;
jmpsum=0;
oldt=0;
lastt=0;
firstt=1;
oldchn=1000000000.0;
oldu=0;
evensum=0;
hcount=0;
jsum=0;
for (i=0; i<iters; i++) {
k=s[i];
savek=k;
max=k;
if (max<0)
max=-max;
levens=0;
while (k==(k/2)*2) {
k=k/2;
levens=levens+1;
}
lodds=1;
for (j=1; j<100000; j++) {
k=3*k+c;
if ((k&7)==0) {
oldk=savek;
savek=k;
}
temp=k;
if (temp<0)
temp=-temp;
if (temp>max)
max=temp;
while (k==(k/2)*2) {
if (k==s[i]) {
levens=levens-1;
goto bskip;
}
k=k/2;
levens=levens+1;
}
levens=levens-1;
lodds=lodds+1;
}
printf("error: i=%d, s[i]=%d \n",i,s[i]);
goto zskip;
bskip:
order=3;
while (order<max)
order=order*2;
while ((oldk&1)==0)
oldk=oldk/2;
u=oldk;
//
// find odd natural number divisible by 3
//
k=s[i];
max=k;
if (max<0)
max=-max;
while (k!=(k/3)*3) {
if (k==(k/2)*2) {
if ((k-c)==((k-c)/3)*3) {
k=(k-c)/3;
temp=k;
if (temp<0)
temp=-temp;
if (temp>max)
max=temp;
}
else {
k=k*2;
temp=k;
if (temp<0)
temp=-temp;
if (temp>max)
max=temp;
}
}
else {
k=k*2;
temp=k;
if (temp<0)
temp=-temp;
if (temp>max)
max=temp;
}
}
//
// include even natural numbers to the left of the odd natural number divisible
// by 3
//
t=k;
jump=1;
flag0=3;
if ((3*t+c)==s[i]) {
jump=0;
flag0=0;
}
temp=t-u;
m=0;
jcnt=0;
while ((temp&1)==0) {
m=m+1;
temp=temp/2;
}
while (order<max)
order=order*2;
temp=k;
if (temp<0)
temp=-temp;
while (temp<(order/2)) {
temp=temp*2;
k=k*2;
}
//
// compute sequence
//
hsum=0;
count=1;
first=1;
while (k==(k/2)*2) {
k=k/2;
count=count+1;
}
evens=count-1;
odds=1;
for (j=1; j<10000; j++) {
k=3*k+c;
count=count+1;
if (first==0) {
if (((k&3)==0)&&((k&7)!=0))
hsum=hsum+1;
}
flag=0;
while (k==(k/2)*2) {
if (k==s[i]) {
if (first==1)
first=0;
else
goto askip;
}
k=k/2;
count=count+1;
flag=flag+1;
}
if (first==1) {
evens=evens+(flag-1);
odds=odds+1;
if (flag==2) {
jcnt=jcnt+1;
if ((3*k+c)==s[i])
flag0=1;
}
}
}
printf("error \n");
goto zskip;
askip:
if ((jcnt==1)&&(flag0==1))
jump=1;
if ((jcnt>1)&&(flag0==1))
jump=2;
if ((jcnt>0)&&(flag0==0))
jump=3;
if (flag0==3)
jump=3;
jumps[i]=jump;
attcnt=attcnt+1;
//
// check order of jump types for primary, secondary, tertiary, etc.
//
if ((4*s[i])!=olds) {
tmpjump=jump;
if (jump==3) {
printf("error: primary jumped-over attachment point \n");
goto zskip;
}
}
else {
if (tmpjump==0) {
if (jump!=3) {
printf("error: incorrect order \n");
fprintf(Outfp,"error: incorrect order \n");
goto zskip;
}
}
if (tmpjump==3) {
if ((jump!=1)&&(jump!=2)) {
printf("error: incorrect order \n");
fprintf(Outfp,"error: incorrect order \n");
goto zskip;
}
}
if ((tmpjump==1)||(tmpjump==2)) {
if (jump!=0) {
printf("error: incorrect order \n");
fprintf(Outfp,"error: incorrect order \n");
goto zskip;
}
}
tmpjump=jump;
}
//
// check hops in multiple-jumps
//
jmpcnt=0;
if (jump==2) {
first=0;
second=0;
flag0=0;
k=t;
if (((3*k+c)&3)==0) { // check for hop
first=1; // hop count
lasthop=1; // set last hop flag
}
else {
second=1; // jump count
flag0=1; // set first jump flag
lasthop=0;
}
while ((3*k+c)!=s[i]) {
k=k+c;
tmpcnt=0;
while ((k&1)==0) {
k=k/2;
tmpcnt=tmpcnt+1;
}
for (j=0; j<tmpcnt; j++)
k=k*3;
k=(k-c)/2;
if ((((3*k+c)&3)==0)&&((3*k+c)!=s[i])) { // check for hop
first=first+1; // increment hop count
lasthop=1; // set last hop flag
}
if ((((3*k+c)&3)!=0)&&((3*k+c)!=s[i])) { // check for jump
second=second+1; // increment jump count
lasthop=0;
}
jmpcnt=jmpcnt+1;
}
if ((flag0==0)&&(second>0)&&(lasthop==1)) { // first and last are hops
if (wflag==5) {
printf("warning: non-adjacent hops, c=%d, s=%d \n",c,s[i]);
fprintf(Outfp,"warning: non-adjacent hops, c=%d, s=%d \n",c,s[i]);
}
jmphop=jmphop+1;
}
if ((flag0==1)&&(first>0)&&(lasthop==0)) { // first and last are jumps
if (wflag==5) {
printf("warning: non-adjacent jumps, c=%d, s=%d \n",c,s[i]);
fprintf(Outfp,"warning: non-adjacent jumps, c=%d, s=%d \n",c,s[i]);
}
jmphop=jmphop+1;
}
glohop=glohop+first; // total number of hops
glojmp=glojmp+second; // total number of jumps
if (jmpcnt==2) {
twojmp=twojmp+1; // total number of two-"jumps"
if (first==2)
twojmp0=twojmp0+1;
if ((first==1)&&(second==1)) {
if (lasthop==1)
twojmp1=twojmp1+1;
else
twojmp2=twojmp2+1;
}
if (second==2)
twojmp3=twojmp3+1;
}
mcount=mcount+1;
}
//
// check chain (t values)
//
if ((4*s[i])!=olds) {
temp=t+c;
if (temp<0)
temp=-temp;
chain=(double)temp;
temp=s[i];
if (temp<0)
temp=-temp;
while ((temp&1)==0) // next u value
temp=temp/2;
chain=rat*log(chain);
chain=exp(chain);
if (jump==1)
chain=chain*2.0;
if (jump==2)
chain=chain*(double)(1<<jmpcnt);
if (chain<(double)temp) {
if (wflag!=2) {
printf("error: bad t-u chain, c=%d, t=%d, u=%d, jump=%d, count=%d \n",c,t,temp,jump,jmpcnt);
fprintf(Outfp,"error: bad t-u chain, c=%d, t=%d, u=%d, jump=%d, count=%d \n",c,t,temp,jump,jmpcnt);
}
badtucnt=badtucnt+1;
}
if (chain<(double)oldt) {
if (wflag!=2) {
printf("error: bad chain, c=%d \n",c);
printf("chain=%e, oldt=%d, t=%d, jump=%d, count=%d, s=%d \n",chain,oldt,t,jump,jmpcnt,s[i]);
fprintf(Outfp,"error: bad chain, c=%d \n",c);
fprintf(Outfp,"chain=%e, oldt=%d, t=%d, jump=%d, count=%d, s=%d \n",chain,oldt,t,jump,jmpcnt,s[i]);
}
badcnt=badcnt+1;
}
oldt=t;
if (oldt<0)
oldt=-oldt;
if (firstt==1) {
savchain=chain;
savet=t;
savjump=jump;
savcnt=jmpcnt;
firstt=0;
}
}
//
// check for powers of 2
//
if (((4*s[i])!=olds)&&(jump==2)&&(jmpcnt==2)) {
temp=t;
temp=temp+c;
if (temp<0)
temp=-temp;
while ((temp&1)==0)
temp=temp/2;
if ((wflag==3)&&(temp==1)) {
printf("power of two: c=%d, u=%d, t=%d, s=%d \n",c,u,t,s[i]);
fprintf(Outfp,"power of two: c=%d, u=%d, t=%d, s=%d \n",c,u,t,s[i]);
}
if (chain<(double)lastt) {
printf("error: bad chain, chain=%e, lastt=%d \n",chain,lastt);
fprintf(Outfp,"error: bad chain, chain=%e, lastt=%d \n",chain,lastt);
goto zskip;
}
}
lastt=t;
if (lastt<0)
lastt=-lastt;
//
// count hops up until attachment point
//
if ((4*s[i])!=olds) {
icount=0;
k=u;
k=3*k+c;
while (k!=(4*s[i])) {
if ((k&3)==0) {
icount=icount+1;
k=k/4;
}
else
k=k/2;
k=3*k+c;
}
//
lcount=1;
k=s[i];
while ((k&1)==0) {
lcount=lcount+1;
k=k/2;
}
delta=odds+icount-lcount;
if (jump==1) {
delta=delta-1;
jmpsum=jmpsum+1;
}
if (jump==2) {
delta=delta-jmpcnt;
jmpsum=jmpsum+jmpcnt;
}
if ((delta<-10)&&(wflag==0)) {
printf("warning: delta less than -10 \n");
printf("lcount=%d, icount=%d, delta=%d \n",lcount,icount,odds+icount-lcount);
fprintf(Outfp,"warning: delta less than -2 \n");
fprintf(Outfp,"lcount=%d, icount=%d, delta=%d \n",lcount,icount,odds+icount-lcount);
}
delta=delta+offset;
if (delta<0) {
printf("error: offset not big enough \n");
goto zskip;
}
if (delta>99) {
printf("error: histogram array not big enough \n");
goto zskip;
}
histoi[delta]=histoi[delta]+1;
//
delta=(int)m-lcount+icount;
if (jump==1)
delta=delta-1;
if (jump==2)
delta=delta-jmpcnt;
delta=delta+offset;
if (delta<0) {
printf("error: offset not big enough \n");
goto zskip;
}
if (delta>99) {
printf("error: histogram array not big enough \n");
goto zskip;
}
histox[delta]=histox[delta]+1;
//
if (((c==hflag1)&&(cflag[index+i]>=indmin)&&(cflag[index+i]<=indmax))||(hflag1==0)) {
delta=(int)m-lcount;
delta=delta+offset;
if (delta<0) {
printf("error: offset not big enough \n");
goto zskip;
}
if (delta>99) {
printf("error: histogram array not big enough \n");
goto zskip;
}
histoy[delta]=histoy[delta]+1;
}
//
delta=icount;
if (jump==1)
delta=delta-1;
if (jump==2)
delta=delta-jmpcnt;
delta=delta+offset;
if (delta<0) {
printf("error: offset not big enough \n");
goto zskip;
}
if (delta>99) {
printf("error: histogram array not big enough \n");
goto zskip;
}
histoz[delta]=histoz[delta]+1;
//
delta=odds-lcount;
delta=delta+offset;
if (delta<0) {
printf("error: offset not big enough \n");
goto zskip;
}
if (delta>99) {
printf("error: histogram array not big enough \n");
goto zskip;
}
histor[delta]=histor[delta]+1;
}
//
k=(int)odds-(int)m;
if (wflag==0) {
printf("c=%d, s=%d, o=%d, t=%d, u=%d, e=%d, o=%d, e=%d, o=%d, jump=%d, j=%d, d=%d \n",c,s[i],order,t,u,evens,odds,levens,lodds,jump,m,k);
fprintf(Outfp,"c=%d, s=%d, o=%d, t=%d, u=%d, e=%d, o=%d, e=%d, o=%d, jump=%d, j=%d, d=%d \n",c,s[i],order,t,u,evens,odds,levens,lodds,jump,m,k);
if (evens<odds) {
printf("warning: even count less than odd count \n");
fprintf(Outfp,"warning: even count less than odd count \n");
}
}
//
// continued-fraction convergents
//
for (tempi=0; tempi<27; tempi++) {
if ((conv[2*tempi]==(levens+lodds))&&(conv[2*tempi+1]==lodds)) {
if ((concov[3*tempi]==0)||(concov[3*tempi]==(unsigned int)c))
concov[3*tempi]=c;
else {
if ((concov[3*tempi+1]==0)||(concov[3*tempi+1]==(unsigned int)c))
concov[3*tempi+1]=c;
else
concov[3*tempi+2]=c;
}
if ((4*s[i])!=olds) {
delta=(int)m-lcount;
delta=delta+offset4;
if (delta<0) {
printf("array not big enough \n");
goto zskip;
}
if (delta>29) {
printf("array not big enough \n");
goto zskip;
}
histot[delta]=histot[delta]+1;
}
}
if (conv[2*tempi+1]>lodds)
break;
}
//
for (tempi=0; tempi<27; tempi++) {
if ((conv[2*tempi+1]==levens)&&(conv[2*tempi+1]==lodds)) {
if ((concove[3*tempi]==0)||(concove[3*tempi]==(unsigned int)c))
concove[3*tempi]=c;
else {
if ((concove[3*tempi+1]==0)||(concove[3*tempi+1]==(unsigned int)c))
concove[3*tempi+1]=c;
else
concove[3*tempi+2]=c;
}
if ((4*s[i])!=olds) {
delta=(int)m-lcount;
delta=delta+offset4;
if (delta<0) {
printf("array not big enough \n");
goto zskip;
}
if (delta>29) {
printf("array not big enough \n");
goto zskip;
}
histoa[delta]=histoa[delta]+1;
}
}
if (conv[2*tempi+1]>lodds)
break;
}
//
// total odds and evens
//
if ((4*s[i])!=olds) {
oddsum=oddsum+odds;
evensum=evensum+lcount;
jsum=jsum+m;
hcount=hcount+icount;
patcnt=patcnt+1;
}
//
// compute sum of reciprocals
//
if ((4*s[i])!=olds) {
temp=t;
if (temp<0)
temp=-temp;
sumrec=sumrec+(1.0/(double)temp);
temp=u;
if (temp<0)
temp=-temp;
sumrec=sumrec+(1.0/(double)temp);
primary=primary+1;
}
//
// check chain (u values)
//
if ((4*s[i])!=olds) {
temp=u;
if (temp<0)
temp=-temp;
if (oldchn<(double)temp) {
if (wflag!=2) {
printf("error: bad chain, c=%d \n",c);
printf("chain=%e, u=%d, old u=%d, jump=%d, s=%d \n",oldchn,u,oldu,jump,s[i]);
fprintf(Outfp,"error: bad chain, c=%d \n",c);
fprintf(Outfp,"chain=%e, u=%d, old u=%d, jump=%d, s=%d \n",oldchn,u,oldu,jump,s[i]);
}
badcntu=badcntu+1;
}
temp=u+c;
if (temp<0)
temp=-temp;
oldchn=(double)temp;
oldchn=rat*log(oldchn);
oldchn=exp(oldchn);
oldu=u;
}
//
// check j values for no-jumps
//
if (jump==0) {
if ((m>10)&&(wflag==0)) {
printf("warning: no-jump with j>10 \n");
fprintf(Outfp,"warning: no-jump with j>10 \n");
}
if (((c==hflag)&&(cflag[index+i]>=indmin)&&(cflag[index+i]<=indmax))||(hflag==0)) {
if ((4*s[i])!=olds) {
if (m>19) {
printf("histogram array not big enough \n");
goto zskip;
}
histon[m]=histon[m]+1;
}
}
}
//
// check j values for multiple-jumps
//
if (jump==2) {
if ((m>3)&&(wflag==0)) {
printf("warning: multiple-jump with j>3 \n");
fprintf(Outfp,"warning: multiple-jump with j>3 \n");
}
if ((4*s[i])!=olds) {
if (m>9) {
printf("histogram array not big enough \n");
goto zskip;
}
histom[m]=histom[m]+1;
}
}
//
// histogram k values
//
if (((c==hflag)&&(cflag[index+i]>=indmin)&&(cflag[index+i]<=indmax))||(hflag==0)) {
if ((jump==1)&&((4*s[i])!=olds)) {
delta=k+offset;
if (delta<0) {
printf("error: offset not big enough \n");
goto zskip;
}
if (delta>99) {
printf("error: histogram array not big enough \n");
goto zskip;
}
histoj[delta]=histoj[delta]+1;
}
}
//
// histogram evens minus odds
//
if (jump==1) {
delta=(int)evens-(int)odds;
delta=delta+offset;
if (delta<0) {
printf("error: offset not big enough \n");
goto zskip;
}
if (delta>99) {
printf("error: histogram array not big enough \n");
goto zskip;
}
histo[delta]=histo[delta]+1;
}
//
// find minimum t or u
//
if ((4*s[i])!=olds) {
temp=t;
if (temp<0)
temp=-temp;
if (temp<glomin)
glomin=temp;
temp=u;
if (temp<0)
temp=-temp;
if (temp<glomin)
glomin=temp;
a=a+1;
}
//
// find local maximum and minimum
//
k=u;
locmin=k;
if (locmin<0)
locmin=-locmin;
locmax=locmin;
lastodd=locmax;
k=3*k+c;
while ((k&7)!=0) {
while ((k&1)==0) {
k=k/2;
}
delta=k;
if (delta<0)
delta=-delta;
if (delta<locmin)
locmin=delta;
if (delta>locmax)
locmax=delta;
lastodd=delta;
k=3*k+c;
}
if ((4*s[i])!=olds) { // check if primary
if ((lastodd!=locmax)&&(jump==2)) {
printf("error: no-jump with local maximum at attachment point \n");
printf("locmin=%d, locmax=%d, lastodd=%d \n",locmin,locmax,lastodd);
fprintf(Outfp,"error: no-jump with local maximum at attachment point \n");
goto zskip;
}
if (lastodd!=locmax) {
if (jump==0)
county=county+1;
if (jump==1) {
countn=countn+1;
if (((c==hflag)&&(cflag[index+i]>=indmin)&&(cflag[index+i]<=indmax))||(hflag==0)) {
delta=(int)odds-(int)m;
delta=delta+offset;
if (delta<0) {
printf("array not big enough \n");
goto zskip;
}
if (delta>99) {
printf("array not big enough \n");
goto zskip;
}
newhis[delta]=newhis[delta]+1;
}
}
if (jump==3)
countx=countx+1;
}
}
if ((4*s[i])!=olds) {
if (locmax>glomax) {
glomax=locmax;
usave=u;
savjmp=jump;
}
}
//
// check local minimum
//
if ((jump==1)&&((4*s[i])!=olds)) {
mincnt=0;
k=u;
delta=k;
if (delta<0)
delta=-delta;
if (delta==locmin) {
hismin[0]=hismin[0]+1;
goto yskip;
}
while (delta!=locmin) {
k=3*k+c;
if ((k&3)!=0) {
hismin[9]=hismin[9]+1;
if (bypass==0)
goto pskip;
else
goto yskip;
}
k=k/4;
delta=k;
if (delta<0)
delta=-delta;
mincnt=mincnt+1;
}
if (mincnt>8) {
printf("error: array not big enough \n");
goto zskip;
}
hismin[mincnt]=hismin[mincnt]+1;
pskip: if (((c==hflag)&&(cflag[index+i]>=indmin)&&(cflag[index+i]<=indmax))||(hflag==0)) {
delta=(int)odds-(int)m;
delta=delta+offset;
if (delta<0) {
printf("array not big enough \n");
goto zskip;
}
if (delta>99) {
printf("array not big enough \n");
goto zskip;
}
oldhis[delta]=oldhis[delta]+1;
}
}
//
// check multiple-jumps
//
yskip:
if ((jump==2)&&((4*s[i])!=olds)) {
k=u;
k=3*k+c;
while ((k&7)!=0) {
if ((k&3)==0) {
printf("error: not one jump from u \n");
fprintf(Outfp,"error: not one jump from u \n");
goto zskip;
}
k=k/2;
k=3*k+c;
}
}
//
// check if primary multiple-jumps are preceded by no-jumps
// Note: Only last primary multiple-jump checked.
//
if ((jump==2)&&((4*s[i])!=olds)) {
k=u*2;
if ((((k-c)/3)*3)!=(k-c))
k=k*2;
tmps=k;
mflag=1;
}
//
// compute domain
//
if ((4*s[i])!=olds) {
k=t;
if (k<0)
k=-k;
sumtu=sumtu+k;
stu[2*total]=k;
k=u;
if (k<0)
k=-k;
sumtu=sumtu+k;
stu[2*total+1]=k;
total=total+1;
if (total>1000) {
printf("output array too small \n");
goto zskip;
}
}
//
// check for new cycle
//
if ((cflag[index+i]!=cflag[index+i+1])||(i==(iters-1))) {
lambda=(double)sumtu/(double)(total*2);
dmin=1000000.0;
dmax=-1000000.0;
for (g=0; g<total*2; g++) {
d=-log((double)stu[g]/lambda)/lambda;
if (d<dmin)
dmin=d;
if (d>dmax)
dmax=d;
}
del=dmax-dmin;
if (del>maxdel) {
maxdel=del;
cmax=c;
}
if (del<mindel) {
mindel=del;
cmin=c;
}
if (wflag==0) {
printf("lambda=%e, min=%e, max=%e, del=%e \n",lambda,dmin,dmax,del);
fprintf(Outfp,"lambda=%e, min=%e, max=%e, del=%e \n",lambda,dmin,dmax,del);
}
sumtu=0;
total=0;
olds=0;
cyccnt=cyccnt+1;
//
sumrec=sumrec*(double)c;
tempf=(double)(levens+lodds)*log(2)-(double)(lodds)*log(3);
if (wflag==1) {
printf("c=%d, e=%d, o=%d, sum=%e, tempf=%e, osum=%d, esum=%d, jsum=%d, hsum=%d \n",c,levens,lodds,sumrec,tempf,oddsum,evensum,jsum,hcount);
fprintf(Outfp,"c=%d, e=%d, o=%d, sum=%e, tempf=%e, osum=%d, esum=%d, jsum=%d, hsum=%d \n",c,levens,lodds,sumrec,tempf,oddsum,evensum,jsum,hcount);
}
if (tempf<0.0)
tempf=-tempf;
if (tempf>(sumrec*3.0)) {
printf("error: delta greater than sum of reciprocals \n");
fprintf(Outfp,"error: delta greater than sum of reciprocals \n");
goto zskip;
}
sumrec=0.0;
//
if (savchain<oldt) {
if (wflag!=2) {
printf("error: bad chain (wrap-around), c=%d \n",c);
printf("chain=%e, oldt=%d, t=%d, jump=%d, count=%d, s=%d \n",savchain,oldt,savet,savjump,savcnt,s[i]);
fprintf(Outfp,"error: bad chain (wrap-around), c=%d \n",c);
fprintf(Outfp,"chain=%e, oldt=%d, t=%d, jump=%d, count=%d, s=%d \n",savchain,oldt,savet,savjump,savcnt,s[i]);
}
badcnt=badcnt+1;
}
oldt=0;
lastt=0;
firstt=1;
oldchn=1000000000.0;
oldu=0;
//
delta=oddsum-jmpsum+hcount-evensum+offset1;
if (delta<0) {
printf("error: offset not big enough \n");
goto zskip;
}
if (delta>199) {
printf("error: histogram array not big enough \n");
goto zskip;
}
histoh[delta]=histoh[delta]+1;
if (wflag==0) {
if ((oddsum+hcount+2)<evensum) {
printf("warning: oddsum=%d, hcount=%d, evensum=%d \n",oddsum,hcount,evensum);
fprintf(Outfp,"warning: oddsum=%d, hcount=%d, evensum=%d \n",oddsum,hcount,evensum);
}
}
//
delta=hcount-jmpsum+offset1;
if (delta<0) {
printf("error: offset not big enough \n");
goto zskip;
}
if (delta>199) {
printf("error: histogram array not big enough \n");
goto zskip;
}
histow[delta]=histow[delta]+1;
//
delta=jsum-evensum+offset2;
if (delta<0) {
printf("error: offset not big enough, jsum=%d, delta=%d \n",jsum,delta);
goto zskip;
}
if (delta>199) {
printf("error: histogram array not big enough \n");
goto zskip;
}
histov[delta]=histov[delta]+1;
//
for (tempi=0; tempi<27; tempi++) {
if ((conv[2*tempi]==(levens+lodds))&&(conv[2*tempi+1]==lodds)) {
delta=jsum-evensum+offset4;
if (delta<0) {
printf("array not big enough \n");
goto zskip;
}
if (delta>29) {
printf("array not big enough \n");
goto zskip;
}
histou[delta]=histou[delta]+1;
cyccntu=cyccntu+1;
if ((3.0*log(c))<patcnt) {
printf("not enough attachment points, c=%d, count=%d \n",c,patcnt);
goto zskip;
}
}
if (conv[2*tempi+1]>lodds)
break;
}
//
for (tempi=0; tempi<27; tempi++) {
if ((conv[2*tempi+1]==levens)&&(conv[2*tempi+1]==lodds)) {
delta=jsum-evensum+offset5;
if (delta<0) {
printf("array not big enough, delta b=%d \n",delta);
goto zskip;
}
if (delta>29) {
printf("array not big enough, delta b=%d \n",delta);
goto zskip;
}
histob[delta]=histob[delta]+1;
cyccntb=cyccntb+1;
if ((3.0*log(c))<patcnt) {
printf("not enough attachment points, c=%d, count=%d \n",c,patcnt);
goto zskip;
}
}
if (conv[2*tempi+1]>lodds)
break;
}
//
delta=oddsum-evensum+offset1;
if (delta<0) {
printf("error: offset not big enough, jsum=%d, delta=%d \n",jsum,delta);
goto zskip;
}
if (delta>199) {
printf("error: histogram array not big enough \n");
goto zskip;
}
histos[delta]=histos[delta]+1;
//
// check limit
//
if (oddsum>jsum) {
tempi=oddsum-jsum;
tempf=1.0;
for (j=0; j<tempi; j++)
tempf=tempf*2.0;
tempf=(rat-1.0)*log(tempf);
tempf=exp(tempf);
tempg=1.0;
for (j=0; j<(unsigned int)evensum; j++)
tempg=tempg*2.0;
tempf=tempf/tempg;
if (tempf>1.0) {
printf("warning: tempf=%e, tempg=%e, oddsum=%d, jsum=%d, evensum=%d \n",tempf,tempg,oddsum,jsum,evensum);
compcnt=compcnt+1;
if (tempf>maxcmp)
maxcmp=tempf;
}
}
//
if (hsum!=hcount) {
printf("mis-matched sums \n");
goto zskip;
}
oddsum=0;
evensum=0;
jmpsum=0;
jsum=0;
hcount=0;
//
// check primary multiple jumps
//
if (mflag!=0) {
for (j=0; j<attcnt; j++) {
if (s[j+savind]==tmps) {
if ((jumps[j+savind]!=0)&&(jumps[j+savind]!=3)) {
printf("error: one-jump not found \n");
goto zskip;
}
goto vskip;
}
}
printf("error: no match \n");
goto zskip;
}
//
// check number of attachment points
//
vskip: if ((3.0*log(c))<patcnt) {
if (wflag==0) {
printf("not enough attachment points, c=%d, count=%d \n",c,patcnt);
fprintf(Outfp,"not enough attachment points, c=%d, count=%d \n",c,patcnt);
}
if (levens==lodds)
equcnt=equcnt+1;
}
delta=(int)(3.0*log(c))-patcnt+offset6;
if (delta<0) {
printf("array not big enough (histod): delta=%d \n",delta);
goto zskip;
}
if (delta>399) {
printf("array not big enough (histod): delta=%d \n",delta);
goto zskip;
}
histod[delta]=histod[delta]+1;
//
attcnt=0;
patcnt=0;
mflag=0;
savind=i+1;
//
// compute inequality
//
if (infin==0) {
bp=1.0+(double)c/(double)glomin;
bm=1.0-(double)c/(double)glomin;
if (bm<0.0)
bm=-bm;
}
else {
bp=1.0;
bm=1.0;
}
tempf=exp((double)a*log(rat))-1.0;
tempg=(double)a/tempf;
tempg=ratdel-tempg;
cap=exp(tempg*log(bp));
cam=exp(tempg*log(bm));
cap=3.0*(double)c*(double)a*cap;
cam=3.0*(double)c*(double)a*cam;
tempg=(rat-1.0)/tempf;
tempg=-tempg*(double)lodds;
tempg=exp(tempg*log(2.0));
cap=cap*tempg;
cam=cam*tempg;
tempf=(double)(levens+lodds)*log(2)-(double)lodds*log(3);
if (tempf<0.0)
tempf=-tempf;
if ((tempf>cap)||(tempf>cam)) {
printf("error: c=%d, e=%d, o=%d, a=%d, cap=%e, cam=%e, tempf=%e \n",c,levens,lodds,a,cap,cam,tempf);
fprintf(Outfp,"error: c=%d, e=%d, o=%d, a=%d, cap=%e, cam=%e, tempf=%e \n",c,levens,lodds,a,cap,cam,tempf);
badcomp=badcomp+1;
}
glomin=1000000000;
a=0;
//
// check global maximum
//
k=usave;
locmax=k;
if (locmax<0)
locmax=-locmax;
lastodd=locmax;
k=3*k+c;
while ((k&7)!=0) {
while ((k&1)==0) {
k=k/2;
}
delta=k;
if (delta<0)
delta=-delta;
if (delta>locmax) {
locmax=delta;
usave=k;
}
lastodd=delta;
k=3*k+c;
}
if (lastodd!=locmax) {
k=usave;
k=3*k+c;
while ((k&7)!=0) {
k=k/2;
if ((k&1)==0) {
k=k/2;
delta=k;
if (delta<0)
delta=-delta;
if (delta==lastodd) {
if (savjmp==0)
goto wskip;
else {
printf("error: not a no-jump attachment point \n");
fprintf(Outfp,"error: not a no-jump attachment point \n");
goto zskip;
}
}
}
k=3*k+c;
}
if (savjmp!=1) {
printf("error: not a one-jump attachment point \n");
fprintf(Outfp,"error: not a one-jump attachment point \n");
goto zskip;
}
wskip: delta=0;
}
glomax=0;
}
else
olds=s[i];
}
index=index+iters;
if (wflag==0) {
printf("\n");
fprintf(Outfp,"\n");
}
}
printf("maxdel=%e, c=%d, mindel=%e, c=%d \n",maxdel,cmax,mindel,cmin);
fprintf(Outfp,"maxdel=%e, c=%d, mindel=%e, c=%d \n",maxdel,cmax,mindel,cmin);
printf("\n");
fprintf(Outfp,"\n");
//
// output histogram of evens minus odds
//
printf("histogram of number of evens minus odds in extended sequences \n");
fprintf(Outfp,"histogram of number evens minus odds in extended sequences \n");
flag=99;
for (i=99; i>0; i--) {
if (histo[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histo[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d \n",i-offset,histo[i]);
printf("i=%d, h[i]=%d \n",i-offset,histo[i]);
}
//
// output histogram of k values (for primary one-jump attachment points)
//
printf("\n");
fprintf(Outfp,"\n");
printf("histogram of k values for primary one-jump attachment points \n");
fprintf(Outfp,"histogram of k values for primary one-jump attachment points \n");
printf("c=%d \n",hflag);
fprintf(Outfp,"c=%d \n",hflag);
flag=99;
for (i=99; i>0; i--) {
if (histoj[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histoj[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d \n",i-offset,histoj[i]);
printf("i=%d, h[i]=%d \n",i-offset,histoj[i]);
}
//
// output histogram of hops
//
printf("\n");
fprintf(Outfp,"\n");
printf("number of hops before local minimum is reached \n");
fprintf(Outfp,"number of hops before local minimum is reached \n");
for (i=0; i<10; i++) {
printf("i=%d, h=%d \n",i,hismin[i]);
fprintf(Outfp,"i=%d, h=%d \n",i,hismin[i]);
}
//
// output histogram of j values for primary no-jumps
//
printf("\n");
fprintf(Outfp,"\n");
printf("j values for primary no-jumps \n");
fprintf(Outfp,"j values for primary no-jumps \n");
for (i=0; i<20; i++) {
printf("i=%d, h=%d \n",i,histon[i]);
fprintf(Outfp,"i=%d, h=%d \n",i,histon[i]);
}
//
//
// output histogram of j values for primary multiple-jumps
//
printf("\n");
fprintf(Outfp,"\n");
printf("j values for primary multiple-jumps \n");
fprintf(Outfp,"j values for primary multiple-jumps \n");
for (i=0; i<10; i++) {
printf("i=%d, h=%d \n",i,histom[i]);
fprintf(Outfp,"i=%d, h=%d \n",i,histom[i]);
}
//
// last odd counts
//
printf("\n");
fprintf(Outfp,"\n");
printf("no-jump count=%d, one-jump count=%d, jumped-over count=%d \n",county,countn,countx);
fprintf(Outfp,"no-jump count=%d, one-jump count=%d, jumped-over count=%d \n",county,countn,countx);
//
// output histogram of k values (for primary one-jump attachment points)
//
printf("primary one-jump attachment points, last odd not equal to locmax \n");
fprintf(Outfp,"primary one-jump attachment points, last odd not equal to locmax \n");
printf("c=%d \n",hflag);
fprintf(Outfp,"c=%d \n",hflag);
flag=99;
for (i=99; i>0; i--) {
if (newhis[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((newhis[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d \n",i-offset,newhis[i]);
printf("i=%d, h[i]=%d \n",i-offset,newhis[i]);
}
//
// output histogram of k values (for primary one-jump attachment points)
//
printf("\n");
fprintf(Outfp,"\n");
printf("primary one-jump attachment points, u not equal to locmin \n");
fprintf(Outfp,"primary one-jump attachment points, u not equal to locmin \n");
printf("c=%d \n",hflag);
fprintf(Outfp,"c=%d \n",hflag);
flag=99;
for (i=99; i>0; i--) {
if (oldhis[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((oldhis[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d \n",i-offset,oldhis[i]);
printf("i=%d, h[i]=%d \n",i-offset,oldhis[i]);
}
printf("\n");
fprintf(Outfp,"\n");
//
// output histogram of odd sum plus hops minus number of evens
//
printf("odd sum minus jumps plus hops minus even sum \n");
fprintf(Outfp,"odd sum minus jumps plus hops minus even sum (global, histoh) \n");
flag=199;
for (i=199; i>0; i--) {
if (histoh[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histoh[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset1,histoh[i]);
printf("i=%d, h[i]=%d \n",i-offset1,histoh[i]);
}
printf("\n");
fprintf(Outfp,"\n");
//
// output histogram of odd sum plus hops minus number of evens
//
printf("number of odds minus jumps plus hops minus number of evens (local) \n");
fprintf(Outfp,"number of odds minus jumps plus hops minus number of evens (local, histoi) \n");
flag=99;
for (i=99; i>0; i--) {
if (histoi[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histoi[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset,histoi[i]);
printf("i=%d, h[i]=%d \n",i-offset,histoi[i]);
}
printf("\n");
fprintf(Outfp,"\n");
//
// output histogram of j minus number of evens plus number of hops
//
printf("j minus number of evens plus number of hops minus jumps \n");
fprintf(Outfp,"j minus number of evens plus number of hops minus jumps (local, histox) \n");
flag=99;
for (i=99; i>0; i--) {
if (histox[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histox[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset,histox[i]);
printf("i=%d, h[i]=%d \n",i-offset,histox[i]);
}
printf("\n");
fprintf(Outfp,"\n");
//
// output histogram of j minus number of evens (local)
//
printf("j minus number of evens (local) \n");
fprintf(Outfp,"j minus number of evens (local, histoy) \n");
flag=99;
for (i=99; i>0; i--) {
if (histoy[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
sum=0;
tempi=0;
for (i=0; i<=(int)flag; i++) {
if ((histoy[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset,histoy[i]);
printf("i=%d, h[i]=%d \n",i-offset,histoy[i]);
sum=sum+histoy[i]*(i-offset);
tempi=tempi+histoy[i];
}
mean=(double)sum/(double)tempi;
first=0;
var=0.0;
for (i=0; i<=(int)flag; i++) {
if ((histoy[i]==0)&&(first==0))
continue;
first=1;
tempf=(double)i-(double)offset-mean;
var=var+tempf*tempf*(double)histoy[i];
}
var=var/(double)(tempi-1);
std=sqrt(var);
printf("mean=%e, standard deviation=%e \n",mean,std);
fprintf(Outfp,"mean=%e, standard deviation=%e \n",mean,std);
//
// output histogram of j minus number of evens
//
printf("\n");
fprintf(Outfp,"\n");
printf("j minus number of evens (global) \n");
fprintf(Outfp,"j minus number of evens (global, histov) \n");
flag=199;
for (i=199; i>0; i--) {
if (histov[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histov[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset2,histov[i]);
printf("i=%d, h[i]=%d \n",i-offset2,histov[i]);
}
//
// output histogram of hops minus number of jumps
//
printf("\n");
fprintf(Outfp,"\n");
printf("hops minus number of jumps (local) \n");
fprintf(Outfp,"hops minus number of jumps (local, histoz) \n");
flag=99;
for (i=99; i>0; i--) {
if (histoz[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histoz[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset,histoz[i]);
printf("i=%d, h[i]=%d \n",i-offset,histoz[i]);
}
//
// output histogram of hops minus number of jumps
//
printf("\n");
fprintf(Outfp,"\n");
printf("hops minus number of jumps \n");
fprintf(Outfp,"hops minus number of jumps (global, histow) \n");
flag=199;
for (i=199; i>0; i--) {
if (histow[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histow[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset1,histow[i]);
printf("i=%d, h[i]=%d \n",i-offset1,histow[i]);
}
printf("\n");
fprintf(Outfp,"\n");
//
// output histogram of odds minus evens (global)
//
printf("sum of odds minus sum of evens (global) \n");
fprintf(Outfp,"sum of odds minus sum of evens (global, histos) \n");
flag=199;
for (i=199; i>0; i--) {
if (histos[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histos[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset1,histos[i]);
printf("i=%d, h[i]=%d \n",i-offset1,histos[i]);
}
printf("\n");
fprintf(Outfp,"\n");
//
// output histogram of odds minus evens (local)
//
printf("odds minus evens (local) \n");
fprintf(Outfp,"odds minus evens (local, histor) \n");
flag=99;
for (i=99; i>0; i--) {
if (histor[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histor[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset,histor[i]);
printf("i=%d, h[i]=%d \n",i-offset,histor[i]);
}
//
// output histogram of j minus evens (continued-fraction convergents)
//
printf("\n");
fprintf(Outfp,"\n");
printf("j minus evens (convergents) \n");
fprintf(Outfp,"j minus evens (convergents, local, histot) \n");
flag=29;
for (i=29; i>0; i--) {
if (histot[i]==0)
continue;
else {
flag=i;
break;
}
}
tempi=0;
sum=0;
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histot[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset4,histot[i]);
printf("i=%d, h[i]=%d \n",i-offset4,histot[i]);
sum=sum+histot[i]*(i-offset4);
tempi=tempi+histot[i];
}
mean=(double)sum/(double)tempi;
printf("n=%d, sum=%d, mean=%e \n",tempi,sum,mean);
fprintf(Outfp,"n=%d, sum=%d, mean=%e \n",tempi,sum,mean);
//
// output histogram of j minus evens (continued-fraction convergents)
//
printf("\n");
fprintf(Outfp,"\n");
printf("j minus evens (convergents, global) \n");
fprintf(Outfp,"j minus evens (convergents, global, histou) \n");
flag=29;
for (i=29; i>0; i--) {
if (histou[i]==0)
continue;
else {
flag=i;
break;
}
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histou[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset4,histou[i]);
printf("i=%d, h[i]=%d \n",i-offset4,histou[i]);
}
//
// output histogram of j minus evens (continued-fraction convergents)
//
printf("\n");
fprintf(Outfp,"\n");
printf("j minus evens (convergents, evens equal odds) \n");
fprintf(Outfp,"j minus evens (convergents, evens equal odds, local, histoa) \n");
flag=29;
for (i=29; i>0; i--) {
if (histoa[i]==0)
flag=flag-1;
else
break;
}
sum=0;
tempi=0;
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histoa[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset4,histoa[i]);
printf("i=%d, h[i]=%d \n",i-offset4,histoa[i]);
sum=sum+histoa[i]*(i-offset4);
tempi=tempi+histoa[i];
}
mean=(double)sum/(double)tempi;
printf("n=%d, sum=%d, mean=%e \n",tempi,sum,mean);
fprintf(Outfp,"n=%d, sum=%d, mean=%e \n",tempi,sum,mean);
//
// output histogram of j minus evens (continued-fraction convergents)
//
printf("\n");
fprintf(Outfp,"\n");
printf("j minus evens (convergents, evens equal odds, global) \n");
fprintf(Outfp,"j minus evens (convergents, evens equal odds, global, histob) \n");
flag=29;
for (i=29; i>0; i--) {
if (histob[i]==0)
flag=flag-1;
else
break;
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histob[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset5,histob[i]);
printf("i=%d, h[i]=%d \n",i-offset5,histob[i]);
}
//
// output histogram
//
printf("\n");
fprintf(Outfp,"\n");
printf("3*log(c)-a \n");
fprintf(Outfp,"3*log(c)-a \n" );
flag=399;
for (i=399; i>0; i--) {
if (histod[i]==0)
flag=flag-1;
else
break;
}
first=0;
for (i=0; i<=(int)flag; i++) {
if ((histod[i]==0)&&(first==0))
continue;
first=1;
fprintf(Outfp,"i=%d, h[i]=%d, \n",i-offset6,histod[i]);
printf("i=%d, h[i]=%d \n",i-offset6,histod[i]);
}
printf("\n");
fprintf(Outfp,"\n");
printf("cycle count=%d, multiple-jump count=%d, two-jump count=%d, non-adjacent count=%d \n",cyccnt,mcount,twojmp,jmphop);
printf("total jumps (in multiple-jumps)=%d, total hops (in multiple-jumps)=%d \n",glojmp,glohop);
printf("hop/hop=%d, jump/hop=%d, hop/jump=%d, jump/jump=%d \n",twojmp0,twojmp1,twojmp2,twojmp3);
fprintf(Outfp,"cycle count=%d, multiple-jump count=%d, two-jump count=%d, non=adjacent count=%d \n",cyccnt,mcount,twojmp,jmphop);
fprintf(Outfp,"total jumps (in multiple-jumps)=%d, total hops (in multiple-jumps)=%d \n",glojmp,glohop);
fprintf(Outfp,"hop/hop=%d, jump/hop=%d, hop/jump=%d, jump/jump=%d \n",twojmp0,twojmp1,twojmp2,twojmp3);
printf("primary attachment points=%d \n",primary);
fprintf(Outfp,"primary attachment points=%d \n",primary);
printf("bad t chains=%d, bad u chains=%d, bad t-u chains=%d \n",badcnt,badcntu,badtucnt);
fprintf(Outfp,"bad t chains=%d, bad u chains=%d, bad t-u chains=%d \n",badcnt,badcntu,badtucnt);
printf("bad comparisons=%d, other comparisons=%d, maximum=%e \n",badcomp,compcnt,maxcmp);
fprintf(Outfp,"bad comparisons=%d, other comparisons=%d, maximum=%e \n",badcomp,compcnt,maxcmp);
printf("cycle count=%d, cycle count=%d (convergents)\n",cyccntu,cyccntb);
fprintf(Outfp,"cycle count=%d, cycle count=%d (convergents)\n",cyccntu,cyccntb);
printf("evens equal odds, bad comparison count=%d \n",equcnt);
fprintf(Outfp,"evens equal odds, bad comparison count=%d \n",equcnt);
printf("\n");
fprintf(Outfp,"\n");
for (i=0; i<27; i++) {
printf("i=%d, c=%d, c=%d, c=%d \n",i,concov[3*i],concov[3*i+1],concov[3*i+2]);
fprintf(Outfp,"i=%d, c=%d, c=%d, c=%d \n",i,concov[3*i],concov[3*i+1],concov[3*i+2]);
}
printf("\n");
fprintf(Outfp,"\n");
for (i=0; i<27; i++) {
printf("i=%d, c=%d, c=%d, c=%d \n",i,concove[3*i],concove[3*i+1],concove[3*i+2]);
fprintf(Outfp,"i=%d, c=%d, c=%d, c=%d \n",i,concove[3*i],concove[3*i+1],concove[3*i+2]);
}
zskip:
fclose(Outfp);
return(0);
}