/* A lexical scanner generated by flex */

/* scanner skeleton version:
 * $Header: /home/horse/u0/vern/flex/RCS/flex.skel,v 2.16 90/08/03 14:09:36 vern Exp Locker: vern $
 */

#define FLEX_SCANNER

#include <stdio.h>


/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
#ifdef c_plusplus
#ifndef __cplusplus
#define __cplusplus
#endif
#endif


#ifdef __cplusplus

#include <stdlib.h>
#include <osfcn.h>

/* use prototypes in function declarations */
#define YY_USE_PROTOS

/* the "const" storage-class-modifier is valid */
#define YY_USE_CONST

#else	/* ! __cplusplus */

#ifdef __STDC__

#ifdef __GNUC__
#include <stddef.h>
void *malloc( size_t );
void free( void* );
#else
#include <stdlib.h>
#endif	/* __GNUC__ */

#define YY_USE_PROTOS
#define YY_USE_CONST

#endif	/* __STDC__ */
#endif	/* ! __cplusplus */


#ifdef __TURBOC__
#define YY_USE_CONST
#endif


#ifndef YY_USE_CONST
#define const
#endif


#ifdef YY_USE_PROTOS
#define YY_PROTO(proto) proto
#else
#define YY_PROTO(proto) ()
/* we can't get here if it's an ANSI C compiler, or a C++ compiler,
 * so it's got to be a K&R compiler, and therefore there's no standard
 * place from which to include these definitions
 */
char *malloc();
int free();
int read();
#endif


/* amount of stuff to slurp up with each read */
#ifndef YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#endif

/* returned upon end-of-file */
#define YY_END_TOK 0

/* copy whatever the last rule matched to the standard output */

/* cast to (char *) is because for 8-bit chars, yytext is (unsigned char *) */
/* this used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite()
 */
#define ECHO (void) fwrite( (char *) yytext, yyleng, 1, yyout )

/* gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
 * is returned in "result".
 */
#define YY_INPUT(buf,result,max_size) \
	if ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \
	    YY_FATAL_ERROR( "read() in flex scanner failed" );
#define YY_NULL 0

/* no semi-colon after return; correct usage is to write "yyterminate();" -
 * we don't want an extra ';' after the "return" because that will cause
 * some compilers to complain about unreachable statements.
 */
#define yyterminate() return ( YY_NULL )

/* report a fatal error */

/* The funky do-while is used to turn this macro definition into
 * a single C statement (which needs a semi-colon terminator).
 * This avoids problems with code like:
 *
 * 	if ( something_happens )
 *		YY_FATAL_ERROR( "oops, the something happened" );
 *	else
 *		everything_okay();
 *
 * Prior to using the do-while the compiler would get upset at the
 * "else" because it interpreted the "if" statement as being all
 * done when it reached the ';' after the YY_FATAL_ERROR() call.
 */

#define YY_FATAL_ERROR(msg) \
	do \
		{ \
		(void) fputs( msg, stderr ); \
		(void) putc( '\n', stderr ); \
		exit( 1 ); \
		} \
	while ( 0 )

/* default yywrap function - always treat EOF as an EOF */
#define yywrap() 1

/* enter a start condition.  This macro really ought to take a parameter,
 * but we do it the disgusting crufty way forced on us by the ()-less
 * definition of BEGIN
 */
#define BEGIN yy_start = 1 + 2 *

/* action number for EOF rule of a given start state */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)

/* special action meaning "start processing a new file" */
#define YY_NEW_FILE \
	do \
		{ \
		yy_init_buffer( yy_current_buffer, yyin ); \
		yy_load_buffer_state(); \
		} \
	while ( 0 )

/* default declaration of generated scanner - a define so the user can
 * easily add parameters
 */
#define YY_DECL int yylex YY_PROTO(( void )) 

/* code executed at the end of each rule */
#define YY_BREAK break;

#define YY_END_OF_BUFFER_CHAR 0

#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE (YY_READ_BUF_SIZE * 2) /* size of default input buffer */
#endif

typedef struct yy_buffer_state *YY_BUFFER_STATE;

#define YY_CHAR char
#define INITIAL 0
/********************************************************************/
/*                                                                  */
/*  Module        : LEX input                                       */
/*                                                                  */
/*  Version       : 3.9                                             */
/*  Last revision : 04/18/94 11:45:30                               */
/*                                                                  */
/*  Description :                                                   */
/*     Scanner specification for flex/lex                           */
/*                                                                  */
/*  Functions supplied :                                            */
/*                                                                  */
/*                                                                  */
/********************************************************************/
#include	"aglobals.h"
# include	<stdlib.h>
# include	"error.h"
#ifdef UNIX
#include "sisgram.tab.h"
#else
#include "sisgram_.h"
#endif

# include	"parsesup.h"

extern int nl_count;
extern int read_group_el;
static int read_from_file = FALSE;
	
void show_prompt		_(( void ));
void put_back			_(( char c ));

#undef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
	{ if ( !read_from_file ) show_prompt(); \
	if ( (fgets( (char *) buf, max_size, yyin )) == NULL ) \
		if ( feof ( yyin ) ) \
			result = YY_NULL;\
		else \
			YY_FATAL_ERROR( "read() in flex scanner failed" ); \
	else { \
		result = strlen ( buf ); \
  	}}

#define MAX_INCLUDE_DEPTH 20
YY_BUFFER_STATE fstack[MAX_INCLUDE_DEPTH];
int fstack_ptr = 0;

#define prel 1
#define comment 2
#define wprel 3
#define rfile 4
#define rfile1 5
#define rfile2 6
#define rfile3 7
#define rfile4 8
#define bfile 9
#define bfile1 10
#define bfile2 11
#define bfile3 12

/* done after the current pattern has been matched and before the
 * corresponding action - sets up yytext
 */
#define YY_DO_BEFORE_ACTION \
	yytext = yy_bp; \
	yyleng = yy_cp - yy_bp; \
	yy_hold_char = *yy_cp; \
	*yy_cp = '\0'; \
	yy_c_buf_p = yy_cp;

#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2

/* return all but the first 'n' matched characters back to the input stream */
#define yyless(n) \
	do \
		{ \
		/* undo effects of setting up yytext */ \
		*yy_cp = yy_hold_char; \
		yy_c_buf_p = yy_cp = yy_bp + n; \
		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
		} \
	while ( 0 )

#define unput(c) yyunput( c, yytext )


struct yy_buffer_state
    {
    FILE *yy_input_file;

    YY_CHAR *yy_ch_buf;		/* input buffer */
    YY_CHAR *yy_buf_pos;	/* current position in input buffer */

    /* size of input buffer in bytes, not including room for EOB characters */
    int yy_buf_size;	

    /* number of characters read into yy_ch_buf, not including EOB characters */
    int yy_n_chars;

    int yy_eof_status;		/* whether we've seen an EOF on this buffer */
#define EOF_NOT_SEEN 0
    /* "pending" happens when the EOF has been seen but there's still
     * some text process
     */
#define EOF_PENDING 1
#define EOF_DONE 2
    };

static YY_BUFFER_STATE yy_current_buffer;

/* we provide macros for accessing buffer states in case in the
 * future we want to put the buffer states in a more general
 * "scanner state"
 */
#define YY_CURRENT_BUFFER yy_current_buffer


/* yy_hold_char holds the character lost when yytext is formed */
static YY_CHAR yy_hold_char;

static int yy_n_chars;		/* number of characters read into yy_ch_buf */



#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif

#ifndef YY_USER_INIT
#define YY_USER_INIT
#endif

extern YY_CHAR *yytext;
extern int yyleng;
extern FILE *yyin, *yyout;

YY_CHAR *yytext;
int yyleng;

FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;

#define YY_END_OF_BUFFER 162
typedef int yy_state_type;
static const short int yy_accept[820] =
    {   0,
        0,    0,    0,    0,    3,    3,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,  162,  160,    1,  160,
        2,  159,  154,  154,   73,  157,   26,  156,  156,  156,
      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
      126,  122,  126,  123,  121,  125,  120,  120,    3,    4,
      127,  134,  132,  133,  132,  136,  135,  132,  138,  137,
      132,  140,  161,  132,  142,  141,  132,  146,  144,  145,
      144,  148,  161,  144,  150,  149,  144,  152,  151,  144,

        1,    0,  159,  154,  157,  157,  156,  156,  156,  156,
      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
      156,  156,  156,  156,  156,   91,  156,  156,  156,  156,
      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
      156,  156,  156,  156,  156,  156,  122,    0,  123,  120,
      120,    3,  132,  136,  135,  132,  140,    0,  132,  144,

      148,    0,  144,  155,  156,  156,  156,   62,  156,  156,
      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
      156,  156,   15,  156,  156,  156,  156,  156,   14,  156,
      156,  156,  156,  156,  156,  156,   94,  118,  156,  156,
      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
       92,  156,  156,  156,  156,  156,  156,  156,  156,   18,
      156,  156,  156,  156,  156,  156,  156,    6,  156,  156,
      156,   30,  156,  156,  156,  156,  156,  156,  156,  156,

      156,  156,  156,  156,  156,  156,  156,  156,  104,   56,
      156,  156,    0,  119,  139,  147,  156,  156,  156,  156,
      156,  156,  111,  156,  156,  156,  156,  156,  156,  156,
       20,  156,   16,  156,  156,  156,  156,    5,  156,  156,
      156,  156,  156,  156,   22,  156,  156,  118,  156,  156,
      156,   73,  156,  156,  156,  156,  156,  156,  156,   78,
      156,   52,  156,  156,    0,   44,   72,   41,  156,  156,
      156,  156,   77,  156,  156,  156,  156,  156,  156,   69,
      156,  156,  156,  156,  156,  156,  156,  156,  156,   10,
      156,  156,  156,  156,  156,  156,  156,   42,  156,  156,

       12,  156,  156,  156,  156,  156,  156,  156,  156,  156,
      156,  156,  156,   43,  156,  156,  156,  156,  156,  156,
      156,    0,  120,  119,  156,  156,  156,  156,  156,  109,
      156,  143,  156,  156,  156,  156,  156,  156,  156,  156,
      156,  156,  156,  156,  156,  156,   35,   33,  156,  156,
      156,  156,   97,  156,   81,  156,   61,  156,  156,  156,
      156,  156,  156,  156,    0,    0,    0,  156,  156,  156,
      156,  156,  156,  156,  156,  156,  156,   51,   63,  156,
      156,  156,  156,   34,   75,  156,   82,  156,  156,  156,
      156,  156,  156,   32,   53,   27,  156,  156,  156,   57,

       55,  156,  156,   76,  156,   46,  156,  156,  156,  156,
      156,  156,  156,  156,  156,  156,    0,  120,  103,  156,
      156,  156,  112,  156,  108,  156,   96,  156,   48,  156,
      156,  156,  156,   68,  156,  156,  156,  156,  156,  156,
      156,  156,  156,  156,  156,   65,  156,  156,  156,  156,
      156,   88,   86,    0,    0,    0,  156,  156,  156,  156,
       29,  156,   24,  156,   28,  156,  156,  156,  156,  156,
       31,  156,  156,  156,  156,   25,  156,  156,  156,  156,
      156,  156,   64,  156,  156,  156,  156,  156,  156,   56,
      156,   70,  156,  156,    0,  120,   59,   99,  156,  156,

       67,  156,  156,   47,   84,  156,  156,  156,  156,  156,
      156,  100,  156,  156,  156,  156,  156,  156,  156,  156,
      156,   87,    0,    0,    0,  156,   85,  156,  117,  156,
      156,   98,  156,  156,  156,  156,  156,  156,  156,   60,
      156,  156,    0,  156,  156,    9,  156,   45,   50,   54,
      156,  156,   19,  116,    0,  120,  156,  156,  156,  156,
      156,  156,  156,  156,  115,   40,  156,  156,  156,  156,
       89,  156,  156,  156,  156,    0,    0,    0,  156,   21,
      156,  156,  156,  156,  156,  156,  156,  156,  156,    0,
      156,  156,    0,   95,    7,  156,  156,  156,    0,  120,

      156,  156,   23,  156,  156,  156,   37,  156,  156,  156,
      156,  102,  156,  156,  156,    0,   86,    0,    0,   58,
      156,  156,  156,   38,  156,  156,  156,  129,  156,    0,
       71,  101,    0,    0,   17,   74,  124,  156,  156,  156,
       39,   79,  156,  156,   13,  156,  156,  114,  156,    0,
        0,   85,  156,   90,  156,  156,  156,  156,  156,    0,
        0,    0,   80,  156,   49,  156,    8,  107,   11,  156,
        0,   83,  156,  156,  156,  131,  156,  130,    0,   57,
        0,  156,   93,  113,    0,  156,   66,   36,  128,    0,
        0,    0,  111,    0,  156,    0,   27,    0,  106,  156,

        0,    0,    0,    0,    0,    0,    0,  110,    0,    0,
        0,    0,    0,    0,  105,    0,    0,   60,    0
    } ;

static const YY_CHAR yy_ec[128] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    2,    1,    5,    6,    7,    1,    1,    1,    8,
        9,    1,    1,   10,    1,   11,    1,   12,   13,   12,
       12,   12,   12,   12,   12,   12,   12,    1,   14,    1,
       15,    1,   16,    1,   17,   17,   17,   17,   17,   17,
       17,   17,   18,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
        1,   19,    1,    1,   20,    1,   21,   22,   23,   24,

       25,   26,   27,   28,   29,   30,   31,   32,   33,   34,
       35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
       45,   46,    1,    1,    1,    1,    1
    } ;

static const YY_CHAR yy_meta[47] =
    {   0,
        1,    1,    2,    3,    3,    1,    4,    1,    1,    1,
        5,    6,    6,    1,    1,    1,    7,    7,    1,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6
    } ;

static const short int yy_base[841] =
    {   0,
        0,    0,   46,    0,  496,  495,  484,  483,   91,   94,
      102,  105,  123,  126,  135,  144,  148,  156,  166,  169,
      176,  187,  194,  198,  180,  206,  486, 3958,  212,    0,
     3958,    0,   88,   99, 3958,  210,  221,  235,  243,  270,
      268,  309,  331,  271,  204,  353,  265,  232,  374,  289,
      294,  390,  409,  308,  323,  428,  325,  340,  281,  359,
     3958,  336,  386,  107, 3958, 3958,    0,  456,    0, 3958,
     3958, 3958,  408, 3958,  416,    0,  110,  439, 3958, 3958,
      463,    0,    0,  468, 3958, 3958,  472, 3958,  475, 3958,
      481,    0,    0,  486, 3958, 3958,  493, 3958, 3958,  499,

      504,  475,    0,  119,  502,  513,    0,  496,  502,  406,
      512,  516,  516,  132,  203,  524,  250,  337,  531,  541,
      545,  548,  551,  566,  568,  575,  296,  572,  587,  590,
      599,  606,  614,  611,  617,  632,  630,  638,  644,  649,
      652,  665,  665,  666,  672,  690,  682,  683,  700,  708,
      704,  706,  719,  727,  726,  731,  742,  744,  746,  748,
      761,  765,  768,  776,  781,  800,  783,  801,  806,  817,
      818,  784,  826,  837,  842,  848,  843,  862,  863,  867,
      873,  883,  884,  885,  893,  901,  930,  939,  122,    0,
      430,    0,  942,    0,  131,  948,    0,  454,  951,  960,

        0,  450,  969, 3958,  944,  940,  949,  958,  966,  968,
      968,  975,  985,  990,  989,  993, 1007, 1003, 1011, 1019,
     1020, 1028, 1031, 1041, 1045, 1051, 1046, 1055, 1062, 1068,
     1068, 1076, 1082, 1087, 1083, 1098, 1100, 1111, 1114, 1117,
     1123, 1127, 1135, 1145, 1137, 1155, 1150, 1159, 1166, 1170,
     1176, 1181, 1186, 1200, 1238, 1208, 1220, 1232, 1245, 1212,
     1229, 1256, 1257, 1264, 1265, 1272, 1281, 1290, 1291, 1298,
     1301, 1309, 1310, 1316, 1319, 1326, 1331, 1335, 1338, 1349,
     1351, 1362, 1365, 1368, 1374, 1384, 1368, 1388, 1391, 1399,
     1404, 1407, 1411, 1424, 1428, 1430, 1434, 1440, 1452, 1174,

     1200, 1460, 1446, 1464, 1478, 1471, 1484, 1489, 1491, 1492,
     1511, 1510,  429,  165, 3958, 3958, 1513, 1518, 1526, 1531,
     1529, 1538, 1547, 1550, 1553, 1559, 1563, 1569, 1576, 1578,
     1580, 1589, 1593, 1597, 1605, 1609, 1613, 1626, 1626, 1612,
     1628, 1645, 1639, 1652, 1655, 1664, 1666, 1671, 1672, 1631,
     1683, 1686, 1689, 1701, 1694, 1705, 1710, 1720, 1725, 1727,
     1728, 1736, 1743, 1752, 1790, 1745, 1760, 1761, 1776, 1773,
     1784, 1797, 1799, 1801, 1810, 1814, 1785, 1816, 1781, 1825,
     1826, 1836, 1834, 1842, 1852, 1846, 1859, 1862, 1864, 1874,
     1882, 1892, 1888, 1893, 1906, 1907, 1920, 1921, 1931, 1941,

     1944, 1946, 1949, 1952, 1964, 1966, 1972, 1978, 1986, 1987,
     1996, 1999, 2007, 2008, 2015, 2024, 2023, 2031, 2031, 2039,
     2048,  423,  411,    0, 2050, 2055, 2056, 2060, 2071, 2073,
     2076, 2078, 2089, 2084, 2094, 2106, 2104, 2115, 2119, 2126,
     2134, 2135, 2143, 2136, 2152, 2161, 2162, 2163, 2172, 2181,
     2188, 2195, 2192, 2197, 2198, 2216, 2218, 2220, 2232, 2234,
     2235, 2238, 2252, 2253,  413,  398,  408, 2267, 2265, 2275,
     2284, 2282, 2291, 2293, 2299, 2309, 2312, 2311, 2324, 2326,
     2332, 2341, 2337, 2343, 2348, 2353, 2362, 2371, 2373, 2372,
     2388, 2397, 2390, 2395, 2406, 2408, 2415, 2417, 2430, 2428,

     2435, 2437, 2444, 2447, 2458, 2451, 2472, 2461, 2466, 2470,
     2481, 2482, 2493, 2497, 2489, 2500,  399,  396, 2508, 2509,
     2520, 2521, 2533, 2525, 2535, 2543, 2545, 2553, 2555, 2563,
     2568, 2574, 2580, 2584, 2587, 2595, 2596, 2603, 2604, 2612,
     2620, 2622, 2632, 2630, 2641, 2642, 2651, 2650, 2662, 2665,
     2675, 2680, 2682,  397,  386,  379, 2683, 2691, 2699, 2699,
     2709, 2711, 2712, 2724, 2726, 2732, 2734, 2751, 2749, 2757,
     2759, 2769, 2777, 2786, 2787, 2794, 2794, 2802, 2809, 2279,
     2811, 2814, 2822, 2827, 2828, 2838, 2842, 2845, 2857, 2858,
     2860, 2865, 2872, 2876,  387,  371, 2883, 2891, 2896, 2902,

     2904, 2912, 2921, 2922, 2929, 2930, 2937, 2938, 2945, 2946,
     2953, 2961, 2953, 2970, 2972, 2972, 2979, 2987, 2990, 2995,
     3003, 3006,  383,  378,  372, 3015, 3008, 3023, 3024, 3026,
     3031, 3039, 3044, 3051, 3060, 3061, 3070, 3079, 3080, 3120,
     3093, 3101, 3139, 3120, 3112, 3122, 3076, 3128, 3140, 3142,
     3131, 3144, 3154, 3160,  356,  360, 3165, 3174, 3158, 3182,
     3191, 3193, 3200, 3207, 3215, 3216, 3223, 3223, 3231, 3240,
     3243, 3248, 3255, 3256, 3294,  361,  342,  355, 3268, 3275,
     3059, 3281, 3286, 3293, 3301, 3309, 3301, 3318, 3322, 3360,
     3331, 3311,  349, 3339, 3348, 3365, 3351, 3363,  331,  320,

     3346, 3368, 3371, 3376, 3384, 3387, 3389, 3396, 3409, 3407,
     3411, 3413, 3424, 3429, 3448, 3457, 3958,  324,  306, 3439,
     3459, 3450, 3457, 3466, 3474, 3474, 3481, 3482, 3488,  312,
     3493, 3498,  310, 3538, 3509, 3511, 3958, 3520, 3530, 3530,
     3536, 3541, 3548, 3551, 3561, 3563, 3569, 3571, 3582,  287,
      261, 3958, 3584, 3595, 3598, 3601, 3610, 3613, 3616,  247,
      240,  257, 3628, 3632, 3634, 3638, 3650, 3651, 3652, 3656,
      248, 3958, 3669, 3671, 3678, 3681, 3691, 3693,  230, 3958,
      224, 3733, 3736, 3739,  225, 3674, 3721, 3722, 3724,  230,
      226, 3762, 3744,  224, 3743,  209, 3958,  215, 3958, 3782,

      199,  180, 3785,  184,  172,  190,  165, 3958,  171,  166,
      130,  121,  131,  112, 3958,   81,   69, 3958, 3958, 3825,
     3832, 3839, 3846, 3853, 3860, 3867, 3874, 3881, 3888, 3895,
     3899, 3903, 3906, 3913, 3920, 3927, 3934, 3941, 3948, 3951
    } ;

static const short int yy_def[841] =
    {   0,
      819,    1,  819,    3,  820,  820,    1,    1,  821,  821,
      822,  822,  823,  823,  824,  824,  825,  825,  826,  826,
      827,  827,  828,  828,  829,  829,  819,  819,  819,  830,
      819,  831,  819,  819,  819,  831,  831,  832,  832,  832,
      832,  832,   42,   43,   43,   42,   46,   46,   46,   49,
       49,   46,   49,   52,   49,   43,   43,   46,   43,   43,
      819,  819,  819,  819,  819,  819,  833,  833,  834,  819,
      819,  819,  819,  819,  819,  835,  819,  835,  819,  819,
      819,  836,  837,  836,  819,  819,  819,  819,  819,  819,
      819,  838,  839,  838,  819,  819,  819,  819,  819,  819,

      819,  830,  831,  819,  819,  831,  840,   43,   43,   46,
       46,   43,   46,   42,   42,   42,   42,   42,   42,   49,
       46,   46,   42,   42,   46,   46,   49,   46,   49,   49,
       49,   49,   42,   43,   42,   43,   43,   43,   43,   42,
       42,   42,   49,   49,   52,   49,   49,   49,   42,   49,
       42,   46,   42,   42,   52,   52,   46,   46,   46,   52,
       52,   49,   49,   49,   49,   46,   49,   49,   49,   49,
       49,   49,   46,   49,   49,   52,   43,   43,   43,   46,
       42,   49,   49,   49,   42,   49,  819,  819,  819,  833,
      833,  834,  819,  835,  819,  835,  836,  837,  836,  819,

      838,  839,  838,  819,   43,   52,   52,   52,   49,   52,
       49,   49,   42,   42,   42,   42,   42,   49,   49,   49,
       49,   43,   43,   43,   49,   43,   49,   46,   46,   42,
       49,   42,   42,   52,   42,   46,   46,   49,   46,   52,
       52,   43,   43,   43,   43,   43,   49,   46,   46,   46,
       52,   52,   52,   49,   49,   49,   49,   46,   46,   52,
       49,   49,   49,   49,   49,   52,   52,   52,   52,   49,
       49,   49,   49,   52,   46,   49,   49,   46,   46,   46,
       46,   46,   46,   52,   52,   52,   49,   49,   49,   49,
       49,   46,   46,   46,   46,   52,   43,   43,   43,   42,

       42,   49,   42,   42,   42,   42,   49,   49,   49,   49,
       49,   49,  819,  833,  819,  819,   49,   49,   49,   49,
       49,   49,   46,   46,   52,   52,   49,   52,   49,   52,
       52,   46,   46,   42,   49,   46,   42,   42,   49,   52,
       52,   52,   49,   49,   49,   49,   52,   52,   52,   43,
       43,   43,   43,   43,   52,   52,   52,   49,   49,   49,
       49,   49,   49,   49,  819,   49,   49,   49,   49,   49,
       42,   46,   46,   52,   46,   42,   49,   49,   43,   43,
       52,   52,   49,   52,   52,   49,   49,   49,   43,   43,
       43,   43,   42,   42,   42,   42,   42,   42,   43,   49,

       49,   43,   43,   43,   43,   43,   43,   43,   49,   49,
       46,   49,   49,   49,   49,   49,   49,   49,   52,   49,
       49,  819,  833,  833,   43,   49,   43,   49,   49,   49,
       49,   49,   49,   43,   43,   43,   43,   52,   49,   49,
       49,   43,   43,   52,   52,   52,   52,   52,   52,   46,
       46,   46,   52,   52,   52,   46,   46,   46,   46,   52,
       52,   43,   43,   43,  819,  819,  819,   43,   43,   49,
       49,   49,   49,   49,   43,   43,   43,   43,   43,   43,
       43,   49,   52,   52,   52,   52,   52,   52,   52,   42,
       49,   49,   49,   49,   49,   49,   46,   49,   49,   49,

       49,   49,   46,   46,   46,   46,   46,   52,   42,   46,
       52,   52,   46,   46,   49,   49,  819,  833,   49,   49,
       43,   43,   43,   52,   43,   43,   43,   43,   43,   49,
       49,   43,   46,   46,   49,   49,   49,   49,   49,   43,
       43,   43,   43,   49,   49,   49,   42,   43,   43,   43,
       49,   49,   49,  819,  819,  819,   49,   49,   46,   43,
       43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
       43,   43,   43,   49,   49,   49,   52,   49,   49,  255,
       49,   49,   49,   43,   52,   52,   49,   49,   49,   49,
       49,   49,   52,   49,  819,  833,   49,   49,   49,   43,

       43,   43,   49,   49,   49,   49,   49,   49,   49,   49,
       49,   49,   52,   49,   49,   52,   49,   49,   49,   49,
       49,   49,  819,  819,  819,   49,   49,   49,   49,   49,
       49,   49,   49,   52,   52,   52,   52,   52,   52,  255,
       52,   49,  819,   49,   52,   52,   46,   46,   46,   46,
       52,   52,   52,   52,  819,  833,   52,   52,   49,   49,
       49,   52,   49,   49,   49,   49,   49,   52,   49,   49,
       49,   49,   49,   49,  255,  819,  819,  819,   46,   46,
       42,   49,   49,   49,   49,   49,   52,   43,   49,  819,
       49,   52,  819,   52,   52,  255,   43,   43,  819,  833,

       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
       52,   52,   52,   52,   49,  819,  819,  819,  819,   49,
       49,   49,   49,   49,   49,   52,   49,   49,   52,  819,
       52,   52,  819,  819,   52,   52,  819,   52,   49,   52,
       52,   52,   43,   43,   43,   43,   43,   43,   46,  819,
      819,  819,   46,   46,   46,   49,   43,   43,   43,  819,
      819,  819,   43,   46,   46,   43,   43,   43,   43,   46,
      819,  819,   49,   49,   46,   46,   43,   43,  819,  819,
      819,  255,  255,  255,  819,   49,   49,   49,   49,  819,
      819,  819,   49,  819,   46,  819,  819,  819,  819,  255,

      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,    0,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  819,  819
    } ;

static const short int yy_nxt[4005] =
    {   0,
       28,   29,   29,   29,   30,   31,   32,   28,   28,   28,
       28,   33,   34,   28,   28,   35,   36,   37,   29,   32,
       38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
       48,   49,   50,   51,   52,   53,   54,   55,   56,   57,
       58,   59,   60,   48,   48,   48,   61,   62,   62,   62,
       61,   61,   61,   61,   61,   63,   61,   64,   64,   65,
       66,   61,   67,   67,   62,   61,   67,   67,   67,   67,
       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
       67,   67,   67,   68,   67,   67,   67,   67,   67,   67,
       67,   67,   73,   73,   73,   73,   73,   73,   74,  104,

      104,   74,  818,   73,   73,   73,   73,   73,   73,   75,
      104,  104,   75,   77,   77,  817,   77,   77,  189,  189,
       78,  195,  195,   78,   73,   73,   73,   73,   73,   73,
      104,  104,   80,  189,  189,   80,   73,   73,   73,   83,
      816,   81,  195,  195,   81,   73,   73,   73,   83,   73,
       73,   73,  210,   84,  211,  815,   86,   73,   73,   73,
      814,  813,   84,  108,   86,  108,   87,   89,   89,   89,
       89,   89,   89,   90,   87,  108,   90,   89,   89,   89,
       93,   89,   89,   89,   91,  423,  812,   91,   89,   89,
       89,   93,  811,   99,   94,   89,   89,   89,  100,   89,

       89,   89,   96,  424,  810,   94,   96,   89,   89,   89,
      809,  808,   97,  101,  101,  101,   97,  807,  805,   99,
      105,  106,  106,  804,  100,  108,  106,  106,  137,  106,
      101,  105,  106,  106,  108,  108,  108,  106,  106,  108,
      106,  103,  212,  802,  108,  107,  108,  801,  799,  103,
      797,  103,  103,  107,  796,  108,  794,  109,  110,  103,
      103,  111,  791,  116,  108,  108,  112,  790,  113,  785,
      108,  117,  108,  114,  103,  115,  103,  781,  107,  780,
      107,  108,  779,  214,  103,  103,  103,  103,  108,  142,
      118,  134,  124,  108,  119,  135,  125,  108,  108,  143,

      772,  120,  108,  144,  121,  185,  108,  771,  136,  149,
      122,  108,  108,  150,  123,  103,  108,  151,  108,  107,
      228,  108,  108,  152,  108,  103,  103,  108,  154,  153,
      108,  126,  108,  108,  108,  761,  760,  187,  187,  187,
      127,  108,  128,  165,  752,  108,  751,  166,  164,  181,
      167,  168,  129,  108,  187,  130,  108,  108,  424,  108,
      108,  108,  131,  108,  108,  108,  132,  182,  215,  737,
      108,  133,  108,  183,  108,  108,  138,  733,  184,  719,
      108,  216,  718,  186,  108,  139,  140,  188,  188,  188,
      108,  141,  717,  700,  108,  699,  108,  108,  145,  108,

      678,  677,  146,  676,  188,  656,  108,  108,  147,  193,
      193,  193,  148,  108,  655,  155,  625,  193,  193,  193,
      624,  623,  108,  156,  596,  595,  193,  157,  108,  206,
      158,  159,  556,  160,  193,  555,  554,  108,  108,  108,
      196,  193,  196,  108,  108,  161,  162,  163,  169,  170,
      518,  517,  171,  422,  316,  172,  173,  196,  315,  174,
      175,  314,  176,  177,  193,  193,  193,  178,  179,  199,
      193,  199,  180,  193,  193,  193,  200,  200,  200,  204,
      191,  193,  200,  200,  200,  819,  199,  203,  200,  203,
      193,   71,   71,  200,  200,  200,  200,   70,   70,  200,

      200,  200,  200,  819,  203,  101,  101,  101,  819,  819,
      819,  200,  105,  105,  105,  819,  819,  200,  105,  105,
      108,  105,  101,  105,  106,  106,  108,  108,  819,  106,
      106,  108,  106,  108,  819,  108,  108,  108,  207,  108,
      108,  205,  108,  819,  108,  108,  108,  208,  108,  209,
      108,  108,  819,  108,  108,  108,  108,  108,  819,  819,
      819,  218,  108,  213,  217,  108,  819,  108,  220,  108,
      819,  108,  221,  224,  108,  219,  819,  222,  108,  108,
      108,  108,  108,  108,  108,  819,  108,  223,  225,  819,
      819,  108,  819,  819,  108,  229,  819,  108,  108,  108,

      108,  108,  227,  819,  108,  108,  226,  108,  108,  108,
      108,  230,  819,  108,  108,  108,  819,  819,  108,  233,
      819,  108,  819,  108,  108,  108,  231,  108,  108,  232,
      108,  819,  234,  108,  108,  108,  108,  108,  819,  108,
      108,  819,  108,  819,  108,  235,  237,  236,  108,  819,
      238,  108,  239,  819,  108,  819,  108,  108,  819,  819,
      108,  242,  243,  108,  244,  108,  240,  241,  108,  108,
      108,  108,  108,  108,  247,  108,  819,  819,  108,  108,
      108,  819,  245,  108,  108,  108,  248,  108,  246,  108,
      251,  819,  108,  250,  108,  108,  108,  252,  249,  108,

      108,  819,  258,  108,  108,  253,  108,  260,  108,  108,
      108,  108,  108,  254,  255,  256,  259,  108,  108,  819,
      108,  108,  108,  819,  108,  819,  108,  819,  257,  266,
      261,  108,  263,  108,  819,  108,  108,  265,  108,  108,
      264,  108,  108,  262,  108,  819,  108,  108,  268,  108,
      267,  271,  108,  269,  819,  819,  108,  819,  108,  108,
      270,  819,  108,  108,  108,  272,  108,  108,  108,  108,
      108,  108,  274,  108,  108,  108,  108,  108,  108,  108,
      108,  108,  108,  273,  108,  275,  108,  819,  108,  277,
      819,  819,  108,  278,  108,  819,  280,  819,  108,  279,

      108,  276,  108,  108,  281,  108,  108,  108,  108,  282,
      108,  108,  108,  819,  108,  108,  819,  288,  293,  108,
      283,  108,  108,  284,  819,  108,  285,  289,  819,  108,
      108,  286,  108,  108,  108,  108,  819,  291,  287,  108,
      108,  108,  108,  819,  108,  108,  108,  290,  819,  108,
      819,  108,  108,  819,  819,  108,  108,  292,  108,  294,
      819,  108,  297,  300,  295,  296,  108,  301,  819,  819,
      108,  108,  819,  108,  302,  108,  108,  819,  108,  298,
      108,  108,  303,  108,  304,  299,  108,  108,  108,  819,
      108,  819,  819,  108,  108,  108,  819,  108,  108,  305,

      108,  819,  108,  108,  108,  108,  108,  108,  108,  309,
      819,  108,  308,  108,  819,  310,  306,  307,  108,  108,
      819,  108,  108,  108,  108,  108,  108,  819,  819,  312,
      311,  187,  187,  187,  819,  108,  108,  819,  819,  108,
      188,  188,  188,  193,  193,  193,  819,  819,  187,  196,
      193,  196,  199,  193,  199,  819,  819,  188,  819,  819,
      193,  200,  200,  200,  819,  108,  196,  819,  108,  199,
      203,  200,  203,  108,  108,  108,  819,  318,  200,  108,
      108,  313,  108,  108,  317,  819,  319,  203,  819,  108,
      108,  108,  108,  108,  320,  108,  322,  819,  108,  108,

      108,  108,  108,  108,  108,  108,  108,  324,  321,  323,
      325,  326,  108,  108,  819,  108,  108,  819,  108,  819,
      108,  108,  108,  108,  327,  819,  108,  108,  108,  108,
      819,  108,  108,  108,  819,  108,  108,  108,  108,  108,
      108,  329,  819,  331,  108,  108,  328,  108,  108,  330,
      108,  819,  108,  108,  332,  108,  819,  108,  108,  108,
      333,  819,  108,  334,  819,  108,  108,  819,  108,  108,
      108,  108,  335,  108,  108,  108,  108,  819,  108,  336,
      338,  108,  108,  108,  108,  108,  337,  339,  108,  819,
      340,  108,  108,  108,  108,  108,  108,  819,  342,  108,

      108,  108,  341,  819,  108,  108,  108,  108,  343,  108,
      819,  108,  108,  108,  345,  108,  108,  819,  819,  108,
      108,  346,  819,  108,  344,  108,  108,  108,  819,  819,
      108,  108,  108,  108,  819,  347,  108,  349,  108,  108,
      819,  819,  108,  351,  819,  108,  108,  108,  108,  348,
      108,  108,  108,  819,  108,  353,  108,  350,  108,  108,
      108,  355,  352,  108,  819,  819,  108,  108,  108,  108,
      108,  354,  108,  819,  108,  108,  108,  108,  108,  356,
      108,  819,  108,  819,  357,  108,  108,  819,  108,  108,
      108,  358,  108,  108,  819,  108,  408,  108,  108,  359,

      819,  108,  108,  360,  108,  108,  108,  108,  108,  108,
      819,  108,  363,  361,  108,  819,  108,  108,  108,  108,
      362,  108,  409,  108,  364,  819,  108,  819,  108,  819,
      819,  108,  108,  108,  108,  819,  108,  108,  108,  365,
      365,  365,  108,  108,  108,  108,  108,  366,  108,  370,
      819,  819,  108,  371,  108,  368,  365,  108,  108,  367,
      819,  819,  108,  108,  108,  108,  108,  108,  108,  819,
      108,  819,  108,  819,  819,  369,  108,  108,  108,  819,
      108,  108,  819,  108,  372,  108,  819,  819,  108,  108,
      108,  108,  108,  375,  108,  108,  373,  108,  374,  108,

      819,  819,  108,  108,  819,  108,  108,  819,  819,  108,
      378,  819,  376,  819,  108,  108,  108,  819,  108,  819,
      377,  108,  380,  108,  108,  108,  108,  108,  379,  108,
      108,  108,  108,  381,  382,  108,  108,  108,  108,  108,
      819,  108,  108,  108,  108,  819,  819,  108,  108,  108,
      108,  384,  108,  383,  108,  108,  108,  108,  108,  108,
      385,  108,  819,  819,  108,  108,  819,  387,  388,  386,
      389,  108,  108,  108,  108,  819,  108,  819,  819,  819,
      819,  108,  108,  108,  108,  108,  819,  108,  392,  108,
      390,  819,  396,  108,  108,  108,  108,  108,  108,  108,

      391,  108,  108,  108,  395,  108,  108,  108,  393,  108,
      819,  108,  108,  819,  394,  108,  108,  108,  397,  108,
      819,  108,  108,  398,  108,  108,  108,  108,  108,  108,
      400,  819,  108,  108,  108,  819,  819,  108,  108,  108,
      108,  819,  399,  108,  108,  108,  819,  108,  819,  108,
      402,  108,  819,  401,  819,  404,  108,  108,  108,  819,
      108,  108,  108,  108,  108,  405,  108,  108,  108,  108,
      108,  108,  403,  819,  108,  108,  108,  108,  819,  411,
      406,  819,  819,  108,  108,  819,  108,  108,  410,  108,
      819,  407,  108,  108,  108,  412,  819,  108,  108,  413,

      108,  819,  108,  819,  108,  819,  819,  108,  108,  108,
      414,  108,  108,  108,  108,  108,  108,  108,  108,  108,
      108,  108,  415,  108,  819,  108,  108,  108,  416,  108,
      108,  417,  418,  425,  108,  108,  421,  108,  108,  419,
      819,  108,  426,  819,  108,  108,  108,  108,  108,  420,
      108,  108,  108,  108,  108,  108,  108,  108,  428,  108,
      427,  819,  108,  108,  108,  108,  430,  108,  429,  108,
      108,  819,  108,  108,  819,  819,  108,  432,  108,  431,
      108,  819,  108,  108,  108,  108,  108,  435,  108,  819,
      433,  108,  108,  108,  108,  819,  108,  108,  819,  434,

      108,  108,  108,  108,  108,  108,  436,  819,  819,  108,
      108,  108,  108,  108,  437,  108,  108,  108,  438,  108,
      108,  439,  108,  819,  819,  108,  108,  108,  440,  441,
      108,  108,  108,  108,  819,  108,  819,  108,  819,  108,
      108,  442,  108,  108,  443,  108,  108,  108,  108,  108,
      444,  819,  445,  108,  108,  108,  108,  108,  819,  108,
      108,  108,  108,  108,  108,  446,  453,  108,  108,  108,
      108,  108,  447,  108,  819,  819,  108,  448,  108,  108,
      108,  819,  108,  108,  450,  108,  449,  819,  108,  108,
      108,  108,  108,  108,  819,  819,  108,  108,  108,  108,

      819,  819,  108,  451,  108,  108,  108,  108,  108,  108,
      108,  108,  452,  108,  108,  819,  819,  108,  108,  108,
      455,  108,  819,  454,  108,  456,  108,  108,  819,  108,
      108,  457,  108,  819,  108,  108,  108,  819,  108,  819,
      819,  108,  458,  459,  108,  108,  819,  108,  108,  108,
      108,  108,  108,  461,  460,  108,  462,  819,  108,  108,
      108,  108,  108,  108,  108,  108,  108,  108,  819,  108,
      108,  108,  464,  108,  108,  819,  108,  108,  819,  108,
      108,  108,  463,  108,  108,  108,  108,  819,  108,  108,
      108,  365,  365,  365,  108,  108,  468,  108,  108,  108,

      108,  469,  819,  819,  108,  108,  470,  108,  365,  108,
      108,  108,  108,  475,  108,  108,  477,  108,  465,  108,
      108,  108,  108,  108,  819,  466,  108,  108,  467,  471,
      108,  108,  108,  108,  108,  108,  108,  108,  472,  819,
      108,  108,  473,  108,  108,  474,  819,  108,  108,  108,
      108,  108,  819,  819,  476,  819,  108,  108,  108,  108,
      108,  108,  108,  478,  819,  108,  108,  108,  480,  108,
      483,  819,  108,  479,  108,  108,  108,  108,  819,  108,
      108,  819,  481,  484,  108,  108,  108,  108,  108,  108,
      108,  482,  108,  108,  819,  108,  108,  108,  108,  486,

      108,  485,  819,  819,  108,  108,  487,  819,  819,  108,
      491,  819,  488,  108,  108,  108,  108,  108,  489,  108,
      819,  108,  108,  108,  492,  819,  108,  490,  108,  108,
      819,  108,  108,  819,  819,  819,  108,  108,  108,  108,
      108,  819,  108,  108,  819,  493,  494,  819,  819,  108,
      108,  108,  108,  108,  108,  496,  819,  819,  819,  495,
      819,  819,  108,  108,  108,  108,  108,  819,  108,  108,
      108,  108,  108,  108,  819,  497,  108,  498,  108,  108,
      108,  108,  108,  108,  499,  819,  108,  108,  108,  108,
      108,  500,  108,  819,  819,  501,  503,  108,  819,  108,

      819,  108,  504,  108,  108,  502,  108,  108,  819,  108,
      108,  108,  108,  108,  505,  108,  819,  819,  108,  507,
      108,  108,  819,  108,  108,  108,  506,  508,  108,  108,
      819,  108,  108,  108,  108,  108,  108,  108,  819,  108,
      819,  509,  108,  510,  819,  108,  108,  108,  108,  108,
      511,  108,  108,  108,  819,  108,  514,  512,  108,  108,
      819,  108,  108,  108,  108,  513,  819,  515,  108,  108,
      819,  108,  108,  108,  108,  516,  108,  108,  819,  108,
      108,  519,  108,  108,  108,  108,  108,  108,  522,  108,
      108,  108,  819,  520,  108,  108,  521,  108,  108,  108,

      108,  108,  108,  819,  108,  523,  108,  108,  108,  108,
      524,  108,  108,  108,  108,  526,  108,  108,  108,  108,
      819,  819,  819,  108,  108,  108,  528,  108,  530,  108,
      529,  819,  819,  525,  108,  108,  819,  108,  527,  108,
      108,  108,  819,  108,  108,  819,  108,  108,  108,  819,
      533,  819,  531,  532,  108,  108,  819,  108,  108,  108,
      108,  108,  108,  536,  108,  819,  108,  108,  108,  537,
      535,  819,  534,  108,  108,  108,  108,  108,  108,  819,
      819,  819,  539,  108,  819,  108,  108,  108,  108,  108,
      819,  538,  108,  819,  108,  108,  108,  108,  108,  108,

      108,  108,  108,  108,  108,  108,  819,  819,  542,  108,
      819,  108,  540,  541,  108,  543,  819,  108,  108,  108,
      108,  108,  108,  108,  819,  108,  108,  108,  108,  544,
      108,  108,  108,  108,  108,  108,  545,  108,  108,  108,
      547,  108,  819,  108,  819,  819,  819,  819,  108,  108,
      108,  108,  108,  108,  546,  108,  108,  819,  108,  108,
      108,  548,  551,  819,  108,  108,  819,  108,  550,  108,
      108,  549,  108,  108,  108,  108,  108,  108,  108,  552,
      643,  643,  643,  108,  553,  819,  819,  108,  108,  558,
      819,  108,  108,  108,  557,  819,  108,  643,  108,  108,

      108,  819,  108,  108,  560,  108,  108,  108,  108,  559,
      108,  562,  108,  108,  819,  108,  108,  108,  108,  108,
      108,  108,  108,  108,  819,  108,  561,  563,  819,  108,
      108,  108,  566,  565,  564,  108,  108,  819,  819,  108,
      108,  819,  108,  108,  108,  819,  108,  108,  108,  108,
      108,  108,  108,  819,  819,  108,  108,  108,  819,  108,
      819,  108,  108,  108,  108,  108,  567,  108,  108,  569,
      570,  568,  108,  108,  108,  108,  108,  108,  108,  108,
      108,  108,  819,  108,  819,  108,  108,  108,  108,  819,
      108,  819,  571,  108,  575,  108,  108,  572,  108,  108,

      819,  819,  108,  108,  108,  108,  108,  819,  108,  819,
      574,  573,  576,  108,  108,  108,  108,  577,  578,  108,
      819,  108,  108,  108,  108,  108,  108,  819,  108,  108,
      108,  108,  108,  108,  108,  108,  108,  819,  108,  819,
      108,  580,  108,  819,  108,  108,  108,  579,  108,  819,
      819,  108,  108,  108,  108,  108,  108,  581,  108,  108,
      819,  108,  108,  108,  108,  582,  108,  583,  108,  108,
      108,  108,  819,  108,  108,  108,  108,  108,  584,  108,
      108,  108,  108,  108,  108,  108,  586,  819,  108,  108,
      108,  108,  585,  588,  108,  108,  108,  587,  108,  108,

      819,  108,  108,  108,  108,  108,  108,  108,  108,  108,
      108,  819,  819,  108,  108,  108,  108,  108,  589,  590,
      108,  108,  108,  593,  108,  108,  108,  108,  108,  108,
      108,  591,  108,  108,  108,  108,  108,  108,  108,  594,
      819,  592,  108,  108,  108,  108,  108,  597,  819,  819,
      108,  108,  599,  819,  819,  598,  108,  108,  108,  108,
      108,  108,  600,  602,  108,  108,  108,  108,  108,  108,
      601,  819,  819,  108,  108,  108,  108,  108,  108,  108,
      108,  819,  819,  108,  603,  108,  108,  108,  108,  819,
      108,  108,  605,  108,  819,  108,  108,  108,  108,  819,

      819,  604,  108,  108,  819,  606,  108,  108,  819,  108,
      819,  108,  607,  108,  108,  108,  108,  108,  108,  108,
      108,  608,  108,  108,  108,  108,  819,  432,  108,  108,
      108,  108,  611,  108,  108,  610,  108,  108,  108,  609,
      819,  108,  108,  108,  613,  819,  108,  612,  819,  819,
      819,  108,  108,  108,  108,  108,  108,  108,  616,  819,
      108,  614,  108,  108,  108,  108,  108,  108,  108,  108,
      108,  615,  108,  618,  108,  617,  108,  819,  819,  108,
      108,  108,  108,  819,  108,  108,  108,  819,  819,  108,
      619,  621,  819,  108,  108,  819,  108,  620,  819,  108,

      108,  819,  108,  108,  108,  108,  108,  626,  108,  108,
      108,  108,  819,  622,  108,  108,  108,  108,  108,  108,
      108,  108,  628,  108,  819,  108,  819,  819,  819,  627,
      345,  108,  108,  108,  108,  108,  108,  108,  819,  108,
      108,  819,  629,  108,  108,  819,  108,  108,  108,  108,
      108,  108,  108,  819,  819,  630,  108,  108,  108,  108,
      819,  108,  819,  108,  108,  108,  108,  108,  819,  632,
      819,  633,  631,  634,  108,  108,  819,  819,  819,  819,
      108,  108,  108,  108,  108,  819,  108,  819,  108,  108,
      108,  108,  108,  108,  108,  636,  635,  108,  819,  108,

      108,  108,  819,  819,  108,  819,  819,  819,  108,  108,
      108,  108,  108,  639,  108,  108,  637,  108,  108,  108,
      638,  108,  108,  819,  108,  108,  108,  108,  108,  642,
      108,  640,  108,  108,  108,  108,  641,  108,  108,  108,
      108,  819,  108,  108,  819,  644,  108,  108,  645,  108,
      108,  108,  108,  108,  819,  819,  108,  819,  646,  819,
      108,  108,  108,  108,  819,  647,  108,  108,  108,  650,
      108,  108,  819,  108,  819,  108,  108,  648,  108,  108,
      649,  108,  108,  108,  108,  108,  108,  819,  652,  108,
      819,  651,  108,  108,  108,  108,  108,  108,  108,  108,

      108,  819,  819,  108,  108,  653,  819,  108,  819,  108,
      108,  108,  108,  819,  654,  108,  657,  108,  819,  108,
      108,  108,  819,  819,  108,  108,  108,  819,  108,  108,
      108,  819,  819,  108,  108,  108,  108,  658,  819,  108,
      819,  819,  108,  108,  108,  108,  108,  108,  819,  660,
      108,  659,  108,  108,  108,  108,  108,  108,  108,  108,
      108,  662,  108,  108,  661,  108,  108,  108,  108,  108,
      108,  108,  108,  108,  108,  108,  663,  108,  108,  108,
      108,  108,  819,  664,  665,  108,  667,  108,  819,  108,
      108,  108,  666,  108,  108,  108,  108,  108,  108,  108,

      669,  819,  819,  108,  668,  670,  108,  108,  108,  108,
      108,  108,  108,  108,  108,  108,  673,  671,  108,  108,
      819,  108,  674,  108,  108,  108,  672,  108,  108,  108,
      108,  108,  108,  108,  108,  679,  108,  108,  819,  108,
      108,  675,  108,  108,  108,  819,  108,  680,  108,  108,
      108,  108,  108,  108,  681,  108,  819,  108,  108,  108,
      108,  108,  108,  108,  108,  108,  819,  108,  108,  108,
      682,  819,  108,  108,  819,  819,  108,  108,  108,  819,
      685,  721,  108,  683,  684,  108,  108,  819,  108,  819,
      108,  108,  108,  108,  108,  108,  687,  108,  686,  696,

      108,  108,  108,  108,  108,  108,  819,  108,  108,  108,
      108,  819,  108,  108,  108,  819,  108,  689,  108,  688,
      108,  690,  690,  690,  819,  108,  691,  819,  819,  692,
      108,  819,  819,  108,  819,  108,  819,  108,  690,  108,
      643,  643,  643,  819,  108,  695,  819,  108,  108,  108,
      819,  108,  108,  819,  108,  108,  108,  643,  694,  108,
      108,  108,  108,  108,  108,  108,  108,  819,  108,  108,
      693,  697,  108,  108,  108,  108,  819,  108,  108,  108,
      108,  108,  703,  698,  108,  108,  108,  108,  819,  819,
      108,  108,  108,  108,  108,  819,  108,  108,  108,  108,

      108,  702,  108,  819,  701,  108,  108,  108,  819,  819,
      108,  108,  819,  819,  108,  108,  108,  705,  108,  108,
      108,  819,  819,  819,  707,  108,  706,  704,  108,  108,
      108,  108,  819,  108,  108,  108,  819,  819,  108,  108,
      108,  108,  819,  108,  108,  108,  708,  108,  108,  108,
      108,  108,  819,  108,  108,  108,  108,  108,  819,  108,
      710,  108,  709,  108,  108,  711,  712,  108,  108,  108,
      819,  108,  108,  819,  108,  714,  713,  108,  108,  108,
      108,  108,  108,  108,  715,  819,  108,  819,  819,  108,
      108,  720,  819,  108,  108,  716,  716,  716,  108,  819,

      108,  108,  819,  819,  819,  108,  108,  108,  108,  108,
      108,  819,  716,  108,  723,  722,  819,  108,  819,  108,
      108,  108,  819,  819,  108,  108,  108,  108,  819,  108,
      819,  108,  724,  108,  108,  108,  108,  108,  727,  108,
      725,  108,  108,  726,  732,  819,  108,  108,  108,  108,
      108,  108,  819,  728,  819,  108,  729,  819,  108,  108,
      108,  690,  690,  690,  108,  108,  734,  734,  734,  731,
      108,  819,  108,  108,  108,  108,  108,  819,  690,  108,
      738,  108,  108,  734,  108,  108,  735,  108,  108,  819,
      819,  108,  108,  819,  108,  108,  739,  730,  108,  108,

      740,  819,  108,  108,  108,  108,  108,  736,  108,  108,
      108,  108,  108,  108,  108,  108,  819,  108,  108,  819,
      108,  108,  108,  108,  108,  108,  742,  108,  741,  744,
      108,  108,  819,  108,  108,  108,  108,  108,  108,  819,
      743,  108,  819,  108,  745,  348,  108,  108,  108,  108,
      108,  108,  819,  108,  108,  819,  819,  108,  716,  716,
      716,  108,  108,  108,  108,  746,  108,  108,  747,  108,
      748,  819,  108,  108,  108,  716,  108,  108,  108,  753,
      819,  108,  108,  108,  108,  108,  749,  108,  754,  819,
      108,  755,  819,  108,  108,  108,  750,  108,  108,  108,

      108,  819,  756,  819,  108,  108,  108,  108,  108,  108,
      108,  108,  108,  108,  757,  758,  108,  819,  108,  108,
      108,  108,  819,  108,  819,  108,  108,  819,  759,  819,
      108,  108,  819,  108,  108,  108,  108,  819,  108,  734,
      734,  734,  108,  819,  108,  108,  108,  819,  108,  108,
      819,  108,  819,  108,  108,  108,  734,  763,  108,  762,
      108,  108,  819,  108,  108,  819,  108,  765,  764,  108,
      108,  819,  108,  108,  108,  108,  108,  819,  108,  766,
      819,  108,  767,  108,  819,  108,  108,  768,  108,  819,
      819,  108,  108,  769,  108,  108,  108,  819,  108,  819,

      108,  108,  108,  108,  108,  108,  108,  108,  819,  108,
      819,  108,  819,  819,  770,  108,  108,  108,  108,  819,
      108,  108,  108,  773,  819,  108,  819,  108,  108,  108,
      108,  774,  819,  108,  108,  775,  108,  108,  819,  108,
      108,  108,  819,  819,  108,  776,  819,  108,  108,  819,
      108,  778,  108,  777,  819,  108,  108,  108,  819,  108,
      819,  819,  783,  108,  782,  108,  108,  108,  108,  108,
      108,  819,  108,  108,  108,  108,  108,  819,  108,  108,
      819,  108,  108,  108,  819,  108,  108,  108,  108,  108,
      108,  108,  108,  108,  784,  108,  819,  786,  108,  108,

      819,  108,  108,  108,  108,  108,  819,  108,  795,  787,
      108,  788,  108,  108,  108,  108,  108,  108,  819,  108,
      819,  819,  108,  819,  108,  819,  789,  819,  108,  819,
      819,  108,  819,  108,  792,  792,  792,  819,  819,  819,
      819,  819,  819,  819,  819,  108,  108,  819,  108,  108,
      108,  792,  108,  819,  819,  108,  108,  819,  108,  108,
      108,  819,  108,  792,  792,  792,  108,  819,  108,  819,
      819,  793,  108,  819,  819,  108,  800,  819,  108,  819,
      792,  108,  108,  803,  803,  803,  803,  803,  803,  819,
      819,  819,  819,  798,  819,  819,  819,  819,  819,  819,

      803,  819,  819,  803,  819,  819,  819,  819,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
      819,  819,  819,  819,  806,   69,   69,   69,   69,   69,
       69,   69,   72,   72,   72,   72,   72,   72,   72,   76,
       76,   76,   76,   76,   76,   76,   79,   79,   79,   79,
       79,   79,   79,   82,   82,   82,   82,   82,   82,   82,
       85,   85,   85,   85,   85,   85,   85,   88,   88,   88,
       88,   88,   88,   88,   92,   92,   92,   92,   92,   92,
       92,   95,   95,   95,   95,   95,   95,   95,   98,   98,
       98,   98,   98,   98,   98,  102,  819,  819,  102,  102,

      102,  102,  103,  819,  103,  103,  108,  108,  108,  108,
      190,  190,  190,  192,  819,  192,  192,  192,  192,  192,
      194,  819,  194,  194,  194,  194,  194,  197,  819,  197,
      197,  197,  197,  197,  198,  819,  819,  198,  198,  198,
      198,  201,  819,  201,  201,  201,  201,  201,  202,  819,
      819,  202,  202,  202,  202,  107,  107,   27,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,

      819,  819,  819,  819
    } ;

static const short int yy_chk[4005] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    9,    9,    9,   10,   10,   10,    9,   33,

       33,   10,  817,   11,   11,   11,   12,   12,   12,    9,
       34,   34,   10,   11,   11,  816,   12,   12,   64,   64,
       11,   77,   77,   12,   13,   13,   13,   14,   14,   14,
      104,  104,   13,  189,  189,   14,   15,   15,   15,   15,
      814,   13,  195,  195,   14,   16,   16,   16,   16,   17,
       17,   17,  114,   15,  114,  813,   17,   18,   18,   18,
      812,  811,   16,  114,   18,  114,   17,   19,   19,   19,
       20,   20,   20,   19,   18,  114,   20,   21,   21,   21,
       21,   25,   25,   25,   19,  314,  810,   20,   22,   22,
       22,   22,  809,   25,   21,   23,   23,   23,   25,   24,

       24,   24,   23,  314,  807,   22,   24,   26,   26,   26,
      806,  805,   23,   29,   29,   29,   24,  804,  802,   26,
       36,   36,   36,  801,   26,  115,   36,   36,   45,   36,
       29,   37,   37,   37,  115,   45,  115,   37,   37,   45,
       37,   38,  115,  798,   45,   38,  115,  796,  794,   39,
      791,   38,   38,   39,  790,   48,  785,   38,   38,   39,
       39,   38,  781,   39,   48,   48,   38,  779,   38,  771,
       48,   39,  117,   38,   41,   38,   40,  762,   41,  761,
       40,  117,  760,  117,   41,   41,   40,   40,   47,   47,
       40,   44,   41,  117,   40,   44,   41,   47,   47,   47,

      751,   40,   44,   47,   40,   59,   44,  750,   44,   50,
       40,   44,   59,   50,   40,   42,   59,   50,   51,   42,
      127,   59,   51,   50,  127,   42,   42,   50,   51,   50,
      127,   42,   51,   54,  127,  733,  730,   62,   62,   62,
       42,   54,   42,   55,  719,   54,  718,   55,   54,   57,
       55,   55,   42,   43,   62,   43,   57,   55,  700,  118,
       57,   55,   43,   58,   43,   57,   43,   57,  118,  699,
      118,   43,   58,   58,   43,   46,   46,  693,   58,  678,
      118,  118,  677,   60,   46,   46,   46,   63,   63,   63,
       60,   46,  676,  656,   60,  655,   46,   49,   49,   60,

      625,  624,   49,  623,   63,  596,   49,   49,   49,   73,
       73,   73,   49,   52,  595,   52,  556,   75,   75,   75,
      555,  554,   52,   52,  518,  517,   73,   52,   52,  110,
       52,   53,  467,   53,   75,  466,  465,   53,  110,  110,
       78,   78,   78,   53,  110,   53,   53,   53,   56,   56,
      423,  422,   56,  313,  202,   56,   56,   78,  198,   56,
       56,  191,   56,   56,   81,   81,   81,   56,   56,   84,
       84,   84,   56,   87,   87,   87,   89,   89,   89,  102,
       68,   81,   91,   91,   91,   27,   84,   94,   94,   94,
       87,    8,    7,   89,   97,   97,   97,    6,    5,   91,

      100,  100,  100,    0,   94,  101,  101,  101,    0,    0,
        0,   97,  105,  105,  105,    0,    0,  100,  105,  105,
      108,  105,  101,  106,  106,  106,  109,  108,    0,  106,
      106,  108,  106,  109,    0,  111,  108,  109,  111,  113,
      112,  109,  109,    0,  111,  111,  116,  112,  113,  113,
      111,  112,    0,  119,  113,  116,  112,  116,    0,    0,
        0,  120,  119,  116,  119,  120,    0,  116,  121,  120,
        0,  122,  121,  123,  119,  120,    0,  121,  121,  120,
      122,  122,  123,  121,  123,    0,  122,  122,  124,    0,
        0,  125,    0,    0,  123,  128,    0,  124,  126,  124,

      125,  125,  126,    0,  128,  128,  125,  126,  126,  124,
      128,  129,    0,  126,  130,  129,    0,    0,  130,  131,
        0,  129,    0,  131,  130,  129,  129,  131,  130,  130,
      132,    0,  132,  131,  132,  134,  133,  131,    0,  135,
      132,    0,  134,    0,  132,  133,  134,  133,  135,    0,
      135,  134,  136,    0,  137,    0,  136,  133,    0,    0,
      135,  137,  138,  136,  139,  137,  136,  136,  139,  138,
      137,  140,  136,  138,  141,  139,    0,    0,  138,  139,
      140,    0,  140,  141,  139,  141,  141,  142,  140,  143,
      144,    0,  140,  143,  144,  141,  142,  145,  142,  143,

      144,    0,  147,  143,  144,  145,  147,  148,  142,  145,
      147,  148,  145,  146,  146,  146,  147,  148,  146,    0,
      147,  148,  149,    0,  146,    0,  151,    0,  146,  152,
      149,  149,  150,  149,    0,  151,  150,  151,  152,  152,
      150,  153,  150,  149,  152,    0,  150,  151,  154,  154,
      153,  155,  153,  154,    0,    0,  156,    0,  154,  155,
      154,    0,  153,  155,  156,  157,  155,  158,  156,  159,
      154,  156,  159,  160,  157,  157,  158,  158,  159,  159,
      157,  160,  158,  158,  159,  160,  161,    0,  160,  162,
        0,    0,  163,  162,  161,    0,  163,    0,  161,  162,

      164,  161,  163,  162,  164,  165,  163,  167,  172,  165,
      164,  167,  172,    0,  164,  165,    0,  167,  172,  165,
      166,  167,  172,  166,    0,  168,  166,  168,    0,  168,
      169,  166,  166,  166,  169,  168,    0,  170,  166,  168,
      169,  170,  171,    0,  169,  170,  171,  169,    0,  173,
        0,  170,  171,    0,    0,  170,  171,  171,  173,  173,
        0,  174,  175,  177,  173,  174,  175,  177,    0,    0,
      175,  174,    0,  176,  177,  174,  175,    0,  177,  176,
      175,  176,  178,  177,  179,  176,  178,  179,  176,    0,
      180,    0,    0,  178,  179,  181,    0,  178,  179,  180,

      180,    0,  178,  179,  181,  180,  181,  182,  183,  184,
        0,  182,  183,  184,    0,  185,  181,  182,  183,  184,
        0,  182,  183,  184,  185,  186,  185,    0,    0,  186,
      185,  187,  187,  187,    0,  186,  185,    0,    0,  186,
      188,  188,  188,  193,  193,  193,    0,    0,  187,  196,
      196,  196,  199,  199,  199,    0,    0,  188,    0,    0,
      193,  200,  200,  200,    0,  206,  196,    0,  205,  199,
      203,  203,  203,  206,  207,  205,    0,  206,  200,  205,
      206,  188,  207,  208,  205,    0,  207,  203,    0,  207,
      209,  208,  211,  210,  209,  208,  211,    0,  208,  212,

      209,  210,  211,  212,  209,  210,  211,  213,  210,  212,
      214,  215,  214,  212,    0,  216,  213,    0,  213,    0,
      215,  214,  215,  214,  216,    0,  216,  218,  213,  217,
        0,  218,  215,  214,    0,  219,  216,  218,  217,  219,
      217,  218,    0,  220,  221,  219,  217,  220,  221,  219,
      217,    0,  222,  220,  221,  223,    0,  220,  221,  222,
      222,    0,  223,  222,    0,  224,  223,    0,  222,  225,
      227,  223,  224,  225,  227,  226,  224,    0,  228,  225,
      227,  224,  226,  225,  227,  229,  226,  228,  228,    0,
      230,  226,  231,  228,  229,  229,  231,    0,  232,  230,

      229,  230,  231,    0,  233,  235,  231,  232,  233,  232,
        0,  230,  234,  233,  235,  233,  235,    0,    0,  232,
      234,  236,    0,  237,  234,  233,  235,  234,    0,    0,
      236,  236,  237,  237,    0,  238,  236,  239,  237,  238,
        0,    0,  240,  241,    0,  238,  239,  239,  241,  238,
      240,  242,  239,    0,  240,  243,  241,  240,  242,  243,
      241,  245,  242,  241,    0,    0,  243,  242,  245,  244,
      243,  244,  245,    0,  247,  243,  244,  245,  247,  246,
      244,    0,  248,    0,  247,  244,  246,    0,  247,  249,
      246,  248,  248,  250,    0,  246,  300,  248,  249,  249,

        0,  251,  250,  250,  249,  300,  252,  300,  250,  251,
        0,  253,  253,  251,  252,    0,  251,  300,  252,  253,
      252,  252,  301,  253,  254,    0,  253,    0,  254,    0,
        0,  301,  256,  301,  254,    0,  256,  260,  254,  255,
      255,  255,  256,  301,  257,  260,  256,  256,  257,  260,
        0,    0,  260,  261,  257,  258,  255,  261,  257,  257,
        0,    0,  255,  261,  258,  258,  255,  261,  259,    0,
      258,    0,  255,    0,    0,  259,  255,  259,  259,    0,
      262,  263,    0,  259,  262,  263,    0,    0,  264,  265,
      262,  263,  264,  265,  262,  263,  263,  266,  264,  265,

        0,    0,  264,  265,    0,  266,  267,    0,    0,  266,
      268,    0,  266,    0,  267,  268,  269,    0,  267,    0,
      267,  267,  270,  268,  269,  271,  270,  268,  269,  271,
      268,  269,  270,  272,  273,  271,  270,  272,  273,  271,
        0,  274,  275,  272,  273,    0,    0,  272,  273,  274,
      276,  275,  275,  274,  276,  277,  274,  275,  278,  277,
      276,  279,    0,    0,  276,  277,    0,  278,  278,  277,
      279,  279,  280,  278,  281,    0,  279,    0,    0,    0,
        0,  280,  280,  281,  281,  282,    0,  280,  283,  281,
      281,    0,  287,  284,  282,  282,  287,  283,  283,  285,

      282,  284,  287,  283,  286,  284,  287,  285,  284,  286,
        0,  285,  288,    0,  285,  289,  288,  286,  289,  289,
        0,  286,  288,  290,  286,  289,  288,  290,  291,  289,
      292,    0,  291,  290,  293,    0,    0,  290,  291,  292,
      292,    0,  291,  293,  293,  292,    0,  294,    0,  293,
      294,  295,    0,  293,    0,  296,  294,  294,  297,    0,
      295,  295,  294,  296,  298,  297,  295,  296,  303,  297,
      296,  298,  295,    0,  297,  298,  299,  303,    0,  303,
      298,    0,    0,  299,  302,    0,  304,  299,  302,  303,
        0,  299,  299,  306,  302,  304,    0,  304,  302,  305,

      305,    0,  306,    0,  306,    0,    0,  304,  307,  305,
      306,  305,  307,  308,  306,  309,  310,  308,  307,  309,
      310,  305,  307,  308,    0,  309,  310,  308,  308,  309,
      310,  310,  311,  317,  312,  311,  312,  317,  312,  311,
        0,  317,  318,    0,  312,  311,  318,  317,  312,  311,
      319,  317,  318,  321,  319,  320,  318,  321,  320,  320,
      319,    0,  322,  321,  319,  320,  322,  321,  321,  320,
      323,    0,  322,  324,    0,    0,  322,  324,  325,  323,
      323,    0,  324,  324,  326,  323,  325,  327,  324,    0,
      325,  327,  326,  325,  328,    0,  326,  327,    0,  326,

      329,  327,  328,  330,  329,  331,  328,    0,    0,  328,
      329,  330,  332,  331,  329,  330,  333,  331,  330,  334,
      331,  332,  332,    0,    0,  333,  333,  332,  334,  335,
      334,  333,  336,  335,    0,  337,    0,  340,    0,  335,
      334,  336,  336,  335,  337,  340,  337,  336,  338,  340,
      339,    0,  340,  341,  339,  350,  337,  338,    0,  338,
      339,  341,  350,  343,  339,  341,  350,  343,  341,  338,
      342,  350,  342,  343,    0,    0,  344,  343,  342,  345,
      344,    0,  342,  345,  346,  342,  344,    0,  346,  345,
      344,  347,  346,  345,    0,    0,  348,  349,  346,  347,

        0,    0,  346,  347,  348,  349,  347,  351,  348,  349,
      352,  348,  349,  353,  351,    0,    0,  352,  351,  355,
      353,  352,    0,  351,  353,  354,  352,  355,    0,  353,
      356,  355,  354,    0,  355,  357,  354,    0,  356,    0,
        0,  354,  356,  357,  358,  356,    0,  357,  358,  359,
      357,  360,  361,  359,  358,  360,  361,    0,  358,  359,
      362,  360,  361,  359,  362,  360,  361,  363,    0,  366,
      362,  363,  364,  366,  362,    0,  364,  363,    0,  366,
      364,  363,  363,  366,  367,  368,  364,    0,  367,  368,
      364,  365,  365,  365,  367,  368,  369,  370,  367,  368,

      369,  370,    0,    0,  369,  379,  371,  370,  365,  377,
      369,  370,  379,  377,  369,  371,  379,  371,  365,  377,
      372,  379,  373,  377,    0,  365,  374,  371,  365,  372,
      372,  373,  373,  375,  374,  372,  376,  373,  374,    0,
      378,  374,  375,  375,  378,  376,    0,  376,  375,  380,
      378,  381,    0,    0,  378,    0,  380,  376,  383,  381,
      380,  382,  383,  381,    0,  380,  381,  384,  383,  382,
      386,    0,  383,  382,  386,  384,  382,  385,    0,  384,
      386,    0,  384,  387,  386,  385,  388,  387,  389,  385,
      388,  385,  385,  387,    0,  389,  388,  387,  390,  389,

      388,  388,    0,    0,  389,  390,  391,    0,    0,  390,
      393,    0,  392,  391,  390,  394,  392,  391,  392,  393,
        0,  393,  391,  392,  394,    0,  394,  392,  395,  396,
        0,  393,  392,    0,    0,    0,  394,  395,  396,  395,
      396,    0,  397,  398,    0,  395,  396,    0,    0,  395,
      396,  397,  398,  397,  398,  399,    0,    0,    0,  397,
        0,    0,  399,  397,  398,  400,  399,    0,  401,  400,
      402,  399,  401,  403,    0,  400,  404,  402,  401,  400,
      403,  402,  401,  404,  403,    0,  402,  404,  405,  403,
      406,  404,  404,    0,    0,  405,  407,  406,    0,  405,

        0,  406,  408,  407,  405,  406,  406,  407,    0,  408,
      409,  410,  407,  408,  409,  410,    0,    0,  408,  411,
      409,  410,    0,  412,  409,  410,  410,  412,  411,  411,
        0,  413,  414,  412,  411,  413,  414,  412,    0,  415,
        0,  413,  414,  415,    0,  413,  414,  417,  416,  415,
      416,  417,  416,  415,    0,  418,  419,  417,  416,  418,
        0,  417,  416,  420,  419,  418,    0,  420,  419,  418,
        0,  419,  421,  420,  425,  421,  421,  420,    0,  426,
      427,  425,  421,  426,  428,  425,  421,  427,  428,  426,
      425,  427,    0,  426,  428,  429,  427,  430,  428,  429,

      431,  430,  432,    0,  431,  429,  432,  430,  434,  429,
      431,  430,  432,  433,  431,  434,  432,  433,  435,  434,
        0,    0,    0,  433,  434,  435,  436,  433,  437,  435,
      436,    0,    0,  433,  435,  437,    0,  436,  435,  437,
      438,  436,    0,  439,  437,    0,  436,  439,  438,    0,
      440,    0,  438,  439,  440,  438,    0,  439,  441,  442,
      440,  444,  441,  443,  440,    0,  442,  443,  441,  444,
      442,    0,  441,  444,  443,  442,  444,  445,  443,    0,
        0,    0,  446,  443,    0,  445,  446,  447,  448,  445,
        0,  445,  445,    0,  446,  447,  448,  449,  446,  447,

      448,  446,  447,  448,  450,  449,    0,    0,  451,  449,
        0,  451,  449,  450,  450,  452,    0,  453,  452,  450,
      451,  451,  454,  455,    0,  453,  451,  452,  452,  453,
      454,  455,  453,  452,  454,  455,  454,  454,  455,  456,
      458,  457,    0,  458,    0,    0,    0,    0,  456,  456,
      457,  457,  458,  458,  456,  459,  457,    0,  458,  460,
      461,  459,  462,    0,  459,  459,    0,  460,  461,  462,
      459,  460,  461,  462,  460,  461,  463,  464,  462,  463,
      580,  580,  580,  463,  464,    0,    0,  463,  464,  469,
        0,  468,  463,  464,  468,    0,  469,  580,  468,  470,

      469,    0,  468,  470,  471,  469,  472,  468,  471,  470,
      472,  473,  471,  470,    0,  473,  472,  474,  471,  473,
      472,  474,  471,  475,    0,  473,  472,  474,    0,  473,
      475,  474,  477,  476,  475,  478,  477,    0,    0,  475,
      476,    0,  478,  477,  476,    0,  478,  477,  479,  476,
      480,  478,  477,    0,    0,  479,  481,  480,    0,  479,
        0,  480,  483,  481,  479,  482,  480,  481,  484,  482,
      483,  481,  481,  485,  483,  482,  484,  483,  486,  482,
      484,  485,    0,  484,    0,  485,  486,  487,  485,    0,
      486,    0,  486,  486,  490,  487,  488,  488,  489,  487,

        0,    0,  487,  490,  488,  490,  489,    0,  488,    0,
      489,  488,  491,  489,  493,  490,  491,  492,  493,  494,
        0,  492,  491,  494,  493,  492,  491,    0,  493,  494,
      495,  492,  496,  494,  495,  492,  496,    0,  497,    0,
      495,  498,  496,    0,  495,  498,  496,  497,  497,    0,
        0,  498,  500,  497,  499,  498,  500,  499,  499,  501,
        0,  502,  500,  501,  499,  502,  500,  503,  499,  501,
      504,  502,    0,  501,  506,  502,  503,  503,  505,  504,
      504,  505,  503,  506,  506,  504,  508,    0,  509,  506,
      505,  505,  507,  510,  508,  507,  505,  509,  508,  509,

        0,  508,  510,  510,  507,  507,  511,  512,  510,  509,
      507,    0,    0,  515,  511,  512,  513,  515,  511,  512,
      514,  511,  512,  515,  516,  513,  513,  515,  516,  514,
      514,  513,  519,  520,  516,  514,  519,  520,  516,  516,
        0,  514,  519,  520,  521,  522,  519,  520,    0,    0,
      524,  521,  522,    0,    0,  521,  522,  523,  524,  525,
      521,  522,  524,  526,  523,  524,  525,  526,  523,  527,
      525,    0,    0,  523,  526,  525,  527,  528,  526,  529,
      527,    0,    0,  526,  528,  527,  529,  530,  528,    0,
      529,  530,  531,  528,    0,  529,  531,  530,  532,    0,

        0,  530,  531,  533,    0,  532,  531,  534,    0,  532,
        0,  535,  533,  533,  532,  535,  534,  534,  533,  536,
      537,  535,  534,  536,  537,  535,    0,  538,  539,  536,
      537,  538,  539,  536,  537,  537,  540,  538,  539,  536,
        0,  538,  539,  540,  541,    0,  542,  540,    0,    0,
        0,  541,  540,  542,  544,  541,  543,  542,  544,    0,
      541,  542,  542,  543,  544,  545,  546,  543,  544,  545,
      546,  543,  543,  547,  548,  545,  546,    0,    0,  545,
      546,  548,  547,    0,  547,  548,  549,    0,    0,  550,
      548,  550,    0,  549,  547,    0,  550,  549,    0,  551,

      550,    0,  549,  551,  552,  550,  553,  557,  552,  551,
      553,  557,    0,  551,  552,  558,  553,  557,  552,  558,
      553,  557,  559,  560,    0,  558,    0,    0,    0,  558,
      560,  559,  559,  561,  560,  562,  563,  559,    0,  560,
      561,    0,  562,  563,  561,    0,  562,  563,  564,  561,
      565,  562,  563,    0,    0,  564,  566,  565,  567,  564,
        0,  565,    0,  566,  564,  567,  565,  566,    0,  567,
        0,  568,  566,  569,  567,  568,    0,    0,    0,    0,
      569,  570,  568,  571,  569,    0,  568,    0,  570,  569,
      571,  568,  570,  572,  571,  572,  570,  570,    0,  571,

      572,  573,    0,    0,  572,    0,    0,    0,  573,  572,
      574,  575,  573,  575,  574,  575,  573,  573,  576,  577,
      574,  575,  576,    0,  574,  575,  578,  577,  576,  579,
      578,  577,  576,  579,  577,  581,  578,  579,  582,  581,
      578,    0,  582,  579,    0,  581,  583,  579,  582,  581,
      583,  584,  582,  585,    0,    0,  583,    0,  584,    0,
      583,  585,  584,  586,    0,  585,  587,  584,  585,  588,
      587,  586,    0,  588,    0,  586,  587,  586,  586,  588,
      587,  589,  590,  588,  591,  589,  590,    0,  591,  592,
        0,  589,  590,  592,  591,  589,  590,  593,  591,  592,

      594,    0,    0,  592,  594,  593,    0,  597,    0,  593,
      594,  597,  593,    0,  594,  598,  599,  597,    0,  598,
      599,  597,    0,    0,  599,  598,  600,    0,  601,  598,
      599,    0,    0,  600,  599,  601,  602,  600,    0,  601,
        0,    0,  600,  602,  601,  603,  604,  602,    0,  603,
      604,  602,  602,  605,  606,  603,  604,  605,  606,  603,
      604,  607,  608,  605,  606,  607,  608,  605,  606,  609,
      610,  607,  608,  609,  610,  607,  608,  611,  613,  609,
      610,  611,    0,  609,  610,  612,  613,  611,    0,  612,
      613,  611,  611,  613,  614,  612,  615,  616,  614,  612,

      615,    0,    0,  617,  614,  616,  615,  617,  614,  616,
      615,  618,  616,  617,  619,  618,  619,  617,  619,  620,
        0,  618,  620,  620,  619,  618,  618,  621,  619,  620,
      622,  621,  627,  620,  622,  626,  627,  621,    0,  626,
      622,  621,  627,  626,  622,    0,  627,  628,  629,  626,
      630,  628,  629,  626,  630,  631,    0,  628,  629,  631,
      630,  628,  629,  632,  630,  631,    0,  632,  633,  631,
      631,    0,  633,  632,    0,    0,  634,  632,  633,    0,
      635,  681,  633,  633,  634,  635,  636,    0,  634,    0,
      681,  634,  681,  635,  636,  637,  637,  635,  636,  647,

      635,  636,  681,  637,  638,  639,    0,  637,  647,  647,
      637,    0,  638,  639,  647,    0,  638,  639,  641,  638,
      639,  640,  640,  640,    0,  642,  641,    0,    0,  642,
      641,    0,    0,  641,    0,  642,    0,  645,  640,  642,
      643,  643,  643,    0,  644,  645,    0,  646,  644,  645,
        0,  648,  645,    0,  644,  646,  651,  643,  644,  646,
      648,  648,  646,  649,  651,  650,  648,    0,  651,  652,
      643,  651,  649,  649,  650,  650,    0,  652,  649,  653,
      650,  652,  659,  652,  652,  654,  659,  653,    0,    0,
      657,  653,  659,  654,  653,    0,  659,  654,  657,  658,

      654,  658,  657,    0,  657,  657,  660,  658,    0,    0,
      660,  658,    0,    0,  658,  661,  660,  661,  662,  661,
      660,    0,    0,    0,  663,  661,  662,  660,  663,  661,
      662,  664,    0,  662,  663,  664,    0,    0,  663,  665,
      666,  664,    0,  665,  666,  664,  664,  667,  668,  665,
      666,  667,    0,  665,  666,  669,  668,  667,    0,  669,
      668,  667,  667,  668,  670,  669,  670,  671,  670,  669,
        0,  671,  672,    0,  670,  673,  672,  671,  670,  673,
      674,  671,  672,  673,  674,    0,  672,    0,    0,  673,
      674,  679,    0,  673,  674,  675,  675,  675,  680,    0,

      679,  679,    0,    0,    0,  682,  679,  680,  680,  682,
      683,    0,  675,  680,  683,  682,    0,  684,    0,  682,
      683,  684,    0,    0,  683,  685,  687,  684,    0,  685,
        0,  684,  684,  686,  687,  685,  692,  686,  687,  685,
      685,  687,  688,  686,  692,    0,  689,  686,  692,  688,
      689,  692,    0,  688,    0,  691,  689,    0,  688,  691,
      689,  690,  690,  690,  694,  691,  696,  696,  696,  691,
      701,    0,  694,  695,  701,  697,  694,    0,  690,  694,
      701,  695,  697,  696,  701,  695,  697,  698,  695,    0,
        0,  697,  702,    0,  698,  703,  702,  690,  698,  703,

      704,    0,  702,  698,  704,  703,  702,  698,  705,  703,
      704,  706,  705,  707,  704,  706,    0,  707,  705,    0,
      708,  706,  705,  707,  708,  706,  706,  707,  705,  709,
      708,  710,    0,  709,  708,  710,  711,  709,  712,    0,
      708,  710,    0,  709,  711,  710,  712,  709,  711,  713,
      712,  711,    0,  712,  714,    0,    0,  713,  716,  716,
      716,  713,  714,  720,  713,  713,  714,  720,  714,  714,
      715,    0,  715,  720,  722,  716,  715,  720,  722,  721,
        0,  723,  715,  721,  722,  723,  715,  721,  722,    0,
      724,  723,    0,  721,  724,  723,  716,  721,  725,  726,

      724,    0,  725,    0,  724,  727,  728,  726,  725,  727,
      728,  726,  725,  729,  726,  727,  728,    0,  731,  727,
      728,  729,    0,  732,    0,  729,  731,    0,  729,    0,
      731,  732,    0,  731,  735,  732,  736,    0,  732,  734,
      734,  734,  735,    0,  736,  738,  735,    0,  736,  735,
        0,  736,    0,  738,  739,  740,  734,  738,  739,  734,
      738,  741,    0,  740,  739,    0,  742,  740,  739,  741,
      740,    0,  743,  741,  742,  744,  741,    0,  742,  743,
        0,  742,  744,  743,    0,  745,  744,  746,  743,    0,
        0,  744,  745,  747,  746,  748,  745,    0,  746,    0,

      747,  745,  748,  746,  747,  749,  748,  753,    0,  747,
        0,  748,    0,    0,  749,  749,  753,  753,  754,    0,
      749,  755,  753,  753,    0,  756,    0,  754,  754,  756,
      755,  755,    0,  754,  757,  756,  755,  758,    0,  756,
      759,  757,    0,    0,  758,  757,    0,  759,  758,    0,
      757,  759,  763,  758,    0,  764,  759,  765,    0,  763,
        0,    0,  766,  763,  764,  764,  765,  765,  763,  766,
      764,    0,  765,  766,  767,  768,  769,    0,  766,  770,
        0,  767,  768,  769,    0,  767,  768,  769,  770,  770,
      767,  768,  769,  773,  770,  774,    0,  773,  786,  774,

        0,  775,  786,  773,  776,  774,    0,  773,  786,  774,
      775,  775,  786,  776,  776,  777,  775,  778,    0,  776,
        0,    0,  777,    0,  778,    0,  777,    0,  778,    0,
        0,  777,    0,  778,  782,  782,  782,  783,  783,  783,
      784,  784,  784,    0,    0,  787,  788,    0,  789,  787,
      788,  782,  789,    0,  783,  787,  788,  784,  789,  787,
      788,    0,  789,  792,  792,  792,  795,    0,  793,    0,
        0,  782,  793,    0,    0,  795,  795,    0,  793,    0,
      792,  795,  793,  800,  800,  800,  803,  803,  803,    0,
        0,    0,    0,  792,    0,    0,    0,    0,    0,    0,

      800,    0,    0,  803,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,  803,  820,  820,  820,  820,  820,
      820,  820,  821,  821,  821,  821,  821,  821,  821,  822,
      822,  822,  822,  822,  822,  822,  823,  823,  823,  823,
      823,  823,  823,  824,  824,  824,  824,  824,  824,  824,
      825,  825,  825,  825,  825,  825,  825,  826,  826,  826,
      826,  826,  826,  826,  827,  827,  827,  827,  827,  827,
      827,  828,  828,  828,  828,  828,  828,  828,  829,  829,
      829,  829,  829,  829,  829,  830,    0,    0,  830,  830,

      830,  830,  831,    0,  831,  831,  832,  832,  832,  832,
      833,  833,  833,  834,    0,  834,  834,  834,  834,  834,
      835,    0,  835,  835,  835,  835,  835,  836,    0,  836,
      836,  836,  836,  836,  837,    0,    0,  837,  837,  837,
      837,  838,    0,  838,  838,  838,  838,  838,  839,    0,
        0,  839,  839,  839,  839,  840,  840,  819,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
      819,  819,  819,  819,  819,  819,  819,  819,  819,  819,

      819,  819,  819,  819
    } ;

static yy_state_type yy_last_accepting_state;
static YY_CHAR *yy_last_accepting_cpos;

/* the intent behind this definition is that it'll catch
 * any uses of REJECT which flex missed
 */
#define REJECT reject_used_but_not_detected
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0

/* these variables are all declared out here so that section 3 code can
 * manipulate them
 */
/* points to current character in buffer */
static YY_CHAR *yy_c_buf_p = (YY_CHAR *) 0;
static int yy_init = 1;		/* whether we need to initialize */
static int yy_start = 0;	/* start state number */

/* flag which is used to allow yywrap()'s to do buffer switches
 * instead of setting up a fresh yyin.  A bit of a hack ...
 */
static int yy_did_buffer_switch_on_eof;

static yy_state_type yy_get_previous_state YY_PROTO(( void ));
static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
static int yy_get_next_buffer YY_PROTO(( void ));
static void yyunput YY_PROTO(( YY_CHAR c, YY_CHAR *buf_ptr ));
void yyrestart YY_PROTO(( FILE *input_file ));
void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
void yy_load_buffer_state YY_PROTO(( void ));
YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));

#define yy_new_buffer yy_create_buffer

#ifdef __cplusplus
static int yyinput YY_PROTO(( void ));
#else
static int input YY_PROTO(( void ));
#endif

YY_DECL
    {
    register yy_state_type yy_current_state;
    register YY_CHAR *yy_cp, *yy_bp;
    register int yy_act;


	static int yy_eq = 0;
	static int i;
	static int filepos;
	static int read_rel_file = FALSE;
	static char yystring[256];
	static char yyfile[50];
	static FILE *yy_t_in;


    if ( yy_init )
	{
	YY_USER_INIT;

	if ( ! yy_start )
	    yy_start = 1;	/* first start state */

	if ( ! yyin )
	    yyin = stdin;

	if ( ! yyout )
	    yyout = stdout;

	if ( yy_current_buffer )
	    yy_init_buffer( yy_current_buffer, yyin );
	else
	    yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );

	yy_load_buffer_state();

	yy_init = 0;
	}

    while ( 1 )		/* loops until end-of-file is reached */
	{
	yy_cp = yy_c_buf_p;

	/* support of yytext */
	*yy_cp = yy_hold_char;

	/* yy_bp points to the position in yy_ch_buf of the start of the
	 * current run.
	 */
	yy_bp = yy_cp;

	yy_current_state = yy_start;
yy_match:
	do
	    {
	    register YY_CHAR yy_c = yy_ec[*yy_cp];
	    if ( yy_accept[yy_current_state] )
		{
		yy_last_accepting_state = yy_current_state;
		yy_last_accepting_cpos = yy_cp;
		}
	    while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
		{
		yy_current_state = yy_def[yy_current_state];
		if ( yy_current_state >= 820 )
		    yy_c = yy_meta[yy_c];
		}
	    yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
	    ++yy_cp;
	    }
	while ( yy_current_state != 819 );
	yy_cp = yy_last_accepting_cpos;
	yy_current_state = yy_last_accepting_state;

yy_find_action:
	yy_act = yy_accept[yy_current_state];

	YY_DO_BEFORE_ACTION;
	YY_USER_ACTION;

do_action:	/* this label is used only to access EOF actions */


	switch ( yy_act )
	    {
	    case 0: /* must backtrack */
	    /* undo the effects of YY_DO_BEFORE_ACTION */
	    *yy_cp = yy_hold_char;
	    yy_cp = yy_last_accepting_cpos;
	    yy_current_state = yy_last_accepting_state;
	    goto yy_find_action;

case 1:
; 
	YY_BREAK
case 2:
BEGIN(comment);
	YY_BREAK
case 3:
/* eat up */
	YY_BREAK
case 4:
BEGIN(INITIAL);
	YY_BREAK
case 5:
{ return MECHO; }
	YY_BREAK
case 6:
{ return RHO; }
	YY_BREAK
case 7:
{ return SOLUTION; }
	YY_BREAK
case 8:
{ return FUNDAMENTAL; }
	YY_BREAK
case 9:
{ return SPECIAL; }
	YY_BREAK
case 10:
{ return QUIT; }
	YY_BREAK
case 11:
{ return ISCONJ; }
	YY_BREAK
case 12:
{ return SHOW; }
	YY_BREAK
case 13:
{ return GRADUATION; }
	YY_BREAK
case 14:
{ return END; }
	YY_BREAK
case 15:
{ return CUT; }
	YY_BREAK
case 16:
{ return COMMUT; }
	YY_BREAK
case 17:
{ return UNITGROUP; }
	YY_BREAK
case 18:
{ return PSI; }
	YY_BREAK
case 19:
{ return VERSION; }
	YY_BREAK
case 20:
{ return CODE; }
	YY_BREAK
case 21:
{ return MCODE; }
	YY_BREAK
case 22:
{ return FULL; }
	YY_BREAK
case 23:
{ return CALC; }
	YY_BREAK
case 24:
{ return MOD; }
	YY_BREAK
case 25:
{ return RED; }
	YY_BREAK
case 26:
{ return IDEAL; }
	YY_BREAK
case 27:
{ return SBASE; }
	YY_BREAK
case 28:
{ return NOBASE; }
	YY_BREAK
case 29:
{ return MEMORY; }
	YY_BREAK
case 30:
{ return SET; }
	YY_BREAK
case 31:
{ return PROMPT; }
	YY_BREAK
case 32:
{ return RESET; }
	YY_BREAK
case 33:
{ return FLAGS; }
	YY_BREAK
case 34:
{ return PRIME; }
	YY_BREAK
case 35:
{ return FETCH; }
	YY_BREAK
case 36:
{ return PRESENTATION; }
	YY_BREAK
case 37:
{ return DECOMPOSE; }
	YY_BREAK
case 38:
{ return PQUOTIENT; }
	YY_BREAK
case 39:
{ return COHOMOLOGY; }
	YY_BREAK
case 40:
{ return EXTORBIT; }
	YY_BREAK
case 41:
{ return LOAD; }
	YY_BREAK
case 42:
{ return SAVE; }
	YY_BREAK
case 43:
{ return TEXT; }
	YY_BREAK
case 44:
{ return LIFT; }
	YY_BREAK
case 45:
{ return SUBLIFT; }
	YY_BREAK
case 46:
{ return SPLIT; }
	YY_BREAK
case 47:
{ return CLASSES; }
	YY_BREAK
case 48:
{ return CENTRE; }
	YY_BREAK
case 49:
{ return CENTRALIZER; }
	YY_BREAK
case 50:
{ return SYMBOLS; }
	YY_BREAK
case 51:
{ return ORDER; }
	YY_BREAK
case 52:
{ yylval.ival = 1; return SIDE; }
	YY_BREAK
case 53:
{ yylval.ival = 0; return SIDE; }
	YY_BREAK
case 54:
{ yylval.ival = 2; return SIDE; }
	YY_BREAK
case 55:
{ return SMALL; }
	YY_BREAK
case 56:
{ return VECTOR; }
	YY_BREAK
case 57:
{ return SLIFT; }
	YY_BREAK
case 58:
{ return LOOKAHEAD; }
	YY_BREAK
case 59:
{ return ADDRESS; }
	YY_BREAK
case 60:
{return REGREP; }
	YY_BREAK
case 61:
{ return INNER; }
	YY_BREAK
case 62:
{ return ALL; }
	YY_BREAK
case 63:
{ return OUTER; }
	YY_BREAK
case 64:
{ return SORTED; }
	YY_BREAK
case 65:
{ yylval.ival = IMAGES; return APRES; }
	YY_BREAK
case 66:
{ yylval.ival = PERMUTATIONS; return APRES; }
	YY_BREAK
case 67:
{ yylval.ival = BINARYP; return APRES; }
	YY_BREAK
case 68:
{ yylval.ival = CYCLES; return APRES; }
	YY_BREAK
case 69:
{ yylval.ival = NONE; return APRES; }
	YY_BREAK
case 70:
{ return VERIFY; }
	YY_BREAK
case 71:
{ return RELATIONS; }
	YY_BREAK
case 72:
{ return LIST; }
	YY_BREAK
case 73:
{ return HELP; }
	YY_BREAK
case 74:
{ return VERBOSE; }
	YY_BREAK
case 75:
{ return PRINT; }
	YY_BREAK
case 76:
{ return VECSPACE; }
	YY_BREAK
case 77:
{ return '*'; }
	YY_BREAK
case 78:
{ return '+'; }
	YY_BREAK
case 79:
{ return COMPLEMENT; }
	YY_BREAK
case 80:
{ return ANNIHILATOR; }
	YY_BREAK
case 81:
{ return PIDEAL; }
	YY_BREAK
case 82:
{ return POTSPACE; }
	YY_BREAK
case 83:
{ return LIEPRODUCT; }
	YY_BREAK
case 84:
{ return CLOSURE; }
	YY_BREAK
case 85:
{ return LIESERIES; }
	YY_BREAK
case 86:
{ return LIEIDEAL; }
	YY_BREAK
case 87:
{ return JSERIES; }
	YY_BREAK
case 88:
{ return LENGTH; }
	YY_BREAK
case 89:
{ yylval.ival = 1; return SWITCH; }
	YY_BREAK
case 90:
{ yylval.ival = 0; return SWITCH; }
	YY_BREAK
case 91:
{ yylval.ival = 1; return SWITCH; }
	YY_BREAK
case 92:
{ yylval.ival = 0; return SWITCH; }
	YY_BREAK
case 93:
{ return DISSTYLE; }
	YY_BREAK
case 94:
{ yylval.ival = GAP; return STYLE; }
	YY_BREAK
case 95:
{ yylval.ival = SISYPHOS; return STYLE; }
	YY_BREAK
case 96:
{ yylval.ival = CAYLEY; return STYLE; }
	YY_BREAK
case 97:
{ return DEFGRP; }
	YY_BREAK
case 98:
{ return DEFPCGRP; }
	YY_BREAK
case 99:
{ return DEFAGGRP; }
	YY_BREAK
case 100:
{ return FPGROUP; }
	YY_BREAK
case 101:
{ return SETDOMAIN; }
	YY_BREAK
case 102:
{ return DGRPRING; }
	YY_BREAK
case 103:
{ return ACTUAL; }
	YY_BREAK
case 104:
{ return USE; }
	YY_BREAK
case 105:
{ return MTABLE; }
	YY_BREAK
case 106:
{ return JTABLE; }
	YY_BREAK
case 107:
{ return INTERACTIVE; }
	YY_BREAK
case 108:
{ return BINARY; }
	YY_BREAK
case 109:
{ return ASCII;}
	YY_BREAK
case 110:
{ return AUTLIST; }
	YY_BREAK
case 111:
{ return AUTGRP; }
	YY_BREAK
case 112:
{ return ASAUTO; }
	YY_BREAK
case 113:
{ return ISOMORPHISMS; }
	YY_BREAK
case 114:
{ return ISOMORPHIC; }
	YY_BREAK
case 115:
{ return ELEMENTS; }
	YY_BREAK
case 116:
{ return WEIGHTS; }
	YY_BREAK
case 117:
{ return MINIMAL; }
	YY_BREAK
case 118:
{ BEGIN(prel); return GENS; }
	YY_BREAK
case 119:
{ return RELS; }
	YY_BREAK
case 120:
{ yy_eq = 0;
							yylval.gval = tallocate ( sizeof ( GENVAL ) ); 
							yylval.gval->pval = tallocate ( yyleng+1 );
							strncpy ( (char *)yylval.gval->pval, yytext, yyleng );
							((char *)yylval.gval->pval)[yyleng] = '\0';
							return GEN; }
	YY_BREAK
case 121:
{ BEGIN(INITIAL);
							if ( read_rel_file ) {
								if ( --fstack_ptr == 0 )
									read_from_file = FALSE;
								fclose ( yyin );
								yy_switch_to_buffer ( fstack[fstack_ptr] );
								read_rel_file = FALSE;
							}
							else
								unput (';'); }
	YY_BREAK
case 122:
;
	YY_BREAK
case 123:
{ yylval.ival = atoi ( yytext );
								if ( yylval.ival == 1 && yy_eq == 1 ) {
									yy_eq = 0;
									return ID;
								}
								else {
									yy_eq = 0;
									return NUM;

							} }
	YY_BREAK
case 124:
{ BEGIN(wprel); return WEIGHTS; }
	YY_BREAK
case 125:
{ yy_eq = 1; return yytext[0]; }
	YY_BREAK
case 126:
{ return yytext[0]; }
	YY_BREAK
case 127:
{ BEGIN(prel); return yytext[0]; }
	YY_BREAK
case 128:
{ return READAUTGRP; }
	YY_BREAK
case 129:
{ BEGIN(rfile); yyfile[0] = '\0'; return READGRP; }
	YY_BREAK
case 130:
{ BEGIN(rfile); yyfile[0] = '\0'; return READPCGRP; }
	YY_BREAK
case 131:
{ BEGIN(rfile); yyfile[0] = '\0'; return READAGGRP; }
	YY_BREAK
case 132:
; 
	YY_BREAK
case 133:
{ BEGIN(rfile1); return '('; }
	YY_BREAK
case 134:
{ BEGIN(INITIAL); return '$'; }
	YY_BREAK
case 135:
{ BEGIN(rfile2); yylval.ival = filepos = atoi ( yytext );
							return NUMBER; }
	YY_BREAK
case 136:
{ BEGIN(INITIAL); return '$'; }
	YY_BREAK
case 137:
{ BEGIN(rfile3); return ','; }
	YY_BREAK
case 138:
{ BEGIN(INITIAL); return '$'; }
	YY_BREAK
case 139:
{ BEGIN(rfile4); yylval.gval = tallocate ( sizeof ( GENVAL ) ); 
							yylval.gval->pval = tallocate ( yyleng-1 );
							strncpy ( (char *)yylval.gval->pval, yytext+1, yyleng-1 );
							((char *)yylval.gval->pval)[yyleng-2] = '\0';
							strcpy ( yyfile, (char *)yylval.gval->pval );
							return STRING; }
	YY_BREAK
case 140:
{ BEGIN(INITIAL); return '$'; }
	YY_BREAK
case 141:
{ BEGIN(INITIAL);
							fstack[fstack_ptr++] = YY_CURRENT_BUFFER;
							if ( yyfile[0] != '\0' && (yy_t_in = fopen ( add_path ( "GROUPDSC", yyfile ), "r" )) != NULL ) {
								read_from_file = TRUE;
								yyin = yy_t_in;
								i = 0;
								do {
									fgets ( yystring, 256, yyin );
									if ( yystring[0] == '-' ) i++;
								} while ( i < filepos );
								yy_switch_to_buffer ( yy_create_buffer ( yyin, YY_BUF_SIZE ) );
								read_rel_file = TRUE;
								return ')';
							}
							else {
								yy_switch_to_buffer ( fstack[--fstack_ptr] );
								set_error ( FILE_OPEN_ERR );
								/* unput ( ';' ); */
								return '$';
							} }
	YY_BREAK
case 142:
{ BEGIN(INITIAL); return '$'; }
	YY_BREAK
case 143:
{ BEGIN(bfile); yyfile[0] = '\0'; return BATCH; }
	YY_BREAK
case 144:
;
	YY_BREAK
case 145:
{ BEGIN(bfile1); return '('; }
	YY_BREAK
case 146:
{ BEGIN(INITIAL); return '$'; }
	YY_BREAK
case 147:
{ BEGIN(bfile2);
							yylval.gval = tallocate ( sizeof ( GENVAL ) ); 
							yylval.gval->pval = tallocate ( yyleng-1 );
							strncpy ( (char *)yylval.gval->pval, yytext+1, yyleng-1 );
							((char *)yylval.gval->pval)[yyleng-2] = '\0';
							strcpy ( yyfile, (char *)yylval.gval->pval );
							return STRING; }
	YY_BREAK
case 148:
{ BEGIN(INITIAL); return '$'; }
	YY_BREAK
case 149:
{ BEGIN(bfile3); return ')'; }
	YY_BREAK
case 150:
{ BEGIN(INITIAL); return '$'; }
	YY_BREAK
case 151:
{ BEGIN(INITIAL);
							fstack[fstack_ptr++] = YY_CURRENT_BUFFER;
							if ( yyfile[0] != '\0' && (yy_t_in = fopen ( yyfile, "r" )) != NULL ) {
								yyin = yy_t_in;
								yy_switch_to_buffer ( yy_create_buffer ( yyin, YY_BUF_SIZE ) );
								read_from_file = TRUE;
								return ';';
							}
							else {
								yy_switch_to_buffer ( fstack[--fstack_ptr] );
								set_error ( FILE_OPEN_ERR );
								unput ( ';' );
								return '$';
							} }
	YY_BREAK
case 152:
{ BEGIN(INITIAL); return '$'; }
	YY_BREAK
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(prel):
case YY_STATE_EOF(comment):
case YY_STATE_EOF(wprel):
case YY_STATE_EOF(rfile):
case YY_STATE_EOF(rfile1):
case YY_STATE_EOF(rfile2):
case YY_STATE_EOF(rfile3):
case YY_STATE_EOF(rfile4):
case YY_STATE_EOF(bfile):
case YY_STATE_EOF(bfile1):
case YY_STATE_EOF(bfile2):
case YY_STATE_EOF(bfile3):
{ if ( --fstack_ptr == 0 )
								read_from_file = FALSE;
							fclose ( yyin );
							yy_switch_to_buffer ( fstack[fstack_ptr] );
							}
	YY_BREAK
case 154:
{ yylval.ival = atoi ( yytext );  return NUMBER; }
	YY_BREAK
case 155:
{ yylval.gval = tallocate ( sizeof ( GENVAL ) );
							yylval.gval->pval = tallocate ( yyleng-1 );
							strncpy ( (char *)yylval.gval->pval, yytext+1, yyleng-1 );
							((char *)yylval.gval->pval)[yyleng-2] = '\0';
							return STRING; }
	YY_BREAK
case 156:
{ if ( (i=findcgen ( yytext, yyleng) ) == -1 ) {
								yylval.gval = tallocate ( sizeof ( GENVAL ) );
								yylval.gval->pval = tallocate ( yyleng );
								strcpy ( (char *)yylval.gval->pval, yytext );
								return IDENTIFIER;
							}
							else {
								yylval.ival = i;
								if ( read_group_el )
									return GRGEN;
								else
									return CGEN;
							}
							}
	YY_BREAK
case 157:
{ if ( (i=findcgen ( yytext, yyleng) ) == -1 ) {
								yylval.gval = tallocate ( sizeof ( GENVAL ) );
								yylval.gval->pval = tallocate ( yyleng );
								strcpy ( (char *)yylval.gval->pval, yytext );
								return IDENTIFIER;
							}
							else {
								yylval.ival = i;
								if ( read_group_el )
									return GRGEN;
								else
									return NGEN;
							}
							}
	YY_BREAK
case 158:
{ if ( read_group_el ) {
								yylval.ival = -1;
								return GRGEN;
							}
							else {
								yylval.ival = 1;
								return NUMBER;
							}
							}
	YY_BREAK
case 159:
{ yylval.gval = tallocate ( sizeof ( GENVAL ) );
							yylval.gval->pval = tallocate ( yyleng );
							strcpy ( (char *)yylval.gval->pval, yytext );
							return IDENTIFIER; }
	YY_BREAK
case 160:
{ return yytext[0]; }
	YY_BREAK
case 161:
ECHO;
	YY_BREAK

	    case YY_END_OF_BUFFER:
		{
		/* amount of text matched not including the EOB char */
		int yy_amount_of_matched_text = yy_cp - yytext - 1;

		/* undo the effects of YY_DO_BEFORE_ACTION */
		*yy_cp = yy_hold_char;

		/* note that here we test for yy_c_buf_p "<=" to the position
		 * of the first EOB in the buffer, since yy_c_buf_p will
		 * already have been incremented past the NUL character
		 * (since all states make transitions on EOB to the end-
		 * of-buffer state).  Contrast this with the test in yyinput().
		 */
		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
		    /* this was really a NUL */
		    {
		    yy_state_type yy_next_state;

		    yy_c_buf_p = yytext + yy_amount_of_matched_text;

		    yy_current_state = yy_get_previous_state();

		    /* okay, we're now positioned to make the
		     * NUL transition.  We couldn't have
		     * yy_get_previous_state() go ahead and do it
		     * for us because it doesn't know how to deal
		     * with the possibility of jamming (and we
		     * don't want to build jamming into it because
		     * then it will run more slowly)
		     */

		    yy_next_state = yy_try_NUL_trans( yy_current_state );

		    yy_bp = yytext + YY_MORE_ADJ;

		    if ( yy_next_state )
			{
			/* consume the NUL */
			yy_cp = ++yy_c_buf_p;
			yy_current_state = yy_next_state;
			goto yy_match;
			}

		    else
			{
			    yy_cp = yy_last_accepting_cpos;
			    yy_current_state = yy_last_accepting_state;
			goto yy_find_action;
			}
		    }

		else switch ( yy_get_next_buffer() )
		    {
		    case EOB_ACT_END_OF_FILE:
			{
			yy_did_buffer_switch_on_eof = 0;

			if ( yywrap() )
			    {
			    /* note: because we've taken care in
			     * yy_get_next_buffer() to have set up yytext,
			     * we can now set up yy_c_buf_p so that if some
			     * total hoser (like flex itself) wants
			     * to call the scanner after we return the
			     * YY_NULL, it'll still work - another YY_NULL
			     * will get returned.
			     */
			    yy_c_buf_p = yytext + YY_MORE_ADJ;

			    yy_act = YY_STATE_EOF((yy_start - 1) / 2);
			    goto do_action;
			    }

			else
			    {
			    if ( ! yy_did_buffer_switch_on_eof )
				YY_NEW_FILE;
			    }
			}
			break;

		    case EOB_ACT_CONTINUE_SCAN:
			yy_c_buf_p = yytext + yy_amount_of_matched_text;

			yy_current_state = yy_get_previous_state();

			yy_cp = yy_c_buf_p;
			yy_bp = yytext + YY_MORE_ADJ;
			goto yy_match;

		    case EOB_ACT_LAST_MATCH:
			yy_c_buf_p =
			    &yy_current_buffer->yy_ch_buf[yy_n_chars];

			yy_current_state = yy_get_previous_state();

			yy_cp = yy_c_buf_p;
			yy_bp = yytext + YY_MORE_ADJ;
			goto yy_find_action;
		    }
		break;
		}

	    default:
#ifdef FLEX_DEBUG
		printf( "action # %d\n", yy_act );
#endif
		YY_FATAL_ERROR(
			"fatal flex scanner internal error--no action found" );
	    }
	}
    }


/* yy_get_next_buffer - try to read in a new buffer
 *
 * synopsis
 *     int yy_get_next_buffer();
 *     
 * returns a code representing an action
 *     EOB_ACT_LAST_MATCH - 
 *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 *     EOB_ACT_END_OF_FILE - end of file
 */

static int yy_get_next_buffer()

    {
    register YY_CHAR *dest = yy_current_buffer->yy_ch_buf;
    register YY_CHAR *source = yytext - 1; /* copy prev. char, too */
    register int number_to_move, i;
    int ret_val;

    if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
	YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

    /* try to read more data */

    /* first move last chars to start of buffer */
    number_to_move = yy_c_buf_p - yytext;

    for ( i = 0; i < number_to_move; ++i )
	*(dest++) = *(source++);

    if ( yy_current_buffer->yy_eof_status != EOF_NOT_SEEN )
	/* don't do the read, it's not guaranteed to return an EOF,
	 * just force an EOF
	 */
	yy_n_chars = 0;

    else
	{
	int num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1;

	if ( num_to_read > YY_READ_BUF_SIZE )
	    num_to_read = YY_READ_BUF_SIZE;

	else if ( num_to_read <= 0 )
	    YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" );

	/* read in more data */
	YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
		  yy_n_chars, num_to_read );
	}

    if ( yy_n_chars == 0 )
	{
	if ( number_to_move - YY_MORE_ADJ == 1 )
	    {
	    ret_val = EOB_ACT_END_OF_FILE;
	    yy_current_buffer->yy_eof_status = EOF_DONE;
	    }

	else
	    {
	    ret_val = EOB_ACT_LAST_MATCH;
	    yy_current_buffer->yy_eof_status = EOF_PENDING;
	    }
	}

    else
	ret_val = EOB_ACT_CONTINUE_SCAN;

    yy_n_chars += number_to_move;
    yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
    yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;

    /* yytext begins at the second character in yy_ch_buf; the first
     * character is the one which preceded it before reading in the latest
     * buffer; it needs to be kept around in case it's a newline, so
     * yy_get_previous_state() will have with '^' rules active
     */

    yytext = &yy_current_buffer->yy_ch_buf[1];

    return ( ret_val );
    }


/* yy_get_previous_state - get the state just before the EOB char was reached
 *
 * synopsis
 *     yy_state_type yy_get_previous_state();
 */

static yy_state_type yy_get_previous_state()

    {
    register yy_state_type yy_current_state;
    register YY_CHAR *yy_cp;

    yy_current_state = yy_start;

    for ( yy_cp = yytext + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
	{
	register YY_CHAR yy_c = (*yy_cp ? yy_ec[*yy_cp] : 1);
	if ( yy_accept[yy_current_state] )
	    {
	    yy_last_accepting_state = yy_current_state;
	    yy_last_accepting_cpos = yy_cp;
	    }
	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
	    {
	    yy_current_state = yy_def[yy_current_state];
	    if ( yy_current_state >= 820 )
		yy_c = yy_meta[yy_c];
	    }
	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
	}

    return ( yy_current_state );
    }


/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *     next_state = yy_try_NUL_trans( current_state );
 */

#ifdef YY_USE_PROTOS
static yy_state_type yy_try_NUL_trans( register yy_state_type yy_current_state )
#else
static yy_state_type yy_try_NUL_trans( yy_current_state )
register yy_state_type yy_current_state;
#endif

    {
    register int yy_is_jam;
    register YY_CHAR *yy_cp = yy_c_buf_p;

    register YY_CHAR yy_c = 1;
    if ( yy_accept[yy_current_state] )
	{
	yy_last_accepting_state = yy_current_state;
	yy_last_accepting_cpos = yy_cp;
	}
    while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
	{
	yy_current_state = yy_def[yy_current_state];
	if ( yy_current_state >= 820 )
	    yy_c = yy_meta[yy_c];
	}
    yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
    yy_is_jam = (yy_current_state == 819);

    return ( yy_is_jam ? 0 : yy_current_state );
    }


#ifdef YY_USE_PROTOS
static void yyunput( YY_CHAR c, register YY_CHAR *yy_bp )
#else
static void yyunput( c, yy_bp )
YY_CHAR c;
register YY_CHAR *yy_bp;
#endif

    {
    register YY_CHAR *yy_cp = yy_c_buf_p;

    /* undo effects of setting up yytext */
    *yy_cp = yy_hold_char;

    if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
	{ /* need to shift things up to make room */
	register int number_to_move = yy_n_chars + 2; /* +2 for EOB chars */
	register YY_CHAR *dest =
	    &yy_current_buffer->yy_ch_buf[yy_current_buffer->yy_buf_size + 2];
	register YY_CHAR *source =
	    &yy_current_buffer->yy_ch_buf[number_to_move];

	while ( source > yy_current_buffer->yy_ch_buf )
	    *--dest = *--source;

	yy_cp += dest - source;
	yy_bp += dest - source;
	yy_n_chars = yy_current_buffer->yy_buf_size;

	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
	    YY_FATAL_ERROR( "flex scanner push-back overflow" );
	}

    if ( yy_cp > yy_bp && yy_cp[-1] == '\n' )
	yy_cp[-2] = '\n';

    *--yy_cp = c;

    /* note: the formal parameter *must* be called "yy_bp" for this
     *       macro to now work correctly
     */
    YY_DO_BEFORE_ACTION; /* set up yytext again */
    }


#ifdef __cplusplus
static int yyinput()
#else
static int input()
#endif

    {
    int c;
    YY_CHAR *yy_cp = yy_c_buf_p;

    *yy_cp = yy_hold_char;

    if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
	{
	/* yy_c_buf_p now points to the character we want to return.
	 * If this occurs *before* the EOB characters, then it's a
	 * valid NUL; if not, then we've hit the end of the buffer.
	 */
	if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
	    /* this was really a NUL */
	    *yy_c_buf_p = '\0';

	else
	    { /* need more input */
	    yytext = yy_c_buf_p;
	    ++yy_c_buf_p;

	    switch ( yy_get_next_buffer() )
		{
		case EOB_ACT_END_OF_FILE:
		    {
		    if ( yywrap() )
			{
			yy_c_buf_p = yytext + YY_MORE_ADJ;
			return ( EOF );
			}

		    YY_NEW_FILE;

#ifdef __cplusplus
		    return ( yyinput() );
#else
		    return ( input() );
#endif
		    }
		    break;

		case EOB_ACT_CONTINUE_SCAN:
		    yy_c_buf_p = yytext + YY_MORE_ADJ;
		    break;

		case EOB_ACT_LAST_MATCH:
#ifdef __cplusplus
		    YY_FATAL_ERROR( "unexpected last match in yyinput()" );
#else
		    YY_FATAL_ERROR( "unexpected last match in input()" );
#endif
		}
	    }
	}

    c = *yy_c_buf_p;
    yy_hold_char = *++yy_c_buf_p;

    return ( c );
    }


#ifdef YY_USE_PROTOS
void yyrestart( FILE *input_file )
#else
void yyrestart( input_file )
FILE *input_file;
#endif

    {
    yy_init_buffer( yy_current_buffer, input_file );
    yy_load_buffer_state();
    }


#ifdef YY_USE_PROTOS
void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
#else
void yy_switch_to_buffer( new_buffer )
YY_BUFFER_STATE new_buffer;
#endif

    {
    if ( yy_current_buffer == new_buffer )
	return;

    if ( yy_current_buffer )
	{
	/* flush out information for old buffer */
	*yy_c_buf_p = yy_hold_char;
	yy_current_buffer->yy_buf_pos = yy_c_buf_p;
	yy_current_buffer->yy_n_chars = yy_n_chars;
	}

    yy_current_buffer = new_buffer;
    yy_load_buffer_state();

    /* we don't actually know whether we did this switch during
     * EOF (yywrap()) processing, but the only time this flag
     * is looked at is after yywrap() is called, so it's safe
     * to go ahead and always set it.
     */
    yy_did_buffer_switch_on_eof = 1;
    }


#ifdef YY_USE_PROTOS
void yy_load_buffer_state( void )
#else
void yy_load_buffer_state()
#endif

    {
    yy_n_chars = yy_current_buffer->yy_n_chars;
    yytext = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
    yyin = yy_current_buffer->yy_input_file;
    yy_hold_char = *yy_c_buf_p;
    }


#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
#else
YY_BUFFER_STATE yy_create_buffer( file, size )
FILE *file;
int size;
#endif

    {
    YY_BUFFER_STATE b;

    b = (YY_BUFFER_STATE) malloc( sizeof( struct yy_buffer_state ) );

    if ( ! b )
	YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

    b->yy_buf_size = size;

    /* yy_ch_buf has to be 2 characters longer than the size given because
     * we need to put in 2 end-of-buffer characters.
     */
    b->yy_ch_buf = (YY_CHAR *) malloc( (unsigned) (b->yy_buf_size + 2) );

    if ( ! b->yy_ch_buf )
	YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

    yy_init_buffer( b, file );

    return ( b );
    }


#ifdef YY_USE_PROTOS
void yy_delete_buffer( YY_BUFFER_STATE b )
#else
void yy_delete_buffer( b )
YY_BUFFER_STATE b;
#endif

    {
    if ( b == yy_current_buffer )
	yy_current_buffer = (YY_BUFFER_STATE) 0;

    free( (char *) b->yy_ch_buf );
    free( (char *) b );
    }


#ifdef YY_USE_PROTOS
void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
#else
void yy_init_buffer( b, file )
YY_BUFFER_STATE b;
FILE *file;
#endif

    {
    b->yy_input_file = file;

    /* we put in the '\n' and start reading from [1] so that an
     * initial match-at-newline will be true.
     */

    b->yy_ch_buf[0] = '\n';
    b->yy_n_chars = 1;

    /* we always need two end-of-buffer characters.  The first causes
     * a transition to the end-of-buffer state.  The second causes
     * a jam in that state.
     */
    b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
    b->yy_ch_buf[2] = YY_END_OF_BUFFER_CHAR;

    b->yy_buf_pos = &b->yy_ch_buf[1];

    b->yy_eof_status = EOF_NOT_SEEN;
    }


void put_back ( char c )
{
	unput ( c );
}
						
