#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef struct tree {
            int op;
            struct tree *kids[1];
            STATEPTR_TYPE state;

} *NODEPTR_TYPE;

#define OP_LABEL(p) ((p)->op)
#define LEFT_CHILD(p) ((p)->kids[0])
#define RIGHT_CHILD(p) (abort(),(p)->kids[0])
#define STATE_LABEL(p) ((p)->state)
#define PANIC printf

extern STATEPTR_TYPE burm_label(NODEPTR_TYPE p);
extern int burm_rule(STATEPTR_TYPE state, int goalnt);
extern short burm_cost[][4];
extern short *burm_nts[];
extern NODEPTR_TYPE *burm_kids(NODEPTR_TYPE p, int eruleno, NODEPTR_TYPE kids[]);
extern void burm_trace(NODEPTR_TYPE p, int eruleno, int cost, int bestcost);

enum {
  op0 = 1,
  op1 = 2,
  op2 = 3,
  op3 = 4,
  op4 = 5,
  op5 = 6,
  op6 = 7,
  op7 = 8,
  op8 = 9,
  op9 = 10,
  op10 = 11,
  op11 = 12,
  op12 = 13,
  op13 = 14,
  op14 = 15,
  op15 = 16,
  op16 = 17,
  op17 = 18,
  op18 = 19,
  op19 = 20,
  op20 = 21,
  op21 = 22,
  op22 = 23,
  op23 = 24,
  op24 = 25,
  op25 = 26,
  op26 = 27,
  op27 = 28,
  op28 = 29,
  op29 = 30,
  op30 = 31,
  op31 = 32,
  op32 = 33,
  op33 = 34,
  op34 = 35,
  op35 = 36,
  op36 = 37,
  op37 = 38,
  op38 = 39,
  op39 = 40,
  op40 = 41,
  op41 = 42,
  op42 = 43,
  op43 = 44,
  op44 = 45,
  op45 = 46,
  op46 = 47,
  op47 = 48,
  op48 = 49,
  op49 = 50,
  op50 = 51,
  op51 = 52,
  op52 = 53,
  op53 = 54,
  op54 = 55,
  op55 = 56,
  op56 = 57,
  op57 = 58,
  op58 = 59,
  op59 = 60,
  op60 = 61,
  op61 = 62,
  op62 = 63,
  op63 = 64,
  op64 = 65,
  op65 = 66,
  op66 = 67,
  op67 = 68,
  op68 = 69,
  op69 = 70,
  op70 = 71,
  op71 = 72,
  op72 = 73,
  op73 = 74,
  op74 = 75,
  op75 = 76,
  op76 = 77,
  op77 = 78,
  op78 = 79,
  op79 = 80,
  op80 = 81,
  op81 = 82,
  op82 = 83,
  op83 = 84,
  op84 = 85,
  op85 = 86,
  op86 = 87,
  op87 = 88,
  op88 = 89,
  op89 = 90,
  op90 = 91,
  op91 = 92,
  op92 = 93,
  op93 = 94,
  op94 = 95,
  op95 = 96,
  op96 = 97,
  op97 = 98,
  op98 = 99,
  op99 = 100,
  op100 = 101,
  op101 = 102,
  op102 = 103,
  op103 = 104,
  op104 = 105,
  op105 = 106,
  op106 = 107,
  op107 = 108,
  op108 = 109,
  op109 = 110,
  op110 = 111,
  op111 = 112,
  op112 = 113,
  op113 = 114,
  op114 = 115,
  op115 = 116,
  op116 = 117,
  op117 = 118,
  op118 = 119,
  op119 = 120,
  op120 = 121,
  op121 = 122,
  op122 = 123,
  op123 = 124,
  op124 = 125,
  op125 = 126,
  op126 = 127,
  op127 = 128,
  op128 = 129,
  op129 = 130,
  op130 = 131,
  op131 = 132,
  op132 = 133,
  op133 = 134,
  op134 = 135,
  op135 = 136,
  op136 = 137,
  op137 = 138,
  op138 = 139,
  op139 = 140,
  op140 = 141,
  op141 = 142,
  op142 = 143,
  op143 = 144,
  op144 = 145,
  op145 = 146,
  op146 = 147,
  op147 = 148,
  op148 = 149,
  op149 = 150,
  op150 = 151,
  op151 = 152,
  op152 = 153,
  op153 = 154,
  op154 = 155,
  op155 = 156,
  op156 = 157,
  op157 = 158,
  op158 = 159,
  op159 = 160,
  op160 = 161,
  op161 = 162,
  op162 = 163,
  op163 = 164,
  op164 = 165,
  op165 = 166,
  op166 = 167,
  op167 = 168,
  op168 = 169,
  op169 = 170,
  op170 = 171,
  op171 = 172,
  op172 = 173,
  op173 = 174,
  op174 = 175,
  op175 = 176,
  op176 = 177,
  op177 = 178,
  op178 = 179,
  op179 = 180,
  op180 = 181,
  op181 = 182,
  op182 = 183,
  op183 = 184,
  op184 = 185,
  op185 = 186,
  op186 = 187,
  op187 = 188,
  op188 = 189,
  op189 = 190,
  op190 = 191,
  op191 = 192,
  op192 = 193,
  op193 = 194,
  op194 = 195,
  op195 = 196,
  op196 = 197,
  op197 = 198,
  op198 = 199,
  op199 = 200,
  op200 = 201,
  op201 = 202,
  op202 = 203,
  op203 = 204,
  op204 = 205,
  op205 = 206,
  op206 = 207,
  op207 = 208,
  op208 = 209,
  op209 = 210,
  op210 = 211,
  op211 = 212,
  op212 = 213,
  op213 = 214,
  op214 = 215,
  op215 = 216,
  op216 = 217,
  op217 = 218,
  op218 = 219,
  op219 = 220,
  op220 = 221,
  op221 = 222,
  op222 = 223,
  op223 = 224,
  op224 = 225,
  op225 = 226,
  op226 = 227,
  op227 = 228,
  op228 = 229,
  op229 = 230,
  op230 = 231,
  op231 = 232,
  op232 = 233,
  op233 = 234,
  op234 = 235,
  op235 = 236,
  op236 = 237,
  op237 = 238,
  op238 = 239,
  op239 = 240,
  op240 = 241,
  op241 = 242,
  op242 = 243,
  op243 = 244,
  op244 = 245,
  op245 = 246,
  op246 = 247,
  op247 = 248,
  op248 = 249,
  op249 = 250,
  op250 = 251,
  op251 = 252,
  op252 = 253,
  op253 = 254,
  op254 = 255,
  op255 = 256,
  op256 = 257,
  op257 = 258,
  op258 = 259,
  op259 = 260,
  op260 = 261,
  op261 = 262,
  op262 = 263,
  op263 = 264,
  op264 = 265,
  op265 = 266,
  op266 = 267,
  op267 = 268,
  op268 = 269,
  op269 = 270,
  op270 = 271,
  op271 = 272,
  op272 = 273,
  op273 = 274,
  op274 = 275,
  op275 = 276,
  op276 = 277,
  op277 = 278,
  op278 = 279,
  op279 = 280,
  op280 = 281,
  op281 = 282,
  op282 = 283,
  op283 = 284,
  op284 = 285,
  op285 = 286,
  op286 = 287,
  op287 = 288,
  op288 = 289,
  op289 = 290,
  op290 = 291,
  op291 = 292,
  op292 = 293,
  op293 = 294,
  op294 = 295,
  op295 = 296,
  op296 = 297,
  op297 = 298,
  op298 = 299,
  op299 = 300,
  op300 = 301,
  op301 = 302,
  op302 = 303,
  op303 = 304,
  op304 = 305,
  op305 = 306,
  op306 = 307,
  op307 = 308,
  op308 = 309,
  op309 = 310,
  op310 = 311,
  op311 = 312,
  op312 = 313,
  op313 = 314,
  op314 = 315,
  op315 = 316,
  op316 = 317,
  op317 = 318,
  op318 = 319,
  op319 = 320,
  op320 = 321,
  op321 = 322,
  op322 = 323,
  op323 = 324,
  op324 = 325,
  op325 = 326,
  op326 = 327,
  op327 = 328,
  op328 = 329,
  op329 = 330,
  op330 = 331,
  op331 = 332,
  op332 = 333,
  op333 = 334,
  op334 = 335,
  op335 = 336,
  op336 = 337,
  op337 = 338,
  op338 = 339,
  op339 = 340,
  op340 = 341,
  op341 = 342,
  op342 = 343,
  op343 = 344,
  op344 = 345,
  op345 = 346,
  op346 = 347,
  op347 = 348,
  op348 = 349,
  op349 = 350,
  op350 = 351,
  op351 = 352,
  op352 = 353,
  op353 = 354,
  op354 = 355,
  op355 = 356,
  op356 = 357,
  op357 = 358,
  op358 = 359,
  op359 = 360,
  s0 = 400,
  s1 = 401,
  s2 = 402,
  s3 = 403,
  s4 = 404,
  s5 = 405,
  s6 = 406,
  s7 = 407,
  s8 = 408
};
