diff --git a/Eval.hs b/Eval.hs
index 7d41beca39e1e589d65c4a4d7c770d3a0d855733..8abd2948ae7220f8401b8870d0b1ebebb924003c 100644
--- a/Eval.hs
+++ b/Eval.hs
@@ -19,14 +19,43 @@ eval env expr = let (eval', evalFull') = (eval env, evalFull env) in case expr o
             Filter -> let (Set inputRecords,predicate) = (eval' $ head inputSets, eval' $ head args) in
                 Set $ filter ((==Boolean True).(\r -> eval' $ FuncCall predicate [] [r])) $ map eval' inputRecords
               
+            Map -> Set (map (\record -> FuncCall lambda [] [record]) records)
+                where
+                    (Set records:_) = inputSets
+                    (lambda:_) = args
+
             IsEqual -> let (e1:e2:_) = args in -- TODO not sufficent.
                 Boolean (eval' e1 == eval' e2)
+            
+            XProduct -> let ((Set l1): (Set l2):_) = map eval' inputSets in
+                Set $ [ x `concatRecord` y | x <- l1, y <- l2]
 
             RecordIndex -> let (Record recordData:Int index:_) = (map eval' args) in
                 recordData !! index
 
-            XProduct -> debug (show env) $ let ((Set l1): (Set l2):_) = map eval' inputSets in
-                Set $ [ x `concatRecord` y | x <- l1, y <- l2]
+            RecordSelect -> Record filteredList
+                where
+                    (Record recordData: indexes) = args
+                    indexesRaw = map (\(Int i) -> i) indexes
+
+                    filteredList = map (recordData!!) indexesRaw
+                    
+                    {-numberedElems = zip [1..] recordData :: [(Int, Expr)]
+                    filtered = filter ((`elem` indexesRaw).fst) numberedElems :: [(Int, Expr)]
+                    filteredList = map snd filtered :: [Expr]-}
+                
+            IsEmpty -> case eval' (head args) of
+                (String a) -> Boolean $ null a
+
+            Contains -> case args of
+                (mainString:containsWhat:_) -> case (eval' mainString , eval' containsWhat) of
+                    (String a, String b) -> a `beginsWith` b
+
+            Plus -> let (e1:e2:_) = args in case (eval' e1, eval' e2) of
+                (String a, String b) -> String (a ++ b)
+                (Record a, Record b) -> Record (a ++ b)
+                _ -> error "eval error"
+
 
             --implement later
             --(Map) -> Set $ (map (\r -> FuncCall predicate [] [r]) inputRecords)
@@ -37,6 +66,11 @@ eval env expr = let (eval', evalFull') = (eval env, evalFull env) in case expr o
                 -- TODO FIX
     (Var name) -> eval' $ findVar env name
 
+
+
+
+    
+
     control@(Control lastResult exprs) -> if null exprs then lastResult else eval' $ evalControl1 env control
 
     _ -> expr
@@ -52,4 +86,5 @@ evalFull = eval
 --evalFull env (Set xs) = Set (map (eval env) xs) -- evaluates expression fully (not just weak head normal form)
 --evalFull _ e = e
 --TODO implement properly
-concatRecord (Record r1) (Record r2) = Record (r1 ++ r2)
\ No newline at end of file
+concatRecord (Record r1) (Record r2) = Record (r1 ++ r2)
+beginsWith = notImplemented
\ No newline at end of file
diff --git a/Lexer.hs b/Lexer.hs
index 7b219d60bdc737444b240d256a1a8ac07eb845c7..b82aa948d0bd41cbb67ba81b4da033578c8e18a1 100644
--- a/Lexer.hs
+++ b/Lexer.hs
@@ -81,23 +81,23 @@ type Byte = Word8
 -- The input type
 
 
+type AlexInput = (AlexPosn,     -- current position,
+                  Char,         -- previous char
+                  [Byte],       -- pending bytes on current char
+                  String)       -- current input string
 
+ignorePendingBytes :: AlexInput -> AlexInput
+ignorePendingBytes (p,c,_ps,s) = (p,c,[],s)
 
+alexInputPrevChar :: AlexInput -> Char
+alexInputPrevChar (_p,c,_bs,_s) = c
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)
+alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))
+alexGetByte (_,_,[],[]) = Nothing
+alexGetByte (p,_,[],(c:s))  = let p' = alexMove p c
+                              in case utf8Encode' c of
+                                   (b, bs) -> p' `seq`  Just (b, (p', c, bs, s))
 
 
 
@@ -170,10 +170,20 @@ type Byte = Word8
 -- assuming the usual eight character tab stops.
 
 
+data AlexPosn = AlexPn !Int !Int !Int
+        deriving (Eq,Show)
 
+alexStartPos :: AlexPosn
+alexStartPos = AlexPn 0 1 1
 
+alexMove :: AlexPosn -> Char -> AlexPosn
+alexMove (AlexPn a l c) '\t' = AlexPn (a+1)  l     (c+alex_tab_size-((c-1) `mod` alex_tab_size))
+alexMove (AlexPn a l _) '\n' = AlexPn (a+1) (l+1)   1
+alexMove (AlexPn a l c) _    = AlexPn (a+1)  l     (c+1)
 
 
+-- -----------------------------------------------------------------------------
+-- Monad (default and with ByteString input)
 
 
 
@@ -182,8 +192,6 @@ type Byte = Word8
 
 
 
--- -----------------------------------------------------------------------------
--- Monad (default and with ByteString input)
 
 
 
@@ -329,6 +337,8 @@ type Byte = Word8
 
 
 
+-- -----------------------------------------------------------------------------
+-- Basic wrapper
 
 
 
@@ -337,34 +347,14 @@ type Byte = Word8
 
 
 
--- -----------------------------------------------------------------------------
--- Basic wrapper
 
 
-type AlexInput = (Char,[Byte],String)
 
-alexInputPrevChar :: AlexInput -> Char
-alexInputPrevChar (c,_,_) = c
 
--- alexScanTokens :: String -> [token]
-alexScanTokens str = go ('\n',[],str)
-  where go inp__@(_,_bs,s) =
-          case alexScan inp__ 0 of
-                AlexEOF -> []
-                AlexError _ -> error "lexical error"
-                AlexSkip  inp__' _ln     -> go inp__'
-                AlexToken inp__' len act -> act (take len s) : go inp__'
 
-alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)
-alexGetByte (c,(b:bs),s) = Just (b,(c,bs,s))
-alexGetByte (_,[],[])    = Nothing
-alexGetByte (_,[],(c:s)) = case utf8Encode' c of
-                             (b, bs) -> Just (b, (c, bs, s))
 
 
 
--- -----------------------------------------------------------------------------
--- Basic wrapper, ByteString version
 
 
 
@@ -373,6 +363,8 @@ alexGetByte (_,[],(c:s)) = case utf8Encode' c of
 
 
 
+-- -----------------------------------------------------------------------------
+-- Basic wrapper, ByteString version
 
 
 
@@ -397,10 +389,7 @@ alexGetByte (_,[],(c:s)) = case utf8Encode' c of
 
 
 
--- -----------------------------------------------------------------------------
--- Posn wrapper
 
--- Adds text positions to the basic model.
 
 
 
@@ -408,9 +397,20 @@ alexGetByte (_,[],(c:s)) = case utf8Encode' c of
 
 
 
+-- -----------------------------------------------------------------------------
+-- Posn wrapper
 
+-- Adds text positions to the basic model.
 
 
+--alexScanTokens :: String -> [token]
+alexScanTokens str0 = go (alexStartPos,'\n',[],str0)
+  where go inp__@(pos,_,_,str) =
+          case alexScan inp__ 0 of
+                AlexEOF -> []
+                AlexError ((AlexPn _ line column),_,_,_) -> error $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)
+                AlexSkip  inp__' _ln     -> go inp__'
+                AlexToken inp__' len act -> act pos (take len str) : go inp__'
 
 
 
@@ -451,489 +451,1817 @@ alexGetByte (_,[],(c:s)) = case utf8Encode' c of
 alex_tab_size :: Int
 alex_tab_size = 8
 alex_base :: Array Int Int
-alex_base = listArray (0 :: Int, 39)
+alex_base = listArray (0 :: Int, 73)
   [ -8
-  , -55
+  , -115
   , -54
-  , -109
-  , 67
-  , 156
   , -53
-  , -106
+  , -13
+  , -108
+  , 115
   , -99
-  , 3
-  , 240
-  , 268
-  , 352
-  , 0
+  , -101
   , 0
+  , 228
+  , 436
+  , -104
   , 0
+  , 368
+  , 590
+  , -49
+  , -102
+  , -95
+  , 713
+  , 649
   , 0
+  , 616
+  , 895
+  , 867
   , 0
+  , 896
+  , 1112
+  , 1140
   , 0
   , 0
   , 0
   , 0
   , 0
   , 0
-  , -88
-  , 380
-  , 464
-  , 492
-  , 576
-  , 604
-  , 688
-  , 716
-  , 800
-  , 828
-  , 912
-  , 940
-  , 1024
-  , 1082
-  , 143
-  , 0
-  ]
-
-alex_table :: Array Int Int
-alex_table = listArray (0 :: Int, 1337)
-  [ 0
-  , 9
-  , 9
-  , 9
-  , 9
-  , 9
-  , 18
-  , 19
-  , 7
-  , 17
-  , 14
-  , 13
-  , 9
-  , 9
-  , 9
-  , 9
-  , 9
-  , 8
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 3
-  , 9
   , 0
-  , 4
   , 0
   , 0
   , 0
   , 0
   , 0
-  , 20
-  , 21
   , 0
-  , 9
   , 0
-  , 6
-  , 24
-  , 2
-  , 38
-  , 38
-  , 38
-  , 38
-  , 38
-  , 38
-  , 38
-  , 38
-  , 38
-  , 38
+  , -89
+  , 1224
+  , 1252
+  , 1336
+  , 1364
+  , 1448
+  , 1476
+  , 1560
+  , 1588
+  , 1672
+  , 1700
+  , 1784
+  , 1812
+  , 1896
+  , 1924
+  , 2008
+  , 2036
+  , 2120
+  , 2148
+  , 2232
+  , 2260
+  , 2344
+  , 2372
+  , 2456
+  , 2484
+  , 2568
+  , 2596
+  , 2654
+  , 877
+  , 2729
   , 0
+  ]
+
+alex_table :: Array Int Int
+alex_table = listArray (0 :: Int, 2984)
+  [ 0
   , 22
-  , 0
+  , 22
+  , 22
+  , 22
+  , 22
+  , 25
+  , 34
+  , 35
+  , 17
+  , 8
+  , 12
   , 1
+  , 33
+  , 30
+  , 29
+  , 18
   , 0
   , 0
   , 0
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 15
-  , 23
-  , 16
-  , 0
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 30
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 34
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
   , 5
   , 0
+  , 22
   , 0
+  , 11
+  , 23
   , 0
   , 0
   , 0
   , 0
+  , 37
+  , 38
   , 0
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
+  , 36
+  , 42
+  , 16
+  , 43
+  , 3
+  , 72
+  , 71
+  , 71
+  , 71
+  , 71
+  , 71
+  , 71
+  , 71
+  , 71
+  , 71
+  , 39
+  , 40
   , 0
+  , 2
   , 0
   , 0
   , 0
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 31
+  , 41
+  , 32
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 57
+  , 60
+  , 60
+  , 56
+  , 60
+  , 60
+  , 59
+  , 60
+  , 60
+  , 60
+  , 53
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 65
+  , 60
+  , 60
+  , 60
+  , 44
+  , 60
+  , 60
+  , 19
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 4
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 14
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 20
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 73
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 22
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 71
+  , 71
+  , 71
+  , 71
+  , 71
+  , 71
+  , 71
+  , 71
+  , 71
+  , 71
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 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
+  , 19
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 21
+  , 20
+  , 4
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 13
+  , 14
+  , 6
+  , 9
+  , 9
+  , 9
+  , 10
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 45
+  , 60
+  , 60
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 24
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 27
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 28
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 69
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 48
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
   , 0
   , 0
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 39
-  , 38
-  , 38
-  , 38
-  , 38
-  , 38
-  , 38
-  , 38
-  , 38
-  , 38
-  , 38
-  , 0
-  , 0
-  , 0
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 5
-  , 31
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 31
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 31
-  , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 0
-  , 31
-  , 0
   , 0
   , 0
   , 0
   , 0
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
   , 0
@@ -941,111 +2269,111 @@ alex_table = listArray (0 :: Int, 1337)
   , 0
   , 0
   , 0
+  , 60
   , 0
   , 0
-  , 31
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 11
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
   , 0
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
   , 0
   , 0
   , 0
+  , 60
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 49
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
+  , 68
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
-  , 31
   , 0
   , 0
   , 0
   , 0
   , 0
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
   , 0
@@ -1053,178 +2381,473 @@ alex_table = listArray (0 :: Int, 1337)
   , 0
   , 0
   , 0
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 67
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 54
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 64
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 63
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 61
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 7
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 58
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 0
   , 0
   , 0
-  , 31
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 12
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 36
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
   , 0
   , 0
   , 0
   , 0
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
+  , 60
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 62
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
   , 0
   , 0
   , 0
-  , 31
   , 0
   , 0
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
   , 0
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
   , 0
   , 0
+  , 60
   , 0
   , 0
   , 0
   , 0
   , 0
-  , 31
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 25
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 26
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
   , 0
@@ -1232,110 +2855,111 @@ alex_table = listArray (0 :: Int, 1337)
   , 0
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
+  , 60
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 55
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 66
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
   , 0
   , 0
   , 0
   , 0
-  , 31
   , 0
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
   , 0
   , 0
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
   , 0
+  , 60
   , 0
   , 0
   , 0
   , 0
   , 0
   , 0
-  , 31
   , 0
-  , 33
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 32
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
   , 0
@@ -1344,18 +2968,64 @@ alex_table = listArray (0 :: Int, 1337)
   , 0
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
+  , 60
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 52
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 51
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
   , 0
@@ -1363,8 +3033,17 @@ alex_table = listArray (0 :: Int, 1337)
   , 0
   , 0
   , 0
-  , 31
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
   , 0
@@ -1372,18 +3051,9 @@ alex_table = listArray (0 :: Int, 1337)
   , 0
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
+  , 60
   , 0
   , 0
   , 0
@@ -1391,175 +3061,272 @@ alex_table = listArray (0 :: Int, 1337)
   , 0
   , 0
   , 0
-  , 31
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 35
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 50
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 47
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 29
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
   , 0
   , 0
   , 0
+  , 60
   , 0
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
   , 0
   , 0
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
   , 0
   , 0
   , 0
   , 0
-  , 31
   , 0
   , 0
   , 0
   , 0
   , 0
+  , 60
   , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 46
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 26
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
   , 0
   , 0
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 72
+  , 72
+  , 72
+  , 72
+  , 72
+  , 72
+  , 72
+  , 72
+  , 72
+  , 72
+  , 0
+  , 0
+  , 0
   , 0
   , 0
   , 0
   , 0
   , 0
-  , 31
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 28
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 27
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
   , 0
@@ -1568,16 +3335,6 @@ alex_table = listArray (0 :: Int, 1337)
   , 0
   , 0
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
   , 0
   , 0
   , 0
@@ -1615,92 +3372,13 @@ alex_table = listArray (0 :: Int, 1337)
   , 0
   , 0
   , 0
-  , 31
   , 0
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 10
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 31
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
   , 0
   , 0
   , 0
   , 0
   , 0
   , 0
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
-  , 37
   , 0
   , 0
   , 0
@@ -1834,50 +3512,1537 @@ alex_table = listArray (0 :: Int, 1337)
   , 0
   , 0
   , 0
-  ]
-
-alex_check :: Array Int Int
-alex_check = listArray (0 :: Int, 1337)
-  [ -1
+  , 0
+  , 0
+  , 0
+  ]
+
+alex_check :: Array Int Int
+alex_check = listArray (0 :: Int, 2984)
+  [ -1
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 121
+  , 61
+  , 61
+  , 117
+  , 109
+  , 112
+  , 116
+  , 62
+  , 116
+  , 110
+  , 105
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 111
+  , -1
+  , 32
+  , -1
+  , 34
+  , 35
+  , -1
+  , -1
+  , -1
+  , -1
+  , 40
+  , 41
+  , -1
+  , 43
+  , 44
+  , 45
+  , 46
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 58
+  , 59
+  , -1
+  , 61
+  , -1
+  , -1
+  , -1
+  , 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
+  , -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
+  , 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
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 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
+  , -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
+  , 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
+  , 34
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 32
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 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
+  , -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
+  , 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
-  , 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
+  , 10
+  , 39
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 39
+  , -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
+  , 95
+  , -1
+  , 97
+  , 98
+  , 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
+  , 95
+  , -1
+  , 97
+  , 98
+  , 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
+  , 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
+  , 39
+  , -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
+  , 39
+  , -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
-  , 62
+  , 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
+  , 39
+  , -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
+  , 39
+  , -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
+  , 39
+  , -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
+  , 39
+  , -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
-  , 9
-  , 10
-  , 11
-  , 12
-  , 13
+  , 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
+  , 39
   , -1
   , -1
   , -1
   , -1
   , -1
-  , 111
-  , 32
   , -1
-  , 34
+  , -1
+  , -1
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 39
+  , -1
   , -1
   , -1
   , -1
   , -1
   , -1
-  , 40
-  , 41
   , -1
-  , 32
   , -1
-  , 45
-  , 46
-  , 47
   , 48
   , 49
   , 50
@@ -1889,44 +5054,44 @@ alex_check = listArray (0 :: Int, 1337)
   , 56
   , 57
   , -1
-  , 59
   , -1
-  , 61
   , -1
   , -1
   , -1
-  , 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
   , -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
@@ -1953,6 +5118,15 @@ alex_check = listArray (0 :: Int, 1337)
   , 120
   , 121
   , 122
+  , 39
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
   , 48
   , 49
   , 50
@@ -1970,38 +5144,66 @@ alex_check = listArray (0 :: Int, 1337)
   , -1
   , -1
   , -1
-  , 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
+  , -1
+  , -1
+  , 39
+  , -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
@@ -2028,7 +5230,15 @@ alex_check = listArray (0 :: Int, 1337)
   , 120
   , 121
   , 122
-  , 34
+  , 39
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
   , 48
   , 49
   , 50
@@ -2042,6 +5252,21 @@ alex_check = listArray (0 :: Int, 1337)
   , -1
   , -1
   , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 39
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
   , 48
   , 49
   , 50
@@ -2059,37 +5284,37 @@ alex_check = listArray (0 :: Int, 1337)
   , -1
   , -1
   , -1
-  , 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
-  , -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
@@ -2371,7 +5596,7 @@ alex_check = listArray (0 :: Int, 1337)
   , -1
   , 39
   , -1
-  , -1
+  , 69
   , -1
   , -1
   , -1
@@ -2929,6 +6154,7 @@ alex_check = listArray (0 :: Int, 1337)
   , -1
   , -1
   , -1
+  , 39
   , -1
   , -1
   , -1
@@ -2937,6 +6163,16 @@ alex_check = listArray (0 :: Int, 1337)
   , -1
   , -1
   , -1
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
   , -1
   , -1
   , -1
@@ -2946,17 +6182,34 @@ alex_check = listArray (0 :: Int, 1337)
   , -1
   , -1
   , -1
+  , 95
   , -1
-  , -1
-  , -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
   , 95
   , -1
   , 97
@@ -3043,6 +6296,81 @@ alex_check = listArray (0 :: Int, 1337)
   , 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
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
   , -1
   , -1
   , -1
@@ -3179,7 +6507,7 @@ alex_check = listArray (0 :: Int, 1337)
   ]
 
 alex_deflt :: Array Int Int
-alex_deflt = listArray (0 :: Int, 39)
+alex_deflt = listArray (0 :: Int, 73)
   [ -1
   , -1
   , -1
@@ -3189,6 +6517,40 @@ alex_deflt = listArray (0 :: Int, 39)
   , -1
   , -1
   , -1
+  , 13
+  , 13
+  , -1
+  , -1
+  , 21
+  , 21
+  , -1
+  , -1
+  , -1
+  , -1
+  , 23
+  , 23
+  , 23
+  , -1
+  , 23
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
   , -1
   , -1
   , -1
@@ -3222,7 +6584,7 @@ alex_deflt = listArray (0 :: Int, 39)
   , -1
   ]
 
-alex_accept = listArray (0 :: Int, 39)
+alex_accept = listArray (0 :: Int, 73)
   [ AlexAccNone
   , AlexAccNone
   , AlexAccNone
@@ -3232,7 +6594,41 @@ alex_accept = listArray (0 :: Int, 39)
   , AlexAccNone
   , AlexAccNone
   , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
   , AlexAccSkip
+  , AlexAccSkip
+  , AlexAcc 49
+  , AlexAcc 48
+  , AlexAcc 47
+  , AlexAcc 46
+  , AlexAcc 45
+  , AlexAcc 44
+  , AlexAcc 43
+  , AlexAcc 42
+  , AlexAcc 41
+  , AlexAcc 40
+  , AlexAcc 39
+  , AlexAcc 38
+  , AlexAcc 37
+  , AlexAcc 36
+  , AlexAcc 35
+  , AlexAcc 34
+  , AlexAcc 33
+  , AlexAcc 32
+  , AlexAcc 31
+  , AlexAcc 30
   , AlexAcc 29
   , AlexAcc 28
   , AlexAcc 27
@@ -3265,85 +6661,155 @@ alex_accept = listArray (0 :: Int, 39)
   , AlexAcc 0
   ]
 
-alex_actions = array (0 :: Int, 30)
-  [ (29,alex_action_1)
-  , (28,alex_action_2)
-  , (27,alex_action_3)
-  , (26,alex_action_4)
-  , (25,alex_action_5)
-  , (24,alex_action_6)
-  , (23,alex_action_7)
-  , (22,alex_action_8)
-  , (21,alex_action_9)
-  , (20,alex_action_10)
-  , (19,alex_action_11)
-  , (18,alex_action_12)
-  , (17,alex_action_13)
-  , (16,alex_action_14)
-  , (15,alex_action_15)
-  , (14,alex_action_16)
-  , (13,alex_action_16)
-  , (12,alex_action_16)
-  , (11,alex_action_16)
-  , (10,alex_action_16)
-  , (9,alex_action_16)
-  , (8,alex_action_16)
-  , (7,alex_action_16)
-  , (6,alex_action_16)
-  , (5,alex_action_16)
-  , (4,alex_action_16)
-  , (3,alex_action_16)
-  , (2,alex_action_17)
-  , (1,alex_action_18)
-  , (0,alex_action_19)
+alex_actions = array (0 :: Int, 50)
+  [ (49,alex_action_2)
+  , (48,alex_action_3)
+  , (47,alex_action_4)
+  , (46,alex_action_5)
+  , (45,alex_action_6)
+  , (44,alex_action_7)
+  , (43,alex_action_8)
+  , (42,alex_action_9)
+  , (41,alex_action_10)
+  , (40,alex_action_11)
+  , (39,alex_action_12)
+  , (38,alex_action_13)
+  , (37,alex_action_14)
+  , (36,alex_action_15)
+  , (35,alex_action_16)
+  , (34,alex_action_17)
+  , (33,alex_action_18)
+  , (32,alex_action_19)
+  , (31,alex_action_20)
+  , (30,alex_action_21)
+  , (29,alex_action_22)
+  , (28,alex_action_23)
+  , (27,alex_action_24)
+  , (26,alex_action_25)
+  , (25,alex_action_25)
+  , (24,alex_action_25)
+  , (23,alex_action_25)
+  , (22,alex_action_25)
+  , (21,alex_action_25)
+  , (20,alex_action_25)
+  , (19,alex_action_25)
+  , (18,alex_action_25)
+  , (17,alex_action_25)
+  , (16,alex_action_25)
+  , (15,alex_action_25)
+  , (14,alex_action_25)
+  , (13,alex_action_25)
+  , (12,alex_action_25)
+  , (11,alex_action_25)
+  , (10,alex_action_25)
+  , (9,alex_action_25)
+  , (8,alex_action_25)
+  , (7,alex_action_25)
+  , (6,alex_action_25)
+  , (5,alex_action_25)
+  , (4,alex_action_25)
+  , (3,alex_action_26)
+  , (2,alex_action_27)
+  , (1,alex_action_28)
+  , (0,alex_action_29)
   ]
 
-{-# LINE 36 "Lexer.x" #-}
+{-# LINE 49 "Lexer.x" #-}
 
 --token type:
-data Token =
-    TokenFilter         |
-    TokenSetName String |
-    TokenFunc           |
-    TokenNat Int        |
-    TokenVarName String |
-    TokenTrue           |
-    TokenFalse          |
-    TokenString String  |
-    TokenLeftSqBracket  |
-    TokenRightSqBracket |
-    TokenArrow          |
-    TokenisEqual        |
-    TokenisNotEqual     |
-    TokenLeftBracket    |
-    TokenRightBracket   |
-    TokenSemiCol        |
-    TokenLambda         |
-    TokenComma          |
-    TokenFullStop       |
-    TokenInSet          |
-    TokenOutSet
+data Token  =
+    TokenFilter AlexPosn         |
+    TokenIsEmpty AlexPosn         |
+    TokenContains AlexPosn         |
+    TokenSetName AlexPosn String |
+    TokenNat AlexPosn Int        |
+    TokenPosNat AlexPosn Int        |
+    TokenVarName AlexPosn String |
+    TokenTrue AlexPosn           |
+    TokenFalse AlexPosn          |
+    TokenString AlexPosn String  |
+    TokenLeftSqBracket AlexPosn  |
+    TokenRightSqBracket AlexPosn |
+    TokenArrow AlexPosn          |
+    TokenisEqual AlexPosn        |
+    TokenisNotEqual AlexPosn     |
+    TokenPlus AlexPosn     |
+    TokenLeftBracket AlexPosn    |
+    TokenRightBracket AlexPosn   |
+    TokenSemiCol AlexPosn        |
+    TokenCol AlexPosn        |
+    TokenLambda AlexPosn         |
+    TokenComma AlexPosn          |
+    TokenFullStop AlexPosn       |
+    TokenInSet AlexPosn          |
+    TokenXProduct AlexPosn       |
+    TokenXXProduct AlexPosn       |
+    TokenOutSet AlexPosn         |
+    TokenMap AlexPosn
     deriving  (Eq, Show)
 
-alex_action_1 = \s -> TokenFilter 
-alex_action_2 = \s -> TokenTrue 
-alex_action_3 = \s -> TokenFalse 
-alex_action_4 = \s -> TokenInSet 
-alex_action_5 = \s -> TokenOutSet 
-alex_action_6 = \s -> TokenLeftSqBracket 
-alex_action_7 = \s -> TokenRightSqBracket 
-alex_action_8 = \s -> TokenArrow 
-alex_action_9 = \s -> TokenisEqual 
-alex_action_10 = \s -> TokenisNotEqual 
-alex_action_11 = \s -> TokenLeftBracket 
-alex_action_12 = \s -> TokenRightBracket 
-alex_action_13 = \s -> TokenSemiCol 
-alex_action_14 = \s -> TokenLambda 
-alex_action_15 = \s -> TokenFullStop 
-alex_action_16 = \s -> TokenVarName s 
-alex_action_17 = \s -> TokenSetName s 
-alex_action_18 = \s -> TokenNat (read s) 
-alex_action_19 = \s -> ((TokenString).init.tail) s 
+
+pos :: Token -> AlexPosn
+
+pos token = case token of
+    (TokenFilter p ) -> p        
+    (TokenIsEmpty p ) -> p        
+    (TokenContains p ) -> p        
+    (TokenSetName p _) -> p 
+    (TokenNat p _) -> p        
+    (TokenPosNat p _) -> p        
+    (TokenVarName p _) -> p 
+    (TokenTrue p ) -> p          
+    (TokenFalse p ) -> p         
+    (TokenString p _) -> p  
+    (TokenLeftSqBracket p ) -> p 
+    (TokenRightSqBracket p ) -> p
+    (TokenArrow p ) -> p         
+    (TokenisEqual p ) -> p       
+    (TokenisNotEqual p ) -> p    
+    (TokenPlus p ) -> p    
+    (TokenLeftBracket p ) -> p   
+    (TokenRightBracket p ) -> p  
+    (TokenSemiCol p ) -> p       
+    (TokenCol p ) -> p       
+    (TokenLambda p ) -> p        
+    (TokenComma p ) -> p         
+    (TokenFullStop p ) -> p      
+    (TokenInSet p ) -> p         
+    (TokenXProduct p ) -> p      
+    (TokenXXProduct p ) -> p      
+    (TokenOutSet p ) -> p        
+    (TokenMap p) -> p
+
+
+alex_action_2 = \p s -> TokenContains p 
+alex_action_3 = \p s -> TokenIsEmpty p 
+alex_action_4 = \p s -> TokenFilter p 
+alex_action_5 = \p s -> TokenTrue p 
+alex_action_6 = \p s -> TokenFalse p 
+alex_action_7 = \p s -> TokenInSet p 
+alex_action_8 = \p s -> TokenOutSet p 
+alex_action_9 = \p s -> TokenLeftSqBracket p 
+alex_action_10 = \p s -> TokenRightSqBracket p 
+alex_action_11 = \p s -> TokenArrow p 
+alex_action_12 = \p s -> TokenisEqual p 
+alex_action_13 = \p s -> TokenisNotEqual p 
+alex_action_14 = \p s -> TokenPlus p 
+alex_action_15 = \p s -> TokenLeftBracket p 
+alex_action_16 = \p s -> TokenRightBracket p 
+alex_action_17 = \p s -> TokenCol p 
+alex_action_18 = \p s -> TokenSemiCol p 
+alex_action_19 = \p s -> TokenLambda p 
+alex_action_20 = \p s -> TokenComma p 
+alex_action_21 = \p s -> TokenFullStop p 
+alex_action_22 = \p s -> TokenXProduct p 
+alex_action_23 = \p s -> TokenXXProduct p 
+alex_action_24 = \p s -> TokenMap p 
+alex_action_25 = \p s -> TokenVarName p s 
+alex_action_26 = \p s -> TokenSetName p s 
+alex_action_27 = \p s -> TokenPosNat p (read s) 
+alex_action_28 = \p s -> TokenNat p (read s) 
+alex_action_29 = \p s -> TokenString p (init.tail $ s) 
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 -- -----------------------------------------------------------------------------
 -- ALEX TEMPLATE
diff --git a/Types.hs b/Types.hs
index d5690df4eeafa7ba5d7e01925c7fa607f4a1cf1e..366147ff2a8216e3deeb65e1ea76325bd7cf1d85 100644
--- a/Types.hs
+++ b/Types.hs
@@ -7,16 +7,17 @@ type Environment = [(SymbolName, Expr)] -- (result of last calculation, other bi
 
 --data OutputLine = Let SymbolName Expr | Expr -- Expr always a function call for a set function, but not enforced by AST.
 type Output = [Expr]
-data PredefFunc = XProduct | XXProduct | IsEqual | IsNotEqual | Add --operators
+data PredefFunc = XProduct | XXProduct | IsEqual | IsNotEqual | Plus --operators
     | Map | Filter
     | RecordIndex -- [] operator
-    | IsEmpty | NotEmpty -- string functions
+    | RecordSelect
+    | IsEmpty | NotEmpty | Contains | IsSubString -- string functions
     deriving (Show, Eq)
 
 
 --n.b. these definitions do not enforce type checking! The use of any function or operator will be associated with a FuncCall.
 --Therefore, it is possible to have ASTs with ridiculous things where e.g. a XX product is applied to and int and a String, or a function call has an Int as a function!
---These issues will be checked via the type checker after the AST has been built.
+--These issues can be checked via the type checker after the AST has been built.
 
 -- filter [A] (\(r) -> r[1] == "hello")
 -- FuncCall (PredefFunc Filter) [Var "A"] [FuncDef [] ["r"] [(FuncCall (PredefFunc IsEqual) [] (r[1]) ("hello"))]]
@@ -34,6 +35,7 @@ data Expr = Control Expr [Expr] -- result of last computation, sequence of instr
     | Int Int
     | String String
     | Boolean Bool
+--    | Nat Int 
     deriving (Show, Eq)
     
 data Parameter = NamedParam SymbolName | TupleMatch [SymbolName]
\ No newline at end of file