/*****************************************************************************/
/* */
/* 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[2040+2305+1915+2363+2351]={
2908,1756,1432,358,3502,1582,1828,718,1342,1402,3556,1042,766,7282,3106,1540,
664,166,2566,9820,3700,1258,18568,4642,2116,772,520,130,424,106,6256,1564,
1378,892,1510,4960,1240,310,2044,4366,3394,1648,412,1054,1690,1132,2260,1366,
4240,1060,574,934,5698,2512,628,
24398,17156,16622,15812,2882,1478,1772,7874,3788,2006,1928,482,794,674,848,212,
416,104,26,386,9332,2126,3062,63872,15968,3992,998,1502,4958,2636,1682,5606,
4094,12734,25454,23264,5816,1454,3014,
448,112,28,382,520,130,1138,1582,970,2608,652,940,1564,670,628,13462,13678,
5506,3406,1654,3472,868,1186,2752,688,172,1402,7630,3238,1570,2344,586,2284,
3148,1102,790,1588,4066,39706,53314,18058,17026,8266,8764,2020,1510,1084,580,3400,
850,1420,25450,17824,4456,1114,3730,3040,760,190,
4514,4580,31388,4184,1046,770,2444,836,1988,9734,4028,2042,2852,4874,3686,1760,
440,110,692,1232,308,14918,5972,2624,656,164,2714,1916,3038,2366,23048,5762,
6656,1664,416,104,26,5846,2570,2390,1274,14594,14108,3920,980,1220,3542,1706,
1904,476,728,182,446,698,10058,6602,4658,48452,17054,8564,61574,23468,4778,3632,
908,548,3416,854,762740,1566662,587876,8128556,1524482,1288076,241892,234590,
676,946,928,232,58,400,100,11758,27310,85630,104014,134716,58630,25822,23584,5896,
1474,67162,25564,29254,10450,75910,33112,8278,5602,5980,
2540,2534,9812,5546,26606,15914,12512,3128,782,1388,21476,4406,26822,37028,7322,9974,
8042,257348,48632,12158,14942,7394,3152,788,15158,80456,20114,7922,3350,4628,3074,1532,
6572,4574,3020,7868,2750,8138,4808,1202,830,
424,106,16000,4000,1000,250,1090,26290,23986,22042,13348,5956,16372,5554,6490,4600,
1150,988,11026,8710,3646,1690,1900,736,184,46,1396,1342,1042,2392,598,604,
1504,376,94,898,4222,1852,1990,1126,802,12112,3028,4012,1132,592,148,1222,
838,694,640,160,40,10,1096,274,1906,3412,7030,3016,754,2440,610,6166,
2692,19126,7552,1888,472,118,2332,8110,4798,2014,2476,844,538,1252,
890,4220,1172,2108,776,194,3080,770,2510,1322,2924,19286,22364,4574,2096,524,
740,1160,290,71288,17822,7064,1766,4184,1046,4454,1820,722,1358,
754,664,166,3148,7108,1714,1024,256,64,16,4,382,1168,292,436,
1474,934,2848,712,178,448,112,28,1102,1552,388,454,2194,1204,1636,688,
172,5476,1408,352,88,22,28762,13516,6016,1504,376,94,1006,2662,3424,856,
214,5434,3982,2776,694,3976,994,2122,1264,316,1042,772,526,1318,16126,10024,2506,
1372,27934,16666,13102,15856,3964,2068,958,1492,
-747100,-104392,-26098,-110908,-52402,-235948,-43858,-365386,-204574,-47098,-41278,-314680,-78670,-68626,-93262,-210838,
-78682,-51322,-92938,-102010,-139720,-34930,-153490,-142984,-35746,-169096,-42274,-48610,-229006,-47422,-155272,-38818,
-185566,-76900,-67954,-49810,-164182,-61186,-72850,-124030,-56638,-201604,-83236,-40114,-132292,-53410,-87610,-71842,
-72676,-200938,-112072,-28018,-64036,-91606,-33970,-277876,-79186,-97114,-106834,-132106,-73354,-40306,-381424,-95356,
-797926,-298840,-74710,-27634,-129730,-107644,-154948,-105430,-39154,-228856,-57214,-45490,-82570,-48658,-111514,-45946,
-180220,-54562,-482998,-180742,-67396,-32242,-472144,-118036,-141826,-117850,-36082,-194314,-108346,-66532,1400,350,
5378,5864,1466,932,800,200,50,1724,7826,2870,2570,1346,25358,120614,87218,38510,
39266,32108,9986,8780,37508,19556,4802,41198,71666,22712,5678,10292,2312,578,4622,55454,
36836,82706,23930,9356,10238,10454,6836,1664,416,104,26,392,98,5702,112058,42404,
6632,1658,1004,1238,1652,692,512,128,32,8,2,2462,3302,2492,3518,4784,
1196,1292,18032,4508,9320,2330,1256,314,500,476,6056,1514,950,1490,1088,272,
68,
676,3766,2902,1486,940,802,1408,352,88,22,400,100,3280,820,2164,
2206,1210,2512,628,3754,23008,5752,1438,922,2596,1648,412,460,4726,1882,3406,
1660,694,1930,13450,35074,20686,8140,7942,4738,3622,4756,9562,9886,4090,12718,5152,
1288,322,1138,6034,3646,1750,1162,8830,3694,1768,442,2026,5674,35806,13810,14842,
343318,97228,50224,12556,4036,2092,964,1228,5914,6808,1702,8848,2212,1558,1108,2260,
4540,1234,13990,31756,8086,2944,736,184,46,586,6160,1540,1390,904,226,1084,3568,
892,550,2812,910,724,730,2434,2326,1324,856,214,21952,5488,1372,640,
160,40,10,406,784,196,1012,20740,6790,4252,1180,604,496,124,1720,430,544,
136,34,976,244,3118,1552,388,1066,3178,7132,
11522,61562,35588,58646,22376,5594,4106,6176,1544,386,9074,398,13718,5528,1382,902,
722,2432,608,152,38,482,3728,932,2216,554,2966,1496,374,524,3362,9254,
3854,6914,83594,54938,31862,12332,2696,674,668,1532,7886,4718,5456,1364,1454,8588,
1994,12962,15026,23612,3992,998,758,3512,878,3026,4376,1094,794,1406,1184,296,
74,1154,13628,2588,4208,1052,2774,1424,356,2768,692,32078,14924,3182,4484,16484,
16634,10316,2318,20324,12656,3164,26084,10004,5204,
1762,1168,292,2566,2404,1900,4348,14176,3544,886,2602,1360,340,448,112,28,
5776,1444,4780,1780,718,33130,12808,3202,1564,2248,562,1630,3076,1294,2572,1684,
700,3058,4462,5590,6136,1534,28756,55000,13750,16498,12940,4600,1150,11260,171730,167104,
41776,10444,3898,1846,8182,9082,3790,21472,5368,1342,12106,4924,6238,7894,5950,92908,
31438,127474,63028,12202,4960,1240,310,10108,14662,9208,2302,25930,14014,31672,7918,8506,
3574,16444,13528,3382,17830,10990,11098,4546,8350,13690,5518,4318,66238,130816,32704,8176,
2044,17956,18928,4732,12772,8722,9892,7612,
13310,8450,3554,1718,8342,13688,3422,2888,722,656,164,416,104,26,4130,1934,
44954,70550,92420,17714,7028,4202,1856,464,116,1448,362,776,194,458,2774,5366,
61424,15356,5282,2366,2294,17030,34208,8552,2138,3260,1880,470,8768,2192,548,488,
122,
5974,2626,4048,1012,3940,7006,4354,5506,6478,6046,197134,32242,191734,72286,31894,12346,
9862,4084,5398,2410,2320,580,4678,2140,976,244,7432,1858,3400,850,4210,23470,
7276,1750,1042,1708,706,2428,8080,2020,87802,65488,16372,11230,6136,1534,3454,11290,
5872,1468,
3020,1916,746,227768,56942,21740,3734,1682,2726,2552,638,626,1376,344,86,5828,
2606,1364,4274,10310,9014,3212,3506,2330,2816,704,176,44,2768,692,3362,2858,
10526,4334,2012,764,530,2390,12902,13388,4226,3344,836,1202,
1192,298,99742,43192,10798,7042,3028,74254,42736,10684,4756,3676,2002,1138,814,1426,
922,1090,796,3178,4504,1126,11254,13720,3430,21010,8266,29236,8554,7906,3352,838,
6214,31018,173092,32842,24682,18112,4528,1132,1792,448,112,28,976,244,712,178,
454,1246,2812,10606,6934,7690,4648,1162,1894,10468,2350,2290,
992,248,62,2498,1382,1748,716,1172,608,152,38,542,5000,1250,3584,896,
224,56,14,1856,464,116,410,
8902,3184,796,538,6148,15382,28504,7126,7012,2944,736,184,46,406,4528,
1132,1648,412,466,1234,1666,5068,5716,4258,2914,8992,2248,562,1288,322,3124,8092,
1906,2044,772,19756,10528,2632,658,1342,892,556,87796,151786,129916,24748,29314,31312,
7828,16192,4048,1012,3238,1582,982,
6146,7058,14294,5750,2546,8162,8738,9224,2306,5246,3626,3014,1520,380,2654,18668,
3890,8090,7190,3086,1550,1118,9920,2480,620,506,1334,890,1496,374,530,1232,
308,2168,542,2852,5096,1274,1658,1820,938,1502,4574,70298,46556,7220,3656,914,
5546,4094,3140,3176,794,7328,1832,458,
976,244,436,472,118,1042,538,592,148,418,7198,23236,6316,2752,688,172,
1024,256,64,16,4,597676,169072,42268,45268,8878,59848,14962,6478,20308,4198,2560,
640,160,40,10,394,2824,706,13408,3352,838,29446,49138,68422,232864,58216,14554,
5848,1462,1798,4588,2266,1240,310,1150,
5414,14774,14324,4292,1196,5846,8618,5054,2834,1454,1796,728,182,2012,1544,
386,536,134,3014,493844,158774,135824,33956,6758,11732,13838,8762,2456,614,3956,1322,
1976,494,1256,314,
712,178,1900,748,532,3766,1804,730,1390,5494,2452,6682,4738,39028,11956,4342,
2020,33652,10444,2350,8626,7246,6016,1504,376,94,1642,1756,5008,1252,3142,1570,
5170,4186,3334,
1004,2846,1460,3002,87788,18356,11498,9068,10532,3944,986,3722,5006,2270,1244,626,
1334,8570,25112,6278,9392,2348,1832,458,2252,2156,80498,46262,48098,49178,65432,16358,
5288,1322,6896,1724,716,788,2198,
2098,1180,31606,65188,12616,3154,1576,394,1882,4876,2896,724,790,16966,11482,205642,
50806,101638,66112,16528,4132,1168,292,448,112,28,1816,454,7090,3052,15508,2302,
2278,3790,11080,2770,1432,358,2170,9784,2446,2734,2284,7354,4528,1132,3070,2710,
5362,2404,844,2224,556,146836,16396,6982,9712,2428,1666,1018,31654,28576,7144,1786,
4552,1138,820,6796,6310,7192,1798,2932,2044,1558,13102,6658,2890,2692,898,730,
1006,4492,8218,7732,4978,2260,7768,1942,3868,2878,2602,1420,
29864,7466,3194,1592,398,5156,7154,2702,8030,8648,2162,1298,3134,3782,5354,2402,
4058,1916,2198,2222,35774,18722,22868,4682,2150,52064,13016,3254,2816,704,176,44,
998,2726,264932,37946,14624,3656,914,2864,716,
970,19030,4090,5326,2392,598,1174,3598,1744,436,2416,604,508,490,6136,1534,
526,592,148,4738,3652,2014,1150,826,2572,2578,9376,2344,586,5494,2236,814,
700,5974,5542,3118,1564,688,172,1060,6460,1606,52792,13198,5344,1336,334,
520,130,778,4192,1048,262,9916,2254,1240,310,5908,6946,4894,2230,1318,5056,1264,
316,454,
3218,3842,8078,14360,3590,1742,3650,6272,1568,392,98,7070,6404,7268,
4946,57164,11114,10970,7160,1790,1196,620,512,128,32,8,2,4904,1226,3560,890,1490,
11156,3014,1526,968,242,2084,500,1130,4622,30920,7730,8402,14666,9230,13652,
6422,2804,1778,3380,1940,1556,1466,1814,1076,1292,638,872,218,1112,278,
1894,2056,514,838,1462,1756,12082,21964,7168,1792,448,112,28,406,2362,1282,
1054,11236,6106,2686,6724,4648,1162,832,208,52,1612,1444,1702,1948,2704,676,
54976,13744,3436,1864,466,
9572,2192,548,500,8984,2246,3782,5078,17732,3722,1742,5612,36290,14006,20954,10280,
2570,1418,1094,2810,10748,4016,1004,16742,30350,13946,20648,5162,5510,6536,1634,1010,
776,194,470,
9910,4114,41500,6532,6220,1564,916,1252,4024,1006,1132,610,2404,2134,1198,16912,
4228,23032,5758,4708,5056,1264,316,87778,75952,18988,3958,1882,3304,826,1492,1414,
928,232,58,1168,292,13420,2914,4348,1834,2026,808,202,1108,1306,3400,850,
5542,2476,862,3106,4510,36586,21574,8488,2122,2188,
1916,758,1082,2504,626,28394,39176,9794,6506,11474,8306,20486,10088,2522,4022,7562,
132398,50048,12512,3128,782,692,2186,22166,6932,83024,20756,57158,19568,4892,1316,1424,
356,2072,518,1664,416,104,26,746,4184,1046,992,248,62,422,2834,2342,
5552,1388,4016,1004,1028,1286,1988,1556,10502,5876,59588,17756,3728,932,1406,926,
4934,3044,8174,3464,866,1484,26936,6734,2924,5066,14876,3188,2828,2042,1514,5156,
2234,4634,5804,9638,8666,9206,2864,716,648242,412334,155024,38756,26162,18674,21302,8522,
99602,43166,16586,36746,
2164,11068,7324,3058,1546,5722,2308,832,208,52,706,664,166,3454,1006,1564,
1438,4408,1102,1618,8800,2200,550,3940,1138,826,1228,4840,1210,3436,3346,1654,
3292,1924,760,190,4426,10960,2740,1084,2464,616,154,742,5704,1426,934,3820,
3508,1192,298,6088,1522,970,3184,796,1222,556,8638,4792,1198,1672,418,
2402,1376,344,86,2336,584,146,1040,260,8960,2240,560,140,
496,124,424,106,3244,3406,1678,1030,1144,286,508,
3548,1202,7580,7742,11630,3974,1892,7094,3062,1550,1256,314,32366,9806,4898,21578,
13142,5330,10010,5378,6446,2516,1712,428,482,2138,5468,1472,368,92,716,536,
134,452,1976,494,842,1478,956,1658,57152,14288,3572,12926,10766,3200,800,200,
50,20486,8084,3278,11468,2552,638,2990,1544,386,2234,2882,4340,15032,3758,1760,
440,110,734,1766,1064,266,1154,2828,932,3854,1742,6284,1580,698,2576,644,
2180,
2638,13060,3562,1738,1054,2800,700,2206,3772,3502,40870,28000,7000,1750,1990,
1996,6130,2428,58618,22384,5596,44596,8764,5608,1402,928,232,58,424,106,442,
568,142,3448,862,988,9766,6640,1660,9880,2470,3700,1096,274,2662,9604,3484,6076,
4474,2080,520,130,
2198,3770,1766,10460,3950,3230,2522,2600,650,1736,434,566,4682,3386,1658,1172,
7496,1874,1106,818,710,2738,1430,3122,1574,8306,3518,6956,4850,2222,2258,1250,
872,218,2276,830,7010,3032,758,22124,8840,2210,1232,308,
2974,4552,1138,2878,1516,688,172,436,1132,616,154,1096,274,14638,7834,5416,
1354,1732,87766,33316,10978,39652,18646,7396,5038,5722,4228,5956,9358,22468,46438,17818,
11032,2758,1438,4882,15082,16636,3046,1546,
572,512,128,32,8,2,3632,908,836,1340,656,164,1058,1610,3932,1142,
8222,3488,872,218,9032,2258,2282,3848,962,2474,4010,5306,10004,5012,6956,246686,
92912,23228,4760,1190,1376,344,86,2660,1760,440,110,446,17780,14540,327632,81908,
47672,11918,4874,3482,11948,6386,4604,1268,4094,1940,6548,23126,17240,4310,10922,11138,
49856,12464,3116,5792,1448,362,2228,
712,178,472,118,3442,1696,424,106,3172,1000,250,4126,3334,4738,2182,
3766,23692,11920,2980,964,586,874,5710,3574,7816,1954,1138,832,208,52,1480,
370,544,136,34,418,562,616,154,1534,1876,2290,1264,316,1102,1630,1930,
1252,640,160,40,10,64246,84604,24808,6202,54958,157702,134986,38674,14908,5206,16438,18478,
13846,31630,24052,66622,38488,9622,63058,20908,43978,13078,30172,28444,
1184,296,74,434,9272,2318,9758,79256,19814,27416,6854,23852,7724,3188,1004,1298,
1076,608,152,38,1892,2858,1478,7976,1994,1154,16346,6536,1634,2162,24338,7556,
5006,11552,2888,722,914,968,242,
5092,3772,1114,2872,718,676,1312,328,82,1204,2440,610,1360,340,3520,880,
220,448,112,28,412,484,2314,38116,25930,140038,459550,172738,98182,32578,19342,7660,
4120,1030,8254,3502,1720,430,568,142,460,2764,187966,70894,26992,6748,1672,418,
1252,
50894,23816,5954,87758,19394,54920,13730,20690,14402,74636,122912,30728,7682,34184,8546,13634,
466460,99872,24968,6242,77708,14978,33812,102446,67454,27080,6770,17090,57140,103310,45062,17306,
10754,18818,41102,100880,25220,21122,45476,21410,30410,70262,26756,49850,29060,23714,33326,36242,
32516,92366,46520,11630,27170,37700,27602,25226,58598,22382,53000,13250,42074,24686,55304,13826,
114650,65510,24974,12014,31058,28142,31130,18530,58760,14690,44990,33434,19826,79244,15266,22634,
71720,17930,63944,15986,16130,33002,16994,50822,19466,17282,38186,18146,18290,39878,15362,35918,
55196,19442,112166,42470,16334,25010,19874,28466,20234,39806,21170,45638,17522,21386,26954,23150,
44180,29546,23762,21986,29870,19682,24302,25706,20978,26030,32462,50012,22706,22922,28622,28676,
29594,17666,36350,36836,30404,106334,30620,24650,25838,32510,38342,14786,32996,40724,27242,36884,
30158,46556,31940,42716,34046,34532,38420,44252,
15196,8350,10822,7108,1714,4126,12976,3244,1858,1336,334,2074,1186,1048,262,
1168,292,5110,8512,2128,532,508,5866,2608,652,1204,634,646,1384,346,538,610,
886,7162,3094,9592,2398,6352,1588,706,1228,1366,1750,1912,478,3922,688,172,
1210,862,4408,1102,2560,640,160,40,10,412,8134,5596,4300,2230,3580,8782,
7420,13408,3352,838,1492,436,490,592,148,724,544,136,34,30490,11842,3442,
2932,958,11212,4174,4504,1126,1654,68074,25936,6484,1624,406,418,832,208,52,
1372,2518,2236,4732,26860,37942,30472,7618,6244,2506,1348,904,226,778,700,3760,
940,15910,9970,5686,21634,55276,29896,7474,4450,1966,3598,
4112,1028,602,7808,1952,488,122,2750,2570,2642,1400,350,1220,638,1382,3110,
4568,1142,9566,6404,1610,1286,2420,1994,2330,120560,30140,9500,5180,2480,620,17018,
8486,9104,2276,836,566,15584,3896,974,9698,4046,7514,80024,20006,18824,4706,2174,
2246,5342,4028,2156,48308,41342,24278,34052,6794,5192,1298,896,224,56,14,
4036,8104,2026,2164,4702,13720,3430,1696,424,106,1084,1714,13396,4792,1198,1054,
1930,2110,5494,2470,1336,334,1018,4198,1984,496,124,
668,536,134,5636,2612,5738,16310,5306,6428,1616,404,32630,9896,2474,28244,166484,
415598,156260,34142,13214,5366,2228,5150,2342,6662,6860,2936,734,686,1748,7076,14528,
3632,908,4808,1202,1688,422,4754,103586,59294,22646,7088,1772,968,242,4268,1400,
350,542,614,
1576,394,1654,6886,18496,4624,1156,628,808,202,592,148,1522,982,2782,2356,
5896,1474,964,9748,10096,2524,1738,2224,556,2188,4726,7558,23734,77038,44362,
20206,12394,151174,165436,31624,7906,3376,844,62074,18178,7228,54946,21016,5254,12268,5758,9154,
3844,1132,
416,104,26,422,1268,650,656,164,3854,5210,2366,6344,1586,9260,5120,
1280,320,80,20,494,5966,6992,1748,740,2888,722,4994,2126,3752,938,764,
144854,359282,230012,148904,37226,14372,4526,5498,2474,1340,92468,17750,20546,6500,7478,4340,
1226,872,218,4508,3860,1136,284,2078,95768,23942,14498,14570,5876,1514,980,596,524,
1178,854,
1132,1714,1996,35260,7024,1756,742,1246,880,220,454,850,1510,2464,616,154,
9016,2254,1258,3022,1546,12634,29428,21976,5494,3814,1732,1552,388,3886,1870,1114,
7558,2848,712,178,50164,35098,245212,46390,29320,7330,3622,
446,1688,422,572,17762,16952,4238,1916,1904,476,3938,5288,1322,1778,5612,1466,
1808,452,2156,818,6236,3914,3236,8528,2132,1634,3344,836,2318,1376,344,86,
3794,9908,7034,11852,2636,908,584,146,9014,3104,776,194,5558,2498,56318,19358,
22784,5696,1424,356,61502,27446,10706,30038,11678,15494,6224,1556,1472,368,92,
418,1678,16096,4024,1006,9796,3568,892,2344,586,634,652,14602,5890,6394,
2812,3154,1612,2758,3946,1894,1990,3460,11722,4810,2218,1246,4432,1108,622,2710,
2560,640,160,40,10,7174,8308,1972,784,196,20296,5074,2152,538,616,154,472,
118,1102,18058,7186,2746,1444,928,232,58,436,496,124,2020,7852,3244,1948,
7312,1828,982,1588,712,178,19948,6646,4774,2818,4450,4042,1930,1138,1198,4882,
2098,3142,3556,1414,22918,58342,25804,6634,2902,2668,1786,1084,1900,1570,2164,820,
568,142,
1046,4250,1922,1136,284,1118,41816,10454,8510,4784,1196,2120,530,614,5708,
6986,7094,7958,20216,5054,3326,5960,1490,974,1586,1010,794,950,2774,3650,1784,
446,1382,74972,22124,11306,76064,19016,4754,2198,44246,29894,62228,39242,27506,10730,6032,
1508,698,3530,6494,15248,3812,1130,1982,2030,2180,824,206,1154,848,212,1550,
1910,3584,896,224,56,14,
1564,3106,9262,13222,5374,1906,6148,26506,18982,7534,7444,4564,2158,4042,11764,4348,
1420,682,1528,382,1042,2854,1486,2134,1216,304,76,430,11926,4888,1222,874,
2044,6910,2230,1252,3130,2800,700,826,1504,376,94,754,2374,1306,1774,20842,
9988,26758,10450,10792,2698,3916,1150,1204,1378,5122,35254,13636,11638,4780,1312,328,
82,
848,212,4520,1130,16892,3584,896,224,56,14,422,1046,1952,488,122,
9008,2252,1316,1412,1496,374,4796,452,12032,3008,752,188,596,2090,3224,806,956,
1100,884,5168,1292,9980,2288,572,524,
15568,3892,61468,85534,49156,9634,4030,3310,2596,904,226,502,29176,7294,5146,17728,
4432,1108,886,11194,11410,4696,1174,4876,97216,24304,6076,2752,688,172,1888,472,
118,11176,2794,1516,508372,72220,57742,58552,14638,9340,3670,9472,2368,592,148,12640,
3160,790,4390,5686,5848,1462,8278,151648,37912,9478,98674,37420,27070,16270,19186,
7612,3184,796,4120,1030,5512,1378,934,2770,1456,364,16054,35980,13288,3322,2914,1510,
3256,814,2506,24532,4180,1318,3094,7306,4054,6808,1702,3418,3688,922,19942,
18808,4702,3370,1678,3514,7036,3022,5254,8260,1966,
7790,35780,32576,8144,2036,800,200,50,746,698,680,170,482,608,152,38,2246,
2150,5792,1448,362,554,626,908,1394,1124,890,752,188,2066,2624,656,164,
6506,2858,1490,2942,3770,1832,458,590,12326,10022,8564,2024,506,
-4118,1918,1138,1684,4468,3874,3226,3952,988,604,532,2836,8488,2122,6088,1522,
1846,1252,1468,694,928,232,58,2038,1306,4126,1966,1156,1372,676,8338,11404,
6304,1576,394,8572,2026,22126,8716,6868,21838,8608,2152,538,47938,28012,4672,1168,
292,4936,1234,4114,4828,1324,1108,6574,2884,1858,2092,6412,21694,8554,87088,21772,
22612,26986,165694,62554,62662,1089382,878656,219664,54916,16492,3052,1162,8392,2098,14548,29416,
7354,8194,5656,1414,8668,2044,802,1498,
4790,2216,554,5486,3836,1274,1766,1082,1658,1982,1292,662,668,626,2522,2468,
2696,674,4568,1142,848,212,5870,3998,1814,1100,2054,1190,866,37946,22394,13646,
17426,30170,18020,9596,2084,6842,4898,14834,14510,6152,1538,7076,4154,3386,2954,13052,
2570,2138,2252,842,1562,1928,482,12092,2246,1262,1652,1514,3188,1946,2144,536,
134,470,596,5288,1322,9992,2498,6572,2792,698,1442,28130,151418,86222,293312,73328,
18332,20180,20828,4856,1214,1076,1352,338,10634,7454,4970,3758,2750,1508,2630,1406,
1130,408170,294140,42098,37514,122240,30560,7640,1910,1136,284,55028,16526,13160,3290,2900,
2008,502,1420,1450,964,3466,1720,430,10270,100612,14884,14380,10594,5230,8848,2212,
1990,2170,1234,2044,4708,5770,2584,646,1414,1846,3286,4312,1078,7624,1906,26854,
16156,8812,3796,1132,4438,5068,2476,3016,754,5194,2368,592,148,448,112,28,
9622,19774,29446,17614,16858,6742,8362,3556,6166,
2648,662,6812,11186,4616,1154,854,812,6326,7166,5084,8018,3428,1064,266,3086,
2306,1286,3944,986,1622,8786,3716,1118,1682,1052,1496,374,3896,974,3842,1862,
3572,3644,2078,2222,4376,1094,2924,6434,2834,1484,8432,2108,1646,2348,7784,1946,
4382,3518,3032,758,2792,698,12644,8264,2066,1196,3212,3356,4328,1082,5516,5426,
2456,614,6974,4976,1244,5156,1388,3242,1658,3482,2996,2972,1838,
1264,316,3904,976,244,5254,2392,598,646,664,166,484,7582,22444,4630,2158,
9214,5416,1354,1816,454,592,148,1096,274,6082,2770,87730,114460,16834,17842,26008,
6502,2860,958,5602,6730,4840,1210,1714,5596,2032,508,1636,4462,41980,10384,2596,
8026,48850,847564,159340,30298,32542,23308,4792,1198,1228,652,544,136,34,880,220,
4768,1192,298,1222,2446,1426,12706,12724,15154,22606,7096,1774,1552,388,3256,814,
1282,14974,7846,3364,6988,1732,2734,38950,15028,8608,2152,538,3958,1906,850,20878,
6610,31774,22822,8980,3580,2284,
2636,5756,1502,986,2840,710,1832,458,32282,29246,11390,4694,2060,1898,11858,
6218,26492,5390,2444,2048,512,128,32,8,2,1058,1652,4100,2210,2300,854,
980,3464,866,1544,386,1274,2474,6566,19652,6584,1646,1040,260,1130,6530,4730,
4922,7988,5378,4082,19148,8780,8672,2168,542,626,2642,2330,3974,27950,10904,2726,
13184,3296,824,206,500,1988,1616,404,22118,16718,6692,40388,12416,3104,776,194,
1166,860,584,146,29354,40586,94010,92552,23138,14072,3518,1742,1076,2462,1346,1814,
1250,1760,440,110,464,116,1184,296,74,8996,3842,3218,6350,2804,2816,704,176,
44,746,3122,7232,1808,452,4136,1034,7538,7016,1754,3488,872,218,2192,548,
4406,4274,18716,3932,1160,290,1220,1400,350,554,
1720,430,1300,3136,784,196,460,3730,1822,55732,8578,3640,910,1570,1012,5674,
3928,982,4252,2254,2326,6238,6196,1612,9262,6268,8140,8590,5890,2632,658,670,
4432,1108,1768,442,1072,268,5836,7132,3064,766,1540,712,178,490,
5618,3908,1292,1424,356,1634,1202,1958,2162,2450,10694,7076,4970,2288,572,2588,
4556,2342,2378,1316,12638,19442,9740,3800,950,4586,2144,536,134,1136,284,
442,14344,3586,2734,1450,4708,2386,2404,1738,3484,1078,102790,59626,39670,27838,10864,
2716,934,1006,802,2764,1132,8020,7138,12970,51760,12940,3520,880,220,466,1324,
12394,69832,17458,10882,5812,9082,142216,35554,37558,45790,17596,3724,1456,364,10510,4366,
2062,1198,874,4840,1210,20044,3562,4192,1048,262,16360,4090,13366,46306,47764,22168,
5542,2302,1288,322,6886,2680,670,676,1252,1414,3382,33184,8296,2074,6076,1564,
718,694,5596,1474,1780,11962,159352,39838,15364,4462,2098,2242,2050,2086,1330,1810,
2080,520,130,1276,664,166,790,3346,2944,736,184,46,2005480,501370,2049256,512314,
1652248,413062,112858,110140,21076,
638,9902,3530,3050,2780,1136,284,2936,734,10388,3986,8504,2126,35630,10766,11168,
2792,698,9584,2396,1082,7694,14084,7964,8180,4850,14822,5984,1496,374,566,8630,
3662,7154,19196,37286,14408,3602,8018,4832,1208,302,830,3266,4778,3752,938,1592,398,
48356,39062,15074,17648,4412,2474,2456,614,656,164,3098,2324,1718,1070,1046,818,
16922,6698,
3778,3874,68038,13612,4894,6154,2734,17014,10636,3028,994,2956,1786,1096,274,8746,
3706,1816,454,6568,1642,1042,508,7594,3274,1654,1996,2896,724,562,904,
226,42982,29464,7366,3676,14092,4198,3514,1744,436,
3482,16790,16196,3464,866,752,188,1268,926,41792,10448,2612,5468,2606,2534,10652,
4064,1016,254,
9472,2368,592,148,2488,622,5404,5770,3664,916,2812,1144,286,2002,6850,51754,
47836,21676,4492,1270,904,226,6070,2704,676,3676,2326,1300,1504,376,94,105076,
30622,47080,11770,7690,4474,3586,8014,
14438,8894,3764,27938,12134,3092,
676,556,9712,2428,1756,2836,1150,1720,430,4258,2026,1420,2638,14572,7900,4780,
10198,165688,41422,83350,369838,901846,1933552,483388,137026,51814,69010,26308,5362,2440,610,658,
902,6380,2870,2690,4472,1118,4436,1262,4250,2024,506,620,1250,13598,10568,2642,
1496,374,1286,17426,5654,4256,1064,266,530,7166,8090,3464,866,1874,
1280,320,80,20,434,2060,6194,6254,91952,22988,6086,3584,896,224,56,14,5768,1442,
2168,542,2306,3602,1766,1982,3716,23480,5870,8624,2156,1682,1226,890,764,2366,
4040,1010,1208,302,3878,
778,8806,95326,36178,45268,32146,14800,3700,3136,784,196,1132,2104,526,628,2164,
2650,4282,5506,4174,1996,10906,11248,2812,958,790,976,244,13840,3460,2050,2230,
10924,2290,19732,127078,94342,41362,18688,4672,1168,292,1300,87712,21928,5482,10438,12112,
3028,5416,1354,11878,33982,13174,3262,1654,2590,1402,6052,5956,2752,688,172,3040,
760,190,502,1102,844,1948,796,580,1240,310,
111230,28598,11156,5912,1478,986,1634,5576,1394,2852,3254,1652,1544,386,12086,4964,
14000,3500,1088,272,68,9950,3554,8006,3434,2690,87710,25424,6356,2582,1400,350,
854,752,188,782,3164,14810,9410,23558,9266,12182,5000,1250,5090,
454,1336,334,14566,9274,3910,3280,820,586,652,1264,316,3712,928,232,58,
544,136,34,766,11164,5644,2668,10732,5692,7114,3100,6520,1630,9028,2026,1192,298,
1660,7276,7330,2818,1594,1030,436,514,1108,640,160,40,10,10030,10516,
2404,2074,1210,886,2614,6358,3376,844,1318,1822,5818,11650,2458,1354,940,3790,
6988,3046,2794,1480,370,11944,2986,1552,388,8446,33034,12820,2836,964,892,205858,
58654,77746,34366,70942,93298,320584,80146,53500,144946,62716,501052,124534,208804,155992,38998,72886,
41212,954976,238744,59686,34654,78430,175486,763492,162616,40654,41980,206860,59260,271792,67948,64822,
381496,95374,62326,55606,
10676,5270,10190,8750,4136,1034,1220,662,4358,9560,2390,5342,4088,1022,1658,2270,
2360,590,6572,9722,5672,1418,1490,992,248,62,1118,1712,428,5348,1436,2756,
950,6368,1592,398,704,176,44,3548,1994,8636,3512,878,1616,404,2000,500,
1676,9866,11324,4268,59870,34760,8690,3692,9218,3890,1892,788,2486,8258,3530,7184,
1796,770,722,
1006,1042,4066,4552,1138,38248,9562,10972,2302,29962,17938,20104,5026,6766,2662,1432,
358,568,142,5038,2176,544,136,34,8812,2086,1216,304,76,448,112,28,
1438,2068,1666,3466,3034,11356,2356,1744,436,
-14038,-26188,-90010,-29134,-7846,902,7262,3158,2942,1538,1952,488,122,2168,542,638,
674,1466,3302,3674,20258,12482,8108,15452,3332,2024,506,2492,1388,956,614,3104,
776,194,1196,2132,8840,2210,2330,3458,3032,758,974,800,200,50,3188,3410,
7136,1784,446,602,5240,1310,926,782,728,182,812,6704,1676,4832,1208,302,
548,
610,664,166,7900,3310,2950,7270,68020,12706,5200,1300,1852,1642,3316,1228,99754,
112504,28126,8140,28102,51802,48724,167164,55204,10786,4480,1120,280,70,3154,1618,1042,
826,994,808,202,3748,1138,862,2614,3640,910,1600,400,100,454,4720,1180,
1420,233518,132442,97024,24256,6064,1516,16018,6442,8500,2578,1402,1156,652,4444,2338,
1312,328,82,466,2740,15838,5224,1306,1282,916,5056,1264,316,1318,8242,
3526,12436,3586,1780,1012,904,226,520,130,484,526,1384,346,
764,4028,5876,1538,1196,2696,674,6458,2858,1508,10634,4424,1106,2048,
512,128,32,8,2,
2488,622,670,688,172,2866,2704,676,1282,5134,2362,6538,6130,4540,1288,322,
2524,910,778,6268,1612,1180,658,1462,2200,550,1126,2308,12370,8050,5620,41788,
8272,2068,2422,41608,10402,5644,1558,12424,3106,2566,1486,994,7834,20632,5158,2098,
2272,568,142,490,
8174,8924,3368,842,1568,392,98,2162,1946,5096,1274,1796,4286,2984,746,1514,
5672,1418,1892,4754,14798,4928,1232,308,698,4700,1508,11180,2534,1388,932,
10424,2606,1562,3314,5126,2360,590,1748,1586,5564,11396,4640,1160,290,2324,1400,350,
6716,9074,31988,8006,3440,860,4214,2018,3782,1856,464,116,2270,8438,3602,9896,
2474,2486,1370,12854,5258,4052,2234,9128,2282,2378,2432,608,152,38,452,24680,
6170,6230,2774,1478,992,248,62,830,5348,5774,2390,1334,938,1622,1046,16256,
4064,1016,254,1694,3890,8480,2120,530,5522,9722,5360,1340,3242,2918,1532,1910,
1154,
3268,2278,2104,526,6778,2980,1186,1942,2188,3562,1774,5806,8620,3520,880,220,
3700,1132,1414,149500,65152,16288,4072,1018,820,592,148,466,898,8722,3220,1042,
1060,916,610,1846,2134,2296,574,2566,3952,988,4186,2008,502,1378,2170,1252,
5572,2764,6832,1708,1576,394,586,658,952,238,3862,1036,2656,664,166,1330,
1294,8236,3412,1078,1702,1978,1180,129628,165598,106792,26698,10450,3706,1828,1024,256,
64,16,4,4672,1168,292,808,202,514,5158,3436,2062,9694,8134,94258,20896,
5224,1306,928,232,58,460,1456,364,1198,4246,3484,14068,3076,6130,3898,1900,
1630,17038,29032,7258,3160,790,1540,3292,5644,4114,1924,3430,3544,886,1594,16102,
6478,41770,8398,33022,29944,7486,16534,10396,54892,16822,10558,10990,17470,10702,68878,136540,
67912,16978,5542,3598,12610,12700,27190,16390,16696,4174,55468,31402,12214,7966,12862,12934,
7918,13582,31564,17020,9262,17074,23302,16750,24760,6190,42634,16426,6598,13186,26218,10270,
40312,10078,37972,7558,32050,7774,30916,8110,13150,22654,21196,47986,39664,9916,10510,25732,
12646,43066,16588,21124,
4346,3338,4940,8630,9368,2342,11096,2774,9656,2414,2456,614,378566,1087154,408122,87104,
21776,5444,1460,974,1646,2024,506,
1300,15118,7972,5452,1462,988,4306,5722,4318,1984,496,124,1030,826,1564,1924,
11878,4894,2146,19492,10312,2578,4264,1066,1714,2758,1474,13336,3334,1690,2050,7708,
3220,2956,994,2488,622,93850,53890,108106,53500,12832,3208,802,4588,2320,580,
3940,8854,3760,940,616,154,1186,5074,6370,9166,5872,1468,976,244,1168,292,
2212,3022,7000,1750,1096,274,
1268,7016,1754,7628,1844,4748,1520,380,512,128,32,8,2,1130,2726,1538,
1916,800,200,50,
874,1018,8554,3178,1666,1066,1072,268,2098,1228,2614,169606,109342,62608,15652,3376,
844,2452,2542,2008,502,6772,3028,1198,1774,1954,1174,6808,1702,3532,3586,1786,
2206,2344,586,1144,286,1264,316,1192,298,856,214,3856,964,622,11632,2908,
1882,10174,6826,2692,946,796,2596,928,232,58,1624,406,5842,2632,658,688,
172,3694,6814,4936,1234,904,226,526,2278,4018,1948,4882,2272,568,142,2434,
1354,1306,8284,3016,754,724,57136,14284,8122,5026,2326,5338,7768,1942,34528,8632,
2158,7942,9022,6178,2758,17788,6106,10498,4378,10714,14872,3718,4366,
2558,5708,37388,9158,10766,15800,3950,44354,23960,5990,6140,12872,3218,4934,2660,1148,
2228,860,19676,18824,4706,6518,4772,1526,1964,1658,1064,266,542,
664,166,12358,38116,11584,2896,724,6526,2890,5884,1546,5554,3616,904,226,1234,
7390,3214,1648,412,520,130,1180,2914,2746,4420,2350,1324,2188,3958,1888,472,
118,808,202,16624,4156,1222,5878,2428,898,1612,18388,41410,24400,6100,16738,10522,
36424,9106,116686,44200,11050,61444,
794,1556,1604,17702,7082,5978,4472,1118,1262,3518,1766,1106,17162,8516,16454,6614,
2924,992,248,62,776,194,3332,5714,166418,107336,26834,28952,7238,3158,1628,1952,
488,122,1178,1772,506,1394,3284,10622,3764,2168,542,6302,7058,5312,1328,332,
2396,2114,9974,4184,1046,836,10412,1898,9116,7568,1892,2906,2744,686,
2374,2446,4174,5632,1408,352,88,22,2344,586,664,166,1204,670,11140,1030,
1690,1078,1732,1210,898,1834,1132,1516,1642,1060,1672,418,7720,1930,1168,292,
4066,1858,1300,688,172,790,2860,2614,2380,1780,778,736,184,46,2056,514,
922,1354,952,238,6010,2698,1456,364,
1922,1166,1772,10112,2528,632,158,1202,896,224,56,14,1286,3200,800,200,
50,464,116,14702,9374,6386,2840,710,2714,3608,902,2876,854,4994,2318,2258,
1292,2660,944,236,11894,22118,16028,2996,2246,4010,8492,21344,5336,1334,5306,6224,
1556,998,4256,1064,266,
2200,550,652,568,142,820,3736,934,796,892,1804,784,196,
1118,866,1604,1568,392,98,1172,7004,1760,440,110,488,122,
3620,2048,512,128,32,8,2,
1474,1000,250,5842,2638,2602,3580,1978,4384,1096,274,550,4330,3448,862,18424,
4606,4042,3328,832,208,52,790,4258,2044,3070,5392,1348,700,24184,6046,6202,
3418,1744,436,844,4168,1042,838,6064,1516,2764,7174,67996,20242,8038,120898,45784,
11446,11782,146728,36682,26092,13132,11944,2986,2608,652,7120,1780,1222,8218,3094,4408,
1102,1738,11062,11458,4744,1186,892,
2546,3566,5138,8774,6056,1514,1016,254,15506,12698,5210,2402,1460,722,5462,9668,
2144,536,134,1196,1604,1010,3428,2348,1784,446,6758,4922,2294,10718,31166,65078,
149156,579752,144938,54800,13700,6704,1676,1592,398,4778,2240,560,140,1160,290,866,
1028,12260,5858,2432,608,152,38,1142,3104,776,194,4616,1154,1280,320,80,
20,452,848,212,488,122,494,25946,10178,30086,18044,317312,79328,19832,4958,7886,
25874,26756,6236,4760,1190,1790,
9268,7582,3292,1066,2722,12442,42784,10696,2674,2626,2398,1348,11092,29662,11572,13462,
7306,8296,2074,5152,1288,322,1426,1924,1696,424,106,2668,6772,12346,29356,8224,
2056,514,10618,39562,35512,8878,3778,2884,13696,3424,856,214,
698,3464,866,2600,650,1490,5540,7160,1790,4028,2480,620,566,662,23012,109490,
616442,589172,91904,22976,5744,1436,3560,890,14738,17180,2852,4544,1136,284,1070,1088,
272,68,21554,46850,41666,37292,7442,28346,62402,54788,25250,63176,15794,27386,26630,10436,
5354,4136,1034,1706,2084,
5836,6808,1702,3052,1984,496,124,562,946,1054,3028,1018,832,208,52,
460,17014,10696,2674,1540,1918,3268,5212,8614,7912,1978,1192,298,5392,1348,2944,
736,184,46,4648,1162,886,1624,406,1354,958,3286,2974,8752,2188,1756,88402,52048,
13012,2890,1534,20686,52492,23008,5752,1438,3352,838,1648,412,71392,17848,4462,39370,
15214,23266,40774,18496,4624,1156,1876,802,3406,8356,3334,2476,1822,3676,1972,820,
604,13126,6832,1708,1606,9748,2278,252100,360130,153562,58036,11332,6484,1666,
3524,1112,278,2378,554,8768,2192,548,938,18092,9776,2444,3722,3206,7724,5402,
3584,896,224,56,14,1136,284,1208,302,1298,2072,518,4322,1514,5474,2504,
626,686,1454,1946,7886,5564,3908,1184,296,74,1778,1118,2174,2912,728,182,
2552,638,902,4808,1202,1046,3026,1586,1262,1838,2162,1478,4604,3854,3296,824,
206,1244,1622,3512,878,6752,1688,422,2126,2324,2984,746,3632,908,2702,2648,
662,2882,1532,1964,2972,2012,1694,2396,1802,5456,1364,1418,2234,3944,986,2936,
734,3368,842,4016,1004,1022,3044,2612,4592,1148,1238,3188,3956,1346,956,1562,
1724,1742,2108,2264,566,2066,1226,2228,2498,1388,
1900,808,202,1384,346,1324,700,3646,1816,454,622,3760,940,628,1306,1864,
466,2356,1792,448,112,28,
28808,7202,4340,8360,2090,3914,43064,10766,4490,72602,162908,30998,59096,14774,7874,7388,
1838,1142,7094,4634,14768,3692,2420,5210,3338,4178,3482,41606,12494,5138,4022,10010,
24974,9818,28478,11132,2540,
1870,2092,27952,6988,18736,4684,3550,3130,6304,1576,394,904,226,538,5668,
1516,4642,2194,1276,1492,6090982,32953966,79191520,19797880,4949470,2785210,33956278,36265678,15300886,21790768,5447692,
2300398,2187646,1231684,231394,87226,64570,50044,15208,3802,4786,2248,562,664,166,706,718,1606,
3508,3814,17278,10852,2488,622,11608,2902,24448,6112,1528,382,1348,1384,346,5182,
4048,1012,3238,2542,6478,4036,1210,9592,2398,2482,25432,6358,41740,19762,7864,1966,
3652,1138,880,220,12622,6628,1696,424,106,
1184,296,74,482,1850,1148,2642,1538,10004,2330,1328,332,1376,344,86,
458,626,2228,872,218,536,134,2498,20480,5120,1280,320,80,20,7718,
4562,2078,20840,5210,2408,602,680,170,518,2510,75614,49922,512456,128114,42566,67172,
36878,56546,25502,27770,10868,2492,2600,650,698,716,2876,4928,1232,308,512,128,
32,8,2,17666,37772,20210,43844,36824,9206,6314,2822,50486,29534,20762,8240,2060,9800,2450,
1484,2672,668,
652,1786,18166,7780,4330,7336,1834,6016,1504,376,94,490,2872,718,724,7672,
1918,1174,1126,3640,910,796,604,568,142,508,550,5368,1342,958,814,760,
190,526,
18020,14942,5000,1250,9110,3872,968,242,57044,5468,4664,1166,2144,536,134,506,
1424,356,2192,548,2396,3692,1148,100784,25196,5180,1526,1028,6986,6842,4988,1580,
752,188,824,206,1760,440,110,11522,27884,5684,2738,3812,5384,1346,13304,3326,
11468,2606,3902,2894,55814,21386,42806,16508,2552,638,6176,1544,386,18392,4598,2180,
10982,4574,2084,3044,
3268,1258,928,232,58,478,4312,1078,3106,1672,418,916,628,574,11116,4912,
1228,1486,3022,3994,1954,1348,988,2584,646,1504,376,94,3826,4204,3754,1864,
466,3232,808,202,532,556,1528,382,6742,4156,8254,32986,12826,5266,32182,17548,
6076,7552,1888,472,118,2806,8386,2824,706,1204,682,712,178,1162,892,66202,
25282,6388,1654,5662,10828,4186,2026,1216,304,76,1186,1132,2782,7228,9586,5698,
2068,844,1378,
4220,2330,4418,2114,1250,926,1664,416,104,26,2960,740,596,884,1844,36758,
58688,14672,3668,1316,704,176,44,5354,2306,1322,1172,2654,2636,3284,1262,2612,
3770,3248,812,11762,4868,1370,6866,3032,758,19052,21404,114092,75914,30464,7616,1904,
476,902,2450,1376,344,86,3824,956,1412,722,728,182,15488,3872,968,
242,548,560,140,7598,4520,1130,1118,1772,7712,1928,482,638,1502,1988,830,
1610,1586,1052,2762,1640,410,6140,2870,1209698,454094,980198,829214,467576,116894,66896,16724,
3152,788,2168,542,1448,362,14138,7622,76124,17372,10574,
466,5992,1498,1948,1264,316,1726,7360,1840,460,544,136,34,2110,4282,
8170,5740,1534,6334,5674,4336,1084,1888,472,118,502,646,700,3184,796,3244,
1066,1744,436,1408,352,88,22,3568,892,12316,3994,10606,3784,946,50452,15334,6208,
1552,388,2338,2218,2392,598,682,1528,382,23488,5872,1468,26908,13576,3394,5038,
2132,11924,38732,14882,9518,4028,1214,914,4982,2204,872,218,2246,13166,5396,7142,
4676,2462,1382,
6058,6790,12064,3016,754,742,2686,10462,5734,16942,10678,13738,11650,4828,2506,2722,
1480,370,598,3532,7516,3262,4504,1126,8194,14026,7582,6232,1558,3496,874,36922,
11188,2242,1300,1306,23476,3538,1786,3046,27136,6784,1696,424,106,5320,1330,958,
85468,25186,9904,2476,3226,2764,8680,2170,1414,4600,1150,10138,5260,7060,3154,1642,
2684,5438,10622,47234,14090,5744,1436,2792,698,722,1940,824,206,2360,590,2468,
2102,2210,2756,4160,1040,260,842,776,194,860,2372,2432,608,152,38,1172,
680,170,524,1298,2216,554,668,7976,1994,1208,302,3728,932,3242,1676,1622,
21314,6800,1700,
-32492,-160316,-99530,-39320,-9830,-31094,-25526,-51506,-18854,-27638,-33470,-155234,-57752,-14438,-69812,-17894,
-27818,-37196,-40538,-40652,-88676,-16166,-24614,-109178,-29900,-24524,-58058,-23366,-35678,-125378,-46556,-11942,
-26282,-65438,-63380,-82934,-112202,-33788,-54746,-62036,-37322,-25022,-80018,-29546,-55340,-21158,-39404,-38294,
-30122,574,676,1342,964,1528,382,604,1546,7174,2824,706,38194,22636,170596,49132,
12034,8008,2002,2278,3988,3364,2098,2332,898,3016,754,1576,394,3004,
1024,256,64,16,4,2656,664,166,3628,4114,3466,6904,1726,1108,2494,1396,5878,4150,
6298,109360,27340,21070,8362,9244,2194,2386,5896,1474,8758,11242,11674,1208260,256192,64048,
16012,3058,2872,718,730,7462,4420,77446,22588,4696,1174,13132,8332,1978,5146,25036,
3706,8434,2086,2500,1852,808,202,2230,4822,7576,1894,2800,700,592,148,802,
1708,10978,5956,6544,1636,1612,2314,16810,16372,14104,3526,1798,1312,328,82,1198,
910,3934,1936,484,1288,322,4438,58606,22438,113896,28474,52450,23452,4858,9892,80848,
20212,16534,24850,15130,52660,56062,21484,6202,14194,9136,2284,2152,538,7054,3106,1690,
22042,54718,20980,17020,3652,2032,508,556,3142,844,15166,6148,6094,2746,3544,886,
2044,8062,3484,1114,6604,1762,2068,7354,12682,15652,5554,4276,40438,18730,17992,4498,
3682,2878,1540,2662,2518,7300,
470,638,4106,3464,866,2924,1010,5030,2348,902,800,200,50,2954,2816,704,
176,44,1118,3680,920,230,548,10376,2594,4382,9080,2270,14912,3728,932,6974,
4616,1154,4346,50714,52280,13070,4484,5750,2618,2432,608,152,38,476,
15478,9862,29788,22606,49012,9652,2272,568,142,11734,7756,2686,4462,1582,5758,7054,
67966,59542,34648,8662,6028,6064,1516,1798,17674,7090,3694,68452,23956,4954,2320,580,
18400,4600,1150,3166,24316,12454,42910,22828,7576,1894,2128,532,562,10066,3640,
910,28600,7150,5596,11632,2908,29230,40750,55330,25018,9844,2308,3706,1852,17260,6010,2716,
8674,12400,3100,14020,13192,3298,4606,6082,9790,10456,2614,2626,11590,17428,3730,1858,
5278,3874,3310,2398,5902,20272,5068,3910,4930,22768,5692,7918,13300,2956,8818,4828,
464,116,3596,27086,16394,20498,8150,9338,2744,686,1544,386,608,152,
38,3812,1178,1142,3164,2048,512,128,32,8,2,
-9554,-5246,-12956,472,118,508,1126,886,796,4456,1114,1786,2164,1768,442,1408,
352,88,22,9724,2098,7492,10732,2476,928,232,58,1192,298,1558,1048,262,
562,3592,898,25462,10012,19036,74524,18568,4642,7696,1924,7942,3442,4294,2074,2326,
1336,334,1822,1324,712,178,478,946,5914,4486,2146,6484,4198,2038,1228,694,
724,1486,2308,35698,24706,90802,305374,86698,29794,41476,68692,9712,2428,16204,3502,8266,
18472,4618,5386,5872,1468,1018,1732,4864,1216,304,76,1984,496,124,2092,856,
214,544,136,34,3322,3028,1972,1714,53014,20344,5086,2242,10372,255232,63808,15952,
3988,6052,4756,71524,43564,8632,2158,2908,6322,22846,11488,2872,718,1072,268,514,
13648,3412,5062,2362,2488,622,2998,1588,1606,1066,5242,4108,1234,3244,
2228,5186,3524,3584,896,224,56,14,470,4496,1124,1478,5630,2576,644,1472,
368,92,482,2774,2606,1442,6008,1502,1028,17174,8930,8120,2030,1226,3242,4172,
1400,350,596,6104,1526,16958,6824,1706,3200,800,200,50,1190,1148,680,170,
3800,950,5204,3290,7940,25130,13982,5708,1616,404,2378,4214,4748,2828,11342,4718,
2234,10370,
2212,880,220,1384,346,3214,17416,4354,2098,1252,700,1360,340,862,1648,412,
2602,1546,1402,2278,4132,1240,310,6724,1726,2134,5326,5842,2656,664,166,2350,
592,148,8704,2176,544,136,34,478,1432,358,2512,628,13042,5356,21004,13618,
5572,1510,3484,3574,19846,51760,12940,5128,1282,946,820,8890,6274,2818,1522,1036,
8236,8992,2248,562,676,1132,7210,2842,18388,3400,850,784,196,502,11098,10018,
4222,3538,1792,448,112,28,4186,5644,6328,1582,1942,6238,4672,1168,292,520,
130,514,658,712,178,532,
488,122,512,128,32,8,2,3068,3098,1628,7694,13526,8774,5042,2234,1304,
326,1478,1964,1718,2132,866,9152,2288,572,2456,614,6176,1544,386,1856,464,
116,854,1646,39392,9848,2462,4292,16928,4232,1058,140768,35192,8798,9638,8576,2144,
536,134,1514,1034,
1138,1822,1150,898,1672,418,1402,3400,850,6784,1696,424,106,33028,10456,2614,
1552,388,1276,706,1564,760,190,538,2470,2734,1492,11824,2956,3940,5884,1570,
2050,2320,580,1330,1894,2218,10366,4354,3616,904,226,1294,952,238,556,
-100984,-25246,-390460,-1841296,-460324,-95404,4874,15656,3914,2996,2012,2120,530,4172,1250,13280,
3320,830,1052,3344,836,6962,8096,2024,506,1454,2186,2168,542,1196,692,1364,
34340,12050,11798,4892,4550,2174,1430,1004,656,164,14252,3140,11462,4766,16442,10418,
11012,184838,69782,26636,5462,2516,18626,27374,13244,6746,4964,4316,2606,2564,5522,21218,
70142,20546,29804,6056,1514,3050,3302,1706,2696,674,7448,1862,1166,4508,7124,4022,
1976,494,1904,476,1796,20030,6452,2984,746,4496,1124,
27184,6796,3082,1624,406,5566,6922,3064,766,4774,3856,964,2152,538,670,1408,
352,88,22,31990,14842,6034,5944,1486,3478,6094,7366,5314,2314,1336,334,2506,
820,622,2530,2638,4450,14530,4906,2308,1144,286,6718,15016,3754,1876,
542,1478,3476,1310,1910,6230,41708,30206,18164,8768,2192,548,572,1334,12404,
25670,23888,5972,10874,9902,12542,8228,2012,74612,40412,35552,8888,2222,13682,5600,1400,
350,1370,3272,818,776,194,3062,7688,1922,1190,2894,2570,1544,386,614,10766,12170,
4244,1418,1220,698,7544,1886,2234,5810,2648,662,4226,2054,3962,5528,1382,7958,
21296,5324,15140,3308,5906,2684,1928,482,650,1004,4448,1112,278,6716,
514,24940,5146,5752,1438,3934,8740,11338,7552,1888,472,118,2536,634,1618,22024,
5506,14302,28342,11098,20764,3742,5392,1348,2800,700,5338,9280,2320,580,2476,934,
820,2152,538,2836,1972,6508,1690,13528,3382,1738,15220,9928,2482,6958,2554,2428,
2068,1756,
15290,18206,7298,5282,4148,3986,3842,3338,37160,9290,31664,7916,3356,1100,48266,97838,
15326,6218,36542,14174,5786,7118,3140,2060,
472,118,2338,1348,724,3856,964,652,256354,96604,28348,9076,3082,4984,1246,
3292,2104,526,1474,1024,256,64,16,4,1258,3244,5236,1642,2272,568,142,4768,1192,
298,1834,2482,1402,20536,5134,4066,1996,5092,1426,1006,1744,436,886,2986,2968,
742,1264,316,7036,4372,3784,946,826,8656,2164,1318,4594,2194,1294,1906,
1186,916,5722,2434,1384,346,922,1084,9034,6826,4588,4174,3526,19834,30526,
11146,12526,8224,2056,514,664,166,1462,3472,868,634,8872,2218,2644,2266,
13850,5666,2420,926,3644,29552,7388,5360,1340,3986,8816,2204,2852,6386,4406,3806,
8654,
9706,8716,5710,2614,6112,1528,382,616,154,4036,5224,1306,5494,6520,1630,1084,
676,1372,730,126994,72616,18154,38380,9370,15700,17212,3700,35140,13630,5584,1396,11812,
4504,1126,1144,286,580,2494,1408,352,88,22,1522,2038,17842,11218,7492,4882,
3928,982,2128,532,2470,8878,3802,25744,6436,2992,748,3280,820,4360,1090,
1022,14726,5996,1598,21542,8552,2138,2264,566,686,4916,6086,2756,5024,1256,314,
3884,1202,13268,2426,4052,2324,1838,1346,3386,4244,2378,2522,3332,3656,914,5006,
5348,11324,4106,3494,1784,446,
23230,16864,4216,1054,3142,3988,1222,15892,3454,10972,12976,3244,2098,1420,5632,1408,
352,88,22,1198,29440,7360,1840,460,2140,19828,4192,1048,262,1474,2230,2440,
610,8056,2014,3952,988,7192,1798,2122,1270,1900,1720,430,11080,2770,6658,4528,
1132,1504,376,94,2332,2284,1828,21772,5956,35296,8824,2206,4114,3040,760,190,
880,220,37162,14410,5878,4492,28414,31852,10144,2536,634,712,178,15454,15292,8704,
2176,544,136,34,5086,6544,1636,1060,6112,1528,382,6598,7768,1942,2278,3058,
1690,1108,682,730,748,1396,736,184,46,28576,7144,1786,1144,286,2494,3742,5410,
8116,1996,7570,7246,13024,3256,814,
6866,3050,14798,9512,2378,2726,21032,5258,5048,1262,1898,1790,264770,99764,11528,2882,
1556,5924,1586,1070,4274,2078,32696,8174,5786,8396,8840,2210,1304,326,902,10700,
16424,4106,38780,27224,6806,8000,2000,500,542,17990,26630,21962,10988,5696,1424,356,
1388,9422,6488,1622,3626,5354,11432,2858,4868,
1174,916,4894,36958,8896,2224,556,580,87622,33334,12976,3244,1084,3922,17962,13894,
5686,2608,652,598,700,13264,3316,2122,3634,5326,96856,24214,9556,3442,5164,1444,
15046,6118,2770,12994,18862,9682,12922,8458,4936,1234,9268,3796,36412,18934,7576,1894,
1186,
1898,3866,48254,18572,3446,3182,1670,1304,326,926,824,206,554,2732,8366,
3614,1832,458,13910,18284,4256,1064,266,3992,998,22958,9086,3884,4298,4148,49676,
7820,1934,1202,1868,2426,6944,1736,434,1436,746,2894,1562,22010,31730,19040,4760,
1190,6242,4004,2318,1346,7082,8240,2060,1124,1508,1616,404,2204,890,5000,1250,354236,
66896,16724,9320,2330,87620,28466,17204,20186,44720,11180,13886,5684,211982,79970,35108,11066,
80140,36076,47668,9316,2224,556,150124,98878,56812,20980,27652,5662,4378,3160,790,28570,
7510,18712,4678,6214,30106,17428,3286,12532,124552,31138,12154,45148,25708,20146,8032,2008,
502,3862,13990,20344,5086,4054,25732,5302,10588,17050,26464,6616,1654,36346,39586,15322,
8194,3550,3190,4630,158872,39718,62644,14944,3736,934,35914,10936,2734,6358,18364,33754,
15970,6466,2902,16984,4246,40774,36670,21820,7330,3226,32944,8236,30874,27166,16474,8680,
2170,8374,14476,8518,9454,22738,9004,11908,2710,32026,15934,10156,9670,10426,10462,7078,
11398,11884,27112,6778,73264,18316,9994,3646,3244,11614,7726,18850,7546,17752,4438,20308,
13342,8698,18904,4726,13378,5494,20632,5158,14314,14530,5926,26500,5446,6862,5590,16906,
23224,5806,5878,15772,10318,16258,6574,6310,6454,12046,6886,6958,11290,17716,7534,7654,
7750,8806,7930,12586,12748,8398,8506,8302,9370,9388,14044,9166,9694,6646,9274,9964,
10666,10828,10138,15988,10732,12124,12610,5206,11434,11596,14068,12892,14836,
914,1094,11234,4478,6050,4286,5888,1472,368,92,3944,986,848,212,518,4064,
1016,254,2486,2594,2828,21278,28676,12152,3038,8660,2102,2378,1370,992,248,62,
2324,4916,1400,350,37316,7682,7940,18038,11342,49250,121556,23270,11192,2798,14270,14312,
3578,1820,12530,3290,1712,428,1316,1022,3134,
12286,5086,2386,2266,4186,5806,2656,664,166,11152,2788,7516,1888,472,118,
1132,24274,14266,11212,8296,2074,4024,1006,856,214,898,1702,3598,1828,1762,2188,
6154,55306,5223508,2482522,2096902,886366,332866,188434,80872,20218,271324,51352,12838,11206,5326,2476,
1186,1864,466,10918,7972,3058,31618,18982,15094,5356,1672,418,1432,358,180766,68266,102772,
34702,13492,7966,3466,11986,8434,18928,4732,1366,1222,2104,526,676,1618,1996,8002,
5698,4402,7192,1798,2494,1414,2332,916,5866,11314,7756,5536,1384,346,2566,2818,
2782,1522,57862,26146,15904,3976,994,1756,808,202,18442,107146,315064,78766,30016,7504,
1876,4276,4078,2008,502,6058,50194,22552,5638,4114,3112,778,21904,5476,19468,5842,
5518,2548,9754,10504,2626,2674,6832,1708,1078,6778,
884,1448,362,1532,12680,3170,7910,3446,1772,812,632,158,2216,554,3014,1610,
5474,10826,11414,4760,1190,926,1100,686,21626,13364,4958,2234,2456,614,710,746,
1694,1316,2834,4670,5912,1478,1034,2882,11798,4904,1226,10604,2468,3320,830,6614,
2960,740,5096,1274,1916,1556,37334,14480,3620,3806,1910,1196,704,176,44,488,
122,1268,1028,17630,5798,2654,1586,20060,26972,27350,10736,2684,18434,46784,11696,2924,
922,826,790,1714,2464,616,154,538,682,736,184,46,2320,580,4966,3994,
1978,1222,1888,472,118,2626,4030,13984,3496,874,808,202,556,1498,1042,10888,
2722,1606,2104,526,2524,3346,6136,1534,25954,8140,3490,1822,6208,1552,388,26824,
6706,4570,2194,4480,1120,280,70,1240,310,11554,4090,2014,8458,3652,1354,988,
2698,1492,760,190,6694,34288,8572,14470,9340,64042,24496,6124,7060,1804,1708,1786,
1150,3118,4912,1228,1546,1060,5056,1264,316,4102,3508,1138,2146,1444,5188,1570,
1282,1516,7396,2956,2032,508,66190,33538,37150,50920,12730,5254,4156,6532,13012,2920,
730,754,
2726,4586,2132,1142,6704,1676,1916,1742,13172,18482,7412,3308,13796,3068,2066,1256,
314,1898,1376,344,86,9068,14954,5048,1262,8006,7262,5288,1322,1214,1886,2264,
566,2444,2708,6638,4184,1046,5234,3356,4166,4832,1208,302,
1036,676,4342,2110,26374,10372,6664,1666,3694,1882,2116,5782,2650,2170,62860,12268,
2782,2920,730,4702,3730,6958,2800,700,1894,1192,298,1372,2560,640,160,40,10,
1210,32026,14896,3724,1180,3088,772,2614,1462,1030,868,39550,49756,7840,1960,490,
1480,370,73030,27868,4762,3394,5152,1288,322,
3434,113366,13352,3338,8624,2156,1148,698,2882,2828,21794,13466,10724,3650,3260,1094,
3800,950,1112,278,1364,218828,125192,31298,18812,4010,8708,3656,914,2840,710,12926,
5330,9140,15098,15032,3758,1892,1850,3854,1928,482,1478,2822,6350,2864,716,11576,
2894,1568,392,98,1262,956,662,1256,314,2558,1442,2018,2342,2738,2390,56990,
21854,8678,9956,3488,872,218,23846,11810,7850,87122,131024,32756,16112,4028,1238,21830,
16922,10166,3704,926,830,794,4250,4892,1400,350,614,3926,5582,2576,644,1388,
1040,260,1280,320,80,20,
11554,4816,1204,2350,2530,1432,358,11062,1054,1834,31312,7828,8038,32932,6658,2980,
1042,874,3664,916,1942,3934,2770,1522,2242,1324,2854,11338,8560,2140,1810,1162,
4996,1420,4102,9118,5236,1582,2098,1270,766,3052,7102,26128,6532,1708,3016,754,
3778,1900,2806,6454,5200,1300,2026,385606,554662,1059364,199114,64798,28726,43030,38602,104860,
30700,14254,9226,5644,7498,
24344,6086,4634,2222,22238,94412,27764,5690,2618,1466,1034,872,218,566,9242,3950,
4016,1004,1604,20780,25364,5240,1310,7220,1838,11654,7766,22886,14084,2828,2006,3842,
1928,482,944,236,1442,1424,356,3230,12518,8252,28196,18422,9164,3788,2276,7868,
21266,20402,16028,9062,6308,3086,4904,1226,
7990,5128,1282,13732,5074,4066,17770,17296,4324,2428,940,3418,15340,37210,66118,19444,
35440,8860,2146,6700,26944,6736,1684,
4658,9842,12788,4094,3488,872,218,5984,1496,374,626,4040,1010,205700,76928,
19232,4808,1202,5468,1700,9872,2468,48236,9530,40946,145112,36278,14090,9140,128426,73454,
25412,13028,18374,7376,1844,3164,4766,6944,1736,434,4496,1124,8384,2096,524,584,
146,5498,3716,3392,848,212,1274,1934,1394,8252,5738,4442,8630,3722,3308,1106,
13244,11462,4784,1196,710,752,188,2354,6926,2798,3056,764,1922,13892,8168,2042,2258,
87602,114818,169682,1111118,313352,78338,78170,101642,58388,17636,11816,2954,2876,5756,121910,46202,
20888,5222,2444,944,236,530,7412,2960,740,5486,10004,4028,7088,1772,818,4982,
-298814,-138986,-76964,-54422,-19922,-16178,1984,496,124,2362,1372,5464,1366,5842,2494,4414,
6034,2548,964,1966,31774,51448,12862,13162,5422,8596,2098,4954,2344,586,706,1804,
3154,1738,1138,2386,1522,4468,1324,1588,784,196,1408,352,88,22,1228,8464,2116,
5926,3898,1948,19804,27226,10696,2674,4612,11542,7708,20506,8176,2044,3172,2458,
11056,2764,1972,856,214,1336,334,748,1426,1252,5584,1396,75676,177268,33724,6562,
4402,2026,1246,7384,1846,2254,
1220,716,4412,6464,1616,404,5384,1346,992,248,62,47354,26228,10838,49934,29306,
11450,3542,7184,1796,824,206,1334,3440,860,1460,1058,884,
2386,4330,4852,2584,646,730,1630,1312,328,82,4006,1990,1234,3358,1798,
1162,8704,2176,544,136,34,13078,5392,1348,4816,1204,1558,1072,268,538,1522,5704,
1426,3520,880,220,5302,2476,952,238,1936,484,5416,1354,3448,862,1096,274,
2548,
794,4976,1244,722,1628,1226,3356,1118,908,3806,1916,848,212,1604,3104,776,
194,1484,1064,266,2546,2654,686,746,2702,1502,1052,4484,2252,1172,2816,704,
176,44,1766,1352,338,1412,1028,1622,2456,614,1712,428,1862,
6820,1768,442,1960,490,994,862,1708,5056,1264,316,1312,328,82,520,130,
538,3490,1798,3370,1804,7054,7366,133522,50560,12640,3160,790,562,700,1420,11374,
5746,2644,1228,2842,4948,1552,388,1906,1204,4828,2308,922,2956,8350,5920,1480,
370,628,
536,134,1466,1040,260,1832,458,662,1598,3248,812,1454,35042,34664,8666,3740,
6350,12020,2744,686,28544,7136,1784,446,37292,11714,10196,2402,4676,41666,23000,5750,
4460,2480,620,1400,350,2624,656,164,9536,2384,596,602,716,7106,16070,6632,
1658,1112,278,1382,30002,9296,2324,926,3110,6002,2546,1574,6380,3020,3560,890,
824,206,4244,1286,1952,488,122,
6484,175882,226588,42976,10744,2686,1498,4468,4216,1054,886,1108,11776,2944,736,
184,46,508,586,5968,1492,7888,1972,2638,1480,370,1666,2164,3244,7726,3388,
1126,2254,1336,334,616,154,1756,820,16636,3610,7276,1882,3430,3226,10858,273766,117274,
115168,28792,7198,3190,
1262,2228,1856,464,116,1256,314,1406,1640,410,1460,626,2864,716,1676,806,
794,2390,1388,752,188,1280,320,80,20,1418,2012,2102,968,242,2540,2720,680,
170,1094,902,830,1478,1046,884,1370,2000,500,3296,824,206,698,1622,
1100,4160,1040,260,1802,2174,1472,368,92,1688,422,650,1910,1208,302,2336,
584,146,2486,1424,356,740,2648,662,1076,1532,860,1964,2288,572,1784,446,
986,1292,734,1580,788,1238,956,1616,404,
862,8128,2032,508,3292,31456,7864,1966,3490,3304,826,802,21088,5272,1318,1972,
1864,466,1978,1234,2158,47098,18154,7300,1888,472,118,16714,6760,1690,1126,3034,
1630,9586,11620,24220,12556,4762,2278,2512,628,610,2656,664,166,1324,1846,2194,
2710,4330,2116,4294,3646,8614,6076,15022,11752,2938,1594,1090,1168,292,2788,5788,
4780,115426,25486,23842,53326,47332,11068,45640,11410,6598,4942,6508,
12014,12734,8396,25136,6284,4994,2366,2564,974,1892,848,212,16874,4700,26894,12764,
13580,8072,2018,1250,962,854,8126,5804,
2254,1498,3172,5008,1252,4804,4372,2464,616,154,7348,4948,2626,10042,5656,
1414,1024,256,64,16,4,976,244,24892,20074,12526,3784,946,24388,12634,10618,
4918,2338,4318,4954,5758,3658,3292,4858,11014,4624,1156,7126,3166,5182,3976,994,
3184,796,
-423256,-105814,-55000,-13750,4154,4886,2240,560,140,1862,8492,2060,2228,3290,5126,3956,
12902,13634,8906,23432,5858,4532,4262,5882,9464,2366,1382,6584,1646,1112,278,944,
236,2552,638,734,770,1670,2498,2642,2870,2834,2618,3914,13568,3392,848,212,
13522,5566,3772,6232,1558,13306,3952,988,1516,2992,748,2668,3478,7186,3190,5044,
1576,394,13954,5728,1432,358,3034,1720,430,1480,370,634,4054,4114,2038,4072,
1018,1360,340,18148,3898,4744,1186,940,2224,556,6718,4258,2092,18814,7516,3352,
838,8122,
572,4394,2144,536,134,1316,11306,4736,1184,296,74,524,1388,5972,1616,404,
1856,464,116,518,1532,12494,15752,3938,1976,494,2774,2444,1928,482,1004,2954,1604,
1094,
2854,1672,418,4852,26344,6586,19054,7642,13708,11116,21166,8434,5986,11332,11932,2734,
1522,2098,2422,15190,30556,6226,4744,1186,11086,4654,2242,2374,6958,3106,11602,7768,
1942,2620,988,682,2698,4636,1366,3916,1420,6742,10198,5074,4096,1024,256,64,
16,4,4426,6094,2782,1540,3214,1702,1348,4318,2116,8686,3754,4642,58906,457912,
114478,43426,45676,17650,11170,15058,9712,2428,952,238,586,
6002,31736,7934,16244,7784,1946,2252,920,230,584,146,6680,1670,1124,1910,1214,
18614,7478,3302,1736,434,7388,2276,48212,14804,5408,1352,338,4472,1118,5444,6488,
1622,1106,6902,3086,1802,2258,23042,21806,7004,1856,464,116,3662,2774,1538,17702,
7136,1784,446,30824,7706,4682,3878,1952,488,122,4580,3386,4088,1022,4382,5354,
4256,1064,266,1394,21968,5492,2852,28772,25904,6476,1712,428,578,2306,4310,2114,
4148,2960,740,17594,13778,21482,13328,3332,3770,5030,2384,596,1412,1658,6038,2762,
2798,7760,1940,1790,4844,1406,4094,2612,1982,11276,11054,3980,1244,1046,890,7982,
3116,1082,5546,4364,1316,14192,3548,1370,13382,5516,1532,7496,1874,6416,1604,
736,184,46,6658,15730,5296,1324,1618,4606,5188,190852,42064,10516,2470,4210,2056,514,
14812,31444,6394,2896,724,634,6934,5146,2428,5422,16864,4216,1054,3256,814,
8116,2020,1156,2050,6874,3076,15892,3478,3202,2866,1678,6172,7954,2830,7630,
1502,9248,2312,578,716,21038,13082,3914,4730,2204,1868,5858,2696,674,752,188,
7790,5630,8240,2060,5360,1340,1718,3986,1994,4724,1538,1076,1268,1052,1544,386,
644,620,2474,12002,5000,1250,968,242,590,1580,3038,2402,1400,350,13328,3332,
1124,710,14072,3518,6362,4244,2528,632,158,1256,314,962,860,1490,1058,896,
224,56,14,6656,1664,416,104,26,1160,290,608,152,38,
3226,3064,766,1090,5440,1360,340,11728,2932,2074,2416,604,1954,10300,2242,
6898,8194,8992,2248,562,2848,712,178,2524,2344,586,1684,1792,448,112,28,1522,
3658,2980,3898,3442,5278,3802,3388,3646,1900,856,214,580,7462,3298,121810,60022,
23008,5752,1438,1594,2146,87574,33340,4672,1168,292,12928,3232,808,202};
unsigned char cflag[2040+2305+1915+2363+2351+1]={
0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,
4,4,4,4,4,4,4,4,4,5,5,5,5,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,0,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,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,1,1,1,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,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,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,1,1,1,
2,2,2,2,3,3,4,4,5,5,6,6,7,7,7,8,8,8,9,9,10,
11,11,12,12,13,13,13,14,14,14,15,16,16,17,17,18,18,19,19,20,20,
20,20,20,21,21,21,21,22,22,23,23,23,23,24,24,25,25,25,25,26,26,
27,27,27,28,28,29,29,30,31,31,32,32,33,33,33,34,34,34,35,35,35,
36,36,36,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,
37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,
37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,
37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,
37,37,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,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,
4,4,4,4,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,7,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,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,6,6,6,6,6,
6,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,10,10,10,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,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,
5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,8,9,9,
9,9,10,10,10,10,11,11,11,11,11,12,12,12,13,13,14,14,0,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,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,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,1,1,1,1,1,1,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,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,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,0,0,0,0,0,0,0,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,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,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,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,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,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,
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,4,4,4,4,4,4,4,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,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,1,1,1,
1,1,1,1,1,1,1,1,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,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,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,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,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,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,3,3,3,
3,3,4,4,4,4,4,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,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,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,
7,7,7,
0,0,0,0,0,0,0,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,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,1,1,1,1,1,1,1,
1,1,2,2,2,2,2,2,2,2,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,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,
0,0,0,0,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,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,1,1,1,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,1,1,1,1,1,2,2,2,2,2,3,3,3,3,
4,4,4,4,4,5,5,5,5,6,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,3,3,3,4,4,5,5,5,5,5,6,6,6,7,7,7,7,8,
8,9,9,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,
18,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,25,25,26,26,
27,27,28,28,29,30,30,31,31,31,32,32,33,33,34,35,36,37,37,38,38,
39,40,41,41,42,43,44,45,45,45,46,47,47,48,49,50,51,51,52,53,54,
55,56,57,57,58,59,60,61,62,63,64,65,66,67,68,69,70,70,71,72,73,
74,74,75,76,77,78,78,79,80,81,82,83,84,85,86,87,88,89,90,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,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,6,6,6,6,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,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,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,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,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,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,0,0,0,0,0,0,0,0,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,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,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,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,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,1,1,1,1,1,1,2,2,
2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,6,6,6,6,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,
2,2,2,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,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,8,8,
8,8,8,8,9,9,9,9,10,10,10,10,10,11,11,12,12,12,13,13,13,
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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,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,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,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,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,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,
1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,2,2,2,2,2,
2,2,2,3,3,3,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,
7,7,7,8,8,8,9,9,9,10,10,10,11,11,11,12,12,12,12,13,13,
13,14,14,14,15,15,16,16,16,17,17,17,18,18,18,19,19,20,20,21,21,
22,22,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,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,5,5,5,5,5,5,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,9,9,9,9,9,9,9,9,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,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,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,0,0,0,0,0,
0,0,0,0,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,
0,0,0,0,0,0,0,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,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,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,1,1,1,1,1,1,1,1,0,0,
0,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,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,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,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,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,
4,4,4,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,8,
8,8,8,9,9,9,9,9,9,10,10,10,10,10,10,11,11,11,11,11,11,
12,12,12,12,12,13,13,13,13,13,14,14,14,14,14,14,15,15,15,15,16,
16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,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,0,0,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,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,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,
0,0,0,0,0,0,0,0,0,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,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,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,9,9,9,9,9,9,9,9,10,10,10,10,10,10,
10,10,10,10,11,11,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,
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,2,2,2,3,3,3,3,4,
4,4,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,8,8,8,9,
9,9,10,10,11,11,11,12,12,13,13,14,14,14,15,15,15,16,16,16,17,
17,18,18,19,19,20,20,21,22,22,23,23,23,24,24,25,26,26,27,0,0,
0,0,0,0,0,0,0,0,0,0,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,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,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,1,1,1,1,1,1,1,1,2,2,2,3,3,3,
3,4,4,4,4,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,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,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,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
1,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,5,5,5,
5,5,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,1,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,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,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,3,3,
3,3,3,3,
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,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,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,
6,7,7,7,7,7,7,7,7,7,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,3,3,3,4,4,4,
4,4,5,5,6,6,6,6,6,6,7,7,8,8,8,8,9,9,10,10,10,
11,11,11,12,12,12,13,13,13,13,13,13,13,14,14,14,15,15,15,16,16,
17,17,18,18,19,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,
27,27,28,28,29,29,30,30,31,32,32,33,33,34,34,34,35,36,37,37,38,
38,39,39,40,41,41,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,1,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,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,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,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,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,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,1,1,1,1,1,1,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,0,0,0,0,0,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,3,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,0,0,0,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,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,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,1,1,1,1,1,
1,1,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,3,3,3,3,3,3,4,4,4,4,5,5,5,5,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,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,0,0,1,1,1,2,3,4,4,
5,5,6,6,6,6,7,8,9,10,11,11,11,11,12,12,13,13,14,15,16,
16,16,17,17,18,19,19,19,20,21,22,23,24,24,25,25,26,27,27,28,28,
28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,30,30,30,30,
30,30,30,30,30,31,31,31,31,31,31,32,32,32,32,32,32,32,32,32,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,34,34,34,34,34,34,34,34,34,35,35,35,35,35,
35,36,36,36,36,36,36,36,37,37,37,37,37,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,39,39,
39,39,39,39,39,39,39,39,39,39,39,39,39,39,40,40,40,40,40,40,40,
40,40,40,41,41,41,41,41,41,41,41,42,42,42,42,42,42,42,42,42,42,
42,43,43,43,43,43,43,43,43,43,43,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,0,0,0,0,0,0,
0,0,0,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,5,5,5,5,5,5,5,5,5,6,6,6,
6,6,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,10,10,10,11,
11,11,11,12,12,12,12,12,13,13,13,14,14,14,15,15,15,15,16,16,16,
16,17,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,1,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,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,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,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,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,1,1,1,1,1,2,2,2,2,2,
2,2,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,1,1,
1,1,1,1,1,1,1,1,1,1,1,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,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,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,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,4,
4,4,4,4,4,4,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,0,0,0,0,0,0,0,0,0,0,0,
0,0,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,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,2,2,2,2,2,
2,2,2,2,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,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,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,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,5,5,5,5,5,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,1,1,1,1,1,1,1,1,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,
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,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,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,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,
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,3,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,1,1,1,1,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,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,
3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,6,6,6,6,
7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,9,10,10,11,11,11,
11,12,12,13,13,13,13,13,14,14,15,15,15,15,15,16,16,17,17,18,18,
19,19,19,20,20,21,21,22,22,23,23,24,24,25,25,25,25,25,26,26,27,
27,28,28,29,30,30,31,31,32,32,33,33,34,35,35,36,36,36,37,37,38,
38,39,40,41,42,42,43,44,44,45,46,47,48,49,50,51,51,52,53,54,55,
56,57,58,59,60,61,62,62,63,64,65,66,67,68,69,70,71,71,72,73,74,
75,76,0,0,0,0,0,0,0,0,0,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,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,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,4,4,4,4,
4,4,4,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,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,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,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,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,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,2,2,2,2,
2,2,2,2,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,1,1,1,1,1,1,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,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,3,3,3,
3,3,3,3,3,4,4,4,4,4,4,4,4,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,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,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,1,1,1,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,2,2,2,2,2,2,2,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,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,5,5,5,5,5,
5,5,6,6,6,6,6,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,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,4,4,4,4,4,4,4,4,4,0,0,0,0,0,1,1,1,1,2,2,
2,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,
6,6,7,7,7,7,8,8,8,8,9,9,9,0,0,0,0,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,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
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,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,5,6,6,6,
6,6,6,6,7,7,7,8,8,8,9,9,9,10,10,10,11,11,11,12,12,
12,13,13,13,14,14,14,15,15,15,15,15,16,16,16,17,17,17,18,18,18,
19,19,19,20,20,20,21,21,22,22,23,23,24,24,24,25,25,26,26,27,27,
28,28,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,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,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,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,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,1,1,1,2,2,2,2,2,2,
2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,
6,6,6,7,7,7,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,
11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,13,13,13,13,14,14,
14,14,14,14,14,14,14,14,14,14,15,15,15,15,16,16,16,17,17,17,18,
18,18,19,19,19,19,19,20,20,20,21,21,21,22,22,22,23,23,23,24,24,
24,24,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,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,
0,0,0,0,0,0,0,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,
255};
int cval[167]={1501,1505,1507,1511,1513,1517,1519,1523,1525,1529,1531,1535,
1537,1541,1543,1547,1549,1553,1555,1559,1561,1565,1567,1571,
1573,1577,1579,1583,1585,1589,1591,1595,1597,1601,1603,1607,
1609,1613,1615,1619,1621,1625,1627,1631,1633,1637,1639,1643,
1645,1649,1651,1655,1657,1661,1663,1667,1669,1673,1675,1679,
1681,1685,1687,1691,1693,1697,1699,1703,1705,1709,1711,1715,
1717,1721,1723,1727,1729,1733,1735,1739,1741,1745,1747,1751,
1753,1757,1759,1763,1765,1769,1771,1775,1777,1781,1783,1787,
1789,1793,1795,1799,1801,1805,1807,1811,1813,1817,1819,1823,
1825,1829,1831,1835,1837,1841,1843,1847,1849,1853,1855,1859,
1861,1865,1867,1871,1873,1877,1879,1883,1885,1889,1891,1895,
1897,1901,1903,1907,1909,1913,1915,1919,1921,1925,1927,1931,
1933,1937,1939,1943,1945,1949,1951,1955,1957,1961,1963,1967,
1969,1973,1975,1979,1981,1985,1987,1991,1993,1997,1999};
unsigned int size[167]={
55,39,59,76,26,41,78,29,73,177,138,89,104,49,50,44,60,23,55,56,56,35,35,39,92,
41,66,62,37,35,58,100,63,13,11,81,52,44,40,71,76,39,49,152,123,63,27,51,50,66,
43,63,98,69,65,40,105,46,88,112,57,77,102,138,46,31,117,67,41,19,39,6,32,69,
74,45,116,67,41,65,92,19,52,113,196,23,69,20,109,29,54,62,56,53,13,20,71,86,
44,53,94,122,22,37,89,83,34,68,83,106,64,19,64,51,230,46,96,25,142,66,102,
52,47,91,46,78,50,24,94,17,63,38,120,57,49,80,173,57,138,80,114,44,58,102,
69,56,23,112,86,28,49,45,50,71,52,89,76,24,49,48,50,34,75,127,47,77,62};
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; // selects which c value to histogram j values
unsigned int indmin=0; // selects (l,m) value
unsigned int indmax=14; // 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,jsum,hsum,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],concove[27*3],histoa[30],histob[30],offset4,offset5;
unsigned int patcnt,cyccntu,cyccntb,histor[100],equcnt,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("out0ci.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<27*3; i++) {
concov[i]=0;
concove[i]=0;
}
for (i=0; i<30; i++) {
histoa[i]=0;
histob[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<167; 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;
jsum=0;
hcount=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 (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, delta=%d \n",delta);
goto zskip;
}
if (delta>29) {
printf("array not big enough, delta=%d \n",delta);
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,oddsum);
}
}
//
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+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;
jsum=0;
jmpsum=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, 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);
}