fortran-src-0.1.0.1: src/Language/Fortran/Lexer/FixedForm.hs
{-# LANGUAGE CPP #-}
{-# LINE 1 "FixedForm.x" #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE UndecidableInstances #-}
module Language.Fortran.Lexer.FixedForm where
import Data.Word (Word8)
import Data.Char (toLower, isDigit, ord)
import Data.List (isPrefixOf, isSuffixOf, any)
import Data.Maybe (fromJust, isNothing)
import Data.Data
import Data.Typeable
import qualified Data.Bits
import Control.Exception
import Control.Monad.State
import Control.Monad (liftM2)
import GHC.Exts
import GHC.Generics
import Language.Fortran.ParserMonad
import Language.Fortran.Util.FirstParameter
import Language.Fortran.Util.Position
import Debug.Trace
#if __GLASGOW_HASKELL__ >= 603
#include "ghcconfig.h"
#elif defined(__GLASGOW_HASKELL__)
#include "config.h"
#endif
#if __GLASGOW_HASKELL__ >= 503
import Data.Array
import Data.Char (ord)
import Data.Array.Base (unsafeAt)
#else
import Array
import Char (ord)
#endif
alex_base :: Array Int Int
alex_base = listArray (0,588) [-9,237,316,429,-59,-44,424,-98,-99,-86,552,-97,-101,1,-80,-95,-88,-89,0,665,13,-79,-67,-92,-87,-73,-84,0,730,203,23,-18,-15,-14,-11,-10,-8,-7,14,35,36,37,38,60,986,922,0,0,0,252,268,326,336,0,0,0,0,0,39,40,0,0,0,0,0,343,0,1130,1158,1233,1261,1336,1364,1439,1467,1542,1570,1645,1673,1748,1776,1851,1879,1954,1982,2057,2085,2160,2188,2263,2291,2366,2394,2469,2497,2572,2600,2675,2703,2778,2806,2881,2909,2984,3012,3087,3115,3190,3218,3293,3321,3396,3424,3499,3527,3602,3630,3705,3733,3808,3836,3911,3939,4014,4042,4117,4145,4220,4248,4323,4351,4426,4454,4529,4557,4632,4660,4735,4763,4838,4866,4941,4969,5044,5072,5147,5175,5250,5278,5353,5381,5456,5484,5559,5587,5662,5690,5765,5793,5868,5896,5971,5999,6074,6102,6177,6205,6280,6308,6383,6411,6486,6514,6589,6617,6692,6720,6795,6823,6898,6926,7001,7029,7104,7132,7207,7235,7310,7338,7413,7441,7516,7544,7619,7647,7722,7750,7825,7853,7928,7956,8031,8059,8134,8162,8237,8265,8340,8368,8443,8471,8546,8574,8649,8677,8752,8780,8855,8883,8958,8986,9061,9089,9164,9192,9267,9295,9370,9398,9473,9501,9576,9604,9679,9707,9782,9810,9885,9913,9988,10016,10091,10119,10194,10222,10297,10325,10400,10428,10503,10531,10606,10634,10709,10737,10812,10840,10915,0,10943,11018,11046,11121,11149,11224,11252,11327,11355,11430,11458,11533,11561,11636,11664,11739,11767,11842,11870,11945,11973,12048,12076,12151,12179,12254,12282,12357,12385,12460,12488,12563,12591,12666,12694,12769,12797,12872,12900,12975,13003,13078,13106,13181,13209,13284,13312,13387,13415,13490,13518,13593,13621,13696,13724,13799,13827,13902,13930,14005,14033,14108,14136,14211,14239,14314,14342,14417,14445,14520,14548,14623,14651,14726,14754,14829,14857,14932,14960,15035,15063,15138,15166,24,15241,15269,15344,15372,15447,15475,15550,15578,15653,346,446,15681,15758,15786,15861,15889,15966,15994,16071,16099,16176,16204,16281,16309,16386,16414,16491,16519,16596,16624,16701,16729,16806,16834,16911,16939,17016,17044,17121,17149,17226,17254,17331,17359,17436,17464,17541,17569,17646,17674,17751,17779,17856,17884,17961,17989,18066,18094,18171,18199,18276,18304,18381,18409,18486,456,468,1140,18512,0,0,0,212,0,0,46,48,0,0,0,0,0,31,0,0,0,32,0,0,0,0,0,0,0,1243,18585,18613,18688,18716,18791,18819,18894,18922,18997,19025,19100,19128,19203,19231,19306,19334,19409,19437,19512,19540,19615,19643,19718,19746,19821,19849,19924,1346,0,0,19952,20027,20055,20130,20158,20233,20261,20336,20364,20439,20467,20542,20570,20645,20673,20748,20776,20851,20879,20954,20982,21057,21085,21160,21188,21263,21291,21366,21394,21469,21497,21572,21600,21675,21703,21778,21806,21883,21911,21988,22016,22091,22119,22194,22222,22302,22330,22405,22433,22508,22536,22611,22639,22714,22742,22817,22845,22920,22948,23023,23051,23126,23154,0,1451,23229,23257,23332,23360,23435,23463,23538,23566,23641,23669,23744,23772,23847,23875,23950,23978,24053,24081,24156,24184,24259,24287,24362,24390,24465,24493,24568,24596,24673,24701,24778,24806,24883,24911,24988,25016,25093,25121,25198,25226,25303,25331,25408,25436,25513,25541,25618,25646,25723,25751,25826,25854,25929,25957,26032,0]
alex_table :: Array Int Int
alex_table = listArray (0,26287) [0,56,428,42,55,465,465,465,465,465,465,465,465,465,34,33,7,16,7,12,11,25,31,54,47,24,37,40,436,39,41,435,434,47,35,433,432,32,431,424,52,52,52,52,52,52,52,52,52,36,20,20,20,20,20,20,20,20,20,30,423,20,20,20,20,20,20,20,20,20,20,437,437,437,437,437,437,437,437,437,437,422,421,420,413,427,62,62,417,63,47,47,426,430,0,0,0,0,0,23,0,0,0,0,0,0,0,38,352,352,352,352,352,352,352,352,352,352,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,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,44,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,45,6,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,10,18,18,18,19,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,56,0,0,57,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,4,0,0,0,0,0,412,59,61,418,414,64,416,65,419,410,410,410,410,410,410,410,410,410,410,66,0,425,342,429,50,50,50,50,50,50,50,50,50,50,0,0,0,0,0,467,51,51,51,51,51,51,51,51,51,51,56,0,0,57,0,0,0,0,496,496,496,512,512,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,64,0,0,0,410,410,410,410,410,410,410,410,410,410,48,48,48,48,48,48,48,48,48,48,49,49,49,49,49,49,49,49,49,49,352,352,352,352,352,352,352,352,352,352,0,0,0,0,0,0,0,0,0,131,135,121,223,198,132,125,134,93,134,134,133,134,134,167,128,134,116,117,168,134,134,148,134,134,134,56,17,0,57,0,8,14,21,0,0,0,0,22,0,9,26,0,0,0,0,15,0,0,4,0,0,0,0,0,412,58,60,418,414,64,415,65,419,410,411,411,411,411,411,411,411,411,411,66,0,425,342,429,30,0,353,353,353,353,353,353,353,353,353,353,352,352,352,352,352,352,352,352,352,352,30,0,353,353,353,353,353,353,353,353,353,353,471,496,485,513,514,492,492,496,520,496,496,470,496,480,496,496,496,477,496,468,496,496,496,496,496,496,44,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,6,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,45,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,289,289,289,289,289,289,289,289,289,289,410,410,410,410,410,410,410,410,410,410,0,0,0,0,0,0,0,0,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,289,289,289,336,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,336,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,437,437,437,437,437,437,437,437,437,437,0,0,0,0,0,0,0,0,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,336,289,289,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,318,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,465,465,465,465,465,465,465,465,465,465,0,0,0,0,0,0,0,0,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,289,0,259,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,262,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,30,0,20,20,20,20,20,20,20,20,20,20,0,0,0,0,0,0,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,265,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,315,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,267,289,289,289,289,289,289,289,289,0,268,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,270,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,289,289,282,289,289,289,289,289,289,289,289,289,289,289,289,304,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,289,289,289,289,289,289,289,289,289,289,289,277,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,275,289,289,289,289,289,289,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,273,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,272,289,289,289,289,289,289,289,0,289,289,289,289,289,289,289,289,289,289,289,289,323,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,328,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,289,289,289,289,330,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,331,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,286,0,179,179,179,247,179,179,179,179,179,179,179,254,179,179,179,179,179,179,179,179,179,179,179,179,179,179,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,288,0,79,79,79,249,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,285,0,158,158,158,231,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,190,158,158,158,158,158,158,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,238,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,288,0,79,79,79,79,79,237,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,284,0,141,141,141,141,141,234,141,141,141,141,141,141,143,145,141,141,141,141,141,141,141,141,141,141,141,141,286,0,179,179,179,179,179,179,179,179,179,179,179,239,179,179,179,179,179,179,179,179,179,179,179,179,179,179,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,253,79,79,79,79,79,79,79,79,79,79,79,79,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,250,179,179,179,179,179,179,179,179,179,179,179,179,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,240,79,79,79,79,79,79,79,79,79,79,79,79,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,235,179,179,179,179,179,179,179,179,179,179,179,179,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,232,79,79,79,79,79,79,79,79,79,79,79,79,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,242,179,179,179,179,179,179,179,179,179,179,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,257,79,79,79,79,79,79,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,252,210,210,210,210,210,210,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,243,179,179,179,179,179,179,285,0,88,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,123,158,158,115,158,158,158,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,225,158,158,158,158,158,158,158,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,227,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,229,179,179,179,179,179,179,179,287,0,210,210,210,210,210,210,99,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,285,0,158,158,158,158,98,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,285,0,158,158,158,158,96,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,95,210,210,210,210,210,210,210,210,210,210,210,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,100,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,285,0,158,158,158,158,158,158,158,158,103,158,158,158,158,158,158,158,158,158,158,150,158,158,158,158,158,158,287,0,101,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,179,179,197,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,284,0,141,141,141,141,104,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,284,0,196,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,112,142,141,141,141,141,141,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,155,158,158,106,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,285,0,158,158,158,158,158,158,158,158,195,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,107,158,158,158,158,158,158,158,158,158,158,158,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,284,0,194,141,141,141,141,141,141,139,141,141,141,120,141,141,130,141,141,141,141,141,141,141,141,141,141,141,286,0,179,179,179,179,179,179,179,179,108,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,193,179,179,179,179,179,286,0,179,179,179,179,179,179,179,179,179,179,179,179,111,179,179,169,179,179,179,179,179,179,179,179,179,179,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,284,0,141,141,141,141,141,141,141,141,141,141,141,141,141,141,192,141,141,141,141,141,141,141,141,141,141,141,285,0,158,158,158,158,158,158,158,158,191,158,158,158,158,158,165,158,158,158,158,158,158,158,158,158,158,158,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,179,179,179,179,179,179,114,179,179,179,179,179,179,179,179,179,179,179,179,179,284,0,118,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,126,141,141,141,141,141,141,141,141,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,122,158,158,158,158,158,158,158,285,0,158,158,158,158,158,158,158,158,158,158,158,158,124,162,158,158,158,158,158,158,158,158,158,158,158,158,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,284,0,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,129,141,141,141,141,141,141,141,284,0,141,141,141,141,141,141,141,141,141,141,141,141,141,141,147,141,141,141,141,141,144,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,284,0,141,141,141,141,141,141,141,141,141,141,141,141,141,141,146,141,141,141,141,141,141,141,141,141,141,141,284,0,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,284,0,137,141,141,141,141,141,141,141,141,141,141,136,141,141,141,141,141,141,141,141,141,141,141,141,141,141,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,152,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,285,0,158,158,153,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,285,0,158,158,158,158,158,158,158,158,158,158,158,158,154,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,285,0,160,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,156,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,285,0,158,159,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,161,158,158,158,158,158,158,158,158,158,158,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,151,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,163,158,158,166,158,158,158,158,158,158,285,0,158,158,158,158,158,158,164,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,127,158,158,158,158,158,158,158,158,284,0,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,119,141,141,141,141,141,141,141,141,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,179,186,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,286,0,179,179,179,179,184,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,286,0,179,179,183,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,286,0,179,179,173,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,179,179,179,179,175,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,286,0,179,179,179,179,182,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,286,0,177,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,286,0,179,179,179,179,179,179,179,179,181,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,286,0,179,180,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,178,179,179,179,179,179,179,179,179,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,176,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,179,179,179,179,179,172,179,179,179,179,179,179,179,179,179,179,179,179,179,179,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,171,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,185,179,179,179,179,179,286,0,179,179,179,179,179,179,179,179,189,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,170,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,286,0,179,179,179,179,188,179,179,179,179,179,179,179,179,179,179,179,179,174,179,179,179,179,179,179,179,179,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,284,0,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,110,141,141,141,141,141,141,141,141,141,141,284,0,141,141,141,141,141,141,141,109,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,217,210,210,210,210,210,210,210,210,210,210,210,210,210,210,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,219,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,216,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,287,0,210,210,210,210,210,210,210,210,204,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,214,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,287,0,210,210,210,210,210,210,210,210,213,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,212,210,210,210,210,210,210,210,287,0,206,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,207,210,210,210,210,210,210,210,210,210,210,210,210,210,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,208,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,287,0,210,210,210,210,210,210,210,210,210,210,210,211,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,209,210,210,210,210,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,205,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,203,210,210,210,210,210,210,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,215,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,202,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,287,0,210,210,210,210,210,210,210,210,201,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,200,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,287,0,210,210,210,210,210,210,218,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,287,0,210,210,220,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,221,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,102,179,179,179,179,179,179,179,179,179,179,179,179,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,222,158,158,158,158,158,158,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,97,210,210,210,210,210,210,210,210,285,0,158,158,158,158,158,158,158,158,158,158,158,94,158,158,158,158,158,158,158,158,158,158,158,158,158,158,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,228,179,179,179,179,179,179,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,226,158,158,158,158,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,89,210,210,210,210,210,210,210,210,210,210,210,210,284,0,141,141,141,141,141,141,141,141,141,141,141,105,141,90,141,141,140,141,141,141,141,141,141,113,141,141,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,230,158,158,158,158,158,158,288,0,79,79,79,79,79,79,79,79,79,79,79,86,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,79,79,79,79,79,79,79,85,79,79,79,79,79,79,79,79,79,79,79,79,79,79,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,87,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,79,79,79,79,72,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,288,0,79,79,73,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,77,79,79,79,79,79,79,79,288,0,79,79,83,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,82,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,81,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,288,0,80,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,76,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,75,79,79,79,79,79,79,79,79,79,79,79,79,288,0,79,79,79,74,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,71,79,79,79,79,79,79,79,79,79,79,79,79,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,70,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,69,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,288,0,79,79,79,79,68,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,288,0,84,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,288,0,67,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,255,210,286,0,179,179,179,179,179,179,179,179,179,179,179,179,179,179,233,179,179,179,179,179,179,179,179,179,179,179,141,141,141,141,141,141,141,141,141,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,284,0,199,141,141,141,141,141,141,141,138,141,141,141,141,141,245,141,141,141,141,141,141,141,141,141,141,141,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,246,210,210,210,210,210,210,210,210,210,210,210,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,286,0,179,179,179,179,236,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,286,0,179,179,179,179,241,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,244,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,287,0,210,210,210,210,248,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,251,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,286,0,256,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,286,0,179,179,179,224,179,187,179,179,91,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,287,0,210,210,210,210,210,210,210,210,92,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,158,158,158,158,158,158,158,158,158,158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,285,0,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,157,158,149,158,158,158,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,210,210,210,210,210,210,210,210,210,0,0,0,0,0,0,0,0,0,288,0,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,287,0,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,290,0,290,290,290,290,290,290,290,290,290,290,290,334,290,290,290,290,290,290,290,290,290,290,290,290,290,290,297,297,297,297,297,297,297,297,297,297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,297,0,297,297,297,297,297,297,297,297,297,297,297,297,297,337,297,297,297,297,297,297,297,297,297,297,297,297,291,0,291,291,291,291,291,291,291,291,291,291,291,291,291,332,291,291,291,291,291,291,291,291,291,291,291,291,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,290,0,290,290,290,290,290,290,290,290,290,290,290,290,290,324,290,290,290,290,290,290,290,290,290,290,290,290,291,0,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,341,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,291,0,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,339,291,291,291,291,291,291,291,291,290,0,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,340,290,290,290,290,290,290,295,295,295,295,295,295,295,295,295,295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,295,0,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,338,295,295,290,0,290,290,290,290,290,290,290,290,321,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,292,292,292,292,292,292,292,292,292,0,0,0,0,0,0,0,0,0,290,0,290,290,319,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,292,0,292,292,320,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,296,296,296,296,296,296,296,296,296,296,0,0,0,0,0,0,0,0,0,290,0,290,290,290,290,290,290,290,290,290,290,290,290,290,290,261,290,290,290,290,290,290,290,290,290,290,290,296,0,296,296,296,296,296,296,296,296,296,296,296,296,296,296,260,296,296,296,296,296,296,296,296,296,296,296,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,290,0,290,290,290,290,264,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,0,290,290,290,290,263,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,294,294,294,294,294,294,294,294,294,294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,294,0,294,294,294,294,266,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,290,0,290,290,290,290,290,290,290,290,314,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,295,295,295,295,295,295,295,295,295,295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,295,0,295,295,295,295,295,295,295,295,271,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,290,0,290,290,290,290,312,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,294,294,294,294,294,294,294,294,294,294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,293,293,293,293,293,293,293,293,293,293,0,0,0,0,0,0,0,0,0,294,0,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,276,294,294,294,294,294,294,294,293,0,293,293,293,293,293,293,293,293,278,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,292,292,292,292,292,292,292,292,292,0,0,0,0,0,0,0,0,0,291,0,291,291,291,291,291,291,291,291,291,291,291,291,309,291,291,291,291,291,291,291,291,291,291,291,291,291,292,0,292,292,279,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,290,0,290,290,290,290,290,290,290,290,290,290,290,290,290,290,280,290,290,290,290,290,290,290,290,290,290,290,291,0,291,291,291,291,281,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,285,285,285,285,285,285,285,285,285,285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,286,286,286,286,286,286,286,286,286,286,0,0,0,0,0,0,0,0,0,285,0,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,286,0,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,287,287,287,287,287,287,287,287,287,287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,288,288,288,288,288,288,288,288,288,288,0,0,0,0,0,0,0,0,0,287,0,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,288,0,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,289,289,289,289,289,289,289,289,289,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,289,0,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,290,0,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,292,292,292,292,292,292,292,292,292,0,0,0,0,0,0,0,0,0,291,0,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,292,0,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,293,293,293,293,293,293,293,293,293,293,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,294,294,294,294,294,294,294,294,294,294,0,0,0,0,0,0,0,0,0,293,0,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,294,0,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,295,295,295,295,295,295,295,295,295,295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,296,296,296,296,296,296,296,296,296,296,0,0,0,0,0,0,0,0,0,295,0,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,296,0,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,297,297,297,297,297,297,297,297,297,297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,298,298,298,298,298,298,298,298,298,298,0,0,0,0,0,0,0,0,0,297,0,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,298,0,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,299,299,299,299,299,299,299,299,299,299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,300,300,300,300,300,300,300,300,300,300,0,0,0,0,0,0,0,0,0,299,0,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,300,0,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,301,301,301,301,301,301,301,301,301,301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,302,302,302,302,302,302,302,302,302,302,0,0,0,0,0,0,0,0,0,301,0,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,302,0,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,303,303,303,303,303,303,303,303,303,303,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,305,305,305,305,305,305,305,305,305,305,0,0,0,0,0,0,0,0,0,303,0,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,305,0,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,306,306,306,306,306,306,306,306,306,306,0,0,0,0,0,0,0,0,0,290,0,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,283,290,290,290,290,290,290,290,290,306,0,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,307,307,307,307,307,307,307,307,307,307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,308,308,308,308,308,308,308,308,308,308,0,0,0,0,0,0,0,0,0,307,0,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,308,0,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,310,310,310,310,310,310,310,310,310,310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,292,292,292,292,292,292,292,292,292,0,0,0,0,0,0,0,0,0,310,0,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,292,0,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,311,292,292,292,292,292,292,292,292,292,292,313,313,313,313,313,313,313,313,313,313,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,293,293,293,293,293,293,293,293,293,293,0,0,0,0,0,0,0,0,0,313,0,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,293,0,293,293,293,293,293,293,293,293,293,293,293,274,293,293,293,293,293,293,293,293,293,293,293,293,293,293,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,316,316,316,316,316,316,316,316,316,316,0,0,0,0,0,0,0,0,0,291,0,291,291,291,291,291,291,291,291,291,291,291,291,291,269,291,291,291,291,291,291,291,291,291,291,291,291,316,0,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,291,0,291,291,291,291,291,291,291,291,291,291,291,291,291,317,291,291,291,291,291,291,291,291,291,291,291,291,290,0,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,322,290,290,290,290,290,290,258,258,258,258,258,258,258,258,258,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,292,292,292,292,292,292,292,292,292,0,0,0,0,0,0,0,0,0,258,0,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,292,0,292,292,292,292,325,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,290,0,290,290,290,290,327,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,291,0,291,291,291,291,329,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,293,293,293,293,293,293,293,293,293,293,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,293,0,293,293,293,293,333,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,291,0,291,291,335,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,291,0,326,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,290,0,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,293,293,293,293,293,293,293,293,293,293,0,0,0,0,0,0,0,0,0,291,0,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,293,0,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,292,292,292,292,292,292,292,292,292,292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,292,0,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,291,0,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,292,292,292,292,292,292,292,292,292,0,0,0,0,0,0,0,0,0,290,0,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,292,0,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,290,0,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,0,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,292,292,292,292,292,292,292,292,292,292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,294,294,294,294,294,294,294,294,294,294,0,0,0,0,0,0,0,0,0,292,0,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,294,0,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,292,292,292,292,292,292,292,292,292,0,0,0,0,0,0,0,0,0,291,0,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,292,0,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,290,290,290,290,290,290,290,290,290,290,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,298,298,298,298,298,298,298,298,298,298,0,0,0,0,0,0,0,0,0,290,0,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,298,0,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,296,296,296,296,296,296,296,296,296,296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,292,292,292,292,292,292,292,292,292,0,0,0,0,0,0,0,0,0,296,0,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,292,0,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,291,291,291,291,291,291,291,291,291,291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,292,292,292,292,292,292,292,292,292,0,0,0,0,0,0,0,0,0,291,0,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,292,0,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,498,498,498,498,498,498,498,498,498,498,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,498,498,498,498,498,498,498,498,498,498,0,0,0,0,0,0,0,0,0,534,0,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,534,0,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,503,503,503,503,503,503,503,503,503,503,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,503,503,503,503,503,503,503,503,503,503,0,0,0,0,0,0,0,0,0,536,0,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,536,0,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,539,539,539,539,539,539,539,539,539,539,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,547,547,547,547,547,547,547,547,547,547,0,0,0,0,0,0,0,0,0,539,0,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,547,0,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,545,545,545,545,545,545,545,545,545,545,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,541,541,541,541,541,541,541,541,541,541,0,0,0,0,0,0,0,0,0,545,0,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,541,0,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,503,503,503,503,503,503,503,503,503,503,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,364,364,364,364,364,364,364,364,364,364,0,0,0,0,0,0,0,0,0,536,0,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,538,0,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,30,0,365,365,365,365,365,365,365,365,365,365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,357,357,357,357,357,357,357,357,357,357,0,0,0,0,0,0,0,0,0,538,0,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,534,0,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,358,358,358,358,358,358,358,358,358,358,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,362,362,362,362,362,362,362,362,362,362,0,0,0,0,0,0,0,0,0,535,0,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,536,0,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,30,0,360,360,360,360,360,360,360,360,360,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,361,361,361,361,361,361,361,361,361,361,0,0,0,0,0,0,0,0,0,534,0,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,535,0,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,30,0,363,363,363,363,363,363,363,363,363,363,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,354,354,354,354,354,354,354,354,354,354,0,0,0,0,0,0,0,0,0,536,0,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,537,0,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,30,0,355,355,355,355,355,355,355,355,355,355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,366,366,366,366,366,366,366,366,366,366,0,0,0,0,0,0,0,0,0,537,0,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,539,0,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,30,0,367,367,367,367,367,367,367,367,367,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,368,368,368,368,368,368,368,368,368,368,0,0,0,0,0,0,0,0,0,539,0,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,540,0,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,30,0,369,369,369,369,369,369,369,369,369,369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,370,370,370,370,370,370,370,370,370,370,0,0,0,0,0,0,0,0,0,540,0,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,541,0,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,30,0,371,371,371,371,371,371,371,371,371,371,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,372,372,372,372,372,372,372,372,372,372,0,0,0,0,0,0,0,0,0,541,0,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,542,0,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,30,0,373,373,373,373,373,373,373,373,373,373,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,374,374,374,374,374,374,374,374,374,374,0,0,0,0,0,0,0,0,0,542,0,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,543,0,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,30,0,375,375,375,375,375,375,375,375,375,375,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,376,376,376,376,376,376,376,376,376,376,0,0,0,0,0,0,0,0,0,543,0,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,544,0,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,30,0,377,377,377,377,377,377,377,377,377,377,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,378,378,378,378,378,378,378,378,378,378,0,0,0,0,0,0,0,0,0,544,0,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,545,0,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,30,0,379,379,379,379,379,379,379,379,379,379,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,380,380,380,380,380,380,380,380,380,380,0,0,0,0,0,0,0,0,0,545,0,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,546,0,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,30,0,381,381,381,381,381,381,381,381,381,381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,382,382,382,382,382,382,382,382,382,382,0,0,0,0,0,0,0,0,0,546,0,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,547,0,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,30,0,383,383,383,383,383,383,383,383,383,383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,384,384,384,384,384,384,384,384,384,384,0,0,0,0,0,0,0,0,0,547,0,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,548,0,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,30,0,385,385,385,385,385,385,385,385,385,385,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,386,386,386,386,386,386,386,386,386,386,0,0,0,0,0,0,0,0,0,548,0,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,549,0,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,30,0,387,387,387,387,387,387,387,387,387,387,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,388,388,388,388,388,388,388,388,388,388,0,0,0,0,0,0,0,0,0,549,0,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,550,0,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,30,0,389,389,389,389,389,389,389,389,389,389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,390,390,390,390,390,390,390,390,390,390,0,0,0,0,0,0,0,0,0,550,0,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,551,0,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,30,0,391,391,391,391,391,391,391,391,391,391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,392,392,392,392,392,392,392,392,392,392,0,0,0,0,0,0,0,0,0,551,0,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,552,0,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,30,0,393,393,393,393,393,393,393,393,393,393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,394,394,394,394,394,394,394,394,394,394,0,0,0,0,0,0,0,0,0,552,0,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,553,0,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,30,0,395,395,395,395,395,395,395,395,395,395,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,396,396,396,396,396,396,396,396,396,396,0,0,0,0,0,0,0,0,0,553,0,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,554,0,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,30,0,397,397,397,397,397,397,397,397,397,397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,398,398,398,398,398,398,398,398,398,398,0,0,0,0,0,0,0,0,0,554,0,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,555,0,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,30,0,399,399,399,399,399,399,399,399,399,399,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,400,400,400,400,400,400,400,400,400,400,0,0,0,0,0,0,0,0,0,555,0,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,556,0,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,30,0,401,401,401,401,401,401,401,401,401,401,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,402,402,402,402,402,402,402,402,402,402,0,0,0,0,0,0,0,0,0,556,0,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,557,0,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,30,0,403,403,403,403,403,403,403,403,403,403,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,404,404,404,404,404,404,404,404,404,404,0,0,0,0,0,0,0,0,0,557,0,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,558,0,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,30,0,405,405,405,405,405,405,405,405,405,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,406,406,406,406,406,406,406,406,406,406,0,0,0,0,0,0,0,0,0,558,0,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,559,0,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,30,0,407,407,407,407,407,407,407,407,407,407,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,408,408,408,408,408,408,408,408,408,408,0,0,0,0,0,0,0,0,0,559,0,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,531,0,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,30,0,409,409,409,409,409,409,409,409,409,409,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,411,411,411,411,411,411,411,411,411,411,0,0,0,0,0,0,0,0,0,0,0,531,0,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,5,0,0,13,13,13,13,588,5,0,0,5,0,0,0,467,0,0,0,0,0,0,0,466,464,464,464,464,464,464,464,464,464,464,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,440,440,440,440,440,440,440,440,440,440,0,0,0,0,0,0,0,0,0,537,0,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,534,0,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,441,441,441,441,441,441,441,441,441,441,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,438,438,438,438,438,438,438,438,438,438,0,0,0,0,0,0,0,0,0,535,0,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,536,0,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,465,465,465,465,465,465,465,465,465,465,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,442,442,442,442,442,442,442,442,442,442,0,0,0,0,0,0,0,0,0,531,0,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,559,0,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,443,443,443,443,443,443,443,443,443,443,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,444,444,444,444,444,444,444,444,444,444,0,0,0,0,0,0,0,0,0,558,0,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,557,0,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,445,445,445,445,445,445,445,445,445,445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,446,446,446,446,446,446,446,446,446,446,0,0,0,0,0,0,0,0,0,556,0,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,555,0,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,447,447,447,447,447,447,447,447,447,447,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,448,448,448,448,448,448,448,448,448,448,0,0,0,0,0,0,0,0,0,554,0,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,553,0,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,449,449,449,449,449,449,449,449,449,449,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,450,450,450,450,450,450,450,450,450,450,0,0,0,0,0,0,0,0,0,552,0,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,551,0,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,451,451,451,451,451,451,451,451,451,451,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,452,452,452,452,452,452,452,452,452,452,0,0,0,0,0,0,0,0,0,550,0,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,549,0,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,453,453,453,453,453,453,453,453,453,453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,454,454,454,454,454,454,454,454,454,454,0,0,0,0,0,0,0,0,0,548,0,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,547,0,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,455,455,455,455,455,455,455,455,455,455,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,456,456,456,456,456,456,456,456,456,456,0,0,0,0,0,0,0,0,0,546,0,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,545,0,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,457,457,457,457,457,457,457,457,457,457,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,458,458,458,458,458,458,458,458,458,458,0,0,0,0,0,0,0,0,0,544,0,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,543,0,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,459,459,459,459,459,459,459,459,459,459,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,460,460,460,460,460,460,460,460,460,460,0,0,0,0,0,0,0,0,0,542,0,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,541,0,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,461,461,461,461,461,461,461,461,461,461,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,462,462,462,462,462,462,462,462,462,462,0,0,0,0,0,0,0,0,0,540,0,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,539,0,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,463,463,463,463,463,463,463,463,463,463,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,497,497,497,497,497,497,497,497,497,497,0,0,0,0,0,0,0,0,0,538,0,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,533,0,497,497,497,497,497,497,497,472,497,497,497,497,497,497,343,497,497,497,497,497,497,497,497,497,497,497,501,501,501,501,501,501,501,501,501,501,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,497,439,439,439,439,439,439,439,439,439,0,0,0,0,0,0,0,0,0,535,0,501,501,501,501,351,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,533,0,497,497,497,497,497,497,497,497,497,497,497,497,497,497,483,497,497,497,497,497,497,497,497,497,497,497,497,439,439,439,439,439,439,439,439,439,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,498,498,498,498,498,498,498,498,498,498,0,0,0,0,0,0,0,0,0,533,0,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,534,0,498,498,498,498,519,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,487,487,487,487,487,487,487,487,487,487,0,0,0,0,0,0,0,0,0,534,0,518,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,537,0,517,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,487,487,487,487,487,487,487,487,487,487,0,0,0,0,0,0,0,0,0,537,0,487,487,487,487,516,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,537,0,487,487,487,487,515,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,497,497,497,497,497,497,497,497,497,497,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,503,503,503,503,503,503,503,503,503,503,0,0,0,0,0,0,0,0,0,533,0,497,497,497,497,473,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,536,0,503,503,474,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,497,497,497,497,497,497,497,497,497,497,0,0,0,0,0,0,0,0,0,536,0,503,503,503,503,503,503,475,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,533,0,497,497,497,497,497,497,497,497,497,497,497,497,497,497,511,497,497,497,497,497,497,497,497,497,497,497,501,501,501,501,501,501,501,501,501,501,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,501,501,501,501,501,501,501,501,501,501,0,0,0,0,0,0,0,0,0,535,0,501,501,501,501,501,501,501,501,478,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,535,0,501,501,501,501,479,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,498,498,498,498,498,498,498,498,498,498,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,498,498,498,498,498,498,498,498,498,498,0,0,0,0,0,0,0,0,0,534,0,498,498,498,498,498,498,481,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,534,0,498,498,498,498,498,498,498,498,498,498,498,498,509,498,498,498,498,498,498,498,498,498,498,498,498,498,497,497,497,497,497,497,497,497,497,497,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,538,538,538,538,538,538,538,538,538,538,0,0,0,0,0,0,0,0,0,533,0,497,497,497,497,497,497,497,494,497,497,497,497,497,497,484,497,497,497,497,497,497,497,497,497,497,497,538,0,538,538,529,538,538,538,538,538,538,538,538,538,538,538,538,582,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,560,560,560,560,560,560,560,560,560,560,0,0,0,0,0,0,0,0,0,538,0,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,0,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,487,487,487,487,487,487,487,487,487,487,0,0,0,0,0,0,0,0,0,538,0,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,523,538,538,538,538,538,538,537,0,487,487,489,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,497,504,504,504,504,504,504,504,504,504,0,0,0,0,0,0,0,0,0,537,0,487,487,487,487,486,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,533,0,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,503,503,503,503,503,503,503,503,503,503,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,498,498,498,498,498,498,498,498,498,498,0,0,0,0,0,0,0,0,0,536,0,490,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,534,0,500,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,497,497,497,497,497,497,497,497,497,497,0,0,0,0,0,0,0,0,0,534,0,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,499,498,498,498,498,498,533,0,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,498,498,498,498,498,498,498,498,498,498,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,501,501,501,501,501,501,501,501,501,501,0,0,0,0,0,0,0,0,0,534,0,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,535,0,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,501,501,501,501,501,501,501,501,501,501,0,0,0,0,0,0,0,0,0,535,0,501,502,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,535,0,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,493,501,501,501,501,501,501,501,501,503,503,503,503,503,503,503,503,503,503,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,503,503,503,503,503,503,503,503,503,503,0,0,0,0,0,0,0,0,0,536,0,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,536,0,503,503,503,503,503,503,503,503,503,503,503,491,503,503,503,503,503,503,503,503,503,503,503,503,503,503,487,487,487,487,487,487,487,487,487,487,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,505,505,505,505,505,505,505,505,505,505,0,0,0,0,0,0,0,0,0,537,0,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,534,0,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,30,0,506,506,506,506,506,506,506,506,506,506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,507,507,507,507,507,507,507,507,507,507,0,0,0,0,0,0,0,0,0,535,0,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,536,0,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,30,0,488,488,488,488,488,488,488,488,488,488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,498,498,498,498,498,498,498,498,498,498,0,0,0,0,0,0,0,0,0,537,0,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,534,0,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,482,498,498,498,498,498,498,501,501,501,501,501,501,501,501,501,501,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,503,503,503,503,503,503,503,503,503,503,0,0,0,0,0,0,0,0,0,535,0,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,510,501,501,501,501,501,501,501,501,501,501,536,0,503,503,503,503,503,503,503,503,503,503,503,476,503,503,503,503,503,503,503,503,503,503,503,503,503,503,498,498,498,498,498,498,498,498,498,498,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,43,0,0,356,356,356,356,356,356,356,356,356,356,0,0,0,0,0,0,0,0,0,534,0,498,498,498,498,498,498,498,498,498,498,498,498,498,469,498,498,498,498,498,498,498,498,498,498,498,498,533,0,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,43,0,43,0,0,356,359,359,359,359,359,359,359,359,359,0,0,0,0,0,0,0,0,0,0,0,0,0,43,0,43,0,0,356,359,359,359,359,359,359,359,359,359,0,0,0,0,0,0,0,0,0,533,0,497,497,497,497,497,497,497,497,497,497,497,497,497,497,495,497,497,497,497,497,497,497,497,497,497,497,533,0,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,538,538,538,538,538,538,538,538,538,538,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,538,538,538,538,538,538,538,538,538,538,0,0,0,0,0,0,0,0,0,538,0,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,347,538,538,538,0,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,347,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,501,501,501,501,501,501,501,501,501,501,0,0,0,0,0,0,0,0,0,538,0,538,538,538,538,538,538,538,538,538,538,538,347,538,538,538,538,538,538,538,538,538,538,538,538,538,538,535,0,501,501,501,501,501,501,501,501,501,501,501,346,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,497,439,439,439,439,439,439,439,439,439,0,0,0,0,0,0,0,0,0,535,0,501,501,501,501,501,501,501,501,501,501,501,501,501,345,501,501,501,501,501,501,501,501,501,501,501,501,533,0,497,497,497,497,497,344,497,497,497,497,497,497,497,508,497,497,497,497,497,497,497,497,497,497,497,497,545,545,545,545,545,545,545,545,545,545,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,543,543,543,543,543,543,543,543,543,543,0,0,0,0,0,0,0,0,0,545,0,545,545,545,545,545,545,545,545,545,545,545,545,545,545,587,545,545,545,545,545,545,545,545,545,545,545,543,0,543,543,543,543,586,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,539,539,539,539,539,539,539,539,539,539,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,544,544,544,544,544,544,544,544,544,544,0,0,0,0,0,0,0,0,0,539,0,539,539,539,539,585,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,544,0,544,544,544,544,544,544,544,544,521,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,543,543,543,543,543,543,543,543,543,543,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,542,542,542,542,542,542,542,542,542,542,0,0,0,0,0,0,0,0,0,543,0,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,524,543,543,543,543,543,543,543,542,0,542,542,542,542,542,542,542,542,525,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,540,540,540,540,540,540,540,540,540,540,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,541,541,541,541,541,541,541,541,541,541,0,0,0,0,0,0,0,0,0,540,0,540,540,540,540,540,540,540,540,540,540,540,540,583,540,540,540,540,540,540,540,540,540,540,540,540,540,541,0,541,541,526,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,539,539,539,539,539,539,539,539,539,539,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,540,540,540,540,540,540,540,540,540,540,0,0,0,0,0,0,0,0,0,539,0,539,539,539,539,539,539,539,539,539,539,539,539,539,539,527,539,539,539,539,539,539,539,539,539,539,539,540,0,540,540,540,540,528,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,534,534,534,534,534,534,534,534,534,534,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,535,535,535,535,535,535,535,535,535,535,0,0,0,0,0,0,0,0,0,534,0,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,535,0,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,536,536,536,536,536,536,536,536,536,536,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,537,537,537,537,537,537,537,537,537,537,0,0,0,0,0,0,0,0,0,536,0,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,537,0,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,538,538,538,538,538,538,538,538,538,538,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,539,539,539,539,539,539,539,539,539,539,0,0,0,0,0,0,0,0,0,538,0,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,539,0,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,540,540,540,540,540,540,540,540,540,540,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,541,541,541,541,541,541,541,541,541,541,0,0,0,0,0,0,0,0,0,540,0,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,541,0,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,542,542,542,542,542,542,542,542,542,542,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,543,543,543,543,543,543,543,543,543,543,0,0,0,0,0,0,0,0,0,542,0,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,543,0,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,544,544,544,544,544,544,544,544,544,544,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,545,545,545,545,545,545,545,545,545,545,0,0,0,0,0,0,0,0,0,544,0,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,545,0,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,546,546,546,546,546,546,546,546,546,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,547,547,547,547,547,547,547,547,547,547,0,0,0,0,0,0,0,0,0,546,0,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,547,0,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,548,548,548,548,548,548,548,548,548,548,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,549,549,549,549,549,549,549,549,549,0,0,0,0,0,0,0,0,0,548,0,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,549,0,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,550,550,550,550,550,550,550,550,550,550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,551,551,551,551,551,551,551,551,551,551,0,0,0,0,0,0,0,0,0,550,0,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,551,0,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,552,552,552,552,552,552,552,552,552,552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,553,553,553,553,553,553,553,553,553,553,0,0,0,0,0,0,0,0,0,552,0,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,553,0,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,554,554,554,554,554,554,554,554,554,554,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,555,555,555,555,555,555,555,555,555,555,0,0,0,0,0,0,0,0,0,554,0,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,555,0,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,556,556,556,556,556,556,556,556,556,556,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,557,557,557,557,557,557,557,557,557,557,0,0,0,0,0,0,0,0,0,556,0,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,557,0,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,558,558,558,558,558,558,558,558,558,558,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,559,559,559,559,559,559,559,559,559,559,0,0,0,0,0,0,0,0,0,558,0,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,559,0,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,531,531,531,531,531,531,531,531,531,531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,561,561,561,561,561,561,561,561,561,561,0,0,0,0,0,0,0,0,0,531,0,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,539,0,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,30,0,562,562,562,562,562,562,562,562,562,562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,563,563,563,563,563,563,563,563,563,563,0,0,0,0,0,0,0,0,0,540,0,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,541,0,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,30,0,564,564,564,564,564,564,564,564,564,564,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,565,565,565,565,565,565,565,565,565,565,0,0,0,0,0,0,0,0,0,542,0,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,543,0,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,30,0,566,566,566,566,566,566,566,566,566,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,567,567,567,567,567,567,567,567,567,567,0,0,0,0,0,0,0,0,0,544,0,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,545,0,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,30,0,568,568,568,568,568,568,568,568,568,568,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,569,569,569,569,569,569,569,569,569,569,0,0,0,0,0,0,0,0,0,546,0,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,547,0,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,30,0,570,570,570,570,570,570,570,570,570,570,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,571,571,571,571,571,571,571,571,571,571,0,0,0,0,0,0,0,0,0,548,0,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,549,0,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,30,0,572,572,572,572,572,572,572,572,572,572,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,573,573,573,573,573,573,573,573,573,573,0,0,0,0,0,0,0,0,0,550,0,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,551,0,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,30,0,574,574,574,574,574,574,574,574,574,574,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,575,575,575,575,575,575,575,575,575,575,0,0,0,0,0,0,0,0,0,552,0,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,553,0,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,30,0,576,576,576,576,576,576,576,576,576,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,577,577,577,577,577,577,577,577,577,577,0,0,0,0,0,0,0,0,0,554,0,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,555,0,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,30,0,578,578,578,578,578,578,578,578,578,578,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,579,579,579,579,579,579,579,579,579,579,0,0,0,0,0,0,0,0,0,556,0,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,557,0,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,30,0,580,580,580,580,580,580,580,580,580,580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,581,581,581,581,581,581,581,581,581,581,0,0,0,0,0,0,0,0,0,558,0,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,559,0,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,30,0,532,532,532,532,532,532,532,532,532,532,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,539,539,539,539,539,539,539,539,539,539,0,0,0,0,0,0,0,0,0,531,0,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,539,0,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,530,539,539,539,539,539,539,539,539,541,541,541,541,541,541,541,541,541,541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,542,542,542,542,542,542,542,542,542,542,0,0,0,0,0,0,0,0,0,541,0,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,584,541,541,541,541,541,541,541,541,541,541,542,0,542,542,542,542,542,542,542,542,542,542,542,522,542,542,542,542,542,542,542,542,542,542,542,542,542,542,540,540,540,540,540,540,540,540,540,540,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,544,544,544,544,544,544,544,544,544,544,0,0,0,0,0,0,0,0,0,540,0,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,350,540,540,540,540,540,540,540,540,544,0,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,349,544,544,546,546,546,546,546,546,546,546,546,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,546,0,546,546,546,546,546,546,546,546,546,546,546,546,546,348,546,546,546,546,546,546,546,546,546,546,546,546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
alex_check :: Array Int Int
alex_check = listArray (0,26287) [-1,10,61,101,13,49,50,51,52,53,54,55,56,57,113,101,117,97,115,114,108,110,101,32,33,111,118,100,46,116,114,46,46,42,101,46,46,116,46,46,49,50,51,52,53,54,55,56,57,116,49,50,51,52,53,54,55,56,57,46,46,48,49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,46,46,46,46,61,47,47,42,41,99,100,61,61,-1,-1,-1,-1,-1,113,-1,-1,-1,-1,-1,-1,-1,118,48,49,50,51,52,53,54,55,56,57,-1,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,10,-1,-1,13,48,49,50,51,52,53,54,55,56,57,49,50,51,52,53,54,55,56,57,33,-1,-1,-1,-1,-1,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,-1,60,61,62,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,112,48,49,50,51,52,53,54,55,56,57,10,-1,-1,13,-1,-1,-1,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,44,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,10,97,-1,13,-1,101,102,103,-1,-1,-1,-1,108,-1,110,111,-1,-1,-1,-1,116,-1,-1,33,-1,-1,-1,-1,-1,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,-1,60,61,62,46,-1,48,49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,46,-1,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,97,-1,-1,100,101,102,103,104,105,-1,-1,108,-1,-1,-1,112,-1,-1,-1,-1,-1,-1,-1,120,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,43,-1,45,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,43,-1,45,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,43,-1,45,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,46,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]
alex_deflt :: Array Int Int
alex_deflt = listArray (0,588) [53,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,27,27,-1,-1,-1,-1,-1,-1,-1,46,46,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,53,53,53,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]
alex_accept = listArray (0::Int,588) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccPred (alex_action_0) ( commentP )(AlexAccPred (alex_action_2) ( \_ ai _ _ -> atColP 6 ai )(AlexAccNone)),AlexAccPred (alex_action_1) ( withinLabelColsP )(AlexAccNone),AlexAccPred (alex_action_1) ( withinLabelColsP )(AlexAccNone),AlexAccPred (alex_action_1) ( withinLabelColsP )(AlexAccNone),AlexAccPred (alex_action_1) ( withinLabelColsP )(AlexAccNone),AlexAccPred (alex_action_1) ( withinLabelColsP )(AlexAccPred (alex_action_2) ( \_ ai _ _ -> atColP 6 ai )(AlexAccNone)),AlexAccPred (alex_action_2) ( \_ ai _ _ -> atColP 6 ai )(AlexAccNone),AlexAccPred (alex_action_2) ( \_ ai _ _ -> atColP 6 ai )(AlexAccSkip),AlexAccPred (alex_action_2) ( \_ ai _ _ -> atColP 6 ai )(AlexAccSkip),AlexAcc (alex_action_4),AlexAccSkip,AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8),AlexAcc (alex_action_9),AlexAccPred (alex_action_10) ( formatExtendedP )(AlexAccNone),AlexAccPred (alex_action_11) ( formatExtendedP )(AlexAccNone),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAccPred (alex_action_14) ( fortran77P )(AlexAccNone),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone)),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_21))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_22))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_25))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_26))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_28) ( fortran77P )(AlexAccNone))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_29) (fortran77P )(AlexAccNone))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_30) (fortran77P )(AlexAccNone))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_31) (fortran77P )(AlexAccNone))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_32))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_33))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_34) ( fortran77P )(AlexAccNone))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_36))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_37) ( extended77P )(AlexAccNone))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_38))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_39))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_41) ( extended77P )(AlexAccNone))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_42))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_43))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_44))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_48) ( fortran77P )(AlexAccNone))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_49) ( fortran77P )(AlexAccNone))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_50) ( fortran77P )(AlexAccNone))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_52))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_56))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_65) ( fortran77P )(AlexAccNone))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_66))),AlexAccPred (alex_action_15) ( idP )(AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_67))),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccNone),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_17)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_18)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_19)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_20)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_35)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_40) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_45)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_46)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_47) ( fortran77P )(AlexAccNone)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_51)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_53)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_54)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_55) ( fortran77P )(AlexAccNone)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_56)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAcc (alex_action_56)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_58) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_60) ( fortran77P )(AlexAccNone)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_62) ( fortran77P )(AlexAccNone)),AlexAccPred (alex_action_16) ( extendedIdP )(AlexAccPred (alex_action_64) ( fortran77P )(AlexAccNone)),AlexAcc (alex_action_23),AlexAcc (alex_action_24),AlexAccPred (alex_action_27) ( fortran77P )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_28) ( fortran77P )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_57) ( implicitStP )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_57) ( implicitStP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_57) ( implicitStP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_59) ( implicitTypeExtendedP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_61) ( implicitType77P )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_63) ( fortran77P )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccNone),AlexAccPred (alex_action_68) ( exponentP )(AlexAccNone),AlexAccPred (alex_action_68) ( exponentP )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_68) ( exponentP )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_68) ( exponentP )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_68) ( exponentP )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_68) ( exponentP )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_68) ( exponentP )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_68) ( exponentP )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_68) ( exponentP )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_68) ( exponentP )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_68) ( exponentP )(AlexAcc (alex_action_98)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAccPred (alex_action_68) ( exponentP )(AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone)),AlexAcc (alex_action_69),AlexAcc (alex_action_69),AlexAccPred (alex_action_70) ( fortran77P )(AlexAccNone),AlexAcc (alex_action_71),AlexAcc (alex_action_72),AlexAcc (alex_action_73),AlexAcc (alex_action_73),AlexAcc (alex_action_74),AlexAcc (alex_action_75),AlexAcc (alex_action_76),AlexAcc (alex_action_77),AlexAcc (alex_action_78),AlexAcc (alex_action_79),AlexAccPred (alex_action_80) ( fortran77P )(AlexAccNone),AlexAccPred (alex_action_81) ( fortran77P )(AlexAccNone),AlexAccPred (alex_action_82) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_83) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_84) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_85) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_86) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_87) ( extended77P )(AlexAccNone),AlexAcc (alex_action_88),AlexAcc (alex_action_89),AlexAcc (alex_action_90),AlexAcc (alex_action_91),AlexAcc (alex_action_92),AlexAcc (alex_action_93),AlexAcc (alex_action_94),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_95),AlexAcc (alex_action_96),AlexAcc (alex_action_97),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAcc (alex_action_98),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_99) ( extended77P )(AlexAccNone),AlexAccPred (alex_action_100) ( fortran66P )(AlexAccNone)]
{-# LINE 202 "FixedForm.x" #-}
--------------------------------------------------------------------------------
-- Predicated lexer helpers
--------------------------------------------------------------------------------
formatExtendedP :: FortranVersion -> AlexInput -> Int -> AlexInput -> Bool
formatExtendedP fv _ _ ai = fv == Fortran77Extended &&
case xs of
[ TFormat _, _ ] -> False
[ TLabel _ _, TFormat _ ] -> False
_ -> True
where
xs = take 2 . reverse . aiPreviousTokensInLine $ ai
implicitType77P :: FortranVersion -> AlexInput -> Int -> AlexInput -> Bool
implicitType77P fv b c d = fortran77P fv b c d && implicitStP fv b c d
implicitTypeExtendedP :: FortranVersion -> AlexInput -> Int -> AlexInput -> Bool
implicitTypeExtendedP fv b c d = extended77P fv b c d && implicitStP fv b c d
implicitStP :: FortranVersion -> AlexInput -> Int -> AlexInput -> Bool
implicitStP fv _ _ ai = checkPreviousTokensInLine f ai
where
f (TImplicit _) = True
f _ = False
extendedIdP :: FortranVersion -> AlexInput -> Int -> AlexInput -> Bool
extendedIdP fv a b ai = fv == Fortran77Extended && idP fv a b ai
idP :: FortranVersion -> AlexInput -> Int -> AlexInput -> Bool
idP fv _ _ ai = not (doP ai) && equalFollowsP fv ai
doP :: AlexInput -> Bool
doP ai = isPrefixOf "do" (reverse . lexemeMatch . aiLexeme $ ai)
equalFollowsP :: FortranVersion -> AlexInput -> Bool
equalFollowsP fv ai =
case unParse (lexer $ f False 0) ps of
ParseOk True _ -> True
_ -> False
where
ps = ParseState
{ psAlexInput = ai { aiStartCode = st}
, psVersion = fv
, psFilename = "<unknown>"
, psParanthesesCount = ParanthesesCount 0 False
, psContext = [ ConStart ] }
f False 0 t =
case t of
TNewline{} -> return False
TEOF{} -> return False
TOpAssign{} -> return True
TLeftPar{} -> lexer $ f True 1
_ -> return False
f True 0 t =
case t of
TOpAssign{} -> return True
_ -> return False
f True n t =
case t of
TNewline{} -> return False
TEOF{} -> return False
TLeftPar{} -> lexer $ f True (n + 1)
TRightPar{} -> lexer $ f True (n - 1)
_ -> lexer $ f True n
commentP :: FortranVersion -> AlexInput -> Int -> AlexInput -> Bool
commentP _ aiOld _ aiNew = atColP 1 aiOld && _endsWithLine
where
_endsWithLine = (posColumn . aiPosition) aiNew /= 1
withinLabelColsP :: FortranVersion -> AlexInput -> Int -> AlexInput -> Bool
withinLabelColsP _ aiOld _ aiNew = getCol aiOld >= 1 && getCol aiNew <= 6
where
getCol = posColumn . aiPosition
atColP :: Integer -> AlexInput -> Bool
atColP n ai = (posColumn . aiPosition) ai == n
-- This predicate allows to distinguish identifiers and real exponent tokens
-- by looking at previous token. Since exponent can only follow a "." or an
-- integer token. Anything other previous token will prevent matching the input
-- as an exponent token.
exponentP :: FortranVersion -> AlexInput -> Int -> AlexInput -> Bool
exponentP _ _ _ ai =
case aiPreviousToken ai of
Just (TInt _ _) -> True
Just (TDot _) -> True
_ -> False
fortran66P :: FortranVersion -> AlexInput -> Int -> AlexInput -> Bool
fortran66P fv _ _ _ = fv == Fortran66
fortran77P :: FortranVersion -> AlexInput -> Int -> AlexInput -> Bool
fortran77P fv _ _ _ = fv == Fortran77 || fv == Fortran77Extended
extended77P :: FortranVersion -> AlexInput -> Int -> AlexInput -> Bool
extended77P fv _ _ _ = fv == Fortran77Extended
--------------------------------------------------------------------------------
-- Lexer helpers
--------------------------------------------------------------------------------
addSpan :: (SrcSpan -> Token) -> LexAction (Maybe Token)
addSpan cons = do
s <- getLexemeSpan
return $ Just $ cons s
addSpanAndMatch :: (SrcSpan -> String -> Token) -> LexAction (Maybe Token)
addSpanAndMatch cons = do
s <- getLexemeSpan
m <- getMatch
return $ Just $ cons s m
getLexeme :: LexAction Lexeme
getLexeme = do
ai <- getAlex
return $ aiLexeme ai
putLexeme :: Lexeme -> LexAction ()
putLexeme lexeme = do
ai <- getAlex
putAlex $ ai { aiLexeme = lexeme }
resetLexeme :: LexAction ()
resetLexeme = putLexeme initLexeme
getMatch :: LexAction String
getMatch = do
lexeme <- getLexeme
return $ (reverse . lexemeMatch) lexeme
putMatch :: String -> LexAction ()
putMatch newMatch = do
lexeme <- getLexeme
putLexeme $ lexeme { lexemeMatch = reverse newMatch }
incWhiteSensitiveCharCount :: LexAction ()
incWhiteSensitiveCharCount = do
ai <- getAlex
let wsc = aiWhiteSensitiveCharCount ai
putAlex $ ai { aiWhiteSensitiveCharCount = wsc + 1 }
resetWhiteSensitiveCharCount :: LexAction ()
resetWhiteSensitiveCharCount = do
ai <- getAlex
putAlex $ ai { aiWhiteSensitiveCharCount = 0 }
instance Spanned Lexeme where
getSpan lexeme =
let ms = lexemeStart lexeme
me = lexemeEnd lexeme in
SrcSpan (fromJust ms) (fromJust me)
setSpan _ = error "Lexeme span cannot be set."
updatePreviousToken :: Maybe Token -> LexAction ()
updatePreviousToken maybeToken = do
ai <- getAlex
putAlex $ ai { aiPreviousToken = maybeToken }
addToPreviousTokensInLine :: Token -> LexAction ()
addToPreviousTokensInLine token = do
ai <- getAlex
putAlex $
case token of
TNewline _ -> updatePrevTokens ai [ ]
t -> updatePrevTokens ai $ t : aiPreviousTokensInLine ai
where
updatePrevTokens ai tokens = ai { aiPreviousTokensInLine = tokens }
checkPreviousTokensInLine :: (Token -> Bool) -> AlexInput -> Bool
checkPreviousTokensInLine prop ai = any prop $ aiPreviousTokensInLine ai
getLexemeSpan :: LexAction SrcSpan
getLexemeSpan = do
lexeme <- getLexeme
return $ getSpan lexeme
-- With the existing alexGetByte implementation comments are matched without
-- whitespace characters. However, we have access to final column number,
-- we know the comment would start at column, and we have access to the absolute
-- offset so instead of using match, lexComment takes a slice from the original
-- source input
lexComment :: Maybe Char -> LexAction (Maybe Token)
lexComment mc = do
m <- getMatch
s <- getLexemeSpan
alex <- getAlex
let modifiedAlex = alex { aiWhiteSensitiveCharCount = 1 }
case mc of
Just '\n' -> return $ Just $ TComment s $ tail m
Just _ ->
case alexGetByte modifiedAlex of
Just (_, newAlex) -> do
putAlex newAlex
lexComment Nothing
Nothing -> fail "Comment abruptly ended."
Nothing ->
case alexGetByte modifiedAlex of
Just (_, newAlex) -> lexComment (Just $ (head . lexemeMatch . aiLexeme) newAlex)
Nothing -> return $ Just $ TComment s $ tail m
{-
Chars
+-+
| |
| |
| v
+-+ Nothing +-+
+---> |0|---------->+3|
+-> +++ +-+
| |
' | | '
| v
| +++ Nothing +-+
+---|1|----------->2|
+++ +++
| ^
+-------------+
Chars
-}
strAutomaton :: Int -> LexAction (Maybe Token)
strAutomaton 0 = do
incWhiteSensitiveCharCount
alex <- getAlex
case alexGetByte alex of
Just (_, newAlex) -> do
putAlex newAlex
m <- getMatch
if last m == '\''
then strAutomaton 1
else strAutomaton 0
Nothing -> strAutomaton 3
strAutomaton 1 = do
incWhiteSensitiveCharCount
alex <- getAlex
case alexGetByte alex of
Just (_, newAlex) -> do
let m = lexemeMatch . aiLexeme $ newAlex
if head m == '\''
then do
putAlex newAlex
putMatch $ reverse . tail $ m
strAutomaton 0
else strAutomaton 2
Nothing -> strAutomaton 2
strAutomaton 2 = do
s <- getLexemeSpan
m <- getMatch
resetWhiteSensitiveCharCount
return $ Just $ TString s $ (init . tail) m
strAutomaton 3 = fail "Unmatched string."
lexHollerith :: LexAction (Maybe Token)
lexHollerith = do
match' <- getMatch
let len = read $ init match' -- Get n of "nH" from string
putMatch ""
ai <- getAlex
putAlex $ ai { aiWhiteSensitiveCharCount = len }
lexed <- lexN len
s <- getLexemeSpan
return $ do
hollerith <- lexed
return $ THollerith s hollerith
lexN :: Int -> LexAction (Maybe String)
lexN n = do
alex <- getAlex
match' <- getMatch
let len = length match'
if n == len
then return $ Just match'
else
case alexGetByte alex of
Just (_, newAlex) -> do
putAlex newAlex
lexN n
Nothing -> return Nothing
-- Lexing various field descriptors
lexFieldDescriptorDEFG :: LexAction (Maybe Token)
lexFieldDescriptorDEFG = do
match <- getMatch
let (repeat, descriptor, width, rest) = takeRepeatDescriptorWidth match
let fractionWidth = (read $ fst $ takeNumber $ tail rest) :: Integer
s <- getLexemeSpan
return $ Just $ TFieldDescriptorDEFG s repeat descriptor width fractionWidth
lexFieldDescriptorAIL :: LexAction (Maybe Token)
lexFieldDescriptorAIL = do
match <- getMatch
let (repeat, descriptor, width, rest) = takeRepeatDescriptorWidth match
s <- getLexemeSpan
return $ Just $ TFieldDescriptorAIL s repeat descriptor width
lexBlankDescriptor :: LexAction (Maybe Token)
lexBlankDescriptor = do
match <- getMatch
let (width, _) = takeNumber match
s <- getLexemeSpan
return $ Just $ TBlankDescriptor s (read width :: Integer)
lexScaleFactor :: LexAction (Maybe Token)
lexScaleFactor = do
match <- getMatch
let (sign, rest) = if head match == '-' then (-1, tail match) else (1, match)
let (width, _) = takeNumber rest
s <- getLexemeSpan
return $ Just $ TScaleFactor s $ (read width) * sign
takeRepeatDescriptorWidth :: String -> (Maybe Integer, Char, Integer, String)
takeRepeatDescriptorWidth str =
let (repeatStr, rest) = takeNumber str
repeat = if repeatStr == [] then Nothing else Just $ (read repeatStr :: Integer)
descriptor = head rest
(widthStr, rest') = takeNumber $ tail rest
width = read widthStr :: Integer in
(repeat, descriptor, width, rest')
takeNumber :: String -> (String, String)
takeNumber str = span isDigit str
maybeToKeyword :: LexAction (Maybe Token)
maybeToKeyword = do
decPar
pcActual <- pcActual . psParanthesesCount <$> get
if pcActual == 0
then toSC keyword
else return Nothing
typeSCChange :: LexAction (Maybe Token)
typeSCChange = do
ps <- get
let hypotheticalPs = ps { psAlexInput = (psAlexInput ps) { aiStartCode = keyword } }
let isFunction = case unParse (lexer f) hypotheticalPs of { ParseOk True _ -> True; _ -> False }
if isFunction
then return Nothing
else toSC st
where
f TFunction{} = return True
f _ = return False
toSC :: Int -> LexAction (Maybe Token)
toSC startCode = do
ai <- getAlex
if startCode == 0
then putAlex $ ai { aiStartCode = startCode, aiWhiteSensitiveCharCount = 6 }
else putAlex $ ai { aiStartCode = startCode }
return Nothing
--------------------------------------------------------------------------------
-- Tokens
--------------------------------------------------------------------------------
data Token = TLeftPar SrcSpan
| TRightPar SrcSpan
| TLeftArrayPar SrcSpan
| TRightArrayPar SrcSpan
| TComma SrcSpan
| TDot SrcSpan
| TColon SrcSpan
| TProgram SrcSpan
| TFunction SrcSpan
| TSubroutine SrcSpan
| TBlockData SrcSpan
| TEnd SrcSpan
| TAssign SrcSpan
| TOpAssign SrcSpan
| TTo SrcSpan
| TGoto SrcSpan
| TIf SrcSpan
| TThen SrcSpan
| TElse SrcSpan
| TElsif SrcSpan
| TEndif SrcSpan
| TCall SrcSpan
| TReturn SrcSpan
| TSave SrcSpan
| TContinue SrcSpan
| TStop SrcSpan
| TExit SrcSpan
| TPause SrcSpan
| TDo SrcSpan
| TDoWhile SrcSpan
| TEndDo SrcSpan
| TRead SrcSpan
| TWrite SrcSpan
| TRewind SrcSpan
| TBackspace SrcSpan
| TEndfile SrcSpan
| TInquire SrcSpan
| TOpen SrcSpan
| TClose SrcSpan
| TPrint SrcSpan
| TDimension SrcSpan
| TCommon SrcSpan
| TEquivalence SrcSpan
| TExternal SrcSpan
| TIntrinsic SrcSpan
| TType SrcSpan String
| TEntry SrcSpan
| TImplicit SrcSpan
| TNone SrcSpan
| TParameter SrcSpan
| TData SrcSpan
| TFormat SrcSpan
| TFieldDescriptorDEFG SrcSpan (Maybe Integer) Char Integer Integer
| TFieldDescriptorAIL SrcSpan (Maybe Integer) Char Integer
| TBlankDescriptor SrcSpan Integer
| TScaleFactor SrcSpan Integer
| TInt SrcSpan String
| TExponent SrcSpan String
| TBool SrcSpan String
| TOpPlus SrcSpan
| TOpMinus SrcSpan
| TOpExp SrcSpan
| TStar SrcSpan
| TSlash SrcSpan
| TOpOr SrcSpan
| TOpAnd SrcSpan
| TOpNot SrcSpan
| TOpEquivalent SrcSpan
| TOpNotEquivalent SrcSpan
| TOpLT SrcSpan
| TOpLE SrcSpan
| TOpEQ SrcSpan
| TOpNE SrcSpan
| TOpGT SrcSpan
| TOpGE SrcSpan
| TId SrcSpan String
| TComment SrcSpan String
| TString SrcSpan String
| THollerith SrcSpan String
| TLabel SrcSpan String
| TNewline SrcSpan
| TEOF SrcSpan
deriving (Show, Eq, Ord, Data, Typeable, Generic)
instance FirstParameter Token SrcSpan
instance FirstParameter Token SrcSpan => Spanned Token where
getSpan a = getFirstParameter a
setSpan e a = setFirstParameter e a
instance Tok Token where
eofToken (TEOF _) = True
eofToken _ = False
--------------------------------------------------------------------------------
-- AlexInput & related definitions
--------------------------------------------------------------------------------
data Lexeme = Lexeme
{ lexemeMatch :: String
, lexemeStart :: Maybe Position
, lexemeEnd :: Maybe Position
} deriving (Show)
initLexeme :: Lexeme
initLexeme = Lexeme
{ lexemeMatch = ""
, lexemeStart = Nothing
, lexemeEnd = Nothing }
data AlexInput = AlexInput
{ aiSourceInput :: String
, aiPosition :: Position
, aiBytes :: [Word8]
, aiPreviousChar :: Char
, aiLexeme :: Lexeme
, aiWhiteSensitiveCharCount :: Int
, aiStartCode :: Int
, aiPreviousToken :: Maybe Token
, aiPreviousTokensInLine :: [ Token ]
} deriving (Show)
instance Loc AlexInput where
getPos = aiPosition
instance LastToken AlexInput Token where
getLastToken = aiPreviousToken
type LexAction a = Parse AlexInput Token a
vanillaAlexInput :: AlexInput
vanillaAlexInput = AlexInput
{ aiSourceInput = ""
, aiPosition = initPosition
, aiBytes = []
, aiPreviousChar = '\n'
, aiLexeme = initLexeme
, aiWhiteSensitiveCharCount = 6
, aiStartCode = 0
, aiPreviousToken = Nothing
, aiPreviousTokensInLine = [ ] }
updateLexeme :: Maybe Char -> Position -> AlexInput -> AlexInput
updateLexeme maybeChar p ai =
let lexeme = aiLexeme ai
match = lexemeMatch lexeme
newMatch =
case maybeChar of
Just c -> toLower c : match
Nothing -> match
start = lexemeStart lexeme
newStart = if isNothing start then Just p else start
newEnd = Just p in
ai { aiLexeme = Lexeme newMatch newStart newEnd }
--------------------------------------------------------------------------------
-- Definitions needed for alexScanUser
--------------------------------------------------------------------------------
data Move = Continuation | Char | Newline
alexGetByte :: AlexInput -> Maybe (Word8, AlexInput)
alexGetByte ai
-- The process of reading individual bytes of the character
| _bytes /= [] = Just (head _bytes, ai { aiBytes = tail _bytes })
-- When all characters are already read
| posAbsoluteOffset _position == (toInteger . length . aiSourceInput) ai = Nothing
-- Skip the continuation line altogether
| isContinuation ai && _isWhiteInsensitive = skip Continuation ai
-- If we are not parsing a Hollerith skip whitespace
| _curChar == ' ' && _isWhiteInsensitive = skip Char ai
-- Read genuine character and advance. Also covers white sensitivity.
| otherwise =
let (_b:_bs) = (utf8Encode . toLower) _curChar in
Just(_b, updateLexeme (Just _curChar) _position
ai {
aiPosition =
case _curChar of
'\n' -> advance Newline _position
_ -> advance Char _position,
aiBytes = _bs,
aiPreviousChar = _curChar,
aiWhiteSensitiveCharCount =
if _isWhiteInsensitive
then 0
else aiWhiteSensitiveCharCount ai - 1
})
where
_curChar = currentChar ai
_bytes = aiBytes ai
_position = aiPosition ai
_isWhiteInsensitive = aiWhiteSensitiveCharCount ai == 0
alexInputPrevChar :: AlexInput -> Char
alexInputPrevChar ai = aiPreviousChar ai
takeNChars :: Integer -> AlexInput -> String
takeNChars n ai =
take (fromIntegral n) . drop (fromIntegral _dropN) $ aiSourceInput ai
where
_dropN = posAbsoluteOffset . aiPosition $ ai
currentChar :: AlexInput -> Char
currentChar ai = head (takeNChars 1 ai)
isContinuation :: AlexInput -> Bool
isContinuation ai =
take 6 _next7 == "\n " && not (last _next7 `elem` [' ', '0'])
where
_next7 = takeNChars 7 ai
skip :: Move -> AlexInput -> Maybe (Word8, AlexInput)
skip move ai =
let _newPosition = advance move $ aiPosition ai in
alexGetByte $ updateLexeme Nothing _newPosition $ ai { aiPosition = _newPosition }
advance :: Move -> Position -> Position
advance move position =
case move of
Char ->
position { posAbsoluteOffset = _absl + 1, posColumn = _col + 1 }
Continuation ->
position { posAbsoluteOffset = _absl + 7, posColumn = 7, posLine = _line + 1 }
Newline ->
position { posAbsoluteOffset = _absl + 1, posColumn = 1, posLine = _line + 1 }
where
_col = posColumn position
_line = posLine position
_absl = posAbsoluteOffset position
utf8Encode :: Char -> [Word8]
utf8Encode = map fromIntegral . _go . ord
where
_go oc
| oc <= 0x7f = [oc]
| oc <= 0x7ff = [ 0xc0 + (oc `Data.Bits.shiftR` 6)
, 0x80 + oc Data.Bits..&. 0x3f
]
| oc <= 0xffff = [ 0xe0 + (oc `Data.Bits.shiftR` 12)
, 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)
, 0x80 + oc Data.Bits..&. 0x3f
]
| otherwise = [ 0xf0 + (oc `Data.Bits.shiftR` 18)
, 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)
, 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)
, 0x80 + oc Data.Bits..&. 0x3f
]
--------------------------------------------------------------------------------
-- Lexer definition
--------------------------------------------------------------------------------
lexer :: (Token -> LexAction a) -> LexAction a
lexer cont = cont =<< lexer'
lexer' :: LexAction Token
lexer' = do
resetLexeme
alexInput <- getAlex
let startCode = aiStartCode alexInput
version <- getVersion
case alexScanUser version alexInput startCode of
AlexEOF -> return $ TEOF $ SrcSpan (getPos alexInput) (getPos alexInput)
AlexError _ -> fail "Lexing failed. "
AlexSkip newAlex _ -> putAlex newAlex >> lexer'
AlexToken newAlex startCode action -> do
putAlex newAlex
maybeToken <- action
case maybeToken of
Just token -> do
updatePreviousToken maybeToken
addToPreviousTokensInLine token
return token
Nothing -> lexer'
alexScanUser :: FortranVersion -> AlexInput -> Int -> AlexReturn (LexAction (Maybe Token))
--------------------------------------------------------------------------------
-- Functions to help testing & output
--------------------------------------------------------------------------------
initParseState :: String -> FortranVersion -> String -> ParseState AlexInput
initParseState srcInput fortranVersion filename =
_vanillaParseState { psAlexInput = vanillaAlexInput { aiSourceInput = srcInput } }
where
_vanillaParseState = ParseState
{ psAlexInput = undefined
, psVersion = fortranVersion
, psFilename = filename
, psParanthesesCount = ParanthesesCount 0 False
, psContext = [ ConStart ] }
collectFixedTokens :: FortranVersion -> String -> [Token]
collectFixedTokens version srcInput =
collectTokens lexer' $ initParseState srcInput version "<unknown>"
collectFixedTokensSafe :: FortranVersion -> String -> Maybe [Token]
collectFixedTokensSafe version srcInput =
collectTokensSafe lexer' $ initParseState srcInput version "<unknown>"
iif,keyword,st :: Int
iif = 1
keyword = 2
st = 3
alex_action_0 = lexComment Nothing
alex_action_1 = addSpanAndMatch TLabel
alex_action_2 = toSC keyword
alex_action_4 = resetPar >> toSC 0 >> addSpan TNewline
alex_action_6 = addSpan TLeftPar
alex_action_7 = incPar >> addSpan TLeftPar
alex_action_8 = addSpan TRightPar
alex_action_9 = maybeToKeyword >> addSpan TRightPar
alex_action_10 = addSpan TLeftArrayPar
alex_action_11 = addSpan TRightArrayPar
alex_action_12 = addSpan TComma
alex_action_13 = addSpan TDot
alex_action_14 = addSpan TColon
alex_action_15 = toSC st >> addSpanAndMatch TId
alex_action_16 = toSC st >> addSpanAndMatch TId
alex_action_17 = toSC st >> addSpan TProgram
alex_action_18 = toSC st >> addSpan TFunction
alex_action_19 = toSC st >> addSpan TSubroutine
alex_action_20 = toSC st >> addSpan TBlockData
alex_action_21 = toSC st >> addSpan TEnd
alex_action_22 = toSC st >> addSpan TAssign
alex_action_23 = addSpan TOpAssign
alex_action_24 = addSpan TTo
alex_action_25 = toSC st >> addSpan TGoto
alex_action_26 = toSC iif >> addSpan TIf
alex_action_27 = toSC iif >> addSpan TIf
alex_action_28 = toSC keyword >> addSpan TThen
alex_action_29 = addSpan TElse
alex_action_30 = toSC st >> addSpan TElsif
alex_action_31 = addSpan TEndif
alex_action_32 = toSC st >> addSpan TCall
alex_action_33 = toSC st >> addSpan TReturn
alex_action_34 = toSC st >> addSpan TSave
alex_action_35 = toSC st >> addSpan TContinue
alex_action_36 = toSC st >> addSpan TStop
alex_action_37 = toSC st >> addSpan TExit
alex_action_38 = toSC st >> addSpan TPause
alex_action_39 = toSC st >> addSpan TDo
alex_action_40 = toSC st >> addSpan TDoWhile
alex_action_41 = toSC st >> addSpan TEndDo
alex_action_42 = toSC st >> addSpan TRead
alex_action_43 = toSC st >> addSpan TWrite
alex_action_44 = toSC st >> addSpan TRewind
alex_action_45 = toSC st >> addSpan TBackspace
alex_action_46 = toSC st >> addSpan TEndfile
alex_action_47 = toSC st >> addSpan TInquire
alex_action_48 = toSC st >> addSpan TOpen
alex_action_49 = toSC st >> addSpan TClose
alex_action_50 = toSC st >> addSpan TPrint
alex_action_51 = toSC st >> addSpan TDimension
alex_action_52 = toSC st >> addSpan TCommon
alex_action_53 = toSC st >> addSpan TEquivalence
alex_action_54 = toSC st >> addSpan TExternal
alex_action_55 = toSC st >> addSpan TIntrinsic
alex_action_56 = typeSCChange >> addSpanAndMatch TType
alex_action_57 = addSpanAndMatch TType
alex_action_58 = typeSCChange >> addSpanAndMatch TType
alex_action_59 = addSpanAndMatch TType
alex_action_60 = toSC st >> addSpanAndMatch TType
alex_action_61 = addSpanAndMatch TType
alex_action_62 = toSC st >> addSpan TImplicit
alex_action_63 = addSpan TNone
alex_action_64 = toSC st >> addSpan TParameter
alex_action_65 = toSC st >> addSpan TEntry
alex_action_66 = toSC st >> addSpan TData
alex_action_67 = toSC st >> addSpan TFormat
alex_action_68 = addSpanAndMatch TExponent
alex_action_69 = addSpanAndMatch TInt
alex_action_70 = strAutomaton 0
alex_action_71 = addSpanAndMatch TBool
alex_action_72 = addSpan TOpPlus
alex_action_73 = addSpan TOpMinus
alex_action_74 = addSpan TOpExp
alex_action_75 = addSpan TStar
alex_action_76 = addSpan TSlash
alex_action_77 = addSpan TOpOr
alex_action_78 = addSpan TOpAnd
alex_action_79 = addSpan TOpNot
alex_action_80 = addSpan TOpEquivalent
alex_action_81 = addSpan TOpNotEquivalent
alex_action_82 = addSpan TOpLT
alex_action_83 = addSpan TOpLE
alex_action_84 = addSpan TOpEQ
alex_action_85 = addSpan TOpNE
alex_action_86 = addSpan TOpGT
alex_action_87 = addSpan TOpGE
alex_action_88 = addSpan TOpLT
alex_action_89 = addSpan TOpLE
alex_action_90 = addSpan TOpEQ
alex_action_91 = addSpan TOpNE
alex_action_92 = addSpan TOpGT
alex_action_93 = addSpan TOpGE
alex_action_94 = lexFieldDescriptorDEFG
alex_action_95 = lexFieldDescriptorAIL
alex_action_96 = lexBlankDescriptor
alex_action_97 = lexScaleFactor
alex_action_98 = addSpanAndMatch TId
alex_action_99 = addSpanAndMatch TId
alex_action_100 = lexHollerith
{-# LINE 1 "templates/GenericTemplate.hs" #-}
{-# LINE 1 "templates/GenericTemplate.hs" #-}
{-# LINE 1 "<built-in>" #-}
{-# LINE 16 "<built-in>" #-}
{-# LINE 1 "/usr/local/lib/ghc-7.10.2/include/ghcversion.h" #-}
{-# LINE 17 "<built-in>" #-}
{-# LINE 1 "templates/GenericTemplate.hs" #-}
-- -----------------------------------------------------------------------------
-- ALEX TEMPLATE
--
-- This code is in the PUBLIC DOMAIN; you may copy it freely and use
-- it for any purpose whatsoever.
-- -----------------------------------------------------------------------------
-- INTERNALS and main scanner engine
{-# LINE 21 "templates/GenericTemplate.hs" #-}
{-# LINE 51 "templates/GenericTemplate.hs" #-}
{-# LINE 72 "templates/GenericTemplate.hs" #-}
alexIndexInt16OffAddr arr off = arr ! off
{-# LINE 93 "templates/GenericTemplate.hs" #-}
alexIndexInt32OffAddr arr off = arr ! off
{-# LINE 105 "templates/GenericTemplate.hs" #-}
quickIndex arr i = arr ! i
-- -----------------------------------------------------------------------------
-- Main lexing routines
data AlexReturn a
= AlexEOF
| AlexError !AlexInput
| AlexSkip !AlexInput !Int
| AlexToken !AlexInput !Int a
-- alexScan :: AlexInput -> StartCode -> AlexReturn a
alexScan input (sc)
= alexScanUser undefined input (sc)
alexScanUser user input (sc)
= case alex_scan_tkn user input (0) input sc AlexNone of
(AlexNone, input') ->
case alexGetByte input of
Nothing ->
AlexEOF
Just _ ->
AlexError input'
(AlexLastSkip input'' len, _) ->
AlexSkip input'' len
(AlexLastAcc k input''' len, _) ->
AlexToken input''' len k
-- Push the input through the DFA, remembering the most recent accepting
-- state it encountered.
alex_scan_tkn user orig_input len input s last_acc =
input `seq` -- strict in the input
let
new_acc = (check_accs (alex_accept `quickIndex` (s)))
in
new_acc `seq`
case alexGetByte input of
Nothing -> (new_acc, input)
Just (c, new_input) ->
case fromIntegral c of { (ord_c) ->
let
base = alexIndexInt32OffAddr alex_base s
offset = (base + ord_c)
check = alexIndexInt16OffAddr alex_check offset
new_s = if (offset >= (0)) && (check == ord_c)
then alexIndexInt16OffAddr alex_table offset
else alexIndexInt16OffAddr alex_deflt s
in
case new_s of
(-1) -> (new_acc, input)
-- on an error, we want to keep the input *before* the
-- character that failed, not after.
_ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len + (1)) else len)
-- note that the length is increased ONLY if this is the 1st byte in a char encoding)
new_input new_s new_acc
}
where
check_accs (AlexAccNone) = last_acc
check_accs (AlexAcc a ) = AlexLastAcc a input (len)
check_accs (AlexAccSkip) = AlexLastSkip input (len)
check_accs (AlexAccPred a predx rest)
| predx user orig_input (len) input
= AlexLastAcc a input (len)
| otherwise
= check_accs rest
check_accs (AlexAccSkipPred predx rest)
| predx user orig_input (len) input
= AlexLastSkip input (len)
| otherwise
= check_accs rest
data AlexLastAcc a
= AlexNone
| AlexLastAcc a !AlexInput !Int
| AlexLastSkip !AlexInput !Int
instance Functor AlexLastAcc where
fmap f AlexNone = AlexNone
fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z
fmap f (AlexLastSkip x y) = AlexLastSkip x y
data AlexAcc a user
= AlexAccNone
| AlexAcc a
| AlexAccSkip
| AlexAccPred a (AlexAccPred user) (AlexAcc a user)
| AlexAccSkipPred (AlexAccPred user) (AlexAcc a user)
type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool
-- -----------------------------------------------------------------------------
-- Predicates on a rule
alexAndPred p1 p2 user in1 len in2
= p1 user in1 len in2 && p2 user in1 len in2
--alexPrevCharIsPred :: Char -> AlexAccPred _
alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input
alexPrevCharMatches f _ input _ _ = f (alexInputPrevChar input)
--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _
alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input
--alexRightContext :: Int -> AlexAccPred _
alexRightContext (sc) user _ _ input =
case alex_scan_tkn user input (0) input sc AlexNone of
(AlexNone, _) -> False
_ -> True
-- TODO: there's no need to find the longest
-- match when checking the right context, just
-- the first match will do.
-- used by wrappers
iUnbox (i) = i