1
0
mirror of https://github.com/PDP-10/PCC20.git synced 2026-01-13 07:09:47 +00:00
2018-10-25 11:25:56 +02:00

912 lines
26 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# include "cc.h"
# include "c2.h"
/*
C Compiler
Phase P: Parser
Section 4: Parsing Tables
Copyright (c) 1977 by Alan Snyder
*/
extern int mtype, btype, in_type_def, strlev, *parml;
extern int val, line, *pv, *pl;
ar6 ()
{afdef(pv[1],pv[2]);}
ar7 ()
{val=afdcl(1);}
ar8 ()
{val=afdcl(0);}
ar9 ()
{val=pv[2];}
ar10 ()
{afpdcl();}
ar11 ()
{afpdcl();}
ar12 ()
{val=pv[3];}
ar13 ()
{val=pv[2];}
ar16 ()
{aidecl();}
ar17 ()
{aidecl();}
ar18 ()
{adeclr(maktyp());}
ar24 ()
{inz(i_int,pv[1]);}
ar25 ()
{inz(i_int,-pv[2]);}
ar26 ()
{inz(i_float,pv[1]);}
ar27 ()
{inz(i_negfloat,pv[2]);}
ar28 ()
{inz(i_idn,pv[1]);}
ar29 ()
{inz(i_idn,pv[2]);}
ar30 ()
{inz(i_string,pv[1]);}
ar31 ()
{inz(i_int,pv[1]);}
ar37 ()
{attrib(-1,pv[1]);}
ar38 ()
{attrib(pv[1],pv[2]);}
ar39 ()
{attrib(pv[2],pv[1]);}
ar42 ()
{val=TINT;}
ar43 ()
{val=TCHAR;}
ar44 ()
{val=TFLOAT;}
ar45 ()
{val=TDOUBLE;}
ar46 ()
{val=TINT;}
ar47 ()
{val=TINT;}
ar48 ()
{val=TINT;}
ar49 ()
{val=TINT;}
ar50 ()
{val=TDOUBLE;}
ar51 ()
{val=TINT;}
ar52 ()
{val=TINT;}
ar53 ()
{val=astruct(NULL,pv[3]);}
ar54 ()
{val=astruct(pv[2],pv[4]);}
ar55 ()
{val=aostruct(pv[2]);}
ar56 ()
{val=c_auto;}
ar57 ()
{val=c_static;}
ar58 ()
{val=c_extern;}
ar59 ()
{val=c_auto;}
ar60 ()
{val=c_typedef;}
ar63 ()
{val=adeclr(maktyp());}
ar64 ()
{val=adeclr(afield(pv[1],pv[3]));}
ar65 ()
{val=adeclr(afield(-1,pv[2]));}
ar66 ()
{aiinz(adeclr(maktyp()));}
ar67 ()
{val=adclr(pv[2],MPTR);}
ar68 ()
{val=adclr(pv[1],MFUNC);}
ar69 ()
{val=adclr(pv[1],MARRAY,1);}
ar70 ()
{val=adclr(pv[1],MARRAY,pv[3]);}
ar71 ()
{val=adclr(0,0);}
ar72 ()
{val=pv[2];}
ar73 ()
{val=adclr(pv[2],MPTR);}
ar74 ()
{val=adclr(pv[1],MFUNC);}
ar75 ()
{val=adclr(pv[1],MARRAY,1);}
ar76 ()
{val=adclr(pv[1],MARRAY,pv[3]);}
ar77 ()
{val=adclr(adclr(0,0),MFUNC);
parml=0;}
ar78 ()
{val=adclr(adclr(0,0),MFUNC);
parml=pv[3];}
ar79 ()
{val=pv[2];}
ar80 ()
{val=push(pv[1]);}
ar81 ()
{push(pv[3]);}
ar88 ()
{in_type_def=0;
val=pv[2];}
ar89 ()
{in_type_def=1;
attrib(-1,pv[1]);}
ar91 ()
{val=astmtl(pv[1],pv[2]);}
ar92 ()
{val=aexprstmt(pv[1]);}
ar94 ()
{val=aif(pv[3],pv[5],0);}
ar95 ()
{val=aif(pv[3],pv[5],pv[7]);}
ar96 ()
{val=awhile(pv[3],pv[5]);}
ar97 ()
{val=afor(pv[3],pv[5],pv[7],pv[9]);}
ar98 ()
{val=ado(pv[2],pv[5]);}
ar99 ()
{val=aswitch(pv[3],pv[5]);}
ar100 ()
{val=acase(pv[2],pv[4]);}
ar101 ()
{val=adefault(pv[3]);}
ar102 ()
{val=abreak();}
ar103 ()
{val=acontinue();}
ar104 ()
{val=areturn(0);}
ar105 ()
{val=areturn(pv[2]);}
ar106 ()
{val=agoto(pv[2]);}
ar107 ()
{val=alabel(pv[1],pv[3]);}
ar108 ()
{val=aentry(pv[2],pv[4]);}
ar109 ()
{val=anull();}
ar111 ()
{val=0;}
ar113 ()
{val=aelist(pv[1],pv[3]);}
ar114 ()
{val=node(n_times,pv[1],pv[3]);}
ar115 ()
{val=node(n_div,pv[1],pv[3]);}
ar116 ()
{val=node(n_mod,pv[1],pv[3]);}
ar117 ()
{val=node(n_plus,pv[1],pv[3]);}
ar118 ()
{val=node(n_minus,pv[1],pv[3]);}
ar119 ()
{val=node(n_ls,pv[1],pv[3]);}
ar120 ()
{val=node(n_rs,pv[1],pv[3]);}
ar121 ()
{val=node(n_lt,pv[1],pv[3]);}
ar122 ()
{val=node(n_gt,pv[1],pv[3]);}
ar123 ()
{val=node(n_le,pv[1],pv[3]);}
ar124 ()
{val=node(n_ge,pv[1],pv[3]);}
ar125 ()
{val=node(n_eq,pv[1],pv[3]);}
ar126 ()
{val=node(n_ne,pv[1],pv[3]);}
ar127 ()
{val=node(n_band,pv[1],pv[3]);}
ar128 ()
{val=node(n_bxor,pv[1],pv[3]);}
ar129 ()
{val=node(n_bior,pv[1],pv[3]);}
ar130 ()
{val=node(n_tv_and,pv[1],pv[3]);}
ar131 ()
{val=node(n_tv_or,pv[1],pv[3]);}
ar132 ()
{val=node(n_qmark,pv[1],node(n_colon,pv[3],pv[5]));}
ar133 ()
{val=node(n_assign,pv[1],pv[3]);}
ar134 ()
{val=node(n_ars+pv[2],pv[1],pv[3]);}
ar135 ()
{val=node(n_comma,pv[1],pv[3]);}
ar138 ()
{val=aidn(alidn(pv[1]));}
ar140 ()
{val=aidn(afidn(pv[1]));}
ar141 ()
{val=atidn(pv[1]);}
ar142 ()
{val=node(n_inca,pv[1]);}
ar143 ()
{val=node(n_deca,pv[1]);}
ar144 ()
{val=node(n_star,pv[2]);}
ar145 ()
{val=node(n_addr,pv[2]);}
ar146 ()
{val=node(n_uminus,pv[2]);}
ar147 ()
{val=node(n_tvnot,pv[2]);}
ar148 ()
{val=node(n_bnot,pv[2]);}
ar149 ()
{val=node(n_incb,pv[2]);}
ar150 ()
{val=node(n_decb,pv[2]);}
ar151 ()
{val=node(n_sizeof,pv[2]);}
ar152 ()
{val=node(n_int,1);}
ar153 ()
{val=pv[4];}
ar154 ()
{val=asubscript(pv[1],pv[3]);}
ar155 ()
{val=acall(pv[1],pv[3]);}
ar156 ()
{val=acall(pv[1],0);}
ar157 ()
{val=adot(pv[1],pv[3]);}
ar158 ()
{val=aptr(pv[1],pv[3]);}
ar159 ()
{val=aidn(aeidn(pv[1]));}
ar160 ()
{val=node(n_int,pv[1]);}
ar161 ()
{val=node(n_float,pv[1]);}
ar162 ()
{val=node(n_string,pv[1]);}
ar163 ()
{val=pv[2];}
ar172 ()
{apshw();}
ar173 ()
{apshd();}
ar174 ()
{apshf();}
ar175 ()
{apshs();}
ar176 ()
{strlev++;}
ar177 ()
{val=astridn(pv[1]);}
ar178 ()
{abegin();}
ar179 ()
{aend();}
ar180 ()
{val=pv[1]*pv[3];}
ar181 ()
{val=pv[1]/pv[3];}
ar182 ()
{val=pv[1]%pv[3];}
ar183 ()
{val=pv[1]+pv[3];}
ar184 ()
{val=pv[1]-pv[3];}
ar185 ()
{val=pv[1]<<pv[3];}
ar186 ()
{val=pv[1]>>pv[3];}
ar187 ()
{val=pv[1]<pv[3];}
ar188 ()
{val=pv[1]>pv[3];}
ar189 ()
{val=pv[1]<=pv[3];}
ar190 ()
{val=pv[1]>=pv[3];}
ar191 ()
{val=pv[1]==pv[3];}
ar192 ()
{val=pv[1]!=pv[3];}
ar193 ()
{val=pv[1]&pv[3];}
ar194 ()
{val=pv[1]^pv[3];}
ar195 ()
{val=pv[1]|pv[3];}
ar196 ()
{val=pv[1]&&pv[3];}
ar197 ()
{val=pv[1]||pv[3];}
ar198 ()
{val=(pv[1]?pv[3]:pv[5]);}
ar200 ()
{val= -pv[2];}
ar201 ()
{val= !pv[2];}
ar202 ()
{val= ~pv[2];}
ar204 ()
{val=pv[2];}
int (*act[])() {
0, 0, 0, 0, 0, 0, ar6, ar7, ar8, ar9,
ar10, ar11, ar12, ar13, 0, 0, ar16, ar17, ar18, 0,
0, 0, 0, 0, ar24, ar25, ar26, ar27, ar28, ar29,
ar30, ar31, 0, 0, 0, 0, 0, ar37, ar38, ar39,
0, 0, ar42, ar43, ar44, ar45, ar46, ar47, ar48, ar49,
ar50, ar51, ar52, ar53, ar54, ar55, ar56, ar57, ar58, ar59,
ar60, 0, 0, ar63, ar64, ar65, ar66, ar67, ar68, ar69,
ar70, ar71, ar72, ar73, ar74, ar75, ar76, ar77, ar78, ar79,
ar80, ar81, 0, 0, 0, 0, 0, 0, ar88, ar89,
0, ar91, ar92, 0, ar94, ar95, ar96, ar97, ar98, ar99,
ar100, ar101, ar102, ar103, ar104, ar105, ar106, ar107, ar108, ar109,
0, ar111, 0, ar113, ar114, ar115, ar116, ar117, ar118, ar119,
ar120, ar121, ar122, ar123, ar124, ar125, ar126, ar127, ar128, ar129,
ar130, ar131, ar132, ar133, ar134, ar135, 0, 0, ar138, 0,
ar140, ar141, ar142, ar143, ar144, ar145, ar146, ar147, ar148, ar149,
ar150, ar151, ar152, ar153, ar154, ar155, ar156, ar157, ar158, ar159,
ar160, ar161, ar162, ar163, 0, 0, 0, 0, 0, 0,
0, 0, ar172, ar173, ar174, ar175, ar176, ar177, ar178, ar179,
ar180, ar181, ar182, ar183, ar184, ar185, ar186, ar187, ar188, ar189,
ar190, ar191, ar192, ar193, ar194, ar195, ar196, ar197, ar198, 0,
ar200, ar201, ar202, 0, ar204, -1};
int r1[] {
0, 1, 2, 2, 3, 3, 4, 5, 5, 6,
7, 7, 8, 8, 9, 9, 10, 10, 10, 11,
11, 11, 12, 12, 13, 13, 13, 13, 13, 13,
13, 14, 14, 15, 15, 16, 16, 17, 17, 17,
18, 18, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 20, 20, 20, 20,
20, 21, 21, 22, 22, 22, 23, 24, 24, 24,
24, 24, 24, 25, 25, 25, 25, 25, 25, 25,
26, 26, 27, 27, 28, 28, 29, 29, 30, 31,
32, 32, 33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
34, 34, 35, 35, 36, 36, 36, 36, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
36, 36, 36, 36, 36, 36, 36, 37, 37, 38,
38, 39, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 41, 42, 42, 42, 42, 42,
42, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
52, 52, 52, 52, 52, -1};
int r2[] {
0, 2, 2, 0, 1, 1, 2, 2, 1, 2,
1, 0, 4, 3, 1, 3, 2, 1, 1, 1,
3, 4, 1, 3, 1, 2, 1, 2, 1, 2,
1, 1, 1, 1, 2, 3, 2, 1, 2, 2,
1, 1, 1, 1, 1, 1, 1, 2, 1, 2,
2, 1, 2, 4, 5, 2, 1, 1, 1, 1,
1, 1, 3, 1, 3, 2, 1, 2, 3, 3,
4, 1, 3, 2, 3, 3, 4, 3, 4, 3,
1, 3, 1, 2, 1, 2, 1, 2, 3, 1,
1, 2, 2, 1, 5, 7, 5, 9, 7, 5,
4, 3, 2, 2, 2, 3, 3, 3, 4, 1,
1, 0, 1, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 5, 3, 3, 3, 1, 1, 1, 1,
1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 4, 4, 4, 4, 3, 3, 3, 1,
1, 1, 1, 3, 2, 0, 2, 5, 2, 3,
4, 3, 1, 1, 1, 1, 1, 1, 1, 1,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 5, 1,
2, 2, 2, 1, 3, -1};
int g[] {
0, 0, 2, 0, 19, 0, 20, 0, 21, 0,
40, 0, 41, 41, 72, 0, 142, 0, 53, 92,
180, 0, 54, 0, 101, 0, 184, 56, 102, 0,
185, 286, 338, 0, 186, 0, 114, 73, 115, 114,
201, 0, 22, 2, 23, 0, 116, 2, 24, 26,
60, 73, 24, 114, 24, 0, 42, 2, 25, 73,
25, 114, 25, 118, 202, 224, 202, 0, 43, 24,
58, 0, 26, 0, 78, 47, 79, 153, 263, 0,
55, 0, 56, 47, 80, 48, 82, 49, 83, 75,
82, 76, 83, 153, 80, 0, 57, 2, 27, 4,
32, 23, 51, 49, 32, 92, 181, 116, 181, 0,
31, 0, 69, 0, 44, 44, 74, 0, 45, 110,
197, 0, 108, 38, 70, 63, 109, 108, 196, 110,
109, 197, 196, 0, 46, 0, 47, 114, 200, 0,
143, 143, 229, 149, 260, 199, 289, 200, 229, 221,
299, 300, 345, 301, 346, 344, 360, 352, 363, 355,
366, 369, 373, 376, 377, 0, 144, 354, 365, 371,
375, 0, 333, 0, 325, 118, 205, 126, 214, 127,
216, 218, 298, 224, 205, 231, 303, 232, 304, 233,
305, 234, 306, 235, 307, 236, 308, 237, 309, 238,
310, 239, 311, 240, 312, 241, 313, 242, 314, 243,
315, 244, 316, 245, 317, 246, 318, 247, 319, 248,
320, 249, 321, 250, 322, 251, 323, 252, 324, 253,
326, 256, 328, 259, 331, 261, 334, 262, 335, 348,
361, 349, 362, 353, 364, 354, 334, 371, 334, 0,
145, 0, 217, 0, 146, 0, 28, 119, 206, 120,
207, 121, 208, 122, 209, 123, 210, 124, 211, 125,
212, 138, 225, 294, 343, 347, 343, 0, 147, 224,
302, 0, 203, 291, 340, 292, 341, 0, 293, 0,
148, 0, 149, 0, 150, 0, 151, 0, 29, 0,
65, 0, 73, 200, 290, 0, 227, 52, 90, 62,
107, 84, 156, 85, 157, 104, 193, 136, 222, 161,
265, 162, 266, 163, 267, 164, 268, 165, 269, 166,
270, 167, 271, 168, 272, 169, 273, 170, 274, 171,
275, 172, 276, 173, 277, 174, 278, 175, 279, 176,
280, 177, 281, 178, 282, 179, 283, 336, 356, 342,
359, 0, 187, 86, 158, 87, 159, 88, 160, 182,
160, 0, 91, -1};
int pg[] {
0, 0, 1, 3, 5, 7, 9, 11, 13, 17,
19, 23, 25, 27, 31, 35, 37, 43, 47, 57,
69, 73, 75, 81, 83, 97, 111, 113, 115, 119,
123, 135, 137, 141, 167, 173, 175, 251, 253, 255,
257, 279, 283, 289, 291, 293, 295, 297, 299, 301,
303, 307, 363, -1};
int nbpw {16};
int nwpbt {5};
int a[] {
0, 0, 0, 117, 195, 71, 106, 62, 66, 118,
52, 92, 257, 179, 119, 120, 121, 176, 175, 163,
162, 122, 123, 164, 250, 168, 169, 124, 125, 172,
173, 170, 171, 166, 167, 258, 251, 177, 178, 0,
5, 6, 7, 8, 9, 10, 11, 12, 126, 127,
128, 369, 129, 130, 131, 132, 133, 134, 135, 136,
137, 13, 138, 14, 15, 16, 17, 0, 0, 0,
0, 0, 0, 0, 0, 113, 139, 140, 141, 12291,
20481, 0, 0, 65280, 40960, 7, 4097, 16384, 4105, 8195,
4117, 8196, 4171, 8210, 0, 4105, 8195, 4117, 8196, 4171,
8222, 0, 12330, 12331, 12332, 12333, 12464, 12344, 12345, 12346,
12347, 4136, 8225, 4138, 8226, 12334, 4136, 8227, 12336, 4136,
8228, 12339, 12348, 4105, 8229, 12429, 12290, 12293, 20481, 0,
0, 7936, 32768, 3, 4157, 8230, 4171, 8231, 12299, 12292,
4105, 8240, 4106, 8244, 4117, 8241, 4171, 8242, 0, 20481,
0, 0, 57344, 8192, 4, 12325, 4099, 8251, 12329, 20481,
0, 0, 7936, 32768, 3, 4171, 8231, 0, 4103, 8254,
4105, 8253, 12296, 12328, 4101, 8255, 4171, 8256, 0, 4105,
8229, 0, 4103, 8254, 4104, 8258, 4105, 8253, 0, 4103,
8254, 4105, 8253, 12361, 12335, 12338, 12337, 12340, 4104, 8259,
4171, 8260, 0, 20481, 0, 0, 7936, 32768, 3, 4171,
8231, 0, 12429, 12294, 4101, 8263, 0, 12377, 12329, 20481,
0, 0, 7936, 32768, 3, 4157, 8230, 4171, 8231, 12298,
12370, 12372, 4105, 8267, 4106, 8244, 4117, 8268, 4171, 8269,
0, 4105, 8240, 4117, 8241, 4171, 8273, 0, 4105, 8240,
4117, 8241, 4171, 8273, 0, 4105, 8229, 4106, 8276, 12359,
4099, 12306, 4103, 8254, 4105, 8253, 4107, 12306, 12295, 4105,
8277, 4110, 8278, 4111, 8279, 4118, 8280, 4172, 8281, 0,
4099, 8285, 4107, 8284, 0, 12302, 12305, 4101, 8286, 4112,
8287, 4118, 8288, 4171, 8289, 4172, 8290, 4173, 8291, 4174,
8292, 0, 4099, 12351, 4103, 8296, 4105, 8295, 4107, 12351,
12354, 12327, 12324, 12326, 4104, 8297, 0, 4102, 8298, 4105,
8277, 4110, 8278, 4111, 8279, 4118, 8280, 4172, 8281, 0,
20481, 0, 0, 7936, 32768, 3, 4171, 8231, 0, 4101,
12465, 12343, 4101, 8302, 0, 12367, 12365, 12368, 4104, 8303,
4107, 8304, 0, 12373, 12466, 12297, 20481, 49704, 6241, 65280,
65527, 30727, 0, 12371, 4105, 8267, 4117, 8268, 4171, 8344,
0, 4106, 8276, 12359, 4099, 8346, 4107, 8345, 0, 12349,
4103, 8296, 4105, 8295, 12351, 4105, 8229, 12359, 4103, 8296,
4104, 8347, 4105, 8295, 0, 4103, 8296, 4105, 8295, 12355,
4105, 8277, 4110, 8278, 4111, 8279, 4118, 8280, 4172, 8281,
0, 12491, 20481, 8192, 59038, 103, 0, 0, 4112, 8366,
4117, 8353, 4118, 8357, 12353, 12487, 4105, 8240, 4106, 8244,
4117, 8241, 4171, 8242, 0, 12323, 4105, 8277, 4110, 8278,
4111, 8279, 4112, 8287, 4118, 8374, 4171, 8289, 4172, 8375,
4173, 8291, 4174, 8292, 0, 4171, 8380, 0, 4172, 8381,
4173, 8382, 0, 12316, 12312, 12314, 12318, 12304, 12307, 4104,
8383, 0, 4102, 8384, 4105, 8277, 4110, 8278, 4111, 8279,
4118, 8280, 4172, 8281, 0, 12362, 12363, 20481, 8192, 59038,
103, 0, 0, 4102, 8386, 4112, 8366, 4117, 8353, 4118,
8357, 0, 20481, 16, 0, 7936, 32768, 3, 4171, 8231,
0, 12374, 12366, 4171, 8390, 0, 4105, 12428, 4106, 8391,
4117, 12429, 4141, 12429, 4142, 12429, 4143, 12429, 4157, 12429,
4162, 12429, 4171, 12429, 12447, 20481, 49704, 6241, 65280, 65527,
30727, 0, 12321, 4105, 8240, 4106, 8244, 4117, 8241, 4171,
8242, 0, 12397, 20481, 49664, 6241, 7936, 49152, 28675, 4171,
8396, 0, 20481, 49664, 6241, 0, 16384, 28672, 4171, 8396,
0, 20481, 49664, 6241, 0, 16384, 28672, 4099, 8405, 4171,
8396, 0, 20481, 49664, 6241, 0, 16384, 28672, 4171, 8407,
0, 4105, 8410, 0, 12463, 4099, 8411, 0, 4099, 8412,
0, 12460, 12461, 12462, 4106, 8413, 0, 4171, 8415, 0,
20481, 49152, 6241, 0, 16384, 28672, 4105, 8416, 4171, 8396,
0, 12448, 12449, 12450, 12381, 20481, 49704, 6241, 0, 24567,
28672, 4100, 8418, 4171, 8420, 0, 12378, 4099, 8422, 4107,
8444, 4109, 8441, 4112, 8436, 4113, 8438, 4114, 8437, 4115,
8425, 4116, 8424, 4117, 8423, 4118, 8427, 4119, 8426, 4120,
8442, 4121, 8430, 4122, 8431, 4125, 8434, 4126, 8435, 4127,
8432, 4128, 8433, 4129, 8428, 4130, 8429, 4132, 8443, 4133,
8439, 4134, 8440, 0, 4105, 8445, 0, 4103, 8448, 4105,
12427, 4108, 8449, 4123, 8446, 4124, 8447, 4131, 8450, 12424,
4105, 8451, 0, 20481, 49704, 6241, 0, 24567, 28672, 4171,
8420, 0, 4105, 8453, 0, 4105, 8454, 0, 12359, 4105,
8267, 4106, 8244, 4117, 8268, 4171, 8269, 0, 12376, 12360,
20481, 8192, 59038, 103, 0, 0, 4112, 8366, 4117, 8353,
4118, 8357, 12352, 20481, 8192, 59038, 103, 0, 0, 4104,
8456, 4112, 8366, 4117, 8353, 4118, 8357, 0, 12490, 12489,
12488, 12303, 4103, 8254, 4105, 8253, 12306, 4105, 8277, 4110,
8278, 4111, 8279, 4118, 8280, 4172, 8476, 4173, 8382, 0,
4100, 12312, 4107, 12312, 12491, 4100, 8477, 4107, 8478, 0,
12320, 12310, 20481, 8192, 59038, 103, 0, 0, 4112, 8366,
4117, 8353, 4118, 8357, 12319, 12317, 12313, 12315, 12356, 12357,
20481, 8192, 59038, 103, 0, 0, 4102, 8479, 4112, 8366,
4117, 8353, 4118, 8357, 0, 12364, 12341, 12375, 20481, 0,
0, 7936, 32768, 3, 4100, 8480, 4171, 8231, 0, 12369,
20481, 49704, 6241, 0, 24567, 28672, 4100, 8418, 4171, 8420,
0, 12322, 4105, 8483, 4117, 8484, 12453, 4104, 8486, 0,
4105, 12428, 12447, 4104, 8487, 4107, 8444, 4109, 8441, 4112,
8436, 4113, 8438, 4114, 8437, 4115, 8425, 4116, 8424, 4117,
8423, 4118, 8427, 4119, 8426, 4120, 8442, 4121, 8430, 4122,
8431, 4125, 8434, 4126, 8435, 4127, 8432, 4128, 8433, 4129,
8428, 4130, 8429, 4132, 8443, 4133, 8439, 4134, 8440, 0,
4103, 8448, 4105, 12427, 4108, 8449, 4123, 8446, 4124, 8447,
4131, 8450, 12436, 4103, 8448, 4105, 12427, 4108, 8449, 4123,
8446, 4124, 8447, 4131, 8450, 12435, 4103, 8448, 4105, 12427,
4108, 8449, 4123, 8446, 4124, 8447, 4131, 8450, 12433, 4103,
8448, 4105, 12427, 4108, 8449, 4123, 8446, 4124, 8447, 4131,
8450, 12432, 4103, 8448, 4105, 12427, 4108, 8449, 4123, 8446,
4124, 8447, 4131, 8450, 12434, 4103, 8448, 4105, 12427, 4108,
8449, 4123, 8446, 4124, 8447, 4131, 8450, 12437, 4103, 8448,
4105, 12427, 4108, 8449, 4123, 8446, 4124, 8447, 4131, 8450,
12438, 12392, 4099, 8488, 4107, 8444, 4109, 8441, 4112, 8436,
4113, 8438, 4114, 8437, 4115, 8425, 4116, 8424, 4117, 8423,
4118, 8427, 4119, 8426, 4120, 8442, 4121, 8430, 4122, 8431,
4125, 8434, 4126, 8435, 4127, 8432, 4128, 8433, 4129, 8428,
4130, 8429, 4132, 8443, 4133, 8439, 4134, 8440, 0, 4099,
12426, 4105, 12428, 12447, 4107, 8444, 4109, 8441, 4112, 8436,
4113, 8438, 4114, 8437, 4115, 8425, 4116, 8424, 4117, 8423,
4118, 8427, 4119, 8426, 4120, 8442, 4121, 8430, 4122, 8431,
4125, 8434, 4126, 8435, 4127, 8432, 4128, 8433, 4129, 8428,
4130, 8429, 4132, 8443, 4133, 8439, 4134, 8440, 12425, 4099,
8489, 0, 20481, 49664, 6241, 0, 16384, 28672, 4171, 8396,
0, 12390, 12391, 20481, 8192, 59038, 103, 0, 0, 4106,
8492, 4112, 8366, 4117, 8353, 4118, 8357, 0, 4106, 8493,
0, 20481, 49664, 6241, 7936, 49152, 28675, 4171, 8396, 0,
4103, 8448, 4105, 12427, 4108, 8449, 4123, 8446, 4124, 8447,
4131, 8450, 12439, 12467, 12301, 4105, 12428, 4106, 8391, 12447,
12379, 12380, 20481, 49664, 6241, 0, 16384, 28672, 4104, 8519,
4171, 8396, 0, 12430, 12431, 4171, 8521, 0, 4171, 8522,
0, 4151, 8524, 0, 20481, 49664, 6241, 0, 16384, 28672,
4171, 8396, 12399, 12350, 12492, 12468, 12469, 12470, 4115, 8355,
4116, 8354, 4117, 8353, 12471, 4115, 8355, 4116, 8354, 4117,
8353, 12472, 20481, 0, 152, 0, 0, 0, 4117, 8353,
4118, 8357, 12473, 20481, 0, 152, 0, 0, 0, 4117,
8353, 4118, 8357, 12474, 20481, 0, 152, 6, 0, 0,
4117, 8353, 4118, 8357, 12475, 20481, 0, 152, 6, 0,
0, 4117, 8353, 4118, 8357, 12476, 20481, 0, 152, 6,
0, 0, 4117, 8353, 4118, 8357, 12477, 20481, 0, 152,
6, 0, 0, 4117, 8353, 4118, 8357, 12478, 20481, 0,
34456, 7, 0, 0, 4117, 8353, 4118, 8357, 12479, 20481,
0, 34456, 7, 0, 0, 4117, 8353, 4118, 8357, 12480,
20481, 0, 59032, 7, 0, 0, 4117, 8353, 4118, 8357,
12481, 20481, 0, 59032, 7, 0, 0, 4112, 8366, 4117,
8353, 4118, 8357, 12482, 20481, 0, 59036, 7, 0, 0,
4112, 8366, 4117, 8353, 4118, 8357, 12483, 20481, 0, 59038,
7, 0, 0, 4112, 8366, 4117, 8353, 4118, 8357, 12484,
20481, 0, 59038, 39, 0, 0, 4112, 8366, 4117, 8353,
4118, 8357, 12485, 20481, 8192, 59038, 103, 0, 0, 4106,
8528, 4112, 8366, 4117, 8353, 4118, 8357, 0, 4100, 12313,
4107, 12313, 12491, 12308, 4100, 8529, 4105, 8277, 4110, 8278,
4111, 8279, 4112, 8287, 4118, 8374, 4171, 8289, 4172, 8375,
4173, 8291, 4174, 8292, 0, 12358, 12342, 12395, 12300, 4104,
8531, 4105, 8483, 4117, 8484, 12453, 4105, 8483, 4117, 8484,
12453, 4103, 8534, 12452, 12451, 12393, 12394, 4104, 8536, 4107,
8444, 4109, 8441, 4112, 8436, 4113, 8438, 4114, 8437, 4115,
8425, 4116, 8424, 4117, 8423, 4118, 8427, 4119, 8426, 4120,
8442, 4121, 8430, 4122, 8431, 4125, 8434, 4126, 8435, 4127,
8432, 4128, 8433, 4129, 8428, 4130, 8429, 4132, 8443, 4133,
8439, 4134, 8440, 0, 12389, 4104, 8539, 0, 12402, 12403,
12404, 4115, 8425, 4116, 8424, 4117, 8423, 12405, 4115, 8425,
4116, 8424, 4117, 8423, 12406, 4115, 8425, 4116, 8424, 4117,
8423, 4118, 8427, 4119, 8426, 12407, 4115, 8425, 4116, 8424,
4117, 8423, 4118, 8427, 4119, 8426, 12408, 4115, 8425, 4116,
8424, 4117, 8423, 4118, 8427, 4119, 8426, 4129, 8428, 4130,
8429, 12409, 4115, 8425, 4116, 8424, 4117, 8423, 4118, 8427,
4119, 8426, 4129, 8428, 4130, 8429, 12410, 4115, 8425, 4116,
8424, 4117, 8423, 4118, 8427, 4119, 8426, 4129, 8428, 4130,
8429, 12411, 4115, 8425, 4116, 8424, 4117, 8423, 4118, 8427,
4119, 8426, 4129, 8428, 4130, 8429, 12412, 4115, 8425, 4116,
8424, 4117, 8423, 4118, 8427, 4119, 8426, 4121, 8430, 4122,
8431, 4127, 8432, 4128, 8433, 4129, 8428, 4130, 8429, 12413,
4115, 8425, 4116, 8424, 4117, 8423, 4118, 8427, 4119, 8426,
4121, 8430, 4122, 8431, 4127, 8432, 4128, 8433, 4129, 8428,
4130, 8429, 12414, 4115, 8425, 4116, 8424, 4117, 8423, 4118,
8427, 4119, 8426, 4121, 8430, 4122, 8431, 4125, 8434, 4126,
8435, 4127, 8432, 4128, 8433, 4129, 8428, 4130, 8429, 12415,
4112, 8436, 4115, 8425, 4116, 8424, 4117, 8423, 4118, 8427,
4119, 8426, 4121, 8430, 4122, 8431, 4125, 8434, 4126, 8435,
4127, 8432, 4128, 8433, 4129, 8428, 4130, 8429, 12416, 4112,
8436, 4114, 8437, 4115, 8425, 4116, 8424, 4117, 8423, 4118,
8427, 4119, 8426, 4121, 8430, 4122, 8431, 4125, 8434, 4126,
8435, 4127, 8432, 4128, 8433, 4129, 8428, 4130, 8429, 12417,
4112, 8436, 4113, 8438, 4114, 8437, 4115, 8425, 4116, 8424,
4117, 8423, 4118, 8427, 4119, 8426, 4121, 8430, 4122, 8431,
4125, 8434, 4126, 8435, 4127, 8432, 4128, 8433, 4129, 8428,
4130, 8429, 12418, 4112, 8436, 4113, 8438, 4114, 8437, 4115,
8425, 4116, 8424, 4117, 8423, 4118, 8427, 4119, 8426, 4121,
8430, 4122, 8431, 4125, 8434, 4126, 8435, 4127, 8432, 4128,
8433, 4129, 8428, 4130, 8429, 4133, 8439, 12419, 4106, 8540,
4107, 8444, 4109, 8441, 4112, 8436, 4113, 8438, 4114, 8437,
4115, 8425, 4116, 8424, 4117, 8423, 4118, 8427, 4119, 8426,
4120, 8442, 4121, 8430, 4122, 8431, 4125, 8434, 4126, 8435,
4127, 8432, 4128, 8433, 4129, 8428, 4130, 8429, 4132, 8443,
4133, 8439, 4134, 8440, 0, 4109, 8441, 4112, 8436, 4113,
8438, 4114, 8437, 4115, 8425, 4116, 8424, 4117, 8423, 4118,
8427, 4119, 8426, 4120, 8442, 4121, 8430, 4122, 8431, 4125,
8434, 4126, 8435, 4127, 8432, 4128, 8433, 4129, 8428, 4130,
8429, 4132, 8443, 4133, 8439, 4134, 8440, 12421, 4109, 8441,
4112, 8436, 4113, 8438, 4114, 8437, 4115, 8425, 4116, 8424,
4117, 8423, 4118, 8427, 4119, 8426, 4120, 8442, 4121, 8430,
4122, 8431, 4125, 8434, 4126, 8435, 4127, 8432, 4128, 8433,
4129, 8428, 4130, 8429, 4132, 8443, 4133, 8439, 4134, 8440,
12422, 4109, 8441, 4112, 8436, 4113, 8438, 4114, 8437, 4115,
8425, 4116, 8424, 4117, 8423, 4118, 8427, 4119, 8426, 4120,
8442, 4121, 8430, 4122, 8431, 4125, 8434, 4126, 8435, 4127,
8432, 4128, 8433, 4129, 8428, 4130, 8429, 4132, 8443, 4133,
8439, 4134, 8440, 12423, 4104, 8542, 4107, 8541, 0, 4109,
8441, 4112, 8436, 4113, 8438, 4114, 8437, 4115, 8425, 4116,
8424, 4117, 8423, 4118, 8427, 4119, 8426, 4120, 8442, 4121,
8430, 4122, 8431, 4125, 8434, 4126, 8435, 4127, 8432, 4128,
8433, 4129, 8428, 4130, 8429, 4132, 8443, 4133, 8439, 4134,
8440, 12400, 12444, 4102, 8543, 4107, 8444, 4109, 8441, 4112,
8436, 4113, 8438, 4114, 8437, 4115, 8425, 4116, 8424, 4117,
8423, 4118, 8427, 4119, 8426, 4120, 8442, 4121, 8430, 4122,
8431, 4125, 8434, 4126, 8435, 4127, 8432, 4128, 8433, 4129,
8428, 4130, 8429, 4132, 8443, 4133, 8439, 4134, 8440, 0,
12445, 12446, 4104, 8544, 4107, 8444, 4109, 8441, 4112, 8436,
4113, 8438, 4114, 8437, 4115, 8425, 4116, 8424, 4117, 8423,
4118, 8427, 4119, 8426, 4120, 8442, 4121, 8430, 4122, 8431,
4125, 8434, 4126, 8435, 4127, 8432, 4128, 8433, 4129, 8428,
4130, 8429, 4132, 8443, 4133, 8439, 4134, 8440, 0, 4105,
8545, 0, 4099, 8546, 0, 4107, 8444, 4109, 8441, 4112,
8436, 4113, 8438, 4114, 8437, 4115, 8425, 4116, 8424, 4117,
8423, 4118, 8427, 4119, 8426, 4120, 8442, 4121, 8430, 4122,
8431, 4125, 8434, 4126, 8435, 4127, 8432, 4128, 8433, 4129,
8428, 4130, 8429, 4132, 8443, 4133, 8439, 4134, 8440, 12398,
4104, 8547, 4107, 8444, 4109, 8441, 4112, 8436, 4113, 8438,
4114, 8437, 4115, 8425, 4116, 8424, 4117, 8423, 4118, 8427,
4119, 8426, 4120, 8442, 4121, 8430, 4122, 8431, 4125, 8434,
4126, 8435, 4127, 8432, 4128, 8433, 4129, 8428, 4130, 8429,
4132, 8443, 4133, 8439, 4134, 8440, 0, 12309, 12311, 12454,
4103, 8534, 4104, 8549, 0, 4103, 8534, 12456, 4102, 8550,
4105, 8277, 4110, 8278, 4111, 8279, 4118, 8280, 4172, 8281,
0, 4103, 8448, 4105, 12427, 4108, 8449, 4123, 8446, 4124,
8447, 4131, 8450, 12441, 12388, 12396, 20481, 512, 6144, 0,
16384, 28672, 4171, 8396, 12440, 12443, 12442, 20481, 49664, 6241,
0, 16384, 28672, 4171, 8396, 12399, 20481, 8192, 59038, 103,
0, 0, 4112, 8366, 4117, 8353, 4118, 8357, 12486, 4105,
8559, 12459, 12457, 20481, 8192, 59038, 103, 0, 0, 4102,
8560, 4112, 8366, 4117, 8353, 4118, 8357, 0, 4147, 8561,
12382, 4109, 8441, 4112, 8436, 4113, 8438, 4114, 8437, 4115,
8425, 4116, 8424, 4117, 8423, 4118, 8427, 4119, 8426, 4121,
8430, 4122, 8431, 4125, 8434, 4126, 8435, 4127, 8432, 4128,
8433, 4129, 8428, 4130, 8429, 4133, 8439, 4134, 8440, 12420,
4109, 8441, 4112, 8436, 4113, 8438, 4114, 8437, 4115, 8425,
4116, 8424, 4117, 8423, 4118, 8427, 4119, 8426, 4120, 8442,
4121, 8430, 4122, 8431, 4125, 8434, 4126, 8435, 4127, 8432,
4128, 8433, 4129, 8428, 4130, 8429, 4132, 8443, 4133, 8439,
4134, 8440, 12401, 12384, 4104, 8562, 4107, 8444, 4109, 8441,
4112, 8436, 4113, 8438, 4114, 8437, 4115, 8425, 4116, 8424,
4117, 8423, 4118, 8427, 4119, 8426, 4120, 8442, 4121, 8430,
4122, 8431, 4125, 8434, 4126, 8435, 4127, 8432, 4128, 8433,
4129, 8428, 4130, 8429, 4132, 8443, 4133, 8439, 4134, 8440,
0, 4099, 8563, 0, 12387, 4104, 8564, 0, 12458, 4099,
8566, 0, 20481, 49664, 6241, 0, 16384, 28672, 4171, 8396,
12399, 12455, 12383, 12386, 4104, 8568, 0, 12385, -1};
int pa[] {
0, 79, 80, 95, 95, 102, 103, 104, 105, 106,
107, 108, 109, 110, 111, 116, 119, 122, 123, 126,
127, 128, 139, 140, 149, 156, 159, 168, 173, 174,
179, 182, 189, 194, 195, 196, 197, 198, 203, 212,
213, 214, 217, 218, 219, 230, 231, 232, 241, 248,
255, 260, 269, 280, 285, 286, 287, 302, 311, 312,
313, 314, 317, 330, 339, 342, 345, 346, 347, 348,
353, 354, 355, 356, 363, 364, 364, 371, 374, 379,
380, 385, 388, 395, 269, 269, 400, 400, 400, 411,
412, 425, 426, 435, 436, 455, 458, 463, 464, 465,
466, 467, 468, 469, 472, 485, 486, 487, 502, 511,
330, 512, 513, 516, 535, 542, 543, 552, 553, 562,
562, 562, 562, 562, 562, 562, 571, 582, 591, 594,
595, 598, 601, 602, 603, 604, 269, 607, 610, 621,
622, 623, 624, 625, 636, 637, 684, 687, 700, 703,
712, 715, 718, 719, 728, 729, 730, 743, 758, 759,
760, 269, 269, 269, 269, 269, 269, 269, 269, 269,
269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
761, 762, 767, 780, 785, 790, 791, 792, 805, 806,
807, 808, 809, 810, 825, 826, 827, 828, 839, 703,
840, 851, 852, 857, 860, 863, 910, 923, 936, 949,
962, 975, 988, 1001, 1002, 1049, 1054, 1099, 1102, 1111,
1112, 703, 1113, 1128, 1131, 1140, 1153, 1154, 1155, 1160,
1161, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102,
1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102,
1102, 1102, 1102, 1162, 1173, 1174, 1102, 1175, 1178, 1102,
1181, 1184, 1102, 1193, 1194, 1195, 1196, 1197, 1198, 1205,
1212, 1223, 1234, 1245, 1256, 1267, 1278, 1289, 1300, 1311,
1324, 1337, 1350, 1363, 1378, 1383, 1384, 1405, 1406, 1407,
1408, 1409, 1416, 1421, 562, 1424, 1425, 1426, 1427, 1474,
703, 703, 1475, 1478, 1479, 1480, 1481, 1488, 1495, 1506,
1517, 1532, 1547, 1562, 1577, 1600, 1623, 1650, 1679, 1710,
1743, 1778, 1825, 1868, 1911, 1954, 1959, 2002, 2003, 2050,
2051, 2052, 2099, 2102, 2105, 2150, 269, 2197, 2198, 2199,
2200, 2205, 2208, 2221, 703, 2234, 2235, 2236, 1102, 1102,
2245, 2246, 703, 1102, 2247, 703, 2256, 2269, 2272, 2273,
2288, 2291, 2330, 2373, 2374, 2421, 2424, 2425, 2428, 703,
2429, 2432, 2441, 2442, 2443, 2444, 703, 2447, -1};