view tests/agcl/contrib/good/plm.c @ 17:12171da8943f

Don't refer to CVS.
author David A. Holland
date Tue, 31 May 2022 01:56:37 -0400
parents 13d2b8934445
children
line wrap: on
line source

/*
 * YACC grammar of PL/M
 */
#include <stdio.h>
#include <stdlib.h>
#include "plm-manifest.h"
#include "scope.h"

void yyerror ();

/* Cause the `yydebug' variable to be defined.  */
#define YYDEBUG (1)



/*
 * AnaGram, A System for Syntax Directed Programming
 * File generated by: ...
 *
 * AnaGram Parsing Engine
 * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
 *
 * This software is provided 'as-is', without any express or implied
 * warranty.  In no event will the authors be held liable for any damages
 * arising from the use of this software.
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 *
 * 1. The origin of this software must not be misrepresented; you must not
 *    claim that you wrote the original software. If you use this software
 *    in a product, an acknowledgment in the product documentation would be
 *    appreciated but is not required.
 * 2. Altered source versions must be plainly marked as such, and must not be
 *    misrepresented as being the original software.
 * 3. This notice may not be removed or altered from any source distribution.
 */

#ifndef PLM_H
#include "plm.h"
#endif

#ifndef PLM_H
#error Mismatched header file
#endif

#include <ctype.h>
#include <stdio.h>

#define RULE_CONTEXT (&((PCB).cs[(PCB).ssx]))
#define ERROR_CONTEXT ((PCB).cs[(PCB).error_frame_ssx])
#define CONTEXT ((PCB).cs[(PCB).ssx])



plm_pcb_type plm_pcb;
#define PCB plm_pcb

/*  Line -, plm.syn */
void
yyerror(char * s)
{
  fprintf (stderr, "error at line %d: %s\n", lineno, s);
}

main()
{
  init_scope();
  return yyparse();
}


#ifndef CONVERT_CASE

static const char agCaseTable[31] = {
  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,    0,
  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
};

static int agConvertCase(int c) {
  if (c >= 'a' && c <= 'z') return c ^= 0x20;
  if (c >= 0xe0 && c < 0xff) c ^= agCaseTable[c-0xe0];
  return c;
}

#define CONVERT_CASE(c) agConvertCase(c)

#endif


#ifndef TAB_SPACING
#define TAB_SPACING 8
#endif

static void ag_rp_1(void) {
/* Line -, plm.syn */
                                 push_scope();
                                
}

static void ag_rp_2(void) {
/* Line -, plm.syn */
                                  push_scope();
                                 
}

static void ag_rp_3(void) {
/* Line -, plm.syn */
                                 pop_scope();
                                
}

static void ag_rp_4(void) {
/* Line -, plm.syn */
                                                push_scope();
                                               
}

static void ag_rp_5(void) {
/* Line -, plm.syn */
                                          enter_literal ($1, $3);
                                        
}

static void ag_rp_6(void) {
/* Line -, plm.syn */
                 push_scope();
                
}

static void ag_rp_7(void) {
/* Line -, plm.syn */
                 push_scope();
                
}


#define READ_COUNTS 
#define WRITE_COUNTS 
#undef V
#define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i]))
#undef VS
#define VS(i) (PCB).vs[(PCB).ssx + i]

#ifndef GET_CONTEXT
#define GET_CONTEXT CONTEXT = (PCB).input_context
#endif

typedef enum {
  ag_action_1,
  ag_action_2,
  ag_action_3,
  ag_action_4,
  ag_action_5,
  ag_action_6,
  ag_action_7,
  ag_action_8,
  ag_action_9,
  ag_action_10,
  ag_action_11,
  ag_action_12
} ag_parser_action;


#ifndef NULL_VALUE_INITIALIZER
#define NULL_VALUE_INITIALIZER = 0
#endif

static int const ag_null_value NULL_VALUE_INITIALIZER;

static const unsigned char ag_rpx[] = {
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  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,
    0,  0,  2,  0,  0,  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,  4,  0,  0,  0,  0,  0,  5,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  7
};

static const unsigned char ag_key_itt[] = {
 0
};

static const unsigned short ag_key_pt[] = {
0
};

static const unsigned char ag_key_ch[] = {
    0, 47,255, 42,255, 61, 62,255, 68, 78, 84,255, 84,255, 65, 89,255, 76,
   83, 85,255, 65, 72,255, 65, 69, 73, 79, 87,255, 65, 68,255, 76, 78, 79,
   88,255, 84,255, 79,255, 65, 87,255, 71, 82,255, 69,255, 73, 84,255, 70,
   78,255, 65, 73, 79,255, 73, 79,255, 70, 82,255, 76, 79, 82, 85,255, 65,
   69, 84,255, 69,255, 69, 72, 84,255, 72, 79,255, 72, 79,255, 47, 58, 60,
   62, 65, 66, 67, 68, 69, 71, 72, 73, 76, 77, 78, 79, 80, 81, 82, 83, 84,
   87, 88,255, 61, 62,255, 47, 58, 60, 62,255, 69,255, 76, 85,255, 65, 72,
  255, 73, 79, 87,255, 65, 68,255, 78,255, 84,255, 79,255, 65, 87,255, 70,
   78,255, 79, 82,255, 65, 84,255, 69,255, 69, 72,255, 47, 65, 66, 67, 68,
   69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 68,255, 47, 67, 87,255,
   76, 85,255, 65, 72,255, 69, 73, 79, 87,255, 65, 68,255, 78,255, 84,255,
   79,255, 65, 87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 65, 66,
   67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 76, 85,255, 65,
   72,255, 69, 73, 79, 87,255, 65, 68,255, 76, 78, 79,255, 84,255, 79,255,
   65, 87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 47, 65, 66, 67,
   68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 73, 84,255, 78,255,
   47, 65, 68, 69, 73, 80, 82,255, 69, 72,255, 47, 65, 66, 67, 68, 72, 73,
   76, 78, 79, 80, 81, 82, 83, 87,255, 47, 84,255, 67, 87,255, 69, 72,255,
   65, 66, 67, 68, 72, 73, 76, 78, 79, 80, 81, 82, 83, 87,255, 84,255, 76,
   85,255, 65, 72,255, 73, 79, 87,255, 65, 68,255, 78,255, 84,255, 79,255,
   65, 87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 65, 66, 67, 68,
   69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 76, 85,255, 65, 72,255,
   73, 79, 87,255, 84,255, 79,255, 65, 87,255, 70, 78,255, 65, 84,255, 69,
  255, 69, 72,255, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83,
   87,255, 76, 85,255, 65, 72,255, 73, 79, 87,255, 65, 68,255, 78,255, 84,
  255, 79,255, 65, 87,255, 70, 78,255, 79, 82,255, 65, 84,255, 69,255, 69,
   72,255, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255,
   69, 72, 84,255, 47, 65, 66, 67, 68, 72, 73, 76, 78, 79, 80, 81, 82, 83,
   87,255, 69, 72, 84,255, 65, 66, 67, 68, 72, 73, 76, 79, 80, 81, 82, 83,
   87,255, 65, 89,255, 65, 73, 79,255, 69, 72, 84,255, 65, 66, 67, 68, 72,
   73, 76, 79, 80, 81, 82, 83, 87,255, 61, 62,255, 73, 79,255, 72, 79,255,
   47, 60, 62, 77, 79, 80, 84, 88,255, 61, 62,255, 73, 79,255, 72, 79,255,
   47, 60, 62, 77, 80, 84, 88,255, 69, 72,255, 47, 65, 66, 67, 68, 72, 73,
   76, 79, 80, 81, 82, 83, 87,255, 39,255, 61, 62,255, 73, 79,255, 72, 79,
  255, 47, 60, 62, 65, 66, 77, 79, 80, 84, 88,255, 69, 72,255, 65, 66, 67,
   68, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 61, 62,255, 73, 79,255, 72,
   79,255, 60, 62, 65, 66, 77, 79, 80, 84, 88,255, 61, 62,255, 72, 79,255,
   60, 62, 65, 66, 77, 79, 80, 84, 88,255, 61, 62,255, 73, 79,255, 72, 79,
  255, 58, 60, 62, 65, 66, 77, 79, 80, 84, 88,255, 72, 79,255, 65, 66, 79,
   84, 88,255, 72, 79,255, 66, 79, 84, 88,255, 84,255, 69,255, 76, 85,255,
   65, 72,255, 73, 79, 87,255, 65, 68,255, 76, 78,255, 84,255, 79,255, 65,
   87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 65, 66, 67, 68, 69,
   71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 71, 82,255, 69,255, 84,255,
   78,255, 79, 85,255, 65, 69,255, 69,255, 69, 72,255, 47, 65, 66, 67, 68,
   69, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 71, 82,255, 69,255, 84,255,
   78,255, 79, 85,255, 65, 69,255, 69,255, 69, 72,255, 65, 66, 67, 68, 69,
   72, 73, 76, 79, 80, 81, 82, 83, 87,255, 47, 69, 80,255, 69, 80,255, 66,
  255, 66,255, 61, 62,255, 73, 79,255, 76, 85,255, 72, 79,255, 47, 60, 62,
   77, 79, 80, 84, 88,255, 61, 62,255, 73, 79,255, 76, 85,255, 72, 79,255,
   47, 60, 62, 77, 80, 84, 88,255, 47, 80,255, 76, 85,255, 65, 72,255, 73,
   79, 87,255, 84,255, 79,255, 65, 87,255, 70, 78,255, 65, 84,255, 69,255,
   69, 72,255, 47, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83,
   87,255, 65, 68, 69, 73, 80,255, 47, 68, 69, 73, 80, 82,255, 61, 62,255,
   68, 78, 84,255, 84,255, 89,255, 65, 87,255, 71, 82,255, 69,255, 73, 84,
  255, 78,255, 65, 79,255, 73, 79,255, 70, 82,255, 76, 79, 85,255, 65, 69,
  255, 69,255, 69, 72, 84,255, 72, 79,255, 47, 58, 60, 62, 65, 66, 67, 68,
   69, 72, 73, 76, 77, 79, 80, 81, 82, 83, 84, 87, 88,255, 65, 79,255, 69,
   72, 84,255, 65, 66, 67, 68, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 72,
   79,255, 65, 66, 77, 79, 80, 84, 88,255, 69, 73, 80, 82,255, 83,255, 68,
   73,255, 65, 68, 73,255, 68,255, 47, 69, 73, 80, 82,255
};

static const unsigned char ag_key_act[] = {
  0,3,4,3,4,0,0,4,3,3,0,4,3,4,3,1,4,3,3,3,4,2,3,4,3,3,3,0,3,4,3,0,4,3,2,
  3,3,4,3,4,1,4,3,3,4,3,3,4,2,4,3,2,4,0,2,4,3,3,3,4,3,3,4,3,0,4,3,3,3,3,
  4,3,3,3,4,2,4,3,3,3,4,3,0,4,3,3,4,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,
  2,2,2,2,3,4,0,0,4,3,3,2,3,4,3,4,3,3,4,2,3,4,3,0,3,4,3,0,4,2,4,3,4,1,4,
  3,3,4,0,3,4,3,3,4,3,3,4,2,4,3,3,4,3,3,3,2,2,2,2,2,2,3,3,2,3,2,2,3,4,3,
  4,3,3,3,4,3,3,4,2,3,4,3,3,0,3,4,3,0,4,2,4,3,4,1,4,3,3,4,0,3,4,3,3,4,2,
  4,3,3,4,3,3,2,2,2,2,2,2,3,3,3,3,2,2,3,4,3,3,4,2,3,4,3,3,0,3,4,3,0,4,3,
  2,3,4,3,4,1,4,3,3,4,0,3,4,3,3,4,2,4,3,3,4,3,3,3,2,2,2,2,2,2,3,3,3,3,2,
  2,3,4,3,3,4,2,4,3,3,3,3,2,3,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,4,
  3,3,4,3,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,4,3,4,3,3,4,2,3,4,3,0,3,
  4,3,0,4,2,4,3,4,1,4,3,3,4,0,3,4,3,3,4,2,4,3,3,4,3,3,2,2,2,2,2,2,3,3,3,
  3,2,2,3,4,3,3,4,2,3,4,3,0,3,4,3,4,1,4,3,3,4,0,3,4,3,3,4,2,4,3,3,4,3,3,
  2,2,3,2,2,2,3,3,3,3,2,2,3,4,3,3,4,2,3,4,3,0,3,4,3,0,4,2,4,3,4,1,4,3,3,
  4,0,3,4,3,3,4,3,3,4,2,4,3,3,4,3,3,2,2,2,2,2,2,3,3,2,3,2,2,3,4,3,3,3,4,
  3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,4,3,
  3,4,3,3,3,4,3,3,3,4,3,2,3,3,3,3,2,3,3,3,3,2,3,4,0,0,4,3,3,4,3,0,4,3,2,
  3,2,3,3,2,3,4,0,0,4,3,3,4,3,0,4,3,2,3,2,3,2,3,4,3,3,4,3,3,3,3,3,3,3,3,
  3,3,3,3,2,3,4,3,4,0,0,4,3,3,4,3,0,4,3,2,3,3,3,2,3,3,2,3,4,3,3,4,3,3,3,
  3,3,3,3,3,3,3,3,2,3,4,0,0,4,3,3,4,3,0,4,2,3,3,3,2,3,3,2,3,4,0,0,4,3,0,
  4,2,3,3,3,3,3,3,2,3,4,0,0,4,3,3,4,3,0,4,3,2,3,3,3,2,3,3,2,3,4,3,0,4,3,
  3,3,2,3,4,3,0,4,3,3,2,3,4,3,4,3,4,3,3,4,2,3,4,3,0,3,4,3,0,4,3,2,4,3,4,
  1,4,3,3,4,0,3,4,3,3,4,2,4,3,3,4,3,3,2,2,2,2,2,2,3,3,3,3,2,2,3,4,3,3,4,
  2,4,2,4,2,4,3,3,4,3,3,4,2,4,3,3,4,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,4,3,3,
  4,2,4,2,4,2,4,3,3,4,3,3,4,2,4,3,3,4,3,3,3,3,3,3,2,3,3,2,3,2,2,3,4,3,3,
  3,4,3,3,4,3,4,3,4,0,0,4,3,3,4,3,3,4,3,0,4,3,2,3,2,3,2,2,3,4,0,0,4,3,3,
  4,3,3,4,3,0,4,3,2,3,2,2,2,3,4,3,3,4,3,3,4,2,3,4,3,0,3,4,3,4,1,4,3,3,4,
  0,3,4,3,3,4,2,4,3,3,4,3,3,3,2,2,3,2,2,2,3,3,3,3,2,2,3,4,3,3,3,3,3,4,3,
  3,3,3,3,3,4,0,0,4,3,3,0,4,3,4,1,4,3,3,4,3,3,4,2,4,3,2,4,2,4,3,3,4,3,3,
  4,3,0,4,3,3,3,4,3,3,4,2,4,3,3,3,4,3,0,4,3,3,2,3,2,2,3,2,3,3,2,2,2,2,2,
  3,2,2,2,3,3,4,3,3,4,3,3,3,4,3,3,3,3,3,3,2,3,3,3,3,2,3,4,3,0,4,3,3,3,3,
  3,2,3,4,3,3,3,3,4,3,4,3,3,4,3,3,3,4,3,4,3,3,3,3,3,4
};

static const unsigned short ag_key_parm[] = {
    0, 63,  0, 67,  0,324,326,  0,268,263,312,  0,269,  0,329,282,  0,283,
  293,284,  0,  0,270,  0,289,291,292,294,271,  0,297,298,  0,286,  0,285,
  316,  0,300,  0,302,  0,303,272,  0,273,309,  0,  0,  0,308,  0,  0,306,
    0,  0,299,310,274,  0,260,314,  0,275,318,  0,261,276,321,317,  0,278,
  320,328,  0,  0,  0,279,280,327,  0,305,301,  0,295,281,  0, 63,296,  0,
  322,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,313,  0,  0,277,  0,  0,  0,
    0,319,  0,324,326,  0, 63,296,  0,322,  0,285,  0,283,284,  0,  0,270,
    0,292,294,271,  0,297,298,  0,  0,  0,300,  0,302,  0,303,272,  0,306,
  273,  0,276,321,  0,278,328,  0,  0,  0,279,280,  0, 63,268,269,  0,  0,
    0,  0,  0,  0,274,275,  0,277,  0,  0,281,  0,294,  0, 63,293,295,  0,
  283,284,  0,  0,270,  0,291,292,294,271,  0,297,298,  0,  0,  0,300,  0,
  302,  0,303,272,  0,306,273,  0,278,328,  0,  0,  0,279,280,  0,268,269,
    0,  0,  0,  0,  0,  0,274,275,276,277,  0,  0,281,  0,283,284,  0,  0,
  270,  0,291,292,294,271,  0,297,298,  0,286,  0,285,  0,300,  0,302,  0,
  303,272,  0,306,273,  0,278,328,  0,  0,  0,279,280,  0, 63,268,269,  0,
    0,  0,  0,  0,  0,274,275,276,277,  0,  0,281,  0,308,309,  0,  0,  0,
   63,312,289,316,  0,317,320,  0,279,280,  0, 63,268,269,270,271,272,273,
  274,313,275,276,277,278,  0,281,  0, 63,301,  0,293,295,  0,279,280,  0,
  268,269,270,271,272,273,274,313,275,276,277,278,  0,281,  0,301,  0,283,
  284,  0,  0,270,  0,292,294,271,  0,297,298,  0,  0,  0,300,  0,302,  0,
  303,272,  0,306,273,  0,278,328,  0,  0,  0,279,280,  0,268,269,  0,  0,
    0,  0,  0,  0,274,275,276,277,  0,  0,281,  0,283,284,  0,  0,270,  0,
  292,294,271,  0,300,  0,302,  0,303,272,  0,306,273,  0,278,328,  0,  0,
    0,279,280,  0,268,269,  0,  0,297,  0,  0,  0,274,275,276,277,  0,  0,
  281,  0,283,284,  0,  0,270,  0,292,294,271,  0,297,298,  0,  0,  0,300,
    0,302,  0,303,272,  0,306,273,  0,276,321,  0,278,328,  0,  0,  0,279,
  280,  0,268,269,  0,  0,  0,  0,  0,  0,274,275,  0,277,  0,  0,281,  0,
  279,280,327,  0, 63,268,269,270,271,272,273,274,313,275,276,277,278,  0,
  281,  0,279,280,327,  0,268,269,270,271,272,273,274,275,276,277,278,  0,
  281,  0,329,269,  0,299,310,274,  0,279,280,327,  0,268,  0,270,271,272,
  273,  0,275,276,277,278,  0,281,  0,324,326,  0,260,314,  0,305,301,  0,
   63,  0,322,  0,318,261,  0,319,  0,324,326,  0,260,314,  0,305,301,  0,
   63,  0,322,  0,261,  0,319,  0,279,280,  0, 63,268,269,270,271,272,273,
  274,275,276,277,278,  0,281,  0,245,  0,324,326,  0,260,314,  0,305,301,
    0, 63,  0,322,263,282,  0,318,261,  0,319,  0,279,280,  0,268,269,270,
  271,272,273,274,275,276,277,278,  0,281,  0,324,326,  0,260,314,  0,305,
  301,  0,  0,322,263,282,  0,318,261,  0,319,  0,324,326,  0,305,301,  0,
    0,322,263,282,260,318,261,  0,319,  0,324,326,  0,260,314,  0,305,301,
    0,296,  0,322,263,282,  0,318,261,  0,319,  0,305,301,  0,263,282,318,
    0,319,  0,305,301,  0,282,318,  0,319,  0,305,  0,286,  0,283,284,  0,
    0,270,  0,292,294,271,  0,297,298,  0,286,  0,  0,300,  0,302,  0,303,
  272,  0,306,273,  0,278,328,  0,  0,  0,279,280,  0,268,269,  0,  0,  0,
    0,  0,  0,274,275,276,277,  0,  0,281,  0,273,309,  0,  0,  0,  0,  0,
    0,  0,276,317,  0,278,320,  0,  0,  0,279,280,  0, 63,268,269,270,271,
  316,272,  0,274,275,  0,277,  0,  0,281,  0,273,309,  0,  0,  0,  0,  0,
    0,  0,276,317,  0,278,320,  0,  0,  0,279,280,  0,268,269,270,271,316,
  272,  0,274,275,  0,277,  0,  0,281,  0, 63,316,317,  0,316,317,  0,329,
    0,282,  0,324,326,  0,260,314,  0,261,317,  0,305,301,  0, 63,  0,322,
    0,318,  0,  0,319,  0,324,326,  0,260,314,  0,261,317,  0,305,301,  0,
   63,  0,322,  0,  0,  0,319,  0, 63,317,  0,283,284,  0,  0,270,  0,292,
  294,271,  0,300,  0,302,  0,303,272,  0,306,273,  0,278,328,  0,  0,  0,
  279,280,  0, 63,268,269,  0,  0,297,  0,  0,  0,274,275,276,277,  0,  0,
  281,  0,312,289,316,308,317,  0, 63,289,316,309,317,320,  0,324,326,  0,
  268,263,312,  0,269,  0,282,  0,289,271,  0,273,309,  0,  0,  0,308,  0,
    0,  0,  0,299,274,  0,260,314,  0,275,318,  0,261,276,317,  0,278,320,
    0,  0,  0,279,280,327,  0,305,301,  0, 63,296,  0,322,  0,  0,270,  0,
  316,272,  0,  0,  0,  0,  0,277,  0,  0,  0,281,319,  0,299,274,  0,279,
  280,327,  0,268,269,270,271,272,273,  0,275,276,277,278,  0,281,  0,305,
  301,  0,263,282,260,318,261,  0,319,  0,316,309,317,320,  0,327,  0,289,
  308,  0,312,289,308,  0,289,  0, 63,316,309,317,320,  0
};

static const unsigned short ag_key_jmp[] = {
    0,  0,  0,  2,  0,  0,  0,  0, 10, 16,  0,  0, 22,  0, 18, 12,  0, 24,
   26, 28,  0, 17, 40,  0, 46, 49, 55,  0, 61,  0, 68,  0,  0, 65, 30, 72,
   74,  0, 81,  0, 38,  0, 83, 86,  0, 95, 98,  0, 45,  0, 90, 48,  0,  0,
   50,  0,102,106,114,  0,120,124,  0,129,  0,  0,134,137,143,151,  0,161,
  163,170,  0, 71,  0,174,181,188,  0,196,  0,  0,199,203,  0,  4,  6,  5,
    8,  8, 14, 21, 24, 33, 40, 42, 53, 56, 60,126, 63, 66,156, 75, 77, 81,
   84,206,  0,  0,  0,  0,209,211,111,213,  0,215,  0,231,233,  0,121,245,
    0,251,  0,257,  0,261,  0,  0,131,  0,265,  0,136,  0,267,270,  0,  0,
  274,  0,293,299,  0,312,314,  0,149,  0,318,325,  0,218,220,227,124,127,
  134,138,140,143,280,287,146,307,152,154,332,  0,336,  0,338,340,344,  0,
  360,362,  0,180,374,  0,380,386,  0,392,  0,396,  0,  0,191,  0,400,  0,
  196,  0,402,405,  0,  0,409,  0,440,442,  0,206,  0,446,453,  0,349,356,
  183,186,194,198,200,203,415,422,428,435,209,211,460,  0,477,479,  0,230,
  491,  0,497,503,  0,509,  0,516,  0,  0,513,241,520,  0,522,  0,248,  0,
  524,527,  0,  0,531,  0,562,564,  0,258,  0,568,575,  0,464,466,473,233,
  236,244,250,252,255,537,544,550,557,261,263,582,  0,602,607,  0,283,  0,
  586,588,590,594,286,613,619,  0,697,704,  0,628,630,637,641,648,653,658,
  665,672,675,681,688,693,296,711,  0,715,717,  0,719,723,  0,795,802,  0,
  728,735,739,746,751,756,763,770,773,779,786,791,321,809,  0,813,  0,826,
  828,  0,341,840,  0,846,  0,852,  0,856,  0,  0,351,  0,860,  0,356,  0,
  862,865,  0,  0,869,  0,900,902,  0,366,  0,906,913,  0,815,822,344,347,
  354,358,360,363,875,882,888,895,369,371,920,  0,935,937,  0,390,949,  0,
  955,  0,961,  0,971,  0,400,  0,973,976,  0,  0,980,  0,1011,1013,  0,
  410,  0,1017,1024,  0,924,931,393,396,965,402,404,407,986,993,999,1006,
  413,415,1031,  0,1046,1048,  0,434,1060,  0,1066,  0,1072,  0,1076,  0,
    0,444,  0,1080,  0,449,  0,1082,1085,  0,  0,1089,  0,1108,1114,  0,
  1127,1129,  0,462,  0,1133,1140,  0,1035,1042,437,440,447,451,453,456,
  1095,1102,459,1122,465,467,1147,  0,1220,1227,1234,  0,1151,1153,1160,
  1164,1171,1176,1181,1188,1195,1198,1204,1211,1216,486,1242,  0,1310,1317,
  1324,  0,1246,1253,1257,1264,1269,1274,1281,1288,1294,1301,1306,506,1332,
    0,1343,1347,  0,1374,1378,1386,  0,1414,1421,1428,  0,1336,524,1350,
  1357,1362,1367,527,1392,1398,1405,1410,531,1436,  0,  0,  0,  0,1444,1448,
    0,1456,  0,  0,1440,549,1442,552,1450,1452,555,1459,  0,  0,  0,  0,
  1466,1470,  0,1476,  0,  0,1462,567,1464,570,1472,573,1479,  0,1548,1555,
    0,1482,1484,1491,1495,1502,1507,1512,1519,1526,1532,1539,1544,584,1562,
    0,1566,  0,  0,  0,  0,1577,1581,  0,1589,  0,  0,1568,604,1570,1572,
  1575,607,1583,1585,610,1592,  0,1659,1666,  0,1595,1602,1606,1613,1618,
  1623,1630,1637,1643,1650,1655,624,1673,  0,  0,  0,  0,1684,1688,  0,1696,
    0,  0,641,1677,1679,1682,644,1690,1692,647,1699,  0,  0,  0,  0,1720,
    0,  0,660,1702,1704,1707,1709,1714,1716,663,1723,  0,  0,  0,  0,1735,
  1739,  0,1747,  0,  0,1726,676,1728,1730,1733,679,1741,1743,682,1750,  0,
  1760,  0,  0,1753,1756,1758,696,1763,  0,1770,  0,  0,1766,1768,705,1773,
    0,1776,  0,1780,  0,1795,1797,  0,717,1809,  0,1815,  0,1821,  0,1828,
    0,  0,1825,727,  0,1832,  0,733,  0,1834,1837,  0,  0,1841,  0,1872,
  1874,  0,743,  0,1878,1885,  0,1784,1791,720,723,730,735,737,740,1847,
  1854,1860,1867,746,748,1892,  0,1934,1937,  0,767,  0,770,  0,772,  0,
  1954,1960,  0,1970,1972,  0,779,  0,1979,1986,  0,1896,1898,1905,1909,
  1916,1921,1929,774,1941,1948,776,1965,782,784,1993,  0,2033,2036,  0,803,
    0,806,  0,808,  0,2053,2059,  0,2069,2071,  0,815,  0,2078,2085,  0,
  1997,2004,2008,2015,2020,2028,810,2040,2047,812,2064,818,820,2092,  0,
  2096,2098,2106,  0,2112,2120,  0,2126,  0,2131,  0,  0,  0,  0,2137,2141,
    0,2145,2148,  0,2153,  0,  0,2133,849,2135,852,2143,855,858,2156,  0,
    0,  0,  0,2163,2167,  0,2169,2172,  0,2177,  0,  0,2159,870,2161,873,
  876,879,2180,  0,2183,2185,  0,2204,2206,  0,893,2218,  0,2224,  0,2230,
    0,2240,  0,903,  0,2242,2245,  0,  0,2249,  0,2280,2282,  0,913,  0,
  2286,2293,  0,2191,2193,2200,896,899,2234,905,907,910,2255,2262,2268,2275,
  916,918,2300,  0,2304,2306,2310,2318,2325,  0,2331,2333,2337,2345,2353,
  2359,  0,  0,  0,  0,2374,2380,  0,  0,2382,  0,958,  0,2391,2394,  0,
  2416,2419,  0,965,  0,2411,968,  0,970,  0,2423,2427,  0,2433,2437,  0,
  2439,  0,  0,2444,2447,2453,  0,2463,2465,  0,988,  0,2472,2479,2486,  0,
  2494,  0,  0,2368,2370,951,2372,954,960,2384,962,2398,2406,973,975,978,
  981,984,2458,991,993,997,2497,2501,  0,2539,2543,  0,2571,2578,2585,  0,
  2504,2511,2515,2522,2527,2532,1022,2549,2555,2562,2567,1025,2593,  0,2613,
    0,  0,2597,2600,2602,2607,2609,1043,2616,  0,2619,2627,2635,2641,  0,
  2650,  0,2659,2663,  0,2670,2672,2676,  0,2683,  0,2687,2689,2697,2705,
  2711,  0
};

static const unsigned short ag_key_index[] = {
    1,  3, 87,  0,  3,  3,114,  0,119,157,174,  1,  0,176,  0,214,266,  1,
  214,  0,214,288,288,288,288,288,288,288,288,288,288,288,288,288,288,  0,
  299,  1,  1,  1,  1,315,  1,318,299,324,  0,  0,  0,  0,339,  1,  0,374,
  374,374,324,  0,  0,  0,418,374,  0,470,  1,  0,374,374,214,490,510,535,
    0,  0,374,324,  0,  0,339,299,324,299,324,558,576,576,587,602,587,587,
  587,613,613,324,627,627,627,650,587,666,627,685,699,685,708,  0,  0,299,
  490,627,374,374,374,713,  0,  0,299,324,715,751,751,418,324,685,  0,685,
  787,823,  0,374,  0,510,  1,  0,  1,  0,838,842,845,  0,  0,  0,  0,324,
  324,847,  0,  0,613,  0,558,861,861,576,882,861,576,882,602,  0,  0,  0,
    0,587,587,587,627,587,587,587,587,587,627,587,587,627,299,324,299,324,
  299,299,324,890,890,890,838,  0,921,324,  0,  0,921,418,  0,685,685,  0,
  823,  0,  0,  1,  0,938,510,288,944,  0,1000,1029,299,324,  0,  0,  0,
    0,861,882,882,  0,  0,1046,650,708,699,  0,  0,418,324,  0,1054,1059,
    1,  1,  1,  0,  0,  0,1061,1064,1068,  0,  0,510,842,613,613,  0,  0,
  838,842,1070,842,1054,  0,510,  0,  0,324,324,324,938,510,  0,1059,  0,
    0,  0,  0,510,324,510
};

static const unsigned char ag_key_ends[] = {
42,0, 47,0, 42,0, 61,0, 61,0, 68,82,69,83,83,0, 68,0, 
83,69,68,0, 69,0, 76,0, 69,0, 83,69,73,78,84,69,82,82,85,80,84,0, 
65,82,73,78,84,0, 84,65,0, 67,76,65,82,69,0, 83,65,66,76,69,0, 
79,82,68,0, 83,69,0, 66,76,69,0, 70,0, 84,69,82,78,65,76,0, 
79,0, 76,84,0, 79,82,68,0, 84,73,65,76,0, 69,82,0, 85,80,84,0, 
66,69,76,0, 84,69,82,65,76,76,89,0, 78,71,73,78,84,0, 78,85,83,0, 
68,0, 79,84,0, 70,83,69,84,0, 85,83,0, 73,78,84,69,82,0, 
79,67,69,68,85,82,69,0, 66,76,73,67,0, 87,79,82,68,0, 76,0, 
78,84,82,65,78,84,0, 85,82,78,0, 76,69,67,84,79,82,0, 
79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 69,78,0, 73,76,69,0, 
82,68,0, 79,82,0, 42,0, 61,0, 61,0, 79,70,0, 42,0, 
68,68,82,69,83,83,0, 89,84,69,0, 76,0, 
83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 
83,65,66,76,69,0, 79,82,68,0, 66,76,69,0, 79,0, 76,84,0, 
79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 
70,70,83,69,84,0, 73,78,84,69,82,0, 79,67,69,68,85,82,69,0, 
87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, 
79,82,84,73,78,84,0, 79,82,68,0, 79,0, 42,0, 65,83,69,0, 
72,73,76,69,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, 
83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 
67,76,65,82,69,0, 83,65,66,76,69,0, 79,82,68,0, 66,76,69,0, 79,0, 
76,84,0, 79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 
70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, 
85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 
42,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, 
83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 
67,76,65,82,69,0, 83,65,66,76,69,0, 79,82,68,0, 83,69,0, 
66,76,69,0, 70,0, 79,0, 76,84,0, 79,82,68,0, 84,69,71,69,82,0, 
79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 
87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, 
79,82,84,73,78,84,0, 79,82,68,0, 42,0, 84,0, 65,84,65,0, 
88,84,69,82,78,65,76,0, 84,73,65,76,0, 69,82,85,80,84,0, 
85,66,76,73,67,0, 69,69,78,84,82,65,78,84,0, 42,0, 
68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 
87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 
79,78,71,73,78,84,0, 79,84,0, 70,70,83,69,84,0, 
79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 
76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 42,0, 79,0, 
65,83,69,0, 72,73,76,69,0, 68,68,82,69,83,83,0, 89,84,69,0, 
72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, 
78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 79,84,0, 
70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 
76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 79,0, 
68,68,82,69,83,83,0, 89,84,69,0, 76,0, 
83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 
83,65,66,76,69,0, 79,82,68,0, 66,76,69,0, 79,0, 76,84,0, 
79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 
70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, 
85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 
68,68,82,69,83,83,0, 89,84,69,0, 76,0, 
83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 
83,65,66,76,69,0, 79,82,68,0, 78,65,66,76,69,0, 79,0, 76,84,0, 
79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 
70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, 
85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 
68,68,82,69,83,83,0, 89,84,69,0, 76,0, 
83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 
83,65,66,76,69,0, 79,82,68,0, 66,76,69,0, 79,0, 76,84,0, 
79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 
70,70,83,69,84,0, 73,78,84,69,82,0, 79,67,69,68,85,82,69,0, 
87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, 
79,82,84,73,78,84,0, 79,82,68,0, 42,0, 68,68,82,69,83,83,0, 
89,84,69,0, 72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, 
78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 79,84,0, 
70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 
76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 
79,82,68,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 
87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 
79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 
87,79,82,68,0, 69,65,76,0, 76,69,67,84,79,82,0, 
79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 79,82,68,0, 
68,68,82,69,83,83,0, 83,69,68,0, 84,69,0, 72,65,82,73,78,84,0, 
87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 66,69,76,0, 
84,69,82,65,76,76,89,0, 78,71,73,78,84,0, 70,70,83,69,84,0, 
79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 
76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 
79,82,68,0, 42,0, 61,0, 78,85,83,0, 68,0, 82,0, 76,85,83,0, 
69,78,0, 79,82,0, 42,0, 61,0, 78,85,83,0, 68,0, 76,85,83,0, 
69,78,0, 79,82,0, 42,0, 68,68,82,69,83,83,0, 89,84,69,0, 
72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, 
78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 
79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 
76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 39,0, 42,0, 
61,0, 78,68,0, 89,0, 78,85,83,0, 68,0, 82,0, 76,85,83,0, 
69,78,0, 79,82,0, 68,68,82,69,83,83,0, 89,84,69,0, 
72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, 
78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 
79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, 
76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 61,0, 
78,68,0, 89,0, 78,85,83,0, 68,0, 82,0, 76,85,83,0, 69,78,0, 
79,82,0, 61,0, 78,68,0, 89,0, 73,78,85,83,0, 82,0, 76,85,83,0, 
69,78,0, 79,82,0, 61,0, 61,0, 78,68,0, 89,0, 78,85,83,0, 68,0, 
82,0, 76,85,83,0, 69,78,0, 79,82,0, 78,68,0, 89,0, 82,0, 
69,78,0, 79,82,0, 89,0, 82,0, 69,78,0, 79,82,0, 72,69,78,0, 
76,83,69,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, 
83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 
83,65,66,76,69,0, 79,82,68,0, 83,69,0, 66,76,69,0, 79,0, 
76,84,0, 79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 
70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, 
85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 
42,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 
87,79,82,68,0, 88,84,69,82,78,65,76,0, 87,79,82,68,0, 69,82,0, 
85,80,84,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 
73,78,84,69,82,0, 66,76,73,67,0, 87,79,82,68,0, 76,0, 
78,84,82,65,78,84,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 
79,82,68,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 
87,79,82,68,0, 88,84,69,82,78,65,76,0, 87,79,82,68,0, 69,82,0, 
85,80,84,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, 
73,78,84,69,82,0, 66,76,73,67,0, 87,79,82,68,0, 76,0, 
78,84,82,65,78,84,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 
79,82,68,0, 42,0, 88,84,69,82,78,65,76,0, 85,66,76,73,67,0, 
88,84,69,82,78,65,76,0, 85,66,76,73,67,0, 65,83,69,68,0, 89,0, 
42,0, 61,0, 78,85,83,0, 68,0, 82,0, 85,83,0, 66,76,73,67,0, 
69,78,0, 79,82,0, 42,0, 61,0, 78,85,83,0, 68,0, 85,83,0, 
66,76,73,67,0, 69,78,0, 79,82,0, 42,0, 85,66,76,73,67,0, 42,0, 
68,68,82,69,83,83,0, 89,84,69,0, 76,0, 
83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, 
83,65,66,76,69,0, 79,82,68,0, 78,65,66,76,69,0, 79,0, 76,84,0, 
79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, 
70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, 
85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 
84,0, 65,84,65,0, 88,84,69,82,78,65,76,0, 78,73,84,73,65,76,0, 
85,66,76,73,67,0, 42,0, 65,84,65,0, 88,84,69,82,78,65,76,0, 
78,84,69,82,85,80,84,0, 85,66,76,73,67,0, 
69,69,78,84,82,65,78,84,0, 42,0, 61,0, 61,0, 68,82,69,83,83,0, 
68,0, 69,0, 72,65,82,73,78,84,0, 84,65,0, 79,82,68,0, 
88,84,69,82,78,65,76,0, 87,79,82,68,0, 84,73,65,76,0, 69,82,0, 
85,80,84,0, 66,69,76,0, 78,71,73,78,84,0, 78,85,83,0, 68,0, 
70,83,69,84,0, 85,83,0, 73,78,84,69,82,0, 66,76,73,67,0, 
87,79,82,68,0, 76,0, 78,84,82,65,78,84,0, 76,69,67,84,79,82,0, 
79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 69,78,0, 79,82,68,0, 
79,82,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, 
87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 66,69,76,0, 
78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, 
87,79,82,68,0, 69,65,76,0, 76,69,67,84,79,82,0, 
79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 79,82,68,0, 78,68,0, 
89,0, 73,78,85,83,0, 82,0, 76,85,83,0, 69,78,0, 79,82,0, 
88,84,69,82,78,65,76,0, 78,84,69,82,85,80,84,0, 85,66,76,73,67,0, 
69,69,78,84,82,65,78,84,0, 84,82,85,67,84,85,82,69,0, 65,84,65,0, 
78,73,84,73,65,76,0, 84,0, 65,84,65,0, 78,73,84,73,65,76,0, 
65,84,65,0, 42,0, 88,84,69,82,78,65,76,0, 78,84,69,82,85,80,84,0, 
85,66,76,73,67,0, 69,69,78,84,82,65,78,84,0, 
};
#define AG_TCV(x) (((int)(x) >= -1 && (int)(x) <= 255) ? ag_tcv[(x) + 1] : 0)

static const unsigned short ag_tcv[] = {
  103,103,249,249,249,103,249,249,249,249, 62, 62, 62, 62, 62,249,249,249,
  249,249,249,249,249,249,249,249,249,103,249,249,249,249,249, 62,249,249,
  249,225,249,249,243,259,258,307,262,290,330,267,315,228,228,250,250,250,
  250,250,250,251,251,304,264,325,265,323,249,311,252,227,252,223,253,252,
  254,233,254,254,254,254,254,254,230,254,230,254,254,254,254,254,254,254,
  254,254,249,249,249,249,255,311,252,227,252,223,253,252,254,233,254,254,
  254,254,254,254,230,254,230,254,254,254,254,254,254,254,254,254,249,249,
  249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
  249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
  249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
  249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
  249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
  249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
  249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
  249,249,249,249,249
};

#ifndef SYNTAX_ERROR
#define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \
  (PCB).error_message, (PCB).line, (PCB).column)
#endif

#ifndef FIRST_LINE
#define FIRST_LINE 1
#endif

#ifndef FIRST_COLUMN
#define FIRST_COLUMN 1
#endif

#ifndef PARSER_STACK_OVERFLOW
#define PARSER_STACK_OVERFLOW {fprintf(stderr, \
   "\nParser stack overflow, line %d, column %d\n",\
   (PCB).line, (PCB).column);}
#endif

#ifndef REDUCTION_TOKEN_ERROR
#define REDUCTION_TOKEN_ERROR {fprintf(stderr, \
    "\nReduction token error, line %d, column %d\n", \
    (PCB).line, (PCB).column);}
#endif


typedef enum
  {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key,
   ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words;

#ifndef GET_INPUT
#define GET_INPUT ((PCB).input_code = getchar())
#endif


static int ag_look_ahead(void) {
  if ((PCB).rx < (PCB).fx) {
    return CONVERT_CASE((PCB).lab[(PCB).rx++]);
  }
  GET_INPUT;
  (PCB).fx++;
  return CONVERT_CASE((PCB).lab[(PCB).rx++] = (PCB).input_code);
}

static void ag_get_key_word(int ag_k) {
  int save_index = (PCB).rx;
  const  unsigned char *sp;
  int ag_ch;
  while (1) {
    switch (ag_key_act[ag_k]) {
    case ag_cf_end_key:
      sp = ag_key_ends + ag_key_jmp[ag_k];
      do {
        if ((ag_ch = *sp++) == 0) {
          int ag_k1 = ag_key_parm[ag_k];
          int ag_k2 = ag_key_pt[ag_k1];
          if (ag_key_itt[ag_k2 + ag_look_ahead()]) goto ag_fail;
          (PCB).rx--;
          (PCB).token_number = (plm_token_type) ag_key_pt[ag_k1 + 1];
          return;
        }
      } while (ag_look_ahead() == ag_ch);
      goto ag_fail;
    case ag_end_key:
      sp = ag_key_ends + ag_key_jmp[ag_k];
      do {
        if ((ag_ch = *sp++) == 0) {
          (PCB).token_number = (plm_token_type) ag_key_parm[ag_k];
          return;
        }
      } while (ag_look_ahead() == ag_ch);
    case ag_no_match_key:
ag_fail:
      (PCB).rx = save_index;
      return;
    case ag_cf_set_key: {
      int ag_k1 = ag_key_parm[ag_k];
      int ag_k2 = ag_key_pt[ag_k1];
      ag_k = ag_key_jmp[ag_k];
      if (ag_key_itt[ag_k2 + (ag_ch = ag_look_ahead())]) break;
      save_index = --(PCB).rx;
      (PCB).token_number = (plm_token_type) ag_key_pt[ag_k1+1];
      break;
    }
    case ag_set_key:
      save_index = (PCB).rx;
      (PCB).token_number = (plm_token_type) ag_key_parm[ag_k];
    case ag_jmp_key:
      ag_k = ag_key_jmp[ag_k];
      ag_ch = ag_look_ahead();
      break;
    case ag_accept_key:
      (PCB).token_number =  (plm_token_type) ag_key_parm[ag_k];
      return;
    case ag_cf_accept_key: {
      int ag_k1 = ag_key_parm[ag_k];
      int ag_k2 = ag_key_pt[ag_k1];
      if (ag_key_itt[ag_k2 + ag_look_ahead()]) (PCB).rx = save_index;
      else {
        (PCB).rx--;
        (PCB).token_number =  (plm_token_type) ag_key_pt[ag_k1+1];
      }
      return;
    }
    default:
      /* not reachable; here to suppress compiler warnings */
      goto ag_fail;
    }
    if (ag_ch <= 255) while (ag_key_ch[ag_k] < ag_ch) ag_k++;
    if (ag_ch > 255 || ag_key_ch[ag_k] != ag_ch) {
      (PCB).rx = save_index;
      return;
    }
  }
}


#ifndef AG_NEWLINE
#define AG_NEWLINE 10
#endif

#ifndef AG_RETURN
#define AG_RETURN 13
#endif

#ifndef AG_FORMFEED
#define AG_FORMFEED 12
#endif

#ifndef AG_TABCHAR
#define AG_TABCHAR 9
#endif

static void ag_track(void) {
  int ag_k = 0;
  while (ag_k < (PCB).rx) {
    int ag_ch = (PCB).lab[ag_k++];
    switch (ag_ch) {
    case AG_NEWLINE:
      (PCB).column = 1, (PCB).line++;
    case AG_RETURN:
    case AG_FORMFEED:
      break;
    case AG_TABCHAR:
      (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING);
      break;
    default:
      (PCB).column++;
    }
  }
  ag_k = 0;
  while ((PCB).rx < (PCB).fx) (PCB).lab[ag_k++] = (PCB).lab[(PCB).rx++];
  (PCB).fx = ag_k;
  (PCB).rx = 0;
}


static void ag_prot(void) {
  int ag_k;
  ag_k = 128 - ++(PCB).btsx;
  if (ag_k <= (PCB).ssx) {
    (PCB).exit_flag = AG_STACK_ERROR_CODE;
    PARSER_STACK_OVERFLOW;
    return;
  }
  (PCB).bts[(PCB).btsx] = (PCB).sn;
  (PCB).bts[ag_k] = (PCB).ssx;
  (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx];
  (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx];
}

static void ag_undo(void) {
  if ((PCB).drt == -1) return;
  while ((PCB).btsx) {
    int ag_k = 128 - (PCB).btsx;
    (PCB).sn = (PCB).bts[(PCB).btsx--];
    (PCB).ssx = (PCB).bts[ag_k];
    (PCB).vs[(PCB).ssx] = (PCB).vs[ag_k];
    (PCB).ss[(PCB).ssx] = (PCB).ss[ag_k];
  }
  (PCB).token_number = (plm_token_type) (PCB).drt;
  (PCB).ssx = (PCB).dssx;
  (PCB).sn = (PCB).dsn;
  (PCB).drt = -1;
}


static const unsigned short ag_tstt[] = {
254,253,252,233,230,227,223,63,62,0,58,256,257,
330,325,323,315,311,307,304,290,267,265,264,262,259,258,255,254,253,252,251,
  250,249,243,233,230,228,227,225,223,67,62,0,65,66,
63,62,0,58,
254,253,252,233,230,227,223,0,57,60,102,193,266,
330,325,323,315,311,307,304,290,267,265,264,262,259,258,255,254,253,252,251,
  250,249,243,233,230,228,227,225,223,62,0,
67,0,
330,326,325,324,323,322,315,307,304,296,290,267,265,264,262,259,258,255,254,
  253,252,251,250,233,230,228,227,225,223,63,62,0,58,256,257,
304,0,154,
285,103,0,20,
328,321,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,
  274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,63,62,0,58,
  256,257,
294,0,15,126,214,
103,63,62,0,58,256,257,
103,0,
295,293,264,254,253,252,233,230,227,223,63,62,0,58,256,257,
264,0,85,
328,306,303,302,300,298,297,294,292,291,284,283,281,280,279,278,277,276,275,
  274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,
  11,13,14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,
  82,85,88,89,90,91,92,93,94,99,100,104,105,113,114,115,116,121,122,123,
  124,125,126,127,128,129,130,132,134,135,137,147,151,152,153,169,172,174,
  207,210,211,214,220,266,
328,306,303,302,300,298,297,294,292,291,286,285,284,283,281,280,279,278,277,
  276,275,274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,103,
  63,62,0,58,256,257,
259,254,253,252,233,230,227,223,63,62,0,58,256,257,
328,306,303,302,300,298,297,294,292,291,284,283,281,280,279,278,277,276,275,
  274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,
  11,13,14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,
  82,85,88,89,90,91,92,93,94,99,100,104,105,113,114,115,116,121,122,123,
  124,125,126,127,128,129,130,132,134,135,137,147,151,152,153,169,172,174,
  207,210,211,214,220,266,
259,254,253,252,233,230,227,223,0,60,69,117,118,119,120,138,139,173,175,219,
  221,266,
328,306,303,302,300,298,297,294,292,291,284,283,281,280,279,278,277,276,275,
  274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,
  11,13,14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,
  82,85,88,89,90,91,92,93,94,99,100,104,105,113,114,115,121,122,123,124,
  125,126,127,128,129,130,132,134,135,137,147,151,152,153,169,172,174,207,
  210,211,214,220,266,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257,
259,0,69,191,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,264,
  262,259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
264,63,62,0,58,256,257,
264,63,62,0,58,256,257,
264,63,62,0,58,256,257,
259,63,62,0,58,256,257,
301,63,62,0,58,256,257,
254,253,252,233,230,227,223,63,62,0,58,256,257,
295,293,264,254,253,252,233,230,227,223,0,9,54,60,85,98,156,157,266,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,264,
  262,259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,
  34,38,39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,85,87,94,99,109,
  131,132,133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,
  218,240,266,287,288,331,
264,0,85,
264,0,85,
264,0,85,
259,0,69,
301,0,53,
254,253,252,233,230,227,223,63,62,0,58,256,257,
290,0,112,
328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274,
  273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,
  14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,
  88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,129,
  130,132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266,
328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274,
  273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,
  14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,
  88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,129,
  130,132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266,
328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274,
  273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,
  14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,
  88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,129,
  130,132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132,
  133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,
  266,287,288,331,
254,253,252,233,230,227,223,0,60,266,
254,253,252,233,230,227,223,0,60,98,266,
265,0,83,
328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273,
  272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,14,15,
  16,18,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,88,89,90,
  91,92,93,94,99,100,104,105,106,107,121,122,123,124,125,126,127,130,132,
  134,137,147,151,152,153,169,172,174,210,211,214,216,220,266,
328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274,
  273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,
  14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,
  88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130,
  132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266,
304,267,259,0,69,87,154,190,192,215,
321,0,43,
264,254,253,252,233,230,227,223,63,62,0,58,256,257,
264,254,253,252,233,230,227,223,0,60,136,266,
328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274,
  273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,
  14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,
  88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,130,132,
  134,135,151,152,153,169,172,174,210,211,214,220,266,
328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274,
  273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,
  14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,
  88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130,
  132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266,
328,306,303,302,300,298,297,294,292,291,284,283,281,280,279,278,277,276,275,
  274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,
  11,13,14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,
  82,85,88,89,90,91,92,93,94,99,100,104,105,113,114,115,121,122,123,124,
  125,126,127,128,129,130,132,134,135,137,147,151,152,153,169,172,174,207,
  210,211,214,220,266,
330,327,313,311,307,281,280,279,278,277,276,275,274,273,272,271,270,269,268,
  267,262,259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,
  257,
327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,0,69,78,79,
  80,197,
329,310,299,0,5,31,33,
254,253,252,233,230,227,223,0,60,140,221,266,
290,264,0,85,112,
328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274,
  273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,
  14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,
  88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130,
  132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132,
  133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,
  266,287,288,331,
267,0,87,
265,0,83,
301,0,53,170,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132,
  133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,
  266,287,288,331,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132,
  133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,
  266,287,288,331,
330,326,325,324,323,322,319,318,315,314,307,305,301,290,267,265,264,262,261,
  260,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232,235,236,
330,326,325,324,323,322,319,315,314,307,305,301,290,267,265,264,262,261,260,
  258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232,235,236,
330,326,325,324,323,322,319,315,314,307,305,301,290,267,265,264,262,261,260,
  258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232,235,
  236,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,325,323,315,311,307,304,290,267,265,264,262,259,258,255,254,253,252,251,
  250,249,245,243,233,230,228,227,225,223,62,0,246,247,248,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,254,253,252,233,
  230,227,223,63,62,0,58,256,257,
281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,254,253,252,233,
  230,227,223,63,62,0,58,256,257,
330,326,325,324,323,322,319,318,315,314,307,305,301,290,282,265,264,263,262,
  261,260,258,63,62,0,58,256,257,
330,326,325,324,323,322,319,318,315,314,307,305,301,290,282,265,264,263,262,
  261,260,258,63,62,0,58,256,257,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132,
  133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,
  266,287,288,331,
281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,254,253,252,233,
  230,227,223,0,1,7,11,16,26,29,34,39,42,45,46,49,50,55,60,69,94,99,132,
  266,
281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,254,253,252,233,
  230,227,223,0,1,7,11,16,26,29,34,39,42,45,46,49,50,55,60,69,94,99,132,
  266,
311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,259,254,253,
  252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42,45,46,49,
  50,55,59,60,61,69,87,94,99,109,132,162,163,164,165,176,177,196,204,205,
  266,287,288,331,
315,314,307,0,36,155,194,195,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,326,325,324,323,322,265,262,261,260,0,22,32,35,37,41,72,73,74,83,184,
  208,209,240,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42,
  45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,162,163,164,165,
  176,177,183,196,204,205,212,213,217,218,240,266,287,288,331,
267,259,0,69,87,190,192,215,
263,0,2,75,
296,0,3,
319,318,0,40,56,181,
264,0,85,
251,250,228,0,101,162,163,164,165,331,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,327,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,
  262,259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
281,280,279,278,277,276,275,274,273,272,271,270,269,268,254,253,252,233,230,
  227,223,0,1,7,11,16,26,29,34,39,42,45,46,49,50,55,60,94,99,132,266,
328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274,
  273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,
  14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,
  88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130,
  132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266,
328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274,
  273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,
  14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,
  88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130,
  132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266,
328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274,
  273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,
  14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,
  88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130,
  132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266,
305,0,52,
264,0,85,
264,259,0,68,69,85,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132,
  133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,
  266,287,288,331,
286,0,17,
328,306,303,302,300,298,297,294,292,286,284,283,281,280,279,278,277,276,275,
  274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,
328,306,303,302,300,298,297,294,292,286,284,283,281,280,279,278,277,276,275,
  274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,
328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273,
  272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,14,15,
  16,18,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,88,89,90,
  91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,130,132,134,151,
  152,153,169,172,174,210,211,214,216,220,266,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,70,73,74,76,77,84,87,94,99,109,131,132,
  133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,
  266,287,288,331,
267,0,87,190,192,
254,253,252,233,230,227,223,0,60,189,266,
267,0,87,190,
320,317,316,309,281,280,279,278,277,276,275,274,273,272,271,270,269,268,264,
  259,63,62,0,58,256,257,
320,317,316,309,281,280,279,278,277,276,275,274,273,272,271,270,269,268,264,
  259,0,69,150,198,
264,0,85,
328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274,
  273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,
  14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,
  88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130,
  132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266,
307,251,250,228,0,59,155,162,163,164,165,196,288,331,
327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,0,1,7,11,16,26,
  29,34,39,42,45,46,49,50,51,55,94,145,186,
254,253,252,233,230,227,223,63,62,0,58,256,257,
254,253,252,233,230,227,223,0,60,86,266,
243,63,62,0,58,256,257,
243,0,61,287,
317,316,290,264,63,62,0,58,256,257,
317,316,290,264,0,21,44,141,
329,0,5,
290,258,0,71,112,
259,254,253,252,233,230,227,223,0,60,69,117,118,119,138,139,173,175,219,221,
  266,
258,0,71,
254,253,252,233,230,227,223,0,60,266,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132,
  133,158,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,
  240,266,287,288,331,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,95,99,109,131,132,
  133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,
  266,287,288,331,
282,264,0,6,96,171,
264,0,85,
264,0,85,
330,262,253,251,250,228,0,237,
253,252,251,250,233,228,227,225,223,0,232,
330,326,325,324,323,322,319,318,315,314,307,305,301,290,267,265,264,262,261,
  260,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232,235,236,
330,326,325,324,323,322,319,318,317,315,314,307,305,301,290,265,264,262,261,
  260,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232,
253,252,251,250,233,228,227,225,223,0,232,
330,326,325,324,323,322,319,315,314,307,305,301,290,267,265,264,262,261,260,
  258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232,235,236,
330,326,325,324,323,322,319,317,315,314,307,305,301,290,265,264,262,261,260,
  258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232,
253,252,251,250,233,228,227,225,223,0,232,
330,326,325,324,323,322,319,315,314,307,305,301,290,267,265,264,262,261,260,
  258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232,235,
  236,
330,326,325,324,323,322,319,317,315,314,307,305,301,290,265,264,262,261,260,
  258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232,
330,325,323,315,311,307,304,290,267,265,264,262,259,258,255,254,253,252,251,
  250,249,245,233,230,228,227,225,223,62,0,246,
243,0,
258,0,71,
251,250,243,228,0,59,61,109,111,162,163,164,165,196,287,288,331,
251,250,243,228,0,59,61,109,111,162,163,164,165,196,287,288,331,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  258,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42,
  45,46,49,50,55,59,60,61,69,73,74,87,94,99,109,132,162,163,164,165,176,
  177,196,204,205,212,213,217,218,240,266,287,288,331,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42,
  45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,162,163,164,165,
  176,177,196,204,205,212,213,217,218,240,266,287,288,331,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259,
  254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42,
  45,46,49,50,55,59,60,61,69,73,74,77,87,94,99,109,132,162,163,164,165,
  176,177,196,204,205,212,213,217,218,240,266,287,288,331,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,162,163,
  164,165,176,177,182,183,196,204,205,212,213,217,218,240,266,287,288,331,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,133,162,
  163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,266,287,
  288,331,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,162,163,
  164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,266,287,288,
  331,
317,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232,
317,258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232,
317,258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232,
317,316,258,63,62,0,58,256,257,
258,0,71,
328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273,
  272,271,270,269,268,264,254,253,252,233,230,227,223,63,62,0,58,256,257,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,70,73,74,76,77,84,87,94,99,109,131,132,
  133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,
  266,287,288,331,
264,0,85,
264,0,85,
328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273,
  272,271,270,269,268,264,254,253,252,233,230,227,223,63,62,0,58,256,257,
328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273,
  272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,14,15,
  16,18,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,88,89,90,
  91,92,93,94,99,100,104,105,108,121,122,123,124,125,126,127,130,132,134,
  137,147,151,152,153,169,172,174,210,211,214,220,266,
290,258,0,71,112,
267,0,87,190,
259,0,69,191,
254,253,252,233,230,227,223,0,60,148,149,266,
320,317,316,309,281,280,279,278,277,276,275,274,273,272,271,270,269,268,264,
  0,1,7,11,16,26,29,34,39,42,45,46,49,50,55,94,201,202,
258,0,71,
258,0,71,
259,63,62,0,58,256,257,
259,0,69,
317,316,312,308,290,289,264,0,4,12,21,28,44,146,161,178,179,203,
267,0,87,
320,317,316,312,309,308,290,289,264,63,62,0,58,256,257,
320,317,316,309,290,289,264,63,62,0,58,256,257,
254,253,252,233,230,227,223,0,60,221,266,
330,327,326,325,324,323,322,320,319,318,317,316,315,314,312,309,308,307,305,
  301,299,296,290,289,282,281,280,279,278,277,276,275,274,273,272,271,270,
  269,268,267,265,264,263,262,261,260,259,258,63,62,0,58,256,257,
327,299,281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,0,31,69,
  79,144,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,97,99,109,131,132,
  133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,
  266,287,288,331,
264,0,85,
251,250,228,0,239,
251,250,228,0,239,
253,252,251,250,233,228,227,225,223,0,232,
330,326,325,324,323,322,319,318,317,315,314,307,305,301,290,265,264,262,261,
  260,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232,
330,326,325,324,323,322,319,317,315,314,307,305,301,290,265,264,262,261,260,
  258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232,
330,326,325,324,323,322,319,317,315,314,307,305,301,290,265,264,262,261,260,
  258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232,
290,258,0,71,112,
290,258,0,71,112,
330,262,261,260,0,35,41,72,73,74,240,
315,314,307,0,36,155,194,195,
319,318,0,40,56,181,
263,0,2,75,
264,0,85,
290,258,0,71,112,
328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273,
  272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,14,15,
  16,18,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,88,89,90,
  91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,130,132,134,151,
  152,153,169,172,174,210,211,214,220,266,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132,
  133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,
  266,287,288,331,
290,258,0,71,112,
320,317,316,309,264,0,21,30,44,47,166,199,200,206,
327,259,254,253,252,233,230,227,223,0,51,60,69,142,185,186,187,188,189,266,
259,63,62,0,58,256,257,
290,264,259,63,62,0,58,256,257,
259,63,62,0,58,256,257,
259,0,69,
259,0,69,
259,0,69,
308,289,0,12,28,161,
312,308,289,0,4,12,28,161,178,179,
289,0,12,110,
254,253,252,233,230,227,223,0,60,266,
251,250,228,0,59,162,163,164,165,196,288,331,
327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,0,1,7,11,16,26,
  29,34,39,42,45,46,49,50,51,55,94,145,186,
317,316,290,264,0,21,44,141,
251,250,228,0,
251,250,228,0,
251,250,243,228,0,59,61,109,162,163,164,165,196,287,288,331,
254,253,252,233,230,227,223,0,60,148,266,
317,316,251,250,228,63,62,0,58,256,257,
317,316,251,250,228,0,101,162,163,164,165,167,168,331,
320,317,316,309,264,63,62,0,58,256,257,
317,316,0,21,44,
320,317,316,309,0,21,30,44,47,166,206,
264,0,85,
327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,0,69,79,144,
254,253,252,233,230,227,223,0,60,143,189,266,
290,258,0,71,112,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132,
  133,159,160,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,
  218,240,266,287,288,331,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132,
  133,159,160,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,
  218,240,266,287,288,331,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132,
  133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,
  266,287,288,331,
317,316,312,308,290,289,264,0,4,12,21,28,44,146,161,178,179,203,
327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,0,1,7,11,16,26,
  29,34,39,42,45,46,49,50,51,55,94,145,186,
290,258,0,71,112,
327,259,254,253,252,233,230,227,223,0,51,60,69,142,185,186,187,189,266,
290,258,0,71,112,
290,258,0,71,112,
258,0,71,
254,253,252,233,230,227,223,0,60,189,266,
327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,0,69,79,144,
330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,
  259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38,
  39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132,
  133,159,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,
  240,266,287,288,331,
327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,0,1,7,11,16,26,
  29,34,39,42,45,46,49,50,51,55,94,145,186,

};


static unsigned const char ag_astt[7723] = {
  8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,8,1,7,1,1,1,9,5,3,1,1,1,1,1,1,1,7,0,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,
  9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,5,3,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,9,9,9,9,9,9,9,9,9,9,9,9,1,1,7,1,1,3,1,7,1,1,3,7,1,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,1,1,7,1,1,3,1,7,1,3,1,5,1,1,
  7,1,1,3,3,7,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,3,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,7,1,1,3,5,5,5,5,5,5,5,5,1,1,
  7,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,3,1,1,
  1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,
  5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,
  5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,
  5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,
  1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,
  1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,
  5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,1,7,1,3,
  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,1,1,7,1,1,
  3,5,1,1,7,1,1,3,5,1,1,7,1,1,3,5,1,1,7,1,1,3,5,1,1,7,1,1,3,5,1,1,7,1,1,3,5,
  5,5,5,5,5,5,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,1,7,1,1,1,2,1,1,1,1,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,1,1,7,1,1,3,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,7,3,1,7,3,1,7,3,1,7,1,1,7,3,5,5,5,5,5,5,5,1,1,7,1,1,3,1,5,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,3,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,
  1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,3,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,7,1,1,1,1,7,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,
  1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,3,1,1,3,3,
  1,3,1,3,1,1,1,1,3,3,1,3,1,1,1,1,5,1,1,3,1,1,1,1,5,1,5,5,5,5,5,5,5,5,1,1,7,
  1,1,3,8,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,1,1,3,3,1,3,3,1,3,1,3,3,1,3,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,
  3,3,3,3,3,3,1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,
  3,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,7,1,1,3,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
  1,7,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,
  1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,7,1,1,7,
  1,1,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,1,1,7,1,
  1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,
  5,5,5,5,5,5,1,1,1,1,3,1,1,1,1,5,5,7,3,3,3,1,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5,
  5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,1,5,5,5,5,5,5,5,5,5,5,5,5,5,1,
  5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,3,1,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,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,8,1,1,1,1,1,1,1,7,1,1,1,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,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,
  1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,3,3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1,
  5,1,1,1,1,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,1,1,
  7,1,1,3,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,
  1,1,1,5,1,1,1,5,1,1,1,5,1,1,1,1,7,3,1,1,1,7,1,1,1,1,1,1,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,1,1,7,1,1,3,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,1,1,7,1,1,3,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,
  3,3,1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,3,1,1,3,3,1,3,1,3,
  1,1,1,1,3,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,
  3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,1,3,1,1,7,3,
  1,7,3,1,1,7,1,1,3,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,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,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,7,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,3,3,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,5,1,3,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,8,8,8,8,8,8,8,8,8,8,8,8,
  8,8,5,1,7,1,1,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,
  3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,1,3,1,1,
  1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,1,1,7,1,1,3,1,1,1,1,1,1,1,7,1,3,1,5,1,1,
  7,1,1,3,1,7,2,1,5,5,5,5,1,1,7,1,1,3,1,1,5,5,7,3,3,3,1,5,1,1,1,7,1,1,1,1,1,
  1,1,1,1,1,7,1,1,3,3,3,3,3,3,3,3,1,1,1,7,3,1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,3,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,3,1,1,3,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,7,1,1,1,1,7,2,1,7,2,1,1,1,9,9,9,5,3,1,
  1,1,1,3,1,1,1,1,7,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,1,1,1,1,3,1,
  1,1,1,5,5,7,3,3,3,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,3,1,
  1,1,1,5,5,7,3,3,1,1,1,1,3,1,1,1,1,5,3,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5,
  5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,1,1,1,1,3,1,1,1,1,5,3,5,5,5,5,5,5,5,
  5,5,5,5,5,5,1,5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,3,1,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,9,9,9,9,9,
  9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,5,3,3,7,1,7,3,1,1,1,1,7,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,7,1,1,3,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,1,1,7,1,1,3,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,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,
  1,1,1,1,1,1,3,3,1,1,1,1,3,1,1,3,3,3,1,1,1,1,1,1,1,1,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,1,1,7,1,1,3,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,1,1,7,1,1,3,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,1,1,7,1,1,3,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,1,1,7,1,1,3,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,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,7,1,1,3,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,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,7,1,1,3,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,1,1,7,1,1,3,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,5,5,1,1,1,1,3,1,1,1,1,5,5,7,3,3,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,
  3,3,3,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,5,5,5,1,1,7,1,1,3,1,7,1,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,1,1,7,1,1,3,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,7,3,1,7,3,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,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,3,1,1,1,3,1,3,1,3,1,1,1,1,3,3,1,3,
  1,1,1,7,3,1,1,5,1,3,1,5,1,3,1,1,1,1,1,1,1,7,1,1,1,1,8,8,8,8,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,5,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,1,7,3,5,1,1,7,1,
  1,3,1,7,1,1,1,1,1,5,1,5,7,1,1,1,1,1,3,3,1,3,3,1,5,1,5,5,5,5,5,5,5,5,5,1,1,
  7,1,1,3,5,5,5,5,5,5,5,1,1,7,1,1,3,1,1,1,1,1,1,1,7,1,3,1,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,5,5,5,5,5,5,5,5,5,
  5,5,1,1,7,1,1,3,8,1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,7,1,1,1,1,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,1,1,7,1,1,3,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,3,1,1,3,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,7,2,1,1,1,7,1,1,1,1,7,1,1,1,1,1,3,1,1,1,1,7,3,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,3,1,1,1,1,5,5,7,3,3,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,1,1,7,3,1,1,1,7,3,1,1,1,
  1,1,5,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,5,1,1,1,1,5,1,1,1,7,3,1,1,7,3,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,
  3,3,1,1,1,3,1,3,3,1,3,1,3,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,
  1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,1,1,1,1,1,8,
  7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,5,1,1,7,1,1,3,5,
  5,5,1,1,7,1,1,3,5,1,1,7,1,1,3,1,7,1,1,7,1,1,7,1,1,1,5,1,1,3,1,1,1,5,1,1,1,
  3,1,3,1,5,3,3,1,1,1,1,1,1,1,7,3,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,7,3,3,3,9,9,9,
  5,9,9,9,5,1,1,1,1,7,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,3,1,5,5,5,5,5,
  1,1,7,1,1,3,5,5,1,1,1,7,3,1,1,1,1,3,3,1,5,5,5,5,5,1,1,7,1,1,3,1,1,7,3,3,1,
  1,1,1,5,3,1,3,3,1,3,1,7,2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,7,1,1,1,1,1,1,1,
  1,1,1,7,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,5,7,1,1,1,1,1,3,3,1,3,3,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,7,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,1,1,7,1,1,1,1,1,1,1,1,1,
  1,1,7,1,1,1,3,3,3,3,1,1,1,1,7,3,1,1,1,7,3,1,1,7,3,1,1,1,1,1,1,1,7,3,3,1,8,
  8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  3,1,1,1,1,3,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,7,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3
};


static const unsigned short ag_pstt[] = {
3,3,3,3,3,3,3,1,2,0,2,2,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,5,4,1,4,5,
1,399,401,399,
6,6,6,6,6,6,6,3,0,7,8,7,6,
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,5,
6,5,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,299,299,
  299,299,299,299,299,299,299,299,299,299,1,2,6,2,2,410,
9,7,10,
11,46,8,12,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,9,2,2,
  448,
13,10,14,156,15,
400,1,2,11,2,2,429,
47,12,
400,400,400,400,400,400,400,400,400,400,1,2,13,2,2,438,
16,14,218,
36,44,37,41,42,64,38,13,39,17,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,
  34,16,6,6,6,6,6,6,6,15,35,35,58,49,35,19,48,43,35,47,65,50,57,46,35,56,
  35,35,35,35,35,35,45,35,35,35,62,61,59,61,61,61,61,61,61,61,35,35,61,61,
  60,20,20,20,20,61,61,61,61,61,61,55,214,61,54,52,61,214,66,61,57,61,63,
  53,66,52,18,61,61,15,61,6,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  1,2,16,2,2,408,
400,400,400,400,400,400,400,400,1,2,17,2,2,435,
36,44,37,41,42,64,38,13,39,17,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,
  34,16,6,6,6,6,6,6,6,18,35,35,58,49,35,19,48,43,35,47,65,50,57,46,35,56,
  35,35,35,35,35,35,45,35,35,35,62,67,59,67,67,67,67,67,67,67,35,35,67,67,
  60,68,68,68,68,67,67,67,67,67,67,55,198,67,54,52,67,198,66,67,57,67,63,
  53,66,52,18,67,67,15,67,6,
69,6,6,6,6,6,6,6,19,71,72,73,73,73,73,73,73,73,73,73,70,6,
36,44,37,41,42,64,38,13,39,17,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,
  34,16,6,6,6,6,6,6,6,20,35,35,58,49,35,19,48,43,35,47,65,50,57,46,35,56,
  35,35,35,35,35,35,45,35,35,35,62,74,59,74,74,74,74,74,74,74,35,35,74,74,
  60,58,58,58,74,74,74,74,74,74,55,216,74,54,52,74,216,66,74,57,74,63,53,
  66,52,18,74,74,15,74,6,
400,400,400,400,400,400,400,400,400,400,400,1,2,21,2,2,425,
400,400,400,400,400,400,400,400,400,400,400,1,2,22,2,2,424,
400,400,400,400,400,400,400,400,400,400,400,1,2,23,2,2,423,
400,400,400,400,400,400,400,400,400,400,400,1,2,24,2,2,422,
400,400,400,400,400,400,400,400,400,400,400,1,2,25,2,2,421,
400,400,400,400,400,400,400,400,400,400,400,1,2,26,2,2,420,
400,400,400,400,400,400,400,400,400,400,400,1,2,27,2,2,419,
400,400,400,400,400,400,400,400,400,400,400,1,2,28,2,2,418,
400,400,400,400,400,400,400,400,400,400,400,1,2,29,2,2,417,
400,400,400,400,400,400,400,400,400,400,400,1,2,30,2,2,416,
400,400,400,400,400,400,400,400,400,400,400,1,2,31,2,2,415,
400,400,400,400,400,400,400,400,400,400,400,1,2,32,2,2,414,
400,400,400,400,400,400,400,400,400,400,400,1,2,33,2,2,413,
400,400,400,400,400,400,400,400,400,400,400,1,2,34,2,2,412,
69,35,75,264,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,36,2,2,472,
400,1,2,37,2,2,447,
400,1,2,38,2,2,441,
400,1,2,39,2,2,436,
400,1,2,40,2,2,428,
400,1,2,41,2,2,446,
400,400,400,400,400,400,400,1,2,42,2,2,444,
79,81,16,6,6,6,6,6,6,6,43,82,80,76,218,77,78,77,6,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,1,2,44,2,2,450,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,16,88,69,6,6,6,83,84,
  87,6,6,85,6,6,45,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,
  97,93,96,96,99,97,105,251,94,35,35,97,105,103,104,91,91,91,91,97,95,102,
  102,102,91,97,97,97,96,96,96,96,6,92,91,91,
16,46,98,
16,47,76,
16,48,64,
69,49,106,
107,50,96,
400,400,400,400,400,400,400,1,2,51,2,2,427,
108,122,109,
36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
  16,6,6,6,6,6,6,6,53,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35,
  35,35,35,35,45,35,35,35,62,110,59,110,110,110,110,110,110,110,35,35,110,
  110,60,110,110,110,110,110,110,55,115,110,54,52,110,115,66,110,57,110,
  66,53,66,52,110,110,15,110,6,
36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
  16,6,6,6,6,6,6,6,54,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35,
  35,35,35,35,45,35,35,35,62,111,59,111,111,111,111,111,111,111,35,35,111,
  111,60,111,111,111,111,111,111,55,72,111,54,52,111,72,66,111,57,111,66,
  53,66,52,111,111,15,111,6,
36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
  16,6,6,6,6,6,6,6,55,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35,
  35,35,35,35,45,35,35,35,62,112,59,112,112,112,112,112,112,112,35,35,112,
  112,60,112,112,112,112,112,112,55,69,112,54,52,112,69,66,112,57,112,66,
  53,66,52,112,112,15,112,6,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,56,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,113,94,35,35,97,113,103,104,91,91,91,91,97,95,102,102,
  102,91,97,97,97,96,96,96,96,6,92,91,91,
6,6,6,6,6,6,6,57,114,6,
6,6,6,6,6,6,6,58,76,115,6,
116,59,117,
36,44,37,41,42,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,16,
  6,6,6,6,6,6,6,60,35,35,58,49,35,48,43,35,47,50,57,46,35,56,35,35,35,35,
  35,35,45,35,35,35,62,120,59,120,120,120,120,120,120,120,35,35,120,48,60,
  48,118,120,119,119,119,119,119,55,54,52,120,121,48,57,120,121,53,121,52,
  120,120,15,118,48,6,
36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
  16,6,6,6,6,6,6,6,61,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35,
  35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250,
  250,60,250,250,250,250,250,250,55,215,54,52,250,215,66,250,57,250,66,53,
  66,52,250,250,15,250,6,
9,89,69,262,122,124,99,125,125,123,
126,118,127,
400,400,400,400,400,400,400,400,1,2,64,2,2,442,
128,6,6,6,6,6,6,6,65,128,128,6,
36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
  16,6,6,6,6,6,6,6,66,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35,
  35,35,35,35,45,35,35,35,62,245,59,245,245,245,245,245,245,245,35,35,245,
  245,60,245,245,245,245,245,245,55,54,52,245,79,57,245,120,53,120,52,245,
  245,15,245,6,
36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
  16,6,6,6,6,6,6,6,67,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35,
  35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250,
  250,60,250,250,250,250,250,250,55,200,54,52,250,200,66,250,57,250,66,53,
  66,52,250,250,15,250,6,
36,44,37,41,42,64,38,13,39,17,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,
  34,16,6,6,6,6,6,6,6,68,35,35,58,49,35,19,48,43,35,47,65,50,57,46,35,56,
  35,35,35,35,35,35,45,35,35,35,62,129,59,129,129,129,129,129,129,129,35,
  35,129,129,60,58,58,58,129,129,129,129,129,129,55,199,129,54,52,129,199,
  66,129,57,129,63,53,66,52,18,129,129,15,129,6,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,69,2,2,403,
131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,69,70,130,131,
  131,131,131,
132,134,136,258,133,137,135,
6,6,6,6,6,6,6,72,138,139,139,6,
108,16,73,63,140,
36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
  16,6,6,6,6,6,6,6,74,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35,
  35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250,
  250,60,250,250,250,250,250,250,55,217,54,52,250,217,66,250,57,250,66,53,
  66,52,250,250,15,250,6,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,75,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,141,94,35,35,97,141,103,104,91,91,91,91,97,95,102,102,
  102,91,97,97,97,96,96,96,96,6,92,91,91,
89,219,142,
116,77,143,
107,78,144,145,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,1,2,79,2,2,439,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,80,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,146,94,35,35,97,146,103,104,91,91,91,91,97,95,102,102,
  102,91,97,97,97,96,96,96,96,6,92,91,91,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,1,2,81,2,2,437,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,82,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,147,94,35,35,97,147,103,104,91,91,91,91,97,95,102,102,
  102,91,97,97,97,96,96,96,96,6,92,91,91,
271,271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,
  271,271,149,149,150,150,287,150,149,151,152,271,271,83,275,287,291,148,
271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,271,
  271,149,149,150,153,287,283,153,149,154,152,271,271,84,275,283,287,291,
  148,
271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,271,
  271,149,149,150,153,287,283,156,155,157,152,271,271,85,275,279,283,287,
  291,148,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,86,2,2,474,
158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
  158,158,158,159,158,158,158,158,158,158,158,87,158,158,159,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,88,2,2,406,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,1,2,89,2,2,411,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,1,2,90,2,2,455,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,1,2,91,2,2,432,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,1,2,92,2,2,431,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,93,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,160,94,35,35,97,160,103,104,91,91,91,91,97,95,102,102,
  102,91,97,97,97,96,96,96,96,6,92,91,91,
21,22,23,24,25,26,27,28,29,30,31,32,33,34,69,6,6,6,6,6,6,6,94,35,35,35,35,
  35,35,35,35,35,35,35,35,35,35,101,161,35,35,126,6,
21,22,23,24,25,26,27,28,29,30,31,32,33,34,69,6,6,6,6,6,6,6,95,35,35,35,35,
  35,35,35,35,35,35,35,35,35,35,101,162,35,35,124,6,
90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,69,6,6,6,83,84,87,6,6,85,6,
  6,96,35,35,35,35,35,35,35,35,35,35,35,35,35,35,213,101,213,93,94,35,35,
  213,213,91,91,91,91,213,95,91,213,213,6,92,91,91,
164,165,163,13,166,166,166,166,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,98,2,2,457,
86,167,168,169,170,171,116,88,173,174,136,172,172,175,172,175,175,175,175,
  172,172,172,172,175,
86,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,6,6,
  85,6,6,100,35,35,35,35,35,35,35,35,35,35,35,35,35,35,97,101,97,93,96,96,
  99,97,94,35,35,97,97,91,91,91,91,97,95,139,91,97,97,97,96,96,96,96,6,92,
  91,91,
89,69,262,122,124,125,125,123,
176,132,177,177,
178,190,179,
180,181,82,182,182,182,
16,105,235,
183,184,185,106,187,186,186,186,186,186,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,1,2,107,2,2,445,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,108,2,2,434,
21,22,23,24,25,26,27,28,29,30,31,32,33,34,6,6,6,6,6,6,6,109,35,35,35,35,35,
  35,35,35,35,35,35,35,35,35,101,35,35,268,6,
36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
  16,6,6,6,6,6,6,6,110,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35,
  35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250,
  250,60,250,250,250,250,250,250,55,116,54,52,250,116,66,250,57,250,66,53,
  66,52,250,250,15,250,6,
36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
  16,6,6,6,6,6,6,6,111,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35,
  35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250,
  250,60,250,250,250,250,250,250,55,73,54,52,250,73,66,250,57,250,66,53,
  66,52,250,250,15,250,6,
36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
  16,6,6,6,6,6,6,6,112,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35,
  35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250,
  250,60,250,250,250,250,250,250,55,70,54,52,250,70,66,250,57,250,66,53,
  66,52,250,250,15,250,6,
188,113,100,
16,114,97,
16,69,115,190,189,42,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,1,2,116,2,2,409,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,117,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,191,94,35,35,97,191,103,104,91,91,91,91,97,95,102,102,
  102,91,97,97,97,96,96,96,96,6,92,91,91,
192,118,193,
248,248,248,248,248,248,248,248,248,232,248,248,248,248,248,248,248,248,248,
  248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,119,
246,246,246,246,246,246,246,246,246,233,246,246,246,246,246,246,246,246,246,
  246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,120,
36,44,37,41,42,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,16,
  6,6,6,6,6,6,6,121,35,35,58,49,35,48,43,35,47,50,57,46,35,56,35,35,35,35,
  35,35,45,35,35,35,62,120,59,120,120,120,120,120,120,120,35,35,120,245,
  60,120,119,119,119,119,119,55,54,52,120,57,120,120,53,120,52,120,120,15,
  231,245,6,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,122,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,194,96,96,99,97,194,94,35,35,97,194,103,104,91,91,91,91,97,95,102,
  102,102,91,97,97,97,96,96,96,96,6,92,91,91,
89,265,124,195,195,
6,6,6,6,6,6,6,124,196,196,6,
89,263,124,150,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,1,2,126,2,2,465,
170,170,170,170,198,198,198,198,198,198,198,198,198,198,198,198,198,198,170,
  69,127,197,198,198,
16,128,77,
36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
  16,6,6,6,6,6,6,6,129,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35,
  35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250,
  250,60,250,250,250,250,250,250,55,201,54,52,250,201,66,250,57,250,66,53,
  66,52,250,250,15,250,6,
163,83,84,85,130,200,199,91,91,91,91,91,91,91,
201,21,22,23,24,25,26,27,28,29,30,31,32,33,34,131,203,203,203,203,203,203,
  203,203,203,203,203,203,203,202,203,203,203,203,
400,400,400,400,400,400,400,1,2,132,2,2,473,
6,6,6,6,6,6,6,133,204,259,6,
400,1,2,134,2,2,454,
87,135,123,92,
400,400,400,400,1,2,136,2,2,443,
205,206,180,180,137,121,121,121,
132,258,133,
108,208,139,209,207,
69,6,6,6,6,6,6,6,140,71,72,62,62,62,62,62,62,62,62,70,6,
208,141,225,
6,6,6,6,6,6,6,142,220,6,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,143,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,102,94,35,35,97,102,103,104,102,91,91,91,91,97,95,102,
  102,102,91,97,97,97,96,96,96,96,6,92,91,91,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,144,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,229,94,35,229,35,97,229,103,104,91,91,91,91,97,95,102,
  102,102,91,97,97,97,96,96,96,96,6,92,91,91,
210,212,145,211,212,212,
16,146,74,
16,147,71,
214,213,213,293,293,293,288,289,
149,149,149,149,285,149,149,215,149,149,285,
271,271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,
  271,271,149,149,150,150,285,150,149,151,152,271,271,150,273,285,290,148,
271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,
  271,271,149,149,216,216,286,216,149,151,152,271,271,151,274,286,
149,149,149,149,285,149,149,215,149,272,285,
271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,271,
  271,149,149,150,153,285,281,153,149,154,152,271,271,153,273,281,285,290,
  148,
271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,
  271,149,149,216,217,286,282,217,149,154,152,271,271,154,274,282,286,
149,149,149,149,285,149,149,215,149,276,285,
271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,271,
  271,149,149,150,153,285,281,156,155,157,152,271,271,156,273,277,281,285,
  290,148,
271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,
  271,149,149,216,217,286,282,218,155,157,152,271,271,157,274,278,282,286,
303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,
  303,303,303,303,303,303,303,303,303,303,305,303,
306,159,
208,160,224,
83,84,87,85,161,219,219,219,219,91,91,91,91,91,92,91,91,
83,84,87,85,162,220,220,220,220,91,91,91,91,91,92,91,91,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,1,2,163,2,2,451,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,164,2,2,459,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,165,2,2,458,
86,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,6,6,
  85,6,6,166,35,35,35,35,35,35,35,35,35,35,35,35,35,35,228,101,228,93,96,
  96,94,35,35,228,228,91,91,91,91,228,95,91,228,228,228,96,96,96,96,6,92,
  91,91,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,167,2,2,470,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,168,2,2,469,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,169,2,2,468,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,170,2,2,467,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,171,2,2,466,
86,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,6,6,
  85,6,6,172,35,35,35,35,35,35,35,35,35,35,35,35,35,35,97,101,97,93,96,96,
  221,97,94,35,35,97,97,91,91,91,91,97,95,91,97,97,97,96,96,96,96,6,92,91,
  91,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,173,2,2,405,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,174,2,2,404,
86,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,6,6,
  85,6,6,175,35,35,35,35,35,35,35,35,35,35,35,35,35,35,222,101,222,93,96,
  96,222,94,35,35,222,222,91,91,91,91,222,95,91,222,222,222,96,96,96,96,6,
  92,91,91,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,1,2,176,2,2,407,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,177,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,94,35,35,97,97,91,91,91,91,97,95,135,135,91,97,97,97,96,
  96,96,96,6,92,91,91,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,1,2,178,2,2,440,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,179,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,94,35,35,97,97,223,91,91,91,91,97,95,102,102,102,91,97,
  97,97,96,96,96,96,6,92,91,91,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,1,2,180,2,2,463,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,1,2,181,2,2,462,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,182,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,94,35,35,97,97,91,91,91,91,97,95,224,224,224,91,97,97,97,
  96,96,96,96,6,92,91,91,
271,271,149,149,216,216,287,216,149,151,152,271,271,183,275,287,
271,271,149,149,216,217,287,283,217,149,154,152,271,271,184,275,283,287,
271,271,149,149,216,217,287,283,218,155,157,152,271,271,185,275,279,283,287,
400,400,400,1,2,186,2,2,475,
208,187,225,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,188,2,2,449,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,189,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,226,96,96,99,97,226,94,35,35,97,226,103,104,91,91,91,91,97,95,102,
  102,102,91,97,97,97,96,96,96,96,6,92,91,91,
16,190,43,
16,191,17,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,192,2,2,430,
36,44,37,41,42,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,16,
  6,6,6,6,6,6,6,193,35,35,58,49,35,48,43,35,47,50,57,46,35,56,35,35,35,35,
  35,35,45,35,35,35,62,49,59,49,49,49,49,49,49,49,35,35,49,49,60,49,49,49,
  49,49,49,49,55,54,52,49,227,49,57,49,227,53,227,52,49,49,15,49,6,
108,208,194,226,228,
89,266,124,150,
69,148,75,149,
6,6,6,6,6,6,6,197,229,229,229,6,
230,230,230,230,21,22,23,24,25,26,27,28,29,30,31,32,33,34,178,198,230,230,
  230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
208,199,101,
208,200,80,
400,1,2,201,2,2,471,
69,202,231,
205,206,234,232,183,233,183,203,237,236,240,235,239,257,257,238,257,257,
89,18,241,
400,400,400,400,400,400,400,400,400,1,2,205,2,2,461,
400,400,400,400,400,400,400,1,2,206,2,2,460,
6,6,6,6,6,6,6,207,138,261,6,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,1,2,208,2,2,402,
243,136,243,243,243,243,243,243,243,243,243,243,243,243,243,243,69,209,244,
  242,243,243,
400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
  400,400,400,400,400,400,400,400,400,400,400,400,1,2,210,2,2,426,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,211,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,41,94,35,41,35,97,41,103,104,91,91,91,91,97,95,102,102,
  102,91,97,97,97,96,96,96,96,6,92,91,91,
16,212,117,
245,245,245,213,245,
246,246,246,214,246,
149,149,149,149,286,149,149,215,149,215,286,
271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,
  271,271,149,149,216,216,285,216,149,151,152,271,271,216,273,285,
271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,
  271,149,149,216,217,285,281,217,149,154,152,271,271,217,273,281,285,
271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,
  271,149,149,216,217,285,281,218,155,157,152,271,271,218,273,277,281,285,
108,208,219,127,247,
108,208,220,125,247,
86,88,173,174,137,175,175,175,175,175,175,
164,165,163,14,166,166,166,166,
180,181,75,182,182,182,
176,133,177,177,
16,225,45,
108,208,226,7,228,
36,44,37,41,42,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,16,
  6,6,6,6,6,6,6,227,35,35,58,49,35,48,43,35,47,50,57,46,35,56,35,35,35,35,
  35,35,45,35,35,35,62,245,59,245,245,245,245,245,245,245,35,35,245,245,
  60,245,245,245,245,245,245,55,54,52,245,57,245,120,53,120,52,245,245,15,
  245,6,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,228,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,84,94,35,35,97,84,103,104,91,91,91,91,97,95,102,102,102,
  91,97,97,97,96,96,96,96,6,92,91,91,
108,208,229,94,248,
251,205,206,249,254,230,253,250,253,253,252,254,253,253,
201,69,6,6,6,6,6,6,6,231,202,255,256,257,257,257,257,257,255,6,
400,1,2,232,2,2,452,
400,400,400,1,2,233,2,2,433,
400,1,2,234,2,2,456,
69,235,258,
69,236,259,
69,237,260,
232,233,129,236,235,131,
234,232,233,255,237,236,235,254,238,254,
233,253,252,252,
6,6,6,6,6,6,6,241,19,6,
83,84,85,242,200,91,91,91,91,91,91,91,
201,21,22,23,24,25,26,27,28,29,30,31,32,33,34,243,261,261,261,261,261,261,
  261,261,261,261,261,261,261,202,261,261,261,261,
205,206,180,180,244,87,87,87,
295,295,295,296,
295,295,295,297,
83,84,87,85,247,54,54,54,91,91,91,91,91,92,91,91,
6,6,6,6,6,6,6,248,93,93,6,
400,400,400,400,400,1,2,249,2,2,453,
174,174,183,184,185,250,113,186,186,186,186,113,113,186,
400,400,400,400,400,1,2,251,2,2,464,
205,206,252,195,194,
251,205,206,249,177,197,250,197,197,252,197,
16,254,202,
262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,69,255,242,262,
  262,
6,6,6,6,6,6,6,256,263,263,263,6,
108,208,257,223,264,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,258,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,265,94,35,35,97,265,103,104,265,265,91,91,91,91,97,95,
  102,102,102,91,97,97,97,96,96,96,96,6,92,91,91,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,259,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,266,94,35,35,97,266,103,104,266,266,91,91,91,91,97,95,
  102,102,102,91,97,97,97,96,96,96,96,6,92,91,91,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,260,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,267,94,35,35,97,267,103,104,91,91,91,91,97,95,102,102,
  102,91,97,97,97,96,96,96,96,6,92,91,91,
205,206,234,232,183,233,183,261,237,236,240,235,239,89,89,238,89,89,
201,21,22,23,24,25,26,27,28,29,30,31,32,33,34,262,243,243,243,243,243,243,
  243,243,243,243,243,243,243,202,243,243,243,243,
108,208,263,269,268,
201,69,6,6,6,6,6,6,6,264,202,255,256,144,144,144,144,255,6,
108,208,265,108,270,
108,208,266,107,270,
208,267,128,
6,6,6,6,6,6,6,268,147,147,6,
271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,69,269,242,271,
  271,
86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,
  6,6,85,6,6,270,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97,
  93,96,96,99,97,106,94,35,35,97,106,103,104,106,91,91,91,91,97,95,102,
  102,102,91,97,97,97,96,96,96,96,6,92,91,91,
201,21,22,23,24,25,26,27,28,29,30,31,32,33,34,271,88,88,88,88,88,88,88,88,
  88,88,88,88,88,202,88,88,88,88,

};


static const unsigned short ag_sbt[] = {
     0,  13,  46,  50,  63,  93,  95, 130, 133, 137, 177, 182, 189, 191,
   207, 210, 317, 360, 374, 481, 503, 609, 626, 643, 660, 677, 694, 711,
   728, 745, 762, 779, 796, 813, 830, 847, 851, 889, 896, 903, 910, 917,
   924, 937, 956, 993,1079,1082,1085,1088,1091,1094,1107,1110,1210,1310,
  1410,1494,1504,1515,1518,1616,1715,1725,1728,1742,1754,1850,1949,2055,
  2094,2116,2123,2135,2140,2239,2323,2326,2329,2333,2370,2454,2491,2575,
  2612,2650,2689,2725,2759,2795,2823,2851,2879,2907,2991,3034,3077,3142,
  3150,3186,3210,3287,3295,3299,3302,3308,3311,3321,3358,3396,3437,3536,
  3635,3734,3737,3740,3746,3783,3867,3870,3905,3940,4034,4119,4124,4135,
  4139,4165,4189,4192,4291,4305,4339,4352,4363,4370,4374,4384,4392,4395,
  4400,4421,4424,4434,4519,4604,4610,4613,4616,4624,4635,4672,4707,4718,
  4756,4792,4803,4842,4879,4910,4912,4915,4932,4949,4986,5022,5058,5132,
  5168,5204,5240,5276,5312,5388,5424,5460,5535,5572,5652,5689,5771,5808,
  5845,5926,5942,5960,5979,5988,5991,6029,6114,6117,6120,6158,6254,6259,
  6263,6267,6279,6316,6319,6322,6329,6332,6350,6353,6368,6381,6392,6446,
  6468,6505,6590,6593,6598,6603,6614,6649,6685,6722,6727,6732,6743,6751,
  6757,6761,6764,6769,6862,6946,6951,6965,6985,6992,7001,7008,7011,7014,
  7017,7023,7033,7037,7047,7059,7093,7101,7105,7109,7125,7136,7147,7161,
  7172,7177,7188,7191,7211,7223,7228,7314,7400,7484,7502,7536,7541,7560,
  7565,7570,7573,7584,7604,7689,7723
};


static const unsigned short ag_sbe[] = {
     9,  43,  48,  57,  92,  94, 126, 131, 135, 173, 178, 185, 190, 203,
   208, 244, 356, 370, 408, 489, 537, 622, 639, 656, 673, 690, 707, 724,
   741, 758, 775, 792, 809, 826, 843, 848, 885, 892, 899, 906, 913, 920,
   933, 947, 989,1025,1080,1083,1086,1089,1092,1103,1108,1143,1243,1343,
  1441,1501,1511,1516,1550,1649,1718,1726,1738,1750,1787,1883,1983,2090,
  2110,2119,2130,2137,2173,2270,2324,2327,2330,2366,2401,2487,2522,2607,
  2644,2682,2721,2755,2791,2819,2847,2875,2903,2938,3013,3056,3105,3145,
  3182,3196,3240,3289,3296,3300,3304,3309,3314,3354,3392,3417,3470,3569,
  3668,3735,3738,3742,3779,3814,3868,3904,3939,3972,4065,4120,4131,4136,
  4161,4185,4190,4225,4295,4320,4348,4359,4366,4371,4380,4388,4393,4397,
  4408,4422,4431,4465,4550,4606,4611,4614,4622,4633,4667,4704,4716,4750,
  4788,4801,4835,4874,4908,4911,4913,4919,4936,4982,5018,5054,5088,5164,
  5200,5236,5272,5308,5342,5420,5456,5490,5568,5603,5685,5720,5804,5841,
  5876,5939,5956,5974,5984,5989,6025,6060,6115,6118,6154,6190,6256,6260,
  6264,6274,6298,6317,6320,6325,6330,6339,6351,6364,6377,6388,6442,6463,
  6501,6536,6591,6596,6601,6612,6646,6681,6717,6724,6729,6736,6746,6753,
  6758,6762,6766,6801,6893,6948,6956,6974,6988,6997,7004,7009,7012,7015,
  7019,7026,7034,7044,7050,7074,7097,7104,7108,7113,7132,7143,7152,7168,
  7174,7181,7189,7207,7218,7225,7259,7345,7431,7491,7517,7538,7550,7562,
  7567,7571,7580,7600,7635,7704,7723
};


static const unsigned char ag_fl[] = {
  2,1,1,2,0,1,3,3,1,1,1,1,1,1,3,1,1,4,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,2,3,4,1,5,2,3,2,4,1,1,1,1,3,1,1,1,2,1,1,1,3,3,2,1,1,1,1,2,
  3,4,2,3,4,3,2,3,1,2,3,1,1,1,3,1,1,5,5,6,1,1,1,3,3,1,2,3,2,2,3,3,3,1,1,
  1,3,4,4,1,1,1,1,2,1,2,3,5,1,1,2,3,1,3,2,4,2,4,4,1,1,2,1,3,1,3,1,3,1,2,
  1,1,1,1,3,1,1,3,2,3,2,1,1,1,1,1,3,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,
  1,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,3,3,4,6,1,1,1,1,1,1,1,
  1,1,1,2,2,3,3,4,2,1,3,1,1,4,3,3,3,1,3,2,1,2,1,1,1,3,1,1,1,1,1,1,1,3,1,
  2,1,1,1,1,2,2,2,1,2,1,1,4,1,3,1,3,1,2,2,2,3,1,3,1,1,0,1,2,2,2,1,2,2,2,
  1,2,2,2,1,2,2,2,1,2,2,2,1,2,1,2,2,2,1,2,1,1,1,2,0,1,3,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0,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,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
};

static const unsigned short ag_ptt[] = {
    0, 58, 65, 65, 66, 66, 58, 68, 72, 72, 72, 72, 75, 76, 76, 78, 78, 81,
   86, 86, 88, 88, 88, 88, 88, 88, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
   94, 94, 94, 94, 95, 96, 89, 89, 99,100, 57, 57,104,104,109,109,110,111,
  111,113,113,116,116,117,117,120,120,114,121,122,122,122,122,123,123,127,
  124,124,130,131,134,135,128,128, 79, 84, 84, 70, 70,118,118,138,142,139,
  108,148,149,149,150,151,151, 90,152,153,105, 80,156,157,159,160,160,161,
  161,331,331,331,331,166,168,125,125,169,172,137,137,173, 82,175,176,176,
  176,176,178,179,179,179,133,133,180,180,183,183,182,182,185,185,185,188,
  188,189,143,143,190,190,192,192, 91, 91, 91, 91,102,193,194,194,194, 92,
  288,288,197,197,171,171,144,144,198,198,136,136,167,167,199,199,201,201,
  141,141,141,146,146,181,181,204,204,204,204,206,206,206,206,206,200,200,
  115,115,115,115,207,202,184,184,184,184,184,184, 93, 93,212,212,126,126,
  126,126,214, 98, 98,158, 97,186,205,191,215, 77, 77,170,107,107,216,216,
  106,210,217,218,213,213,119,119,119,187,147,147,220,220,220,129,129,211,
  203,203,203,203,203,219,221,221,140,140,132,132,132,132,132,174,174,145,
  145,222,222,222,222,163,226,226,226,162,229,229,229,165,232,232,232,164,
  235,235,235,196,236,236,239,239,237,237,266,266,246,246,247,247,248,248,
  287, 73, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
   64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,224,224,224,231,231,
  234,234,234,234,234,234,234,238,238,241,241,241,241,241,241,241,242,242,
  242,242,242,242,242,242,242,242,242,242,244,244,244,244,244,244,244,244,
  244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
  244,244,256,256,257,257, 71, 69, 35, 41, 74,  2, 85, 83, 60, 87,  1,  7,
   11, 16, 26, 29, 34, 39, 42, 45, 46, 49, 50, 55,  6,  8, 10, 20, 17, 61,
   59, 12,112, 13, 14,  9, 15, 54,  3, 18, 19, 31, 24, 53, 23, 25,154, 52,
   27,155, 28, 30, 33,177,  4, 38, 36,195, 21, 44, 40, 56, 47, 43, 22,208,
   32,209, 37, 51, 48,  5,240,101
};


static void ag_ra(void)
{
  switch(ag_rpx[(PCB).ag_ap]) {
    case 1: ag_rp_1(); break;
    case 2: ag_rp_2(); break;
    case 3: ag_rp_3(); break;
    case 4: ag_rp_4(); break;
    case 5: ag_rp_5(); break;
    case 6: ag_rp_6(); break;
    case 7: ag_rp_7(); break;
  }
}

#define TOKEN_NAMES plm_token_names
const char *const plm_token_names[332] = {
  "compilation",
  "ADDRESS",
  "AND",
  "ASSIGN_OP",
  "AT",
  "BASED",
  "BY",
  "BYTE",
  "CALL",
  "CASE",
  "CAUSE_INTERRUPT",
  "CHARINT",
  "DATA",
  "DECLARE",
  "DISABLE",
  "DO",
  "DWORD",
  "ELSE",
  "ENABLE",
  "END",
  "EOF_KW",
  "EXTERNAL",
  "GE",
  "GO",
  "GOTO",
  "HALT",
  "HWORD",
  "IF",
  "INITIAL_KW",
  "INTEGER",
  "INTERRUPT",
  "LABEL",
  "LE",
  "LITERALLY",
  "LONGINT",
  "MINUS",
  "MOD",
  "NE",
  "NOT",
  "OFFSET",
  "OR",
  "PLUS",
  "POINTER",
  "PROCEDURE",
  "PUBLIC",
  "QWORD",
  "REAL",
  "REENTRANT",
  "RETURN",
  "SELECTOR",
  "SHORTINT",
  "STRUCTURE",
  "THEN",
  "TO",
  "WHILE",
  "WORD",
  "XOR",
  "compilation",
  "white space",
  "numeric_constant",
  "IDENTIFIER",
  "STRING",
  "",
  "\"/*\"",
  "",
  "",
  "",
  "\"*/\"",
  "actual_parameters",
  "LPAREN",
  "expression_list",
  "RPAREN",
  "adding_operator",
  "MINUS_SIGN",
  "PLUS_SIGN",
  "and_operator",
  "arithmetic_expression",
  "term",
  "array_specifier",
  "explicit_dimension",
  "implicit_dimension",
  "assignment_statement",
  "left_part",
  "EQ",
  "expression",
  "SEMI",
  "base_specifier",
  "DOT",
  "basic_statement",
  "call_statement",
  "goto_statement",
  "microprocessor_dependent_statement",
  "null_statement",
  "return_statement",
  "basic_type",
  "bound_expression",
  "by_part",
  "step_expression",
  "simple_variable",
  "cast_type",
  "cause_interrupt_statement",
  "integer_constant",
  "module",
  "eof",
  "conditional_clause",
  "if_condition",
  "true_unit",
  "true_element",
  "false_element",
  "constant",
  "constant_attribute",
  "constant_list",
  "COMMA",
  "declaration",
  "declare_statement",
  "procedure_definition",
  "declaration_sequence",
  "declare_element",
  "factored_element",
  "unfactored_element",
  "declare_element_list",
  "disable_statement",
  "do_block",
  "do_case_block",
  "do_while_block",
  "iterative_do_block",
  "simple_do_block",
  "do_case_statement",
  "ending",
  "unit_sequence",
  "do_while_statement",
  "embedded_assignment",
  "variable_reference",
  "logical_expression",
  "enable_statement",
  "end_statement",
  "opt_identifier",
  "label_definition_sequence",
  "factored_label_element",
  "factored_variable_element",
  "variable_name_specifier_list",
  "opt_public_or_external",
  "factored_member",
  "member_name_list",
  "opt_explicit_dimension",
  "variable_type",
  "opt_variable_attributes",
  "unit",
  "formal_parameter",
  "formal_parameter_list",
  "formal_parameter_specifier",
  "go_to",
  "halt_statement",
  "id_colon",
  "COLON",
  "STAR",
  "index_part",
  "index_variable",
  "start_expression",
  "initial_value",
  "initial_value_list",
  "initialization",
  "binary number",
  "decimal number",
  "hex number",
  "octal number",
  "interrupt",
  "opt_interrupt_number",
  "interrupt_number",
  "iterative_do_statement",
  "to_part",
  "opt_by_part",
  "label_definition",
  "label_element",
  "variable_reference_list",
  "literal_element",
  "location_reference",
  "AT_SIGN",
  "locator",
  "locator_initialization",
  "logical_factor",
  "or_operator",
  "logical_secondary",
  "logical_primary",
  "relation_operator",
  "member_element",
  "structure_type",
  "unfactored_member",
  "member_element_list",
  "member_name",
  "member_specifier",
  "subscript",
  "member_specifier_sequence",
  "module_name",
  "multiplying_operator",
  "SLASH",
  "floating point number",
  "opt_array_specifier",
  "opt_formal_parameter_specifier",
  "opt_procedure_attribute_sequence",
  "procedure_attribute_sequence",
  "opt_procedure_type",
  "procedure_type",
  "variable_attributes",
  "primary",
  "subexpression",
  "procedure_attribute",
  "procedure_statement",
  "GT",
  "LT",
  "typed_return",
  "untyped_return",
  "secondary",
  "unary_sign",
  "simple_do_statement",
  "subscript_or_actual_parameters",
  "true_statement",
  "unary_minus",
  "unary_plus",
  "variable_element",
  "unit_element",
  "variable_name_specifier",
  "decimal number tail",
  "'d'",
  "",
  "'$'",
  "binary number tail",
  "",
  "",
  "octal number tail",
  "",
  "",
  "hex number tail",
  "",
  "",
  "floating point number tail",
  "fraction part",
  "exponent",
  "",
  "",
  "'-'",
  "",
  "",
  "'\\''",
  "",
  "\"\\'\\'\"",
  "",
  "",
  "",
  "",
  "",
  "",
  "",
  "",
  "",
  "",
  "",
  "",
  "RPAREN",
  "LPAREN",
  "MINUS",
  "PLUS",
  "PLUS_SIGN",
  "AND",
  "SEMI",
  "EQ",
  "IDENTIFIER",
  "DOT",
  "ADDRESS",
  "BYTE",
  "CHARINT",
  "DWORD",
  "HWORD",
  "INTEGER",
  "LONGINT",
  "OFFSET",
  "POINTER",
  "QWORD",
  "REAL",
  "SELECTOR",
  "SHORTINT",
  "WORD",
  "BY",
  "CALL",
  "CAUSE_INTERRUPT",
  "EOF_KW",
  "ELSE",
  "STRING",
  "numeric_constant",
  "DATA",
  "COMMA",
  "DECLARE",
  "DISABLE",
  "CASE",
  "DO",
  "WHILE",
  "ASSIGN_OP",
  "ENABLE",
  "END",
  "LABEL",
  "GOTO",
  "TO",
  "GO",
  "HALT",
  "COLON",
  "THEN",
  "IF",
  "STAR",
  "INITIAL_KW",
  "INTERRUPT",
  "LITERALLY",
  "AT_SIGN",
  "AT",
  "NOT",
  "MOD",
  "SLASH",
  "EXTERNAL",
  "PUBLIC",
  "OR",
  "XOR",
  "REENTRANT",
  "PROCEDURE",
  "GE",
  "GT",
  "LE",
  "LT",
  "NE",
  "STRUCTURE",
  "RETURN",
  "BASED",
  "'-'",
  "integer_constant",

};

#ifndef MISSING_FORMAT
#define MISSING_FORMAT "Missing %s"
#endif
#ifndef UNEXPECTED_FORMAT
#define UNEXPECTED_FORMAT "Unexpected %s"
#endif
#ifndef UNNAMED_TOKEN
#define UNNAMED_TOKEN "input"
#endif


static void ag_diagnose(void) {
  int ag_snd = (PCB).sn;
  int ag_k = ag_sbt[ag_snd];

  if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) {
    sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
  }
  else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8
          && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1
          && *TOKEN_NAMES[ag_tstt[ag_k]]) {
    sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
  }
  else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) {
    sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]);
  }
  else if (isprint((*(PCB).lab)) && (*(PCB).lab) != '\\') {
    char buf[20];
    sprintf(buf, "\'%c\'", (char) (*(PCB).lab));
    sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf);
  }
  else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN);
  (PCB).error_message = (PCB).ag_msg;


}
static int ag_action_1_r_proc(void);
static int ag_action_2_r_proc(void);
static int ag_action_3_r_proc(void);
static int ag_action_4_r_proc(void);
static int ag_action_1_s_proc(void);
static int ag_action_3_s_proc(void);
static int ag_action_1_proc(void);
static int ag_action_2_proc(void);
static int ag_action_3_proc(void);
static int ag_action_4_proc(void);
static int ag_action_5_proc(void);
static int ag_action_6_proc(void);
static int ag_action_7_proc(void);
static int ag_action_8_proc(void);
static int ag_action_9_proc(void);
static int ag_action_10_proc(void);
static int ag_action_11_proc(void);
static int ag_action_8_proc(void);


static int (*const  ag_r_procs_scan[])(void) = {
  ag_action_1_r_proc,
  ag_action_2_r_proc,
  ag_action_3_r_proc,
  ag_action_4_r_proc
};

static int (*const  ag_s_procs_scan[])(void) = {
  ag_action_1_s_proc,
  ag_action_2_r_proc,
  ag_action_3_s_proc,
  ag_action_4_r_proc
};

static int (*const  ag_gt_procs_scan[])(void) = {
  ag_action_1_proc,
  ag_action_2_proc,
  ag_action_3_proc,
  ag_action_4_proc,
  ag_action_5_proc,
  ag_action_6_proc,
  ag_action_7_proc,
  ag_action_8_proc,
  ag_action_9_proc,
  ag_action_10_proc,
  ag_action_11_proc,
  ag_action_8_proc
};


static int ag_action_10_proc(void) {
  int ag_t = (PCB).token_number;
  (PCB).btsx = 0, (PCB).drt = -1;
  do {
    ag_track();
    if ((PCB).rx < (PCB).fx) {
      (PCB).input_code = (PCB).lab[(PCB).rx++];
      (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code);}
    else {
      GET_INPUT;
      (PCB).lab[(PCB).fx++] = (PCB).input_code;
      (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code);
      (PCB).rx++;
    }
    if (ag_key_index[(PCB).sn]) {
      unsigned ag_k = ag_key_index[(PCB).sn];
      int ag_ch = CONVERT_CASE((PCB).input_code);
      if (ag_ch < 255) {
        while (ag_key_ch[ag_k] < ag_ch) ag_k++;
        if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
      }
    }
  } while ((PCB).token_number == (plm_token_type) ag_t);
  (PCB).rx = 0;
  return 1;
}

static int ag_action_11_proc(void) {
  int ag_t = (PCB).token_number;

  (PCB).btsx = 0, (PCB).drt = -1;
  do {
    (PCB).vs[(PCB).ssx] = *(PCB).lab;
    (PCB).ssx--;
    ag_track();
    ag_ra();
    if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
    (PCB).ssx++;
    if ((PCB).rx < (PCB).fx) {
      (PCB).input_code = (PCB).lab[(PCB).rx++];
      (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code);}
    else {
      GET_INPUT;
      (PCB).lab[(PCB).fx++] = (PCB).input_code;
      (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code);
      (PCB).rx++;
    }
    if (ag_key_index[(PCB).sn]) {
      unsigned ag_k = ag_key_index[(PCB).sn];
      int ag_ch = CONVERT_CASE((PCB).input_code);
      if (ag_ch < 255) {
        while (ag_key_ch[ag_k] < ag_ch) ag_k++;
        if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
      }
    }
  }
  while ((PCB).token_number == (plm_token_type) ag_t);
  (PCB).rx = 0;
  return 1;
}

static int ag_action_3_r_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  (PCB).btsx = 0, (PCB).drt = -1;
  (PCB).reduction_token = (plm_token_type) ag_ptt[(PCB).ag_ap];
  ag_ra();
  return (PCB).exit_flag == AG_RUNNING_CODE;
}

static int ag_action_3_s_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  (PCB).btsx = 0, (PCB).drt = -1;
  (PCB).reduction_token = (plm_token_type) ag_ptt[(PCB).ag_ap];
  ag_ra();
  return (PCB).exit_flag == AG_RUNNING_CODE;
}

static int ag_action_4_r_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  (PCB).reduction_token = (plm_token_type) ag_ptt[(PCB).ag_ap];
  return 1;
}

static int ag_action_2_proc(void) {
  (PCB).btsx = 0, (PCB).drt = -1;
  if ((PCB).ssx >= 128) {
    (PCB).exit_flag = AG_STACK_ERROR_CODE;
    PARSER_STACK_OVERFLOW;
  }
  (PCB).vs[(PCB).ssx] = *(PCB).lab;
  (PCB).ss[(PCB).ssx] = (PCB).sn;
  (PCB).ssx++;
  (PCB).sn = (PCB).ag_ap;
  ag_track();
  return 0;
}

static int ag_action_9_proc(void) {
  if ((PCB).drt == -1) {
    (PCB).drt=(PCB).token_number;
    (PCB).dssx=(PCB).ssx;
    (PCB).dsn=(PCB).sn;
  }
  ag_prot();
  (PCB).vs[(PCB).ssx] = ag_null_value;
  (PCB).ss[(PCB).ssx] = (PCB).sn;
  (PCB).ssx++;
  (PCB).sn = (PCB).ag_ap;
  (PCB).rx = 0;
  return (PCB).exit_flag == AG_RUNNING_CODE;
}

static int ag_action_2_r_proc(void) {
  (PCB).ssx++;
  (PCB).sn = (PCB).ag_ap;
  return 0;
}

static int ag_action_7_proc(void) {
  --(PCB).ssx;
  (PCB).rx = 0;
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_1_proc(void) {
  ag_track();
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_1_r_proc(void) {
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_1_s_proc(void) {
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_4_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
  (PCB).reduction_token = (plm_token_type) ag_ptt[(PCB).ag_ap];
  (PCB).btsx = 0, (PCB).drt = -1;
  (PCB).vs[(PCB).ssx] = *(PCB).lab;
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  else (PCB).ss[(PCB).ssx] = (PCB).sn;
  ag_track();
  while ((PCB).exit_flag == AG_RUNNING_CODE) {
    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
    do {
      unsigned ag_tx = (ag_t1 + ag_t2)/2;
      if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
      else ag_t2 = ag_tx;
    } while (ag_t1 < ag_t2);
    (PCB).ag_ap = ag_pstt[ag_t1];
    if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
  }
  return 0;
}

static int ag_action_3_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
  (PCB).btsx = 0, (PCB).drt = -1;
  (PCB).vs[(PCB).ssx] = *(PCB).lab;
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  else (PCB).ss[(PCB).ssx] = (PCB).sn;
  ag_track();
  (PCB).reduction_token = (plm_token_type) ag_ptt[(PCB).ag_ap];
  ag_ra();
  while ((PCB).exit_flag == AG_RUNNING_CODE) {
    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
    do {
      unsigned ag_tx = (ag_t1 + ag_t2)/2;
      if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
      else ag_t2 = ag_tx;
    } while (ag_t1 < ag_t2);
    (PCB).ag_ap = ag_pstt[ag_t1];
    if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
  }
  return 0;
}

static int ag_action_8_proc(void) {
  ag_undo();
  (PCB).rx = 0;
  (PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
  ag_diagnose();
  SYNTAX_ERROR;
  {(PCB).rx = 1; ag_track();}
  return (PCB).exit_flag == AG_RUNNING_CODE;
}

static int ag_action_5_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap];
  (PCB).btsx = 0, (PCB).drt = -1;
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  else {
    (PCB).ss[(PCB).ssx] = (PCB).sn;
  }
  (PCB).rx = 0;
  (PCB).reduction_token = (plm_token_type) ag_ptt[(PCB).ag_ap];
  ag_ra();
  while ((PCB).exit_flag == AG_RUNNING_CODE) {
    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
    do {
      unsigned ag_tx = (ag_t1 + ag_t2)/2;
      if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
      else ag_t2 = ag_tx;
    } while (ag_t1 < ag_t2);
    (PCB).ag_ap = ag_pstt[ag_t1];
    if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
  }
  return (PCB).exit_flag == AG_RUNNING_CODE;
}

static int ag_action_6_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap];
  (PCB).reduction_token = (plm_token_type) ag_ptt[(PCB).ag_ap];
  if ((PCB).drt == -1) {
    (PCB).drt=(PCB).token_number;
    (PCB).dssx=(PCB).ssx;
    (PCB).dsn=(PCB).sn;
  }
  if (ag_sd) {
    (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  }
  else {
    ag_prot();
    (PCB).vs[(PCB).ssx] = ag_null_value;
    (PCB).ss[(PCB).ssx] = (PCB).sn;
  }
  (PCB).rx = 0;
  while ((PCB).exit_flag == AG_RUNNING_CODE) {
    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
    do {
      unsigned ag_tx = (ag_t1 + ag_t2)/2;
      if (ag_tstt[ag_tx] < (unsigned short)(PCB).reduction_token) ag_t1 = ag_tx + 1;
      else ag_t2 = ag_tx;
    } while (ag_t1 < ag_t2);
    (PCB).ag_ap = ag_pstt[ag_t1];
    if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
  }
  return (PCB).exit_flag == AG_RUNNING_CODE;
}


void init_plm(void) {
  (PCB).rx = (PCB).fx = 0;
  (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
  (PCB).exit_flag = AG_RUNNING_CODE;
  (PCB).line = FIRST_LINE;
  (PCB).column = FIRST_COLUMN;
  (PCB).btsx = 0, (PCB).drt = -1;
}

void plm(void) {
  init_plm();
  (PCB).exit_flag = AG_RUNNING_CODE;
  while ((PCB).exit_flag == AG_RUNNING_CODE) {
    unsigned ag_t1 = ag_sbt[(PCB).sn];
    if (ag_tstt[ag_t1]) {
      unsigned ag_t2 = ag_sbe[(PCB).sn] - 1;
      if ((PCB).rx < (PCB).fx) {
        (PCB).input_code = (PCB).lab[(PCB).rx++];
        (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code);}
      else {
        GET_INPUT;
        (PCB).lab[(PCB).fx++] = (PCB).input_code;
        (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code);
        (PCB).rx++;
      }
      if (ag_key_index[(PCB).sn]) {
        unsigned ag_k = ag_key_index[(PCB).sn];
        int ag_ch = CONVERT_CASE((PCB).input_code);
        if (ag_ch < 255) {
          while (ag_key_ch[ag_k] < ag_ch) ag_k++;
          if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
        }
      }
      do {
        unsigned ag_tx = (ag_t1 + ag_t2)/2;
        if (ag_tstt[ag_tx] > (unsigned short)(PCB).token_number)
          ag_t1 = ag_tx + 1;
        else ag_t2 = ag_tx;
      } while (ag_t1 < ag_t2);
      if (ag_tstt[ag_t1] != (unsigned short)(PCB).token_number)
        ag_t1 = ag_sbe[(PCB).sn];
    }
    (PCB).ag_ap = ag_pstt[ag_t1];
    (ag_gt_procs_scan[ag_astt[ag_t1]])();
  }
}