summaryrefslogtreecommitdiff
path: root/encoding_jis.js
blob: c6152d4035b7a3f4c80234e93c4e53ef0e099c21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
// Since there are some gaps in JIS mapping, we split our array
// for codes 0x2121 - 0x2840 and 0x3021 - 0x7426
//
// The unicode codes in second table have been normalized by
// the amount of 19968 to save 5kBytes in this script, so the
// actual value is 19968 + encoding_jis_0208_1[ x ]

var page = {
  us_ascii : 0,
  jis0208  : 1,
  jis0201  : 2
};

function decode_jis( str ) {
  var outstring = "";
  var cur_page = page.us_ascii;

  for( i=0; i<str.length; ++i ) {
    var append = String.fromCharCode(0xfffd);
    if( str.charCodeAt( i ) == 27 ) {
      switch( str.charCodeAt( i + 1 ) * 256 + str.charCodeAt( i + 2 ) ) {
      case 0x2440:
        cur_page = page.jis0208; // -1978
        break;
      case 0x2442:
        cur_page = page.jis0208; // -1983
        break;
      case 0x2842:
        cur_page = page.us_ascii;
        break;
      case 0x284a:
        cur_page = page.jis0201;
        break;
      default:
        return outstring + append;
      }
      i += 2;
      continue;
    }
    switch( cur_page ) {
    case page.us_ascii:
      append = String.fromCharCode( str.charCodeAt( i ) & 0xff );
      break;
    case page.jis0201:
      var off = str.charCodeAt( i ) & 0xff;
      if( off >= 0x20 && x <= 0xdf ) {
        append = String.fromCharCode( encoding_jis_0201[ off - 32 ] );
      }
      break;
    case page.jis0208:
      if( i>str.length-1 ) { return outstring + append; }
      var x0 = ( str.charCodeAt( i++ ) - 0x21 ) & 0xff;
      var x1 = ( str.charCodeAt( i   ) - 0x21 ) & 0xff;
      if( x0 <= 0x52  && x1 <= 0x5d ) {
        var off = x0 * 94 + x1;
        if( off < 690 ) {
          append = String.fromCharCode( encoding_jis_0208_0[off] );
        } else if( off >= 1410 ) {
          append = String.fromCharCode( 19968 + encoding_jis_0208_1[off-1410] );
        }
      }
      break;
    }

    outstring += append;
  }

  return outstring;
}

var encoding_jis_0201 =
[65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,165,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,8254,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65377,65378,65379,65380,65381,65382,65383,65384,65385,65386,65387,65388,65389,65390,65391,65392,65393,65394,65395,65396,65397,65398,65399,65400,65401,65402,65403,65404,65405,65406,65407,65408,65409,65410,65411,65412,65413,65414,65415,65416,65417,65418,65419,65420,65421,65422,65423,65424,65425,65426,65427,65428,65429,65430,65431,65432,65433,65434,65435,65436,65437,65438,65439];

var encoding_jis_0208_0 =
[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,
12294,12295,12540,8213,8208,65295,92,12316,8214,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,
12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,8722,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,
8242,8243,8451,65509,65284,162,163,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,
9660,8251,12306,8594,8592,8593,8595,12307,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,8712,8715,8838,8839,8834,8835,
8746,8745,65533,65533,65533,65533,65533,65533,65533,65533,8743,8744,172,8658,8660,8704,8707,65533,65533,65533,65533,65533,65533,65533,65533,
65533,65533,65533,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,65533,65533,65533,65533,65533,65533,65533,
8491,8240,9839,9837,9834,8224,8225,182,65533,65533,65533,65533,9711,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,
65533,65533,65533,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65533,65533,65533,65533,65533,65533,65533,65313,65314,65315,65316,65317,
65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65533,65533,65533,65533,
65533,65533,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,
65368,65369,65370,65533,65533,65533,65533,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,
12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,
12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,
12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,
65533,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,
12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,
12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,
12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,65533,65533,65533,65533,65533,65533,65533,65533,913,914,915,916,917,
918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,65533,65533,65533,65533,65533,65533,
65533,65533,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,
969,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,
65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,
1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,65533,65533,65533,
65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,65533,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,
1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,65533,65533,65533,65533,65533,
65533,65533,65533,65533,65533,65533,65533,65533,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,
9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538];

var encoding_jis_0208_1 =
[156,1814,3075,18495,1728,4891,5416,3062,16930,13941,13596,11344,4778,5601,8229,6125,13926,13478,19957,6803,2343,6049,5233,3483,3024,
14459,19188,12130,12222,19854,5142,11935,15031,3465,4277,5385,6295,6728,18375,18829,6479,229,266,333,413,585,2290,2871,3028,3073,3593,
4831,4879,4976,6163,6917,8890,10063,10096,11259,12205,12271,12995,13838,14947,15618,16981,17018,1339,149,165,2527,12978,17089,10991,0,
2801,8354,16952,11314,13608,13451,20015,833,1392,1725,1761,2272,3067,4373,19186,8171,13028,14125,18530,18544,18592,18939,1547,1523,3463,
8911,12733,16834,18664,1391,20316,11450,17,10899,13308,8230,2072,1796,7453,14106,20027,3045,1449,8038,9948,18319,2114,145,16971,18674,
13647,19212,1505,1974,3376,4465,6176,6387,6660,7736,7923,7977,9819,10440,11342,18996,13553,14939,15456,17645,8114,10155,10442,19397,
4774,15617,16266,18354,7054,1453,902,2322,2608,2884,3508,4342,4648,5545,5620,7871,8468,8846,8980,9049,9173,9535,12289,13430,13521,14231,
16992,17499,20251,2665,6076,7770,10021,1017,2862,2917,4480,4572,5308,6138,7210,7463,7604,9611,12737,15190,20268,20238,20676,3745,7830,
13691,772,3659,5046,13254,6774,9313,89,506,1400,4713,8233,11343,18931,11,1302,238,341,317,417,371,1184,1519,2057,2831,3265,3510,3553,
11217,6279,6556,6582,7500,7859,8811,9666,11149,11198,11324,11655,13489,13531,13572,13687,13807,13779,14694,15538,2089,16040,16870,16974,
18718,14474,452,3816,5137,9305,10043,13285,13501,14590,16064,18629,19219,19413,203,282,15331,2270,2634,2762,4347,4587,4650,4756,4706,
5072,5138,5328,5945,19777,6246,6832,8055,8816,10060,10374,12149,13477,14841,18315,18574,16029,1009,1214,2838,1715,3507,3862,4968,7042,
8111,10893,14027,14935,15474,17831,19640,8044,19368,14553,2467,6655,14542,17422,1155,2183,1540,4307,5345,5817,6716,6712,7611,9586,10938,
11371,15258,15314,16235,16643,17133,18339,18580,18793,3430,3763,7037,19021,19022,5531,11552,7211,7295,6838,19981,8543,1138,1949,4720,
5356,7995,8199,8401,13915,15120,16708,20,20025,1526,6939,7226,18820,6698,860,11459,14002,17372,17804,2139,20264,6690,13573,13873,11941,
1032,13509,9958,126,387,928,3538,1034,1240,1255,4091,1946,2602,3046,3468,3480,3547,4210,4217,4771,4895,4963,5054,5595,5986,6609,6739,
6906,7486,7507,7767,8482,8599,8517,9904,10008,10467,10507,11519,11681,11809,12265,12598,12784,12957,13414,13726,15283,15564,16043,17028,
18001,18323,18321,18338,18533,18899,19240,13336,56,1579,3768,4044,9641,10316,10556,3753,12779,16139,18625,18961,19028,19032,257,270,
1393,1948,2152,2554,2887,3337,3524,3728,4108,4222,4556,5614,6458,6103,6114,6431,6859,6852,7263,4144,7621,7703,7805,10111,11080,3427,
11264,12032,4541,15247,15384,16052,16247,16588,16669,19170,19470,19772,128,637,768,2963,3484,5167,5248,5868,7482,9376,10129,11079,12713,
14843,15548,15728,5548,13770,18848,1545,1539,1963,6740,7256,15472,10791,6517,20685,1396,3490,13082,14416,16902,24,69,199,273,1482,1592,
3502,4371,4645,5969,6461,7746,7794,7907,8824,9731,11382,11438,11528,12058,12030,12134,6119,9307,1467,3653,4072,5330,5344,5401,8224,
14426,15409,16349,17656,8449,11174,19802,168,171,172,411,416,721,839,11510,881,1014,1364,1313,1407,1515,1964,2691,3809,4407,4426,4655,
4688,4717,5407,5977,7243,7873,9410,9453,10735,13048,13061,13320,14158,17143,17889,18943,19287,19546,240,989,3629,6273,7021,3648,6386,
7029,9609,6736,11905,709,1252,2375,4094,17702,6052,7459,7485,9780,11137,11197,11595,12234,13497,13772,14975,15199,15673,16849,17361,
1567,17536,93,566,1509,1338,9431,9622,10729,13542,16559,19398,19400,19410,887,4890,14430,1968,11386,630,3539,16967,18565,50,7387,17383,
3665,3656,5528,11423,7827,18804,16737,11434,9098,18568,11906,6679,12400,6737,17772,1266,1563,14251,15379,12708,16589,17121,1382,14984,
11073,450,702,1041,836,1875,2349,9706,2443,2897,4450,4484,4725,4982,4967,5033,5554,5690,5996,6255,6722,8211,10086,11325,12027,12108,
12185,12363,12651,13582,13642,14541,15368,15459,15718,16637,18970,20367,13496,16846,19944,1159,5151,5763,8640,18585,6721,657,7456,7802,
8532,11380,12112,14912,15395,6408,246,569,550,613,892,1080,1123,1959,2319,2565,3276,4346,5042,5112,5363,5490,6940,7209,9341,9388,9518,
10772,10863,12153,10508,12969,15243,15641,16098,16594,16995,17781,18554,19029,19475,20600,835,1439,1459,4219,4390,8219,8336,9604,9726,
12099,13367,15360,15610,18512,78,523,1508,1660,2298,3025,3428,4081,4267,4391,5176,5957,6575,8278,9424,11978,15028,12961,13025,13808,
14414,15495,16360,17463,18631,19047,20755,148,146,269,1352,1609,1598,3119,4492,4513,4767,6823,7310,9818,10881,15518,15524,15735,17296,
94,19913,164,380,431,537,534,841,876,1183,1209,1278,1434,1507,1553,1550,1929,2385,2466,2941,3412,3421,3471,4069,4071,4087,4216,4227,
4250,4279,4376,4690,4940,5271,5336,5543,5947,6146,6211,6388,6509,6689,6807,7115,7775,7978,8041,8239,8349,10034,10375,10860,11327,12000,
12037,12056,12126,12209,12821,12803,12975,12977,13140,13199,13354,13650,14924,14945,15643,16034,16124,17098,17269,17521,10815,17660,
18340,18509,18949,19353,19672,20283,1115,1195,1527,1544,2773,5367,8672,15978,16735,20665,843,1083,1610,2301,11328,17271,20320,20690,
9540,8457,13168,10001,4605,4826,19624,9435,16828,7524,18947,202,2288,2404,2750,3162,4712,5063,6159,6150,6713,6833,8183,10197,12090,
13422,19778,155,336,1481,1798,3951,4070,4078,6651,7833,9843,10754,15440,17814,15071,2384,4263,5419,693,684,909,6400,1737,2654,3003,3504,
4457,5197,5537,6717,7539,8200,8829,17351,9344,10773,10790,11117,6030,12080,13788,15041,16649,18587,1124,2344,6480,12650,16033,948,2370,
18474,2618,7050,12980,1714,3854,2556,10901,20474,348,1098,1675,5694,6184,6420,6645,11396,11606,12066,17711,6748,19885,11577,1305,906,
1079,3551,5366,5806,5862,6445,7610,14249,18641,10384,19926,5452,17670,19883,10431,6226,9,664,1474,3697,4840,5778,5987,6751,9190,9674,
10019,11671,12418,14485,15747,16091,17272,19216,6060,6315,7563,213,212,314,383,1082,1528,1522,2019,2267,2795,3019,3017,3071,3408,3661,
4098,4139,4567,4637,5383,5935,3420,6063,6077,6120,6557,7522,7547,7695,9541,11081,11201,12024,12057,12075,12962,13058,13299,15254,15454,
15465,15462,15500,15598,16071,16092,18636,19196,7535,139,316,397,848,3415,3578,4936,5377,6210,7457,8395,7867,9278,9917,10196,10945,
11066,12812,12851,13290,13972,16798,7760,20607,4367,15704,20267,11514,16632,3469,18667,3,1521,2551,2865,3273,3492,4745,8319,8454,10174,
16106,3487,14080,11744,626,6644,13469,3681,14154,12318,13326,921,3588,5480,16230,6044,9070,11070,12055,12805,15645,16586,17006,14535,
17066,543,1274,3642,6483,8828,9269,17228,17352,17707,13541,3522,4401,4857,59,1494,3464,5195,6449,7562,9449,9696,11310,13163,16291,17234,
19350,786,1495,1642,3583,5512,7225,12204,18688,2266,1486,1640,3479,3633,4062,494,4865,5374,7986,11200,11211,12098,12365,12754,13293,
13343,13968,14918,15218,15760,16500,16687,16945,17227,17260,18630,17308,192,335,837,1345,4499,5134,6612,7745,8203,9571,12326,17357,
17539,1492,2841,3519,8145,11101,12334,11931,2686,9119,1018,14931,16880,458,3835,6181,10668,11491,13340,19455,966,4522,6124,7023,7561,
8179,8342,8548,10494,12052,4065,17013,17287,18950,998,1053,5184,6289,6361,8218,4278,12242,12658,6392,14255,14327,15608,1193,1497,2931,
4239,4496,4693,17636,18532,695,799,1245,1312,1351,1516,1768,1862,1841,2071,2920,3006,3132,3509,3590,3599,3601,3610,4228,4234,4320,4464,
5247,5252,5339,5516,5495,6151,6156,6189,6262,6526,6818,7199,7221,7868,8072,8201,8280,9020,8998,9063,10183,10497,10845,11009,11109,11248,
11488,11537,11943,12089,12950,13782,13963,14153,14941,15091,15391,15420,15444,15475,15969,16094,17316,17510,17790,17944,18588,18840,10,
8,30,87,919,1136,2510,2612,2764,3362,4152,4805,5886,6497,6486,8004,9398,10099,11363,14008,15730,17336,17696,2097,2548,19198,5357,6925,
7574,9197,12372,12919,13426,15334,19167,14677,16817,3643,312,481,437,1799,3104,3549,3561,4547,4942,5423,6064,6219,6894,7067,8056,8177,
10035,10169,10527,11102,11238,12083,13283,13487,14250,15274,15418,16555,16795,16946,17373,18695,186,193,1027,2677,2796,3595,10010,3645,
13134,15370,16837,18531,18797,11557,15567,18952,17250,2291,1448,16919,1593,2434,4133,5544,7732,8842,10593,11915,12768,14960,16962,17236,
17680,17688,18575,9822,19652,3847,3945,6000,6562,16296,18651,5486,6473,6937,13765,18967,18624,15102,8580,5754,3576,22,8748,10077,6191,
964,1078,1250,3027,4481,4647,5136,5951,6004,6175,6260,6898,6678,7523,8197,9330,10015,10459,11966,12886,2800,15101,15231,15520,15507,
15563,16925,17298,18770,18777,6025,11278,13062,18619,4141,4828,5146,6053,6164,6544,10739,11341,11853,12350,13066,16044,16228,16353,
16479,10921,1031,5337,5541,5698,5272,15405,11395,11712,15532,18666,12150,13324,14665,217,840,1347,1376,3491,3586,3606,4061,5158,5191,
5808,6675,6708,7881,8005,7959,6611,8540,9038,9085,6091,11391,11693,12250,12362,12712,13178,13339,13369,14246,15470,16078,16373,17016,
17015,17581,17553,18307,19886,1101,1924,8504,9014,872,11141,12373,13235,11982,2124,2641,3752,5546,6398,6397,7002,9433,10127,10126,11022,
11094,11231,11927,12064,12100,14343,15412,18491,16993,20768,743,1141,1484,1506,521,1962,2798,2895,9277,3467,3684,1309,4835,4851,5468,
5507,5439,5563,5837,6121,6393,4067,7117,7165,8469,9189,137,10217,10488,11411,11999,12239,12188,12897,13641,13656,13932,14012,14331,
15045,16240,16897,17005,17815,18716,19474,719,2711,5006,13267,14133,16136,16928,451,628,1095,1395,4719,5449,6495,8236,16307,16927,471,
3678,16074,6095,12186,1362,14998,886,5571,3416,3435,3594,5645,6481,16988,214,2842,2858,7792,15441,1854,2581,2981,4848,5203,6593,13365,
6997,18496,19396,19496,339,2566,3582,12816,3761,4143,4485,4640,4939,5172,6399,7920,8414,13006,13183,13524,14987,16056,16896,16942,18570,
20699,19931,227,1520,2855,11564,17293,19020,20473,8413,8743,1363,1860,3461,5208,5278,5331,7842,8687,9762,15383,17976,8641,15614,13624,
999,14584,1514,1513,326,16980,16816,2922,13105,4093,11498,16831,6874,15927,9464,20040,7229,15536,57,1368,2054,2406,5317,5538,6118,7502,
8161,8283,8877,10733,11503,11690,12219,12861,12998,14539,15509,17755,2275,2759,4414,6061,6294,7296,7605,10039,15559,548,10725,2352,4379,
4709,6266,7776,10228,11290,12654,13300,14616,16965,19379,11721,10076,11513,11601,14020,16912,11241,11410,13622,3297,10560,45,242,3481,
4576,5309,6204,6641,7912,14443,14967,15419,17230,17651,19408,7191,8742,9514,13543,13911,16047,1,838,971,1931,3573,4118,4147,4225,4372,
4405,4459,4532,5106,5393,6306,6429,8558,9298,10042,10554,12916,13113,13176,14710,15551,15580,16261,16371,17562,18295,18946,20197,1221,
5463,10484,6421,7816,9677,16067,17838,18547,7973,2716,6926,7116,16893,17818,10203,16922,2650,6658,5556,7163,323,8492,6616,16827,14118,
12212,17748,6975,8560,2410,2807,3372,12076,9258,1546,17379,20404,173,334,604,629,1091,16030,1608,2596,3482,4125,4245,4269,4343,4383,
4748,5301,5434,5584,6831,7744,10887,11150,11275,12256,13383,15362,15590,16452,16915,17080,17197,17368,20750,7909,5720,5858,6005,8436,
10372,11547,17001,17873,8378,1778,4537,5796,16717,16877,17476,888,2667,2857,3669,4247,8187,12431,10012,16060,16610,19035,8889,285,7615,
8625,10032,18683,846,1552,2613,2647,2988,3680,4498,6039,6492,8225,10363,13791,16109,16916,17149,17741,10789,10810,1194,4262,2335,2932,
4626,530,858,940,973,1024,1808,2644,2648,2903,3477,3830,3979,4796,5269,5677,6513,6723,6844,6879,10455,8152,8303,8091,8815,9160,4435,
10200,11127,11593,11604,11602,11990,12145,1072,13923,14185,14308,15374,15620,15942,16399,16899,16911,17945,18550,18989,19504,18392,717,
1237,1548,2562,3598,5031,5790,7966,10675,11493,13044,13828,16979,17541,3808,20231,1343,4503,4531,8092,9337,10595,11199,11748,7634,9452,
15533,6659,7265,1016,11393,6964,3658,20214,13547,3525,17225,8734,2168,3695,4807,5990,7820,15962,16961,18963,1617,6343,17421,2888,17059,
901,77,1002,14233,15630,8792,5498,17739,7010,19380,12292,10103,1367,7008,16607,18659,7773,140,3644,4368,16873,1282,16081,12937,14457,
4351,6117,115,869,2946,3647,18926,251,2954,4557,15501,8673,11184,11106,3559,13937,9515,9137,4212,4597,5499,5786,9155,11928,67,4348,75,
2524,2210,4777,8643,12045,13053,13107,13247,16818,15255,14500,4084,5258,5805,15239,6519,7906,7998,9782,10804,3142,12661,13485,19372,499,
4291,5341,5522,5975,6511,10435,9292,13004,12986,16681,17229,525,2553,3218,6789,7027,9060,9469,16055,2802,16096,18538,16921,14719,11236,
10727,13865,303,1125,1370,5325,6607,7882,10365,11668,11925,13366,14212,16875,6365,8480,9222,12315,13739,19393,20646,1021,11697,10866,
11704,12935,11592,7400,4193,12940,10065,10080,875,17506,8332,10362,17303,19690,272,12656,5276,11599,18341,20201,2170,2649,14564,18620,
308,1060,1354,1485,1499,4102,5676,6033,6527,7742,7758,9288,9391,9709,10068,12353,13356,14313,16041,11716,17350,9065,18962,19183,5437,
6249,10090,10468,10960,14147,14574,1322,1361,1574,2947,4231,4476,4786,5193,5241,5291,6032,7636,7884,10162,10414,10897,11224,12235,12663,
12965,15019,15545,16059,17023,18782,19163,7179,11832,665,3646,4526,6535,7640,9781,10505,12686,20795,6602,11287,1337,10123,19693,4454,
13213,13809,12952,4412,4549,10082,11590,16956,6759,3051,3227,12048,10366,15660,501,4458,7193,7735,8450,9954,11112,14952,15445,15993,
4319,5583,10181,11218,13527,17704,17650,13980,14573,20013,1729,4460,6028,8028,8725,16039,16083,19003,5967,9974,13,216,2528,2859,3174,
3532,936,4099,4252,4630,5238,6007,6055,6254,8046,9270,11558,13136,13210,13465,15708,16032,16102,16244,18460,18500,430,5803,7526,13342,
13921,14186,17128,3585,6995,19112,13946,14167,271,1135,4521,4165,6413,11151,13177,15111,15238,8181,4375,5205,7864,207,9321,19858,1030,
1595,2164,2739,5028,5230,8986,2926,11913,11998,12059,18672,6023,12894,25,373,885,2624,4195,4211,4362,6596,38,14141,18313,18523,11891,
18945,763,2753,10326,10919,1061,10661,14097,11654,591,2825,9287,11719,12264,16826,16852,16973,447,1225,3113,4353,18861,477,13335,17642,
2307,5461,7529,10027,15068,16660,11330,1247,2707,4949,5130,6318,7629,11839,13801,547,504,1285,1606,2609,2889,3485,3824,3823,3881,4246,
5297,5479,5950,6073,6411,7893,7905,8953,10802,12331,13022,13491,13836,14060,14594,15122,15402,15946,17062,17618,19197,20211,20332,79,
161,653,1110,2378,2984,4157,4568,4569,5183,6324,6427,6608,6866,914,12065,12970,13224,15616,16012,16063,17534,18482,1568,18988,1303,725,
1372,2728,5810,6452,9319,10598,11334,17382,1219,7841,7558,2560,4172,2900,6444,12795,993,10438,5737,10984,19796,20667,2507,3001,6183,
6554,7630,1769,7129,4181,13212,6549,19882,6654,20050,6749,166,483,1480,5305,6443,7851,16836,429,12397,20671,7,4962,8320,8491,14099,1651,
6442,19781,4083,11669,3756,3526,14620,8266,14033,11284,13064,2969,11917,7697,10528,1241,2850,8993,9311,10715,18727,20321,6923,3199,3096,
933,1549,1661,6158,10463,16887,17560,20212,3050,9309,8389,845,6857,12223,12268,18786,20666,5752,7201,13570,2948,3423,7643,9499,10482,
12210,12823,13977,818,6440,20697,10478,6498,1279,19205,3620,5179,11902,16048,1871,4790,12043,18304,1281,95,950,2844,9274,12854,17358,
4389,10722,1412,4473,12036,14252,15411,16525,18774,6643,14254,18003,4873,4872,7865,10322,15597,16696,1839,337,810,1223,1483,3493,4221,
4768,4994,5590,6409,6618,8295,8076,9526,9527,10033,11088,15061,15512,16970,17041,17141,18628,14733,2837,136,345,14,15497,16703,18960,
685,4220,2966,3513,4280,5594,5626,5825,6364,6986,7128,7947,8374,9108,10024,11439,12682,12800,13897,14025,15233,15649,16394,16997,18557,
19210,4990,5265,7474,7811,8052,12748,12796,8128,12677,14778,15096,6501,13745,19004,18679,7963,12129,13885,17258,113,1397,3920,7428,8683,
14285,14381,15271,1065,1551,3685,6478,6824,9734,9859,10210,15055,15073,17356,18658,18552,4491,9607,11467,13902,5536,10085,1161,8001,
8348,9737,10073,10859,11922,18566,11484,20877,438,4974,6085,14428,134,174,730,33,972,3566,6041,6785,8124,9503,10306,10669,11292,12007,
13423,15570,17020,17359,18549,18968,1179,12241,555,1432,6551,8139,9168,9779,13288,16682,18595,20055,20639,9824,2625,8089,12079,19038,
228,310,395,951,1201,4026,4636,9650,11068,13523,17460,18615,18678,18698,20631,20834,6310,7540,1047,1187,8904,15042,4297,4683,5008,8483,
9033,11838,12276,12911,14062,16931,17708,1602,19823,7379,8841,16066,16367,18738,1204,3137,4298,4356,6423,7036,7060,8042,8463,9314,9468,
11757,12801,12926,14667,17102,877,20627,11140,12939,17714,15574,557,1676,15473,7530,16068,13063,4817,6560,20466,153,152,19984,15467,
14273,14184,6912,8318,10903,13141,4364,16,21,42,49,54,60,63,66,86,88,130,133,15979,138,13330,4365,142,158,159,160,162,176,179,182,206,
205,196,198,194,215,222,237,223,247,265,346,304,347,349,343,327,374,392,399,408,379,361,368,401,367,390,406,792,468,479,462,472,475,465,
474,464,484,485,538,552,532,554,549,517,284,502,545,553,556,510,495,529,518,579,583,6403,597,592,584,602,598,620,632,640,666,645,692,
690,713,714,691,706,726,734,741,749,739,750,761,757,777,769,770,790,789,788,794,801,826,823,828,827,831,832,850,844,852,866,11512,873,
874,878,896,898,2264,908,905,911,913,915,917,918,932,934,930,937,938,939,947,945,946,944,949,957,965,969,987,992,14421,1001,1005,1008,
1013,1022,1028,1035,1044,1038,1063,1066,1070,1075,1081,1103,1092,1099,1100,1118,1108,1130,1140,1129,1139,1151,1149,1165,1172,1170,1137,
1160,1169,16808,16807,1196,1197,1212,1205,1217,1229,1239,1246,1251,1254,19181,1248,1267,1269,1272,1273,1286,1288,10040,1293,1296,1295,
1301,1306,1315,1327,1329,1331,1336,1344,1350,1349,23,1353,1357,982,1374,1385,1390,2840,1403,1399,1410,1430,1440,1446,1445,1454,1456,
1462,1475,11794,18649,1503,6396,9198,1518,1512,1517,1530,1537,1597,1600,1580,1581,1596,1582,1590,1577,1565,1614,1679,1653,1678,1631,
1649,1655,1648,1682,1659,1664,1654,1668,1680,1670,1735,1698,1720,1701,1708,1732,1736,1704,1707,1730,1700,1726,1724,1752,1765,1766,1807,
1812,1789,1774,1773,1786,1762,1849,1856,1891,1868,1838,1884,1861,1878,1879,1848,1843,1885,1945,1920,1711,1930,1951,1915,1918,1944,1950,
1966,1916,1923,1961,1927,1960,2010,1989,2015,1988,2012,2020,2004,2068,2039,2070,2046,2045,2075,2041,2126,2128,9183,2100,2102,2098,2104,
2155,2148,2095,2156,2154,2182,2176,2186,2208,2196,2191,2213,2222,2230,2228,2242,2236,2241,2243,2240,2248,2254,2257,2259,2263,2286,2297,
2304,2303,2308,2313,2312,2315,2317,2323,2328,2326,1991,2332,2342,2359,2360,2382,2363,2368,2383,2409,2496,2440,2401,2431,2441,2451,2464,
2483,2468,2474,2480,2499,2502,2516,2514,2515,2570,2518,2531,2571,2585,2589,2674,2593,2658,2635,2672,7616,2642,2621,2681,2693,2745,2719,
2731,2746,2782,2747,2744,2734,2757,2771,2769,2775,2777,2776,2789,2780,2788,2783,2799,2810,2809,2811,2812,2813,2818,2826,2832,2843,6822,
2853,2860,2861,2866,2872,2878,11474,2901,2896,2894,2906,2904,2914,2912,2919,2924,2921,2936,2945,2973,350,427,2979,2994,3014,3048,3036,
2957,3033,3034,3109,3103,3089,3100,3081,3098,3136,3180,3145,3125,3126,3170,3178,3226,3260,3262,3275,3266,3261,3299,3287,3302,3305,3286,
3322,3323,3340,3339,3350,3378,3280,3370,3382,3390,3395,3397,3392,3409,3413,3418,3419,3429,3433,3440,3443,3445,3448,6024,3450,3456,3459,
3494,3512,3523,3527,3529,3540,3536,3556,3558,3554,3550,3557,3563,3568,3574,3571,3589,3591,3592,3597,3603,3616,3618,3624,3640,3641,3649,
3654,3662,3667,3664,3663,3441,3692,3694,98,3702,3705,3724,3729,3732,2971,3755,3771,3766,3772,3767,3781,3774,3783,3801,3817,3837,3834,
3821,3980,3818,3851,3861,3863,3932,3871,3867,3857,3860,3874,3866,3865,3864,3916,3922,3918,3915,3948,3955,3958,3975,3972,3970,4002,3997,
4012,4014,4029,3984,4023,4028,4041,4045,4051,4050,4054,4059,4075,4082,4085,4107,4122,4121,4113,4123,4150,4151,4164,4163,4160,4174,4183,
4180,4191,4194,4196,4167,4213,4214,4218,20668,4223,4256,4289,4290,4296,4304,4303,4310,4323,4317,4314,4315,4322,4321,4328,4329,4332,4337,
4339,4336,4340,4344,4350,4355,4361,4445,4444,4363,4369,4374,4393,4397,4408,4417,4424,4428,4430,4399,4433,4438,4439,4441,4449,4461,4467,
4471,4483,4482,4479,4490,4488,4497,4487,4510,4505,4504,4512,4520,4525,4540,4566,4603,4580,4600,4593,4573,4787,4607,4641,4704,4633,4624,
4649,4622,4657,4635,4629,4651,4646,4623,4666,4698,4673,4714,4727,4703,4682,4678,4685,4707,4675,4708,4674,4716,4715,4697,4737,4749,4839,
4739,4762,4740,4763,4758,4759,4754,4775,4747,4833,4792,4832,4819,4788,4592,4797,4806,4789,4824,4941,4885,4870,4854,4855,4864,4852,4858,
4867,4897,4859,4849,4877,4878,4935,4926,4904,4903,4938,4927,4924,4908,4916,4925,4930,4932,4979,4983,4952,4953,4954,4971,4980,4975,4965,
4977,4959,4957,4947,4981,5017,5014,4999,5036,5012,5018,5002,5009,5035,5038,5068,5066,5065,5111,5064,5059,5062,5050,5067,12665,5069,5094,
5091,5110,5114,5108,5119,5117,5116,5118,5120,5128,5129,5133,5132,5140,5147,5150,5153,5162,5166,5168,5170,5171,5185,5198,5214,5219,5211,
5216,5224,5244,5250,5257,5246,5266,5267,5270,5332,5251,5268,5335,5329,5307,5327,5375,5318,5844,5320,5340,5324,5322,5314,5319,5275,5321,
5388,5358,5361,5415,5378,5384,5359,5365,5456,5438,5453,5660,5455,5526,5518,5504,5547,5494,5539,5519,5513,5535,5557,5483,5481,5566,5609,
5568,5574,5603,5577,5586,5622,5572,5654,5684,5638,5651,5670,5686,5917,5655,5672,5647,5735,5743,5750,5710,5930,5781,5779,5797,5801,5768,
5820,5850,5842,5829,5831,5819,5848,5826,5873,5863,13321,5856,5857,5292,5859,5871,5932,5878,5876,5874,5882,5888,5885,5912,5916,5893,5924,
5923,5931,5940,5941,5943,5942,5944,10059,5960,5974,5973,5965,5976,5982,5981,6002,6008,6018,6019,15754,6043,6047,6059,6071,6083,6086,
6081,6084,6092,6098,6107,6105,6112,6113,6129,6514,6154,6147,6139,6515,6197,6198,6196,6172,6223,6212,6217,6209,6238,6237,6244,6247,6248,
6239,6242,6256,6275,6280,6286,6281,6276,6296,6301,6337,6329,6345,6334,6332,6340,6328,6358,6362,6368,6207,6374,6377,6384,6389,6391,6415,
6422,6430,6438,6439,18744,6446,6463,6454,6465,6456,6455,6470,6494,6496,6489,6499,6500,6537,6512,6569,6524,6506,6540,6539,6566,6561,
6533,6583,6639,6580,6636,6579,6633,6584,6628,6622,6621,6626,6638,6585,6606,6598,6631,7324,6686,6726,6697,6720,6733,6706,6734,6835,6699,
6745,6755,6775,6783,6815,6799,6829,6804,6813,6811,6787,7342,6841,6772,6837,6816,6842,6927,6797,6782,6913,6858,6920,6872,6946,6950,6881,
6924,6861,6868,6887,6869,6966,6930,6916,6871,6883,6949,6905,6880,6895,6952,6954,6938,6947,6945,6854,7033,7031,7004,7032,7019,6996,7038,
7022,6969,7028,6973,7001,6960,7009,7006,7005,7041,7018,7090,7086,7120,7103,7105,7123,7102,7118,3560,7114,7133,7099,7107,7079,7214,7057,
7072,7068,7061,7092,7134,7144,7170,7195,7167,7434,7161,7154,7143,7173,7089,7198,7149,7188,7147,7178,7186,7361,7203,7187,7236,7180,7282,
7222,7288,7239,7266,7257,7270,7240,7224,7202,7312,7309,7328,7300,7330,7331,7319,14359,7355,7363,7362,7352,7347,7340,7390,7377,7391,7338,
7386,7402,7419,7429,14358,7418,7442,7446,19761,7455,7480,7479,10460,7481,19182,7495,7491,7497,7504,7513,7508,7515,7519,7521,7544,7545,
7551,7552,7556,7555,7565,7576,7573,7582,7588,7594,7595,7599,7602,7601,7603,7607,7612,7622,7627,7635,7647,7660,7659,7667,7663,20670,7688,
7699,7700,7707,7716,7715,7774,7765,7778,7786,7810,7821,7834,7809,7835,7806,7784,7795,7826,7824,7876,7921,7891,7869,7895,7877,7901,7854,
7857,7870,7866,7899,7919,7897,7914,7967,14925,7990,7979,7997,7992,7961,7989,7987,7954,7948,8035,8083,8036,8026,8057,8025,8078,8085,8676,
8069,8185,8213,8202,8117,8135,8166,8120,8134,8172,8158,8140,8168,8146,8133,8186,8153,8164,8149,8170,8174,8237,8302,8238,8217,8306,8287,
8254,8227,8299,8235,8310,8269,8223,8259,8250,8270,8228,8447,8221,8248,8322,8362,8344,8393,8375,8403,8381,8367,8388,8370,8404,8405,8335,
8357,8386,8351,8513,8465,8780,8428,8440,8446,8511,8434,8497,8431,8498,8396,8510,8467,8439,8582,8570,8568,8577,8576,8559,8539,8691,8557,
8578,8572,8536,8590,8593,8642,8550,8627,8611,8609,8612,8633,8646,8618,8671,8661,8684,8660,8664,8689,8686,8667,8713,8715,8698,8721,8705,
8719,8702,8731,8730,8564,8733,8728,8735,8752,8766,8754,8785,8803,8857,8850,8879,8945,8876,8888,8883,8878,8927,8907,8925,8921,8969,8957,
8988,8985,9061,9045,9096,9062,9058,9036,9046,9068,9103,9211,9092,9109,9128,9132,9175,9145,9150,9170,9161,9172,9166,9184,9196,9191,9205,
9212,9209,9215,9229,9232,9243,9256,9261,9260,9264,9266,9275,9276,9279,9280,9286,9291,9304,9332,9342,9346,9345,9351,9362,9366,9378,9383,
9401,9394,9411,9414,9412,9422,9426,9442,9440,9441,9465,9463,527,9495,9482,9500,9494,9501,9524,9519,9513,9509,9534,9550,9551,20696,9559,
9578,9576,9584,9592,9589,9595,9594,9672,9651,9678,9659,9664,9701,9710,9694,9890,9733,9839,9765,9720,9778,9786,9813,9791,9823,9817,9793,
9820,9833,9840,9827,9834,9846,9854,9867,9886,9895,9930,9935,9940,9713,9952,9955,9959,9961,9966,9970,9968,9969,9976,9975,9988,9987,9989,
9996,9998,9997,10005,10003,10014,10022,10028,10044,10052,10061,10058,10057,10075,10054,10074,10089,10084,10087,10091,10093,10104,10102,
10118,10119,10100,10122,10121,10114,10132,10138,10141,10149,10147,10178,10163,10179,10165,10173,10168,10172,10161,10189,10186,10194,
10201,10211,10206,10238,10239,10236,10241,10224,10234,10226,10227,10251,10253,10249,10271,10279,10272,10273,10274,10276,10292,10288,
10299,10311,10312,10310,10332,10328,10337,10338,10344,10345,10346,10343,10348,10352,10354,10358,10360,10364,10368,10371,10376,10379,
10382,10390,10387,10393,10394,10416,10420,10424,10425,10426,10434,10445,10454,10450,10462,10465,10469,10471,10474,14383,10491,10504,
10503,10500,10537,10532,10526,10533,10534,10523,10551,10552,10567,10586,10600,10603,10587,10597,10623,10622,10617,10638,10635,10641,
10656,10654,10672,10678,10681,10687,10684,10685,10683,10695,10701,10711,10714,10716,10723,10734,10748,10764,10770,11046,10784,11050,
10821,10894,10868,10886,10876,10906,10892,10915,10933,10922,10927,10961,10950,10955,10964,10942,10940,10949,10954,10988,10983,10970,
11005,10996,11015,11026,11025,11033,11052,11051,11072,11104,11095,11103,11098,11093,11091,11130,11135,11146,11165,11175,20811,11178,
11182,11187,11193,11194,11209,11221,11239,11244,11233,11235,11272,11277,11288,11289,11296,11295,11136,11313,11323,11326,11319,11331,
11351,11337,11361,11362,11369,20893,11376,11385,11389,11400,11415,11413,11416,11414,11433,11464,11440,11446,11461,11460,11455,17027,
11463,11466,11469,11471,11477,11475,11481,11482,11485,11489,11490,11494,11501,11504,11522,11535,11530,11526,11571,11544,11545,11550,
11573,11560,11574,11600,11642,11524,11597,11531,11596,11589,11637,11621,11636,11623,11632,11633,11628,11630,11677,11672,11679,11661,
11676,11674,11659,11666,11663,11613,11673,11723,11713,11724,11727,11700,11718,11741,11753,11793,11796,11750,11749,11872,11776,11783,
11795,11763,11767,11799,11789,11766,11811,11815,11818,11807,11831,11819,11837,11852,11843,11860,11855,11840,11856,11864,11871,11876,
11862,11877,11884,11893,11907,11920,11940,11949,11938,11947,11937,11944,11955,11954,11953,11950,11961,11965,11968,11973,11970,11992,
11986,11996,12002,19771,12015,12018,12020,12022,12026,12038,12034,12060,12053,12042,12101,12107,12078,12082,12095,12085,12102,12147,
12118,12110,12146,12136,12142,12111,12131,12179,12169,12123,12175,12157,12187,12218,12206,12195,12213,12231,12221,12203,12349,12194,
12207,12252,12216,12191,12208,12248,12253,12260,12254,12283,12274,12257,12293,12298,12323,12321,12306,12337,12319,12297,12299,12322,
12358,12390,12347,12341,12345,12355,12343,12338,12346,12391,12381,12374,12382,12377,12378,12409,12394,12393,12412,12411,12419,12245,
12413,16814,12415,12424,12425,12428,12434,12432,12435,12436,12438,12430,12443,12444,12600,12602,12613,12620,12621,12622,12624,12625,
12629,12628,12632,12639,12640,12648,12649,12647,12664,12674,12678,12675,12680,12679,12684,12692,12702,12701,12698,12707,12719,12722,
12729,12718,12726,12728,15729,12741,12742,12746,12757,12756,12769,12774,12777,12787,12793,19164,12806,12804,12811,12818,12824,12825,
12828,12833,12840,12863,12859,12874,12870,12882,12888,12890,12895,12898,12904,12915,12914,12912,12918,12921,12925,12927,12932,12934,
12933,12955,12947,12954,12973,912,12972,13019,13029,13017,13021,12996,13018,13014,13065,13039,13041,13083,13097,13091,13103,13131,18571,
13126,13118,13139,13137,13052,13169,13166,13157,13158,13172,13187,13192,13194,13184,13186,13216,13205,13220,13219,13151,13203,13225,
13232,13237,13246,13240,13245,13248,13250,13242,13257,13261,13265,13273,13272,13256,13274,13279,13280,13287,13306,13307,13310,13313,
13314,13317,13319,13322,13325,13328,13334,13353,13355,13368,13363,13376,13401,13400,13405,13402,13407,13412,13410,13416,13418,13419,
13358,13425,13431,13432,13438,13453,13458,13483,13471,13499,13484,13537,13539,13535,13522,13556,13555,13562,13715,13571,13563,13561,
13534,13574,13532,13577,13529,13621,13620,13590,13618,13617,13632,13625,13648,13637,13615,13611,13591,13592,13701,13722,13738,13727,
13730,13718,13603,13710,13703,13706,13692,13749,13683,13685,13728,13705,13736,13812,13843,13803,13774,13821,13827,13784,13835,13761,
13815,13831,13792,13810,13837,13858,13856,13757,13880,14086,13819,13933,13866,13884,14170,13956,13943,13931,13997,13934,13954,13929,
13894,13868,13935,13945,13877,14026,13922,14009,14015,13983,14041,14029,14011,14042,14032,14017,14022,14038,13985,14113,14079,14068,
14103,14104,14124,14111,14101,14100,14076,14144,14179,14168,14152,14145,14338,14155,14165,14208,14244,14216,14225,14218,14248,14189,
14228,14235,14314,14215,14236,14199,14206,14224,14281,14266,14287,14265,14288,14293,14301,14309,14300,14329,14346,14355,14347,14334,
14330,14342,14370,14362,14384,14399,14413,85,14420,14431,14439,14449,14483,14499,14505,14506,14475,14476,14518,14511,14532,14534,14512,
14537,14883,14507,14548,14558,14569,14572,14559,14555,14575,14610,14598,14600,14592,14595,14587,14609,14601,14605,14585,14602,14644,
14655,14647,14651,14629,14633,14618,14688,14687,14712,14668,14670,14708,14679,14696,14702,14681,14675,14691,14698,14853,14754,14751,
14722,14767,14795,14781,14784,14800,18646,14763,14788,14771,14791,14790,14779,14831,14834,14816,14863,14861,14846,14838,14839,14862,
14802,14865,14870,14869,14882,14881,14897,14902,14905,14887,14907,14916,14914,14930,14937,14942,14946,14955,14977,14974,15006,14965,
14973,15029,14962,14978,14999,14994,15022,15001,15010,14989,15012,15024,15039,15025,15043,15044,15060,15064,15065,15069,15097,15106,
15100,15092,15080,15090,15108,15116,15114,15123,15171,15134,15141,15146,15147,15169,15172,15163,15158,15160,15180,15133,15200,15198,
15206,15204,15213,15210,15215,15220,15223,15230,15235,15240,15242,15251,15256,15265,15273,15270,15276,15279,15282,15290,15293,15295,
15296,15322,15324,15325,15335,15348,15352,15363,15382,15376,15372,15387,15389,15397,15414,15425,15451,15442,15430,15432,15484,15469,
15468,15458,15493,15490,15492,15528,15521,15505,15525,15526,15514,15523,15556,15565,15554,15578,15595,15603,15591,15588,15601,15636,
15584,15586,15607,15582,15579,15628,15623,15642,15585,15638,15632,15639,15648,15667,18859,15654,15659,15678,15656,15681,15692,15695,
15694,15689,15702,15707,15706,15723,15711,15724,15727,15732,15741,15744,15756,15758,15762,15763,15766,15769,15770,15930,15937,15935,
15944,15948,15950,15952,15957,15970,15980,15992,15994,16002,16009,16005,16010,16013,16014,16020,15996,16024,5149,16045,16042,16061,
16050,16051,16046,16054,16072,16065,16100,16099,16090,16125,16122,16123,16132,16133,16138,16135,16143,16141,16144,20814,16147,16077,
16148,16150,16231,16237,16241,16243,16257,16281,16322,16318,16314,16335,16346,16342,16332,16347,16331,16362,16363,16351,16355,16380,
16392,16393,16383,16413,16414,16400,16415,16450,16437,16432,16436,16458,16455,16457,16460,16464,16456,16473,16484,16480,16426,16483,
16469,16502,16498,16508,16513,16519,16517,16516,16523,16522,16531,16529,16532,16537,16554,16545,16556,16560,16582,16561,16574,16581,
16584,16587,16603,16611,16636,16635,16619,16638,16650,16645,16661,16658,16665,16659,16668,16671,16667,16652,16678,16691,16699,16697,
16709,16706,16702,16716,16713,16710,16718,16727,16732,16738,16739,16740,16796,16799,16803,16813,16815,16823,16858,16869,16866,16874,
16879,17031,16884,16901,16889,16890,16913,16917,16929,16909,16926,16918,16907,16935,16950,16949,16953,16888,16975,16976,16977,16978,
16910,16969,16958,16982,16984,16990,17000,17007,17014,18600,17010,17026,17021,17025,17024,17034,17033,17039,17064,17071,17073,17077,
17122,17124,5192,17115,17154,17170,17177,17202,17200,17226,17238,17240,17251,17253,17257,17267,17266,17291,17289,17282,17314,17323,
17327,17322,17333,17332,17338,17344,17345,17353,17355,17360,17366,17375,17377,17371,17404,17397,17398,17438,17407,17428,17452,17429,
17425,17502,17495,17477,17481,17508,17480,17557,17471,17483,17488,17564,17558,17555,17563,17498,17615,17593,17591,17641,17679,17658,
17732,17710,17689,17698,17690,17699,17722,17717,17723,17756,17760,17788,17774,17750,17840,17836,17837,17812,17849,17878,17879,17896,
17893,17880,17859,17885,17872,17864,17892,17946,17940,17939,17923,17927,17936,17974,17963,17973,17953,17978,17985,18002,17988,18011,
18016,18018,18014,18026,17449,18032,18037,18039,18045,18010,18044,18046,18049,18047,18306,18311,18314,18324,18326,18328,18329,18336,
18344,18343,18349,18364,18363,18361,18366,18378,8694,18371,18381,18380,18389,18388,18390,18396,18401,18405,18402,18465,18472,18478,
18479,18498,18508,18511,18507,18551,18524,18526,18525,18527,18534,18546,18540,18573,18584,18581,18583,18602,18599,18609,18610,18608,
18612,18614,18616,18617,18638,18635,18633,18637,15181,18652,18701,18645,18681,18692,18694,18696,18707,18702,18705,18703,18710,18713,
18724,18730,18736,18745,18749,18750,18756,18758,18760,18754,18761,18780,18784,18788,18790,18792,1234,18795,18801,18809,18821,18812,
18817,18810,18822,18827,18831,18832,18844,18856,18854,18851,18867,18868,18883,18886,18888,18891,18908,18925,20815,18930,11487,18934,
18933,18959,18956,19000,18980,18977,18999,19005,19014,19023,19019,19051,19055,19056,19057,19060,19059,19114,19119,19121,19126,19140,
19139,19142,19177,19179,19203,19209,19218,19220,19224,19233,19229,19230,19236,19232,19244,19246,19261,19262,19266,19273,19269,19280,
19275,19281,19282,19276,19285,19351,19352,19365,19373,19374,19388,19423,19419,19421,19416,19409,19437,19438,19441,19442,19451,19448,
19457,19471,19461,19426,19481,19499,19511,19525,19522,19520,19523,19518,19541,19533,19547,19543,19551,19554,19557,19556,19561,19563,
19562,19629,19632,19644,19648,19663,19665,19667,19668,19678,19679,19682,19683,19686,19695,19691,19694,19700,19697,19703,19707,19718,
19736,19738,19743,19746,19747,19749,19751,19752,19753,19754,19758,19759,19762,19780,19779,19791,19789,19790,19793,19800,19828,19859,
19843,19857,19862,19863,19871,19872,19880,19892,19904,19914,19897,19910,19919,19921,19922,19939,19938,19940,19924,19937,20026,19954,
19953,19952,19989,19988,19977,19987,19980,19974,19976,19986,19978,19972,20014,19995,20005,20004,20001,20016,20039,20018,20038,20030,
20058,20064,20071,20086,20088,20199,20204,20208,20233,20232,20203,20227,20230,20266,20262,20399,20259,20255,20292,20245,20242,20289,
20287,20286,20294,20296,20317,20318,20324,20305,20304,20313,20338,20361,20359,20395,20335,20346,20378,20388,20393,20402,20420,20417,
20411,20408,20410,20422,20431,20418,20441,20435,20472,20454,20461,20463,20477,20506,20507,20510,20597,20601,20605,20609,20616,20619,
20620,20626,20629,20625,20637,20645,20649,20664,20650,20653,18785,20684,20686,20687,20688,20692,20700,20702,20701,20704,20709,20712,
20719,20724,20726,20727,20729,20731,20732,20733,20743,20744,10423,20757,20769,20780,20798,20810,20818,20820,20835,20831,20832,20833,
20838,20839,20844,20842,20855,20850,20854,20885,20892,20896,2607,7111,16985,9828,988,9113];