packages feed

MicroHs 0.9.5.0 → 0.9.8.0

raw patch · 119 files changed

+11958/−19458 lines, 119 files

Files

Example.hs view
@@ -1,5 +1,4 @@ module Example(fac, main) where-import Prelude  fac :: Int -> Int fac 0 = 1@@ -7,8 +6,6 @@  main :: IO () main = do-  --putStrLn $ "word size=" ++ show _wordSize ++ ", os=" ++ if _isWindows then "Windows" else "Unix-like"-  let-    rs = map fac [1,2,3,10]+  let rs = map fac [1,2,3,10]   putStrLn "Some factorials"   print rs
LICENSE view
@@ -1,4 +1,4 @@-Copyright 2023 Lennart Augustsson+Copyright 2023,2024 Lennart Augustsson  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
Makefile view
@@ -6,13 +6,13 @@ CCWARNS= -Wall CCOPTS= -O3 CCLIBS= -lm-CCEVAL= $(CC) $(CCWARNS) $(CCOPTS) src/runtime/eval-$(CONF).c $(CCLIBS)+CCEVAL= $(CC) $(CCWARNS) $(CCOPTS) -Isrc/runtime src/runtime/eval-$(CONF).c $(CCLIBS) # GHC= ghc GHCINCS= -ighc -isrc GHCWARNS= -Wall -Wno-unrecognised-warning-flags -Wno-x-partial GHCOPTS= -O-GHCEXTS= -DNOTCABAL -XScopedTypeVariables -XPatternGuards -XTupleSections -XTypeSynonymInstances -XFlexibleInstances -XOverloadedRecordDot -XDisambiguateRecordFields+GHCEXTS= -DNOTCABAL -XScopedTypeVariables -XPatternGuards -XTupleSections -XTypeSynonymInstances -XFlexibleInstances -XOverloadedRecordDot -XDisambiguateRecordFields -XOverloadedStrings # -XOverloadedRecordUpdate GHCPKGS= #-package mtl -package pretty -package temporary -package process GHCTOOL= # -F -pgmF Tools/convertX.sh@@ -23,17 +23,22 @@ # .PHONY:	clean bootstrap install ghcgen newmhs cachelib timecompile exampletest cachetest runtest runtestmhs everytest everytestmhs nfibtest info -all:	bin/mhs+all:	bin/mhs bin/cpphs  newmhs:	ghcgen 	$(CCEVAL) generated/mhs.c -o bin/mhs-	$(CC) $(CCWARNS) -g src/runtime/eval-$(CONF).c $(CCLIBS) generated/mhs.c -o bin/mhsgdb+	$(CC) $(CCWARNS) -g -Isrc/runtime src/runtime/eval-$(CONF).c $(CCLIBS) generated/mhs.c -o bin/mhsgdb  # Compile mhs from distribution, with C compiler-bin/mhs:	src/runtime/*.c src/runtime/config*.h #generated/mhs.c+bin/mhs:	src/runtime/*.c src/runtime/*.h #generated/mhs.c 	@mkdir -p bin 	$(CCEVAL) generated/mhs.c -o bin/mhs +# Compile cpphs from distribution, with C compiler+bin/cpphs:	src/runtime/*.c src/runtime/config*.h generated/cpphs.c+	@mkdir -p bin+	$(CCEVAL) generated/cpphs.c -o bin/cpphs+ # Compile combinator evaluator bin/mhseval:	src/runtime/*.c src/runtime/config*.h 	@mkdir -p bin@@ -57,7 +62,7 @@ # Generate distribution C file generated/mhs.c:	bin/mhs src/*/*.hs 	@mkdir -p generated-	bin/mhs -isrc MicroHs.Main -ogenerated/mhs.c+	bin/mhs -z -isrc MicroHs.Main -ogenerated/mhs.c  ghcgen:	bin/gmhs src/*/*.hs lib/*.hs lib/*/*.hs lib/*/*/*.hs 	bin/gmhs -isrc MicroHs.Main -ogenerated/mhs.c@@ -72,18 +77,25 @@ bin/mhs-stage1:	bin/mhs src/*/*.hs 	@mkdir -p generated 	@echo "*** Build stage1 compiler, using bin/mhs"-	bin/mhs -isrc MicroHs.Main -ogenerated/mhs-stage1.c+	bin/mhs -z -isrc MicroHs.Main -ogenerated/mhs-stage1.c 	$(CCEVAL) generated/mhs-stage1.c -o bin/mhs-stage1  # Build stage2 compiler with stage1 compiler, and compare bin/mhs-stage2:	bin/mhs-stage1 src/*/*.hs 	@mkdir -p generated 	@echo "*** Build stage2 compiler, with stage1 compiler"-	bin/mhs-stage1 -isrc MicroHs.Main -ogenerated/mhs-stage2.c+	bin/mhs-stage1 -z -isrc MicroHs.Main -ogenerated/mhs-stage2.c 	cmp generated/mhs-stage1.c generated/mhs-stage2.c 	@echo "*** stage2 equal to stage1" 	$(CCEVAL) generated/mhs-stage2.c -o bin/mhs-stage2 +cpphssrc/malcolm-wallace-universe:+	mkdir -p cpphssrc+	cd cpphssrc; git clone --branch dot-spaces git@github.com:augustss/malcolm-wallace-universe.git++bootstrapcpphs: cpphssrc/malcolm-wallace-universe #bin/cpphs+	MHSCPPHS=bin/cpphs bin/mhs -z -XCPP -icpphssrc/malcolm-wallace-universe/polyparse-1.12/src -icpphssrc/malcolm-wallace-universe/cpphs-1.20.9 cpphssrc/malcolm-wallace-universe/cpphs-1.20.9/cpphs.hs -ogenerated/cpphs.c+ # Run test examples with ghc-compiled compiler runtest:	bin/mhseval bin/gmhs tests/*.hs 	cd tests; make alltest@@ -117,6 +129,7 @@ install: 	mkdir -p $(PREFIX)/bin 	cp bin/mhs $(PREFIX)/bin+	-cp bin/cpphs $(PREFIX)/bin 	mkdir -p $(PREFIX)/lib/mhs/src/runtime 	cp -r lib $(PREFIX)/lib/mhs 	cp src/runtime/* $(PREFIX)/lib/mhs/src/runtime
MicroHs.cabal view
@@ -1,15 +1,15 @@ cabal-version:       3.0 name:                MicroHs-version:             0.9.5.0-synopsis:            A compiler for a subset of Haskell+version:             0.9.8.0+synopsis:            A compiler for Haskell license:             Apache-2.0 license-file:        LICENSE-copyright:           2023 Lennart Augustsson+copyright:           2023,2024 Lennart Augustsson category:            language author:              lennart@augustsson.net maintainer:          lennart@augustsson.net stability:           experimental-description:         A compiler for a subset of Haskell.+description:         A compiler for an extended subset of Haskell-2010.                      The compiler translates to combinators and can compile itself. build-type:          Simple @@ -41,9 +41,10 @@   default-language:    Haskell98   hs-source-dirs:      ghc src   ghc-options:         -Wall -Wno-unrecognised-warning-flags -Wno-x-partial -main-is MicroHs.Main+                       -fwrite-ide-info   main-is:             MicroHs/Main.hs-  default-extensions:  ScopedTypeVariables PatternGuards TupleSections TypeSynonymInstances MultiParamTypeClasses-                       FlexibleInstances OverloadedRecordDot DisambiguateRecordFields StandaloneKindSignatures+  default-extensions:  ScopedTypeVariables PatternGuards TypeSynonymInstances MultiParamTypeClasses+                       FlexibleInstances BangPatterns   other-modules:       MicroHs.Abstract                        MicroHs.Compile                        MicroHs.CompileCache@@ -53,6 +54,7 @@                        MicroHs.Exp                        MicroHs.ExpPrint                        MicroHs.Expr+                       MicroHs.FFI                        MicroHs.Flags                        MicroHs.Fixity                        MicroHs.Graph@@ -64,6 +66,7 @@                        MicroHs.MakeCArray                        MicroHs.Parse                        MicroHs.StateIO+                       MicroHs.SymTab                        MicroHs.TCMonad                        MicroHs.Translate                        MicroHs.TypeCheck@@ -74,6 +77,8 @@                        Compat                        PrimTable                        System.IO.MD5+                       System.IO.Serialize+                       System.Compress                        Paths_MicroHs   autogen-modules:     Paths_MicroHs   build-depends:       base         >= 4.10 && < 4.20,
README.md view
@@ -1,15 +1,15 @@ # Micro Haskell-This directory contains an implementation of an extended subset of Haskell.+This repository contains an implementation of an extended subset of Haskell. It uses combinators for the runtime execution.  The runtime system has minimal dependencies, and can be compiled even for micro-controllers.-The `boards/` directory contains some sample, e.g., some sample code for an STM32F407G-DISC1 board.+The `boards/` directory contains some samples, e.g., some sample code for an STM32F407G-DISC1 board.  The compiler can compile itself.  ## Compiling MicroHs There are two different ways to compile MicroHs:-* Using GHC with standard `Prelude` and libraries. `Makefile` target `bin/gmhs`+* Using GHC. `Makefile` target `bin/gmhs` * Using the included combinator file and runtime.  `Makefile` target `bin/mhs`  These different ways of compiling need slightly different imports etc.@@ -29,20 +29,17 @@  To compile on Windows make sure `cl` is in the path, and then use `nmake` with `Makefile.windows`. -The compiler can also be used with emscripten to produce JavaScript, see `Makefile.emscripten`.+The compiler can also be used with emscripten to produce JavaScript/WASM, see `Makefile.emscripten`.  ## Language-The language is an extended subset of Haskell-98.+The language is an extended subset of Haskell-2010.  Differences:- * Top level definitions must have a type signature.- * Kind variables need an explicit `forall`.- * There is only deriving for `Eq`, `Ord`, `Show`, and `Typeable`.- * Polymorphic types/kinds are never inferred; use a type/kind signature if you need it.- * A module must have an export list.+ * There is only deriving for `Bounded`, `Enum`, `Eq`, `Ord`, `Show`, and `Typeable`.  * The `default` list is empty, except in the interactive system.- * No lazy patterns (`~pat`)+ * Kind variables need an explicit `forall`.  * Always enabled extension:+   * BangPatterns    * ConstraintKinds    * DuplicateRecordFields    * EmptyDataDecls@@ -63,6 +60,7 @@    * OverlappingInstances    * OverloadedRecordDot    * OverloadedRecordUpdate+   * OverloadedStrings    * PolyKinds    * RankNTypes    * RecordWildCards@@ -78,13 +76,14 @@  * `main` in the top module given to `mhs` serves at the program entry point.  * Many things that should be an error (but which are mostly harmless) are not reported.  * Text file I/O uses UTF8, but the source code does not allow Unicode.+ * The `BangPatterns` extension is parsed, but only effective at the a top level `let`/`where`.+ * Lazy patterns (`~pat`) are ignored.  * More differences that I don't remember right now.  ## Example The file `Example.hs` contains the following: ```Haskell module Example(main) where-import Prelude  fac :: Int -> Int fac 0 = 1@@ -92,8 +91,7 @@  main :: IO () main = do-  let-    rs = map fac [1,2,3,10]+  let rs = map fac [1,2,3,10]   putStrLn "Some factorials"   print rs ```@@ -126,7 +124,7 @@  ## Compiler The compiler is written in Micro Haskell.-It takes a name of a module and compiles to a target (see below).+It takes a name of a module (or a file name) and compiles to a target (see below). This module should contain the function `main` of type `IO ()` and it will be the entry point to the program. @@ -139,6 +137,10 @@ * `-CW` write compilation cache to `.mhscache` at the end of compilation * `-CR` read compilation cache from `.mhscache` at the start of compilation * `-C` short for `-CW` and `-CR`+* `-T` generate dynamic function usage statistics+* `-z` compress combinator code generated in the `.c` file+* `-XCPP` run `cpphs` on source files+* `-Dxxx` passed to `cpphs`  With the `-v` flag the processing time for each module is reported. E.g.@@ -159,6 +161,7 @@ ### Environment variables * `MHSDIR` the directory where `lib/` and `src/` are expected to be.  Defaults to `./`. * `MHSCC` command use to compile C file to produce binaries.  Look at the source for more information.+* `MHSCPPHS` command to use with `-XCPP` flag.  Defaults to `cpphs`.  ### Compiler modules @@ -171,6 +174,7 @@ * `Exp`, simple expression type. * `ExpPrint`, serialize `Exp` for the runtime system. * `Expr`, parsed expression type.+* `FFI`, generate C wrappers for FFI. * `Fixity`, resolve operator fixities. * `Flags`, compiler flags. * `Graph`, strongly connected component algorithm.@@ -182,6 +186,7 @@ * `MakeCArray`, generate a C version of the combinator file. * `Parse`, parse and build and abstract syntax tree. * `StateIO`, state + IO monad.+* `SymTab`, symbol table manipulation. * `TCMonad`, type checking monad. * `Translate`, convert an expression tree to its value. * `TypeCheck`, type checker.@@ -201,6 +206,8 @@ * `:clear` Get back to start state * `:del STR` Delete all definitions that begin with `STR` * `:reload` Reload all modules+* `:type EXPR` Show type of `EXPR`+* `:kind TYPE` Show kind of `TYPE` * `expr` Evaluate expression. * `defn` Add definition (can also be an `import`) @@ -235,7 +242,9 @@ whereas the runtime system sets the heap to 1M cells and is verbose.  ### FFI-MicroHs supports calling C functions, but all such functions must be in a table in the runtime system.+MicroHs supports calling C functions.+When running the program directly (using `-r`) or when generating a `.comb` file only the functions in the table built+into `src/runtime/eval.c` can be used.  When generating a `.c` file or an executable any C function can be called.  ### Records MicroHs implements the record dot extensions.@@ -289,6 +298,15 @@ do `make bootstrap`.  This will recompile the compiler twice and compare the outputs to make sure the new compiler still works. +# Preprocessor+Sadly, compiling a lot of Haskell packages needs the C preprocessor.+To this end, the distribution contains the combinator code for `cpphs`.+Doing `make bin/cpphs` will create the binary for the preprocessor.++To bootstrap `cpphs` you can do `make bootstrapcpphs`.+This assumes that you have `git` to download the needed packages.+At the moment, the downloaded packages are forks of the original to+make it compile with `mhs`.  # FAQ * 
generated/mhs.c view
@@ -1,14895 +1,4154 @@ static unsigned char data[] = {-118,55,46,48,10,49,53,56,56,10,65,32,95,48,32,95,50,51,32,64,-32,95,51,51,32,64,32,66,32,95,48,32,95,50,51,32,64,32,95,53,-52,32,64,32,64,32,67,39,66,32,66,32,67,32,83,39,32,83,32,64,-32,67,39,32,67,32,64,32,66,32,83,39,32,67,39,32,64,32,95,54,-51,32,95,54,53,32,64,32,102,114,111,109,85,84,70,56,32,34,45,45,-118,101,114,115,105,111,110,34,32,64,32,64,32,64,32,64,32,66,32,67,-32,67,39,32,83,39,32,64,32,95,54,54,32,95,54,32,67,32,95,54,-55,32,95,54,53,32,64,32,64,32,79,32,35,52,53,32,64,32,75,32,-64,32,64,32,64,32,95,49,48,53,32,35,49,32,64,32,64,32,64,32,-64,32,95,49,53,52,54,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,80,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,-95,49,53,56,51,32,64,32,95,54,53,49,32,95,53,49,56,32,102,114,-111,109,85,84,70,56,32,34,99,111,109,109,97,110,100,45,108,105,110,101,-34,32,64,32,64,32,35,48,32,64,32,35,48,32,64,32,64,32,64,32,-64,32,75,50,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,-85,115,97,103,101,58,32,109,104,115,32,91,45,118,93,32,91,45,108,93,-32,91,45,114,93,32,91,45,67,93,32,91,45,84,93,32,91,45,105,80,-65,84,72,93,32,91,45,111,70,73,76,69,93,32,91,77,111,100,117,108,-101,78,97,109,101,93,34,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,95,50,54,32,95,49,50,50,32,64,32,95,49,53,51,32,102,114,-111,109,85,84,70,56,32,34,77,105,99,114,111,72,115,44,32,118,101,114,-115,105,111,110,32,34,32,64,32,64,32,95,49,53,51,32,95,49,53,56,-52,32,64,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,44,-32,99,111,109,98,105,110,97,116,111,114,32,102,105,108,101,32,118,101,114,-115,105,111,110,32,34,32,64,32,64,32,95,49,53,56,49,32,64,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,83,32,64,32,67,39,32,83,-32,64,32,67,39,32,83,32,64,32,67,39,32,83,32,64,32,67,39,32,-83,32,64,32,66,32,83,32,83,39,32,95,49,53,52,52,32,64,32,66,-32,95,51,50,49,32,64,32,95,54,54,32,67,32,95,52,48,32,95,54,-53,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,45,118,34,32,-64,32,64,32,64,32,64,32,64,32,95,54,51,32,95,54,53,32,64,32,-102,114,111,109,85,84,70,56,32,34,45,114,34,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,95,53,57,32,79,32,35,52,54,32,64,32,-75,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,95,53,57,32,-64,32,67,32,95,49,53,51,32,64,32,102,114,111,109,85,84,70,56,32,-34,47,108,105,98,34,32,64,32,64,32,64,32,64,32,66,32,95,49,53,-56,53,32,64,32,95,54,48,32,95,49,53,55,51,32,95,49,54,53,32,-64,32,102,114,111,109,85,84,70,56,32,34,45,105,34,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,95,52,-56,48,32,64,32,64,32,67,39,32,95,49,53,51,32,64,32,66,32,95,-49,53,56,53,32,64,32,95,54,48,32,95,49,53,55,51,32,95,49,54,-53,32,64,32,102,114,111,109,85,84,70,56,32,34,45,111,34,32,64,32,-64,32,64,32,64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,-111,117,116,46,99,111,109,98,34,32,64,32,64,32,75,32,64,32,64,32,-64,32,64,32,64,32,95,54,51,32,95,54,53,32,64,32,102,114,111,109,-85,84,70,56,32,34,45,108,34,32,64,32,64,32,64,32,64,32,66,32,-95,49,54,56,32,95,49,53,56,54,32,64,32,64,32,83,39,32,95,53,-54,32,64,32,95,54,51,32,95,54,53,32,64,32,102,114,111,109,85,84,-70,56,32,34,45,67,34,32,64,32,64,32,64,32,95,54,51,32,95,54,-53,32,64,32,102,114,111,109,85,84,70,56,32,34,45,67,82,34,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,95,49,54,56,32,95,49,-53,56,54,32,64,32,64,32,83,39,32,95,53,54,32,64,32,95,54,51,-32,95,54,53,32,64,32,102,114,111,109,85,84,70,56,32,34,45,67,34,-32,64,32,64,32,64,32,95,54,51,32,95,54,53,32,64,32,102,114,111,-109,85,84,70,56,32,34,45,67,87,34,32,64,32,64,32,64,32,64,32,-64,32,64,32,95,54,51,32,95,54,53,32,64,32,102,114,111,109,85,84,-70,56,32,34,45,84,34,32,64,32,64,32,64,32,64,32,64,32,64,32,-95,52,52,51,32,67,32,95,54,55,32,95,54,53,32,64,32,64,32,102,-114,111,109,85,84,70,56,32,34,45,45,34,32,64,32,64,32,64,32,64,-32,64,32,95,50,55,53,32,79,32,35,52,54,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,58,49,53,56,55,32,64,10,65,32,95,52,-51,32,58,49,53,56,54,32,64,10,65,32,89,32,66,32,80,32,75,32,-64,32,64,32,83,39,32,67,32,64,32,67,32,83,39,32,64,32,64,32,-66,32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,58,49,-53,56,53,32,64,10,65,32,102,114,111,109,85,84,70,56,32,34,48,46,-57,46,51,46,48,34,32,64,32,58,49,53,56,52,32,64,10,65,32,66,-32,83,39,32,83,39,32,95,48,32,95,50,51,32,64,32,64,32,64,32,-83,32,83,39,32,83,39,32,64,32,95,49,50,52,32,95,49,53,52,56,-32,64,32,95,49,50,56,32,64,32,64,32,83,39,32,66,32,64,32,66,-32,95,48,32,95,50,51,32,64,32,64,32,95,50,56,50,32,64,32,64,-32,66,32,66,32,66,32,95,49,56,32,95,49,48,32,64,32,95,50,52,-57,32,64,32,64,32,64,32,64,32,95,49,53,48,57,32,64,32,64,32,-64,32,64,32,83,39,32,66,32,64,32,66,32,95,48,32,95,50,51,32,-64,32,64,32,95,50,56,50,32,64,32,64,32,83,39,32,67,39,32,83,-39,32,95,48,32,95,50,51,32,64,32,64,32,64,32,64,32,95,49,53,-48,57,32,64,32,66,32,66,32,85,32,64,32,64,32,67,39,66,32,66,-39,32,66,39,32,66,32,95,49,48,54,32,95,50,51,32,64,32,64,32,-67,39,32,95,50,54,32,64,32,66,32,95,49,52,54,32,95,50,49,32,-64,32,64,32,67,32,95,49,53,50,32,64,32,35,48,32,64,32,64,32,-64,32,95,50,54,32,95,49,50,50,32,64,32,95,49,53,51,32,102,114,-111,109,85,84,70,56,32,34,83,97,118,105,110,103,32,99,97,99,104,101,-32,34,32,64,32,64,32,95,49,53,52,32,95,49,54,50,32,95,49,57,-49,32,64,32,64,32,95,49,52,48,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,32,95,48,32,95,-50,51,32,64,32,64,32,67,39,32,95,51,51,53,32,64,32,95,49,53,-53,48,32,64,32,95,49,49,32,95,50,51,32,64,32,95,49,48,55,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,-66,32,67,39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,95,49,-53,53,51,32,95,49,52,48,32,64,32,64,32,64,32,95,49,49,32,95,-50,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,95,48,32,95,50,51,32,-64,32,95,51,48,48,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,32,66,32,83,39,32,67,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,83,39,32,83,39,-32,67,39,32,64,32,64,32,66,32,66,32,83,39,32,64,32,64,32,66,-32,66,39,32,64,32,66,32,66,32,95,49,48,54,32,95,50,51,32,64,-32,64,32,64,32,67,39,66,32,66,32,95,50,54,32,64,32,66,32,95,-49,52,54,32,95,50,49,32,64,32,64,32,67,32,95,49,53,50,32,64,-32,35,48,32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,95,49,-50,50,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,-70,56,32,34,116,111,112,32,108,101,118,101,108,32,100,101,102,110,115,58,-32,34,32,64,32,64,32,64,32,66,32,95,49,53,52,32,95,49,56,56,-32,64,32,64,32,95,51,50,49,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,83,39,32,67,39,66,32,64,32,66,-32,66,39,32,64,32,66,32,66,39,32,64,32,66,32,66,32,95,49,48,-54,32,95,50,51,32,64,32,64,32,64,32,67,39,66,32,66,32,95,50,-54,32,64,32,66,32,95,49,52,54,32,95,50,49,32,64,32,64,32,67,-32,95,49,53,50,32,64,32,35,49,32,64,32,64,32,64,32,64,32,95,-49,48,56,32,95,50,51,32,64,32,85,32,66,32,66,32,95,50,54,32,-95,49,50,50,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,53,-51,32,64,32,95,50,53,52,32,64,32,64,32,66,32,95,49,53,51,32,-102,114,111,109,85,84,70,56,32,34,32,61,32,34,32,64,32,64,32,64,-32,67,32,95,49,53,53,56,32,64,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,66,32,64,32,64,32,66,32,83,39,32,66,32,64,32,-66,32,67,39,32,64,32,95,49,50,52,32,95,49,53,54,48,32,64,32,-95,49,50,56,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,83,-39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,67,39,32,95,51,-51,53,32,64,32,95,51,50,49,32,64,32,95,49,49,32,95,50,51,32,-64,32,95,49,48,55,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,95,48,32,95,50,51,32,64,32,95,51,48,48,-32,64,32,64,32,64,32,64,32,64,32,66,32,83,39,32,67,39,66,32,-64,32,66,32,66,32,67,39,32,95,49,48,54,32,95,50,51,32,64,32,-64,32,64,32,64,32,67,39,66,32,66,39,32,66,32,95,50,54,32,64,-32,66,32,95,49,52,54,32,95,50,49,32,64,32,64,32,67,32,95,49,-53,50,32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,95,50,54,32,95,49,50,50,32,64,32,64,32,64,32,66,32,66,-32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,102,105,110,97,-108,32,112,97,115,115,32,32,32,32,32,32,32,32,32,32,32,32,34,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,32,95,49,53,51,32,64,-32,64,32,66,32,66,32,95,49,52,55,52,32,35,54,32,64,32,64,32,-64,32,66,32,66,32,95,49,53,52,32,95,49,56,56,32,64,32,64,32,-64,32,67,32,95,56,49,32,95,49,48,52,32,64,32,64,32,64,32,64,-32,64,32,102,114,111,109,85,84,70,56,32,34,109,115,34,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,67,-32,64,32,64,32,67,39,32,67,39,32,83,39,32,83,32,64,32,64,32,-64,32,66,32,66,32,66,32,83,32,95,49,53,54,50,32,95,49,54,53,-32,64,32,102,114,111,109,85,84,70,56,32,34,46,99,111,109,98,34,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,83,39,-32,83,32,64,32,64,32,64,32,66,32,66,32,66,32,83,32,95,49,53,-54,50,32,95,49,54,53,32,64,32,102,114,111,109,85,84,70,56,32,34,-46,99,34,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,95,48,32,95,50,51,32,64,32,95,49,53,54,52,32,102,-114,111,109,85,84,70,56,32,34,109,104,115,99,46,99,34,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,66,32,66,39,32,-66,32,83,39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,64,32,-66,32,67,39,32,95,50,54,32,64,32,95,49,49,51,32,64,32,64,32,-95,49,53,54,55,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,67,39,32,95,49,48,54,32,95,50,51,32,64,32,-64,32,95,49,51,56,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,95,48,32,95,50,51,32,64,32,95,51,48,48,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,95,-48,32,95,50,51,32,64,32,95,53,51,32,102,114,111,109,85,84,70,56,-32,34,77,72,83,67,67,34,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,95,48,32,-95,50,51,32,64,32,95,49,56,32,95,49,48,32,64,32,95,50,55,53,-32,102,114,111,109,85,84,70,56,32,34,99,99,34,32,64,32,64,32,64,-32,95,53,51,32,102,114,111,109,85,84,70,56,32,34,67,67,34,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,39,66,32,66,32,83,39,32,67,39,66,32,64,32,64,32,66,32,-66,32,66,39,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,-32,83,39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,64,32,67,-39,66,32,66,32,95,50,54,32,64,32,66,32,95,49,52,54,32,95,50,-49,32,64,32,64,32,67,32,95,49,53,50,32,64,32,35,48,32,64,32,-64,32,64,32,64,32,66,32,95,50,54,32,95,49,50,50,32,64,32,64,-32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,69,120,-101,99,117,116,101,58,32,34,32,64,32,64,32,64,32,95,49,53,52,32,-95,49,54,50,32,95,49,57,49,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,95,49,48,54,32,-95,50,51,32,64,32,64,32,95,49,53,54,57,32,64,32,64,32,64,32,-64,32,66,32,67,39,66,32,66,32,95,49,48,54,32,95,50,51,32,64,-32,64,32,95,49,53,55,49,32,64,32,64,32,64,32,66,32,66,32,95,-48,32,95,50,51,32,64,32,95,51,48,48,32,64,32,64,32,64,32,67,-39,66,32,66,39,32,66,32,95,50,54,32,64,32,66,32,95,49,52,54,-32,95,50,49,32,64,32,64,32,67,32,95,49,53,50,32,64,32,35,48,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,-49,50,50,32,64,32,64,32,64,32,66,32,66,32,95,49,53,51,32,102,-114,111,109,85,84,70,56,32,34,67,32,99,111,109,112,105,108,97,116,105,-111,110,32,32,32,32,32,32,32,32,32,34,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,32,95,49,53,51,32,64,32,64,32,66,32,66,32,-95,49,52,55,52,32,35,54,32,64,32,64,32,64,32,66,32,66,32,95,-49,53,52,32,95,49,56,56,32,64,32,64,32,64,32,67,32,95,56,49,-32,95,49,48,52,32,64,32,64,32,64,32,64,32,64,32,102,114,111,109,-85,84,70,56,32,34,109,115,34,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-67,39,66,32,66,39,32,66,32,95,50,54,32,64,32,95,49,53,55,52,-32,95,49,54,53,32,64,32,102,114,111,109,85,84,70,56,32,34,36,73,-78,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-39,66,32,66,39,32,95,49,53,55,52,32,95,49,54,53,32,64,32,102,-114,111,109,85,84,70,56,32,34,36,79,85,84,34,32,64,32,64,32,64,-32,64,32,64,32,66,32,67,39,32,95,50,55,53,32,64,32,64,32,66,-32,67,32,95,49,53,51,32,64,32,64,32,66,32,95,49,53,51,32,102,-114,111,109,85,84,70,56,32,34,32,45,119,32,45,87,97,108,108,32,45,-79,51,32,34,32,64,32,64,32,64,32,67,32,95,49,53,51,32,64,32,-95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,47,115,114,99,47,-114,117,110,116,105,109,101,47,101,118,97,108,45,34,32,64,32,64,32,95,-49,53,51,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,117,-110,105,120,45,34,32,64,32,64,32,95,49,53,52,32,95,49,56,56,32,-64,32,95,57,56,32,64,32,64,32,64,32,95,49,53,51,32,102,114,111,-109,85,84,70,56,32,34,46,99,32,34,32,64,32,64,32,102,114,111,109,-85,84,70,56,32,34,32,36,73,78,32,45,108,109,32,45,111,32,36,79,-85,84,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,67,39,32,95,50,54,32,64,32,95,50,56,53,32,-64,32,64,32,95,49,53,54,55,32,64,32,64,32,64,32,64,32,67,32,-95,50,56,53,32,64,32,64,32,64,32,95,49,50,52,32,95,49,53,55,-54,32,64,32,95,49,50,56,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,95,49,53,56,48,32,64,32,64,32,64,32,64,32,95,49,53,-56,50,32,64,32,64,32,64,32,66,32,80,32,64,32,67,32,95,53,52,-49,32,95,51,48,53,32,64,32,64,32,95,53,50,48,32,102,114,111,109,-85,84,70,56,32,34,109,97,105,110,34,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,49,53,56,51,32,64,10,65,32,85,32,67,39,-32,67,39,32,66,32,66,32,95,49,53,51,32,95,49,53,56,49,32,64,-32,64,32,83,39,32,95,49,53,51,32,64,32,66,32,95,49,53,52,32,-95,49,56,56,32,64,32,64,32,85,32,75,32,85,32,90,32,75,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,95,49,53,51,32,79,32,-35,49,48,32,64,32,75,32,64,32,64,32,64,32,80,32,75,32,85,32,-75,32,65,32,64,32,64,32,64,32,64,32,102,114,111,109,85,84,70,56,-32,34,32,125,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,89,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,83,39,32,67,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,32,67,39,32,83,39,32,67,39,32,67,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,39,32,83,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,83,39,32,67,39,32,67,39,32,-67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,83,39,32,83,39,32,67,39,32,67,39,32,67,39,32,-67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,67,39,32,67,39,32,83,39,32,66,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,-67,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,-67,39,66,32,66,39,32,66,32,83,39,32,83,39,32,80,32,64,32,64,-32,64,32,67,39,66,32,66,32,67,39,32,95,53,53,49,32,64,32,64,-32,85,32,64,32,64,32,66,32,67,32,80,32,95,57,48,32,95,49,48,-52,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,95,49,-52,51,32,64,32,64,32,64,32,66,32,95,49,53,53,56,32,64,32,85,-32,75,32,75,52,32,65,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,95,48,32,95,-53,53,54,32,64,32,95,53,53,56,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,83,39,32,66,32,64,32,66,32,83,39,32,67,39,32,-64,32,64,32,95,50,48,55,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,83,39,32,67,39,32,67,39,32,67,39,-32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,95,53,53,57,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,67,39,-66,32,80,32,64,32,64,32,83,32,95,55,51,53,32,64,32,95,53,50,-53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,67,39,32,67,32,64,32,66,32,67,39,32,83,39,32,64,-32,66,32,83,39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,-64,32,67,39,66,32,66,32,95,50,54,32,64,32,95,49,48,56,32,95,-53,53,54,32,64,32,64,32,64,32,95,53,50,51,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,-53,53,56,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,95,53,-53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,66,-32,66,32,83,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,-67,32,64,32,64,32,64,32,66,32,83,39,32,66,32,64,32,66,32,80,-32,64,32,67,32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,95,-57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,39,66,32,95,55,51,53,32,64,-32,66,32,95,50,54,32,95,53,50,53,32,64,32,64,32,66,32,95,50,-54,32,95,53,50,48,32,64,32,64,32,66,32,95,49,53,51,32,79,32,-35,57,53,32,64,32,75,32,64,32,64,32,64,32,95,49,53,52,32,95,-49,56,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,66,32,66,39,32,66,32,67,32,64,32,85,32,75,-50,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,32,80,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,82,32,64,32,95,55,52,57,-32,64,32,64,32,64,32,64,32,64,32,75,32,95,49,49,32,95,53,53,-54,32,64,32,95,49,48,55,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,66,-32,66,32,95,54,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,-34,65,32,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,66,32,66,39,32,66,32,67,39,32,95,54,32,64,32,64,32,66,32,-95,49,53,53,56,32,64,32,64,32,64,32,64,32,66,32,67,39,32,95,-54,32,64,32,66,32,95,49,53,51,32,64,32,66,32,95,49,53,51,32,-79,32,35,53,56,32,64,32,75,32,64,32,64,32,64,32,67,39,32,95,-49,53,51,32,64,32,95,49,53,52,32,95,49,56,56,32,64,32,64,32,-102,114,111,109,85,84,70,56,32,34,32,64,92,49,48,38,34,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,32,95,54,32,64,32,95,49,53,-51,32,102,114,111,109,85,84,70,56,32,34,32,64,34,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,83,32,64,32,64,32,67,39,32,67,39,32,83,32,64,32,64,32,-66,32,67,32,80,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,-32,95,53,50,52,32,64,32,64,32,73,32,64,32,64,32,64,32,90,32,-75,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,67,39,66,32,-67,32,64,32,85,32,75,32,75,52,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,80,32,90,32,90,32,90,32,90,32,90,32,75,32,64,-32,64,32,64,32,64,32,64,32,64,32,75,32,85,32,75,32,75,32,64,-32,64,32,64,32,64,32,64,32,64,32,85,32,64,32,64,32,85,32,75,-52,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,85,32,75,51,-32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,85,-32,75,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,90,32,90,32,90,32,90,32,90,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,-64,32,66,32,95,50,54,32,64,32,66,32,95,50,55,53,32,64,32,83,-39,32,95,50,54,32,64,32,66,32,95,51,48,51,32,95,51,48,53,32,-64,32,64,32,95,51,48,54,32,95,51,48,56,32,64,32,64,32,64,32,-66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,78,111,32,-100,101,102,105,110,105,116,105,111,110,32,102,111,117,110,100,32,102,111,114,-58,32,34,32,64,32,64,32,64,32,95,50,53,52,32,64,32,64,32,64,-32,64,32,64,32,95,50,48,55,32,64,32,64,32,64,32,58,49,53,56,-50,32,64,10,65,32,102,114,111,109,85,84,70,56,32,34,118,55,46,48,-92,49,48,38,34,32,64,32,58,49,53,56,49,32,64,10,65,32,66,32,-95,48,32,95,50,51,32,64,32,95,51,51,32,64,32,64,32,66,32,67,-39,32,95,50,54,32,64,32,66,32,95,49,53,55,57,32,64,32,66,32,-95,50,54,32,95,52,54,52,32,35,49,32,64,32,64,32,64,32,95,52,-50,55,32,67,32,95,54,55,32,95,54,53,32,64,32,64,32,102,114,111,-109,85,84,70,56,32,34,45,45,34,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,95,50,54,32,95,49,53,50,57,32,64,32,64,-32,95,49,53,51,51,32,64,32,64,32,64,32,58,49,53,56,48,32,64,-10,65,32,66,32,66,32,95,48,32,95,50,51,32,64,32,95,50,53,32,-95,51,50,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,-32,95,49,48,54,32,95,50,51,32,64,32,64,32,95,49,53,55,56,32,-95,51,50,32,64,32,64,32,64,32,64,32,67,39,66,32,95,48,32,95,-50,51,32,64,32,64,32,67,39,66,32,66,32,95,49,48,54,32,95,50,-51,32,64,32,64,32,95,49,53,55,56,32,95,51,50,32,64,32,64,32,-64,32,95,49,49,32,95,50,51,32,64,32,64,32,64,32,64,32,64,32,-58,49,53,55,57,32,64,10,65,32,67,32,95,49,53,55,55,32,64,32,-35,48,32,64,32,58,49,53,55,56,32,64,10,65,32,65,46,119,114,105,-116,101,32,58,49,53,55,55,32,64,10,65,32,95,49,50,53,32,75,32,-95,49,53,55,53,32,64,32,64,32,58,49,53,55,54,32,64,10,65,32,-85,32,75,51,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,-32,64,32,58,49,53,55,53,32,64,10,65,32,66,32,66,32,66,32,89,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,32,85,32,95,-53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-66,32,64,32,66,32,66,32,83,39,32,67,32,64,32,64,32,64,32,67,-39,32,67,39,66,32,64,32,66,32,66,32,67,39,32,67,39,32,64,32,-64,32,64,32,66,32,66,32,66,32,67,39,32,64,32,64,32,64,32,95,-49,53,55,51,32,64,32,64,32,64,32,67,39,66,32,95,53,57,32,64,-32,64,32,64,32,64,32,66,39,32,95,49,53,51,32,64,32,64,32,64,-32,64,32,58,49,53,55,52,32,64,10,65,32,66,32,95,49,53,55,50,-32,64,32,95,52,48,32,64,32,58,49,53,55,51,32,64,10,65,32,66,-32,89,32,64,32,66,32,66,32,67,32,67,32,83,39,32,64,32,95,52,-57,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,66,32,66,39,-32,85,32,95,53,50,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-39,66,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,67,32,67,-39,32,67,32,64,32,64,32,95,53,50,32,64,32,64,32,64,32,64,32,-64,32,64,32,58,49,53,55,50,32,64,10,65,32,67,39,32,95,48,32,-95,50,51,32,64,32,64,32,67,32,95,51,56,32,64,32,95,49,53,55,-48,32,64,32,64,32,67,39,32,95,50,54,32,64,32,66,32,95,49,52,-54,32,95,50,49,32,64,32,64,32,67,32,95,54,55,32,95,55,50,32,-64,32,64,32,35,48,32,64,32,64,32,64,32,95,50,49,57,32,102,114,-111,109,85,84,70,56,32,34,114,101,109,111,118,101,70,105,108,101,32,102,-97,105,108,101,100,34,32,64,32,64,32,64,32,64,32,58,49,53,55,49,-32,64,10,65,32,94,117,110,108,105,110,107,32,58,49,53,55,48,32,64,-10,65,32,67,39,32,95,48,32,95,50,51,32,64,32,64,32,67,32,95,-51,56,32,64,32,95,49,53,54,56,32,64,32,64,32,83,39,32,95,50,-54,32,64,32,66,32,95,49,52,54,32,95,50,49,32,64,32,64,32,67,-32,95,54,55,32,95,55,50,32,64,32,64,32,35,48,32,64,32,64,32,-64,32,66,32,95,50,54,32,95,50,49,57,32,64,32,64,32,66,32,95,-49,53,51,32,102,114,111,109,85,84,70,56,32,34,99,97,108,108,67,111,-109,109,97,110,100,58,32,102,97,105,108,101,100,32,34,32,64,32,64,32,-64,32,95,49,53,52,32,95,49,56,56,32,64,32,64,32,64,32,64,32,-64,32,58,49,53,54,57,32,64,10,65,32,94,115,121,115,116,101,109,32,-58,49,53,54,56,32,64,10,65,32,66,32,95,50,54,32,95,53,48,56,-32,64,32,64,32,66,32,95,49,53,51,32,79,32,102,114,111,109,85,84,-70,56,32,34,115,116,97,116,105,99,32,117,110,115,105,103,110,101,100,32,-99,104,97,114,32,100,97,116,97,91,93,32,61,32,123,34,32,64,32,64,-32,75,32,64,32,64,32,64,32,83,39,32,95,49,53,51,32,64,32,66,-32,95,54,48,32,95,49,53,54,53,32,64,32,64,32,95,49,53,54,54,-32,35,50,48,32,64,32,64,32,64,32,66,32,79,32,102,114,111,109,85,-84,70,56,32,34,125,59,34,32,64,32,64,32,64,32,66,32,79,32,102,-114,111,109,85,84,70,56,32,34,117,110,115,105,103,110,101,100,32,99,104,-97,114,32,42,99,111,109,98,101,120,112,114,32,61,32,100,97,116,97,59,-34,32,64,32,64,32,64,32,67,39,32,79,32,64,32,66,32,95,49,53,-51,32,102,114,111,109,85,84,70,56,32,34,105,110,116,32,99,111,109,98,-101,120,112,114,108,101,110,32,61,32,34,32,64,32,64,32,64,32,67,39,-32,95,49,53,51,32,64,32,66,32,95,49,53,52,32,95,49,56,56,32,-64,32,64,32,95,51,50,49,32,64,32,64,32,79,32,35,53,57,32,64,-32,75,32,64,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,49,53,54,55,32,64,10,65,32,66,32,89,32,64,-32,66,32,66,32,83,32,85,32,95,53,56,32,64,32,64,32,64,32,64,-32,66,32,66,32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,-32,66,32,67,39,66,32,66,32,83,39,32,95,53,57,32,64,32,85,32,-75,32,64,32,64,32,64,32,67,32,66,32,64,32,85,32,65,32,64,32,-64,32,64,32,64,32,64,32,95,52,54,53,32,64,32,64,32,64,32,64,-32,64,32,58,49,53,54,54,32,64,10,65,32,95,53,48,55,32,67,39,-32,95,49,53,51,32,64,32,66,32,95,49,53,52,32,95,49,56,56,32,-64,32,64,32,95,49,49,49,32,64,32,64,32,79,32,35,52,52,32,64,-32,75,32,64,32,64,32,64,32,58,49,53,54,53,32,64,10,65,32,66,-32,67,39,32,95,48,32,95,50,51,32,64,32,64,32,83,39,32,95,50,-54,32,64,32,66,32,95,51,56,32,64,32,85,32,75,32,64,32,64,32,-64,32,67,39,32,95,54,32,64,32,66,32,95,51,56,32,64,32,85,32,-65,32,64,32,64,32,64,32,95,49,53,54,51,32,64,32,64,32,64,32,-83,39,32,95,48,32,95,50,51,32,64,32,64,32,95,53,49,32,64,32,-67,39,66,32,66,32,95,49,48,54,32,95,50,51,32,64,32,64,32,95,-51,55,32,64,32,64,32,83,39,32,95,48,32,95,50,51,32,64,32,64,-32,67,32,95,50,56,51,32,64,32,95,50,56,52,32,64,32,64,32,66,-32,66,32,95,49,49,32,95,50,51,32,64,32,64,32,64,32,80,32,64,-32,64,32,64,32,64,32,64,32,64,32,83,39,32,95,54,56,54,32,67,-32,95,54,55,32,95,49,54,53,32,64,32,64,32,35,52,54,32,64,32,-64,32,64,32,95,52,49,54,32,64,32,66,32,67,39,32,67,32,64,32,-66,32,83,32,95,52,48,32,95,54,53,32,64,32,75,32,64,32,64,32,-64,32,66,32,80,32,110,111,77,97,116,99,104,32,102,114,111,109,85,84,-70,56,32,34,46,47,108,105,98,47,83,121,115,116,101,109,47,73,79,46,-104,115,34,32,64,32,64,32,35,51,49,48,32,64,32,35,49,52,32,64,-32,64,32,64,32,90,32,66,32,67,39,32,80,32,64,32,95,52,49,54,-32,64,32,64,32,66,32,95,53,57,32,35,52,54,32,64,32,64,32,95,-52,49,54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,-80,32,64,32,75,32,64,32,64,32,64,32,64,32,58,49,53,54,52,32,-64,10,65,32,94,116,109,112,110,97,109,101,32,58,49,53,54,51,32,64,-10,65,32,66,32,95,49,53,54,49,32,64,32,95,52,48,32,64,32,58,-49,53,54,50,32,64,10,65,32,67,39,32,67,39,66,32,64,32,67,39,-66,32,95,52,56,57,32,64,32,95,52,49,54,32,64,32,64,32,95,52,-49,54,32,64,32,58,49,53,54,49,32,64,10,65,32,95,49,50,53,32,-75,32,95,49,53,53,57,32,64,32,64,32,58,49,53,54,48,32,64,10,-65,32,85,32,75,32,90,32,90,32,90,32,90,32,90,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,49,53,53,57,32,64,10,-65,32,67,32,67,32,80,32,67,39,32,95,54,32,64,32,66,32,95,49,-53,51,32,64,32,95,50,53,52,32,64,32,64,32,95,53,57,32,35,51,-50,32,64,32,64,32,64,32,67,39,66,32,66,32,95,54,32,64,32,95,-49,53,53,56,32,64,32,64,32,67,39,32,95,54,32,64,32,95,49,53,-53,56,32,64,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,-64,32,34,32,64,32,64,32,64,32,64,32,64,32,64,32,75,50,32,95,-50,50,48,32,64,32,64,32,64,32,83,32,67,32,66,32,64,32,83,39,-32,83,32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,53,32,64,32,64,32,64,32,67,39,32,67,32,64,32,66,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,54,32,64,32,64,32,-64,32,66,32,83,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,57,32,64,32,64,32,85,32,66,32,95,54,32,95,53,57,32,35,51,-51,32,64,32,64,32,64,32,67,39,32,95,54,32,64,32,66,32,95,49,-53,51,32,64,32,95,49,53,53,52,32,64,32,64,32,95,53,57,32,35,-51,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,54,32,64,32,-64,32,64,32,85,32,67,39,32,95,54,32,64,32,66,32,95,49,53,51,-32,64,32,95,49,53,53,52,32,64,32,64,32,95,53,57,32,35,51,50,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,83,32,83,-32,67,39,32,95,49,52,57,32,95,56,48,32,64,32,64,32,95,51,50,-49,32,64,32,35,49,32,64,32,64,32,66,32,95,49,53,53,56,32,64,-32,95,49,53,51,49,32,64,32,64,32,64,32,66,32,95,49,53,53,56,-32,64,32,66,32,95,53,50,52,32,95,53,51,48,32,95,53,51,49,32,-102,114,111,109,85,84,70,56,32,34,102,114,111,109,85,84,70,56,34,32,-64,32,64,32,64,32,64,32,64,32,66,32,95,53,51,48,32,64,32,66,-32,95,49,53,53,53,32,64,32,95,49,53,53,55,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,32,64,32,-66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,51,32,64,-32,64,32,64,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,-32,64,32,35,51,32,64,32,64,32,64,32,85,32,75,32,95,50,50,48,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,-67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,32,64,32,85,32,-75,32,95,50,50,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,95,54,32,64,32,66,32,95,49,53,51,32,64,32,95,52,-55,50,32,64,32,64,32,95,53,57,32,35,51,50,32,64,32,64,32,64,-32,64,32,58,49,53,53,56,32,64,10,65,32,95,53,48,55,32,95,49,-53,53,54,32,64,32,58,49,53,53,55,32,64,10,65,32,83,32,83,32,-67,32,95,54,56,32,95,49,50,53,55,32,64,32,64,32,95,51,49,49,-32,35,49,50,55,32,64,32,64,32,64,32,66,32,83,32,83,32,67,32,-95,56,55,32,95,56,48,32,64,32,64,32,35,50,48,52,56,32,64,32,-64,32,83,32,83,32,67,32,95,56,55,32,95,56,48,32,64,32,64,32,-35,54,53,53,51,54,32,64,32,64,32,83,32,67,32,67,32,95,56,55,-32,95,56,48,32,64,32,64,32,35,49,49,49,52,49,49,50,32,64,32,-64,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,117,116,102,-56,67,104,97,114,58,32,98,97,100,32,67,104,97,114,34,32,64,32,64,-32,64,32,64,32,66,32,83,32,67,39,32,83,39,32,83,39,32,79,32,-64,32,66,32,95,51,49,49,32,64,32,67,39,32,95,49,56,49,32,95,-49,48,52,32,64,32,64,32,85,32,75,32,64,32,64,32,35,50,52,48,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,79,32,-64,32,66,32,95,51,49,49,32,64,32,67,39,32,95,49,56,49,32,95,-49,48,52,32,64,32,64,32,85,32,65,32,64,32,64,32,35,49,50,56,-32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,79,32,64,32,-66,32,95,51,49,49,32,64,32,67,39,32,95,49,56,49,32,95,49,48,-52,32,64,32,64,32,85,32,65,32,64,32,64,32,35,49,50,56,32,64,-32,64,32,64,32,64,32,67,39,32,79,32,64,32,66,32,95,51,49,49,-32,64,32,67,39,32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,-85,32,65,32,64,32,64,32,35,49,50,56,32,64,32,64,32,64,32,75,-32,64,32,64,32,64,32,64,32,67,39,32,95,49,56,50,32,95,49,56,-52,32,64,32,64,32,85,32,75,32,64,32,64,32,35,54,52,32,64,32,-64,32,64,32,67,39,32,95,49,56,50,32,95,49,56,52,32,64,32,64,-32,85,32,75,32,64,32,64,32,35,54,52,32,64,32,64,32,64,32,67,-32,95,49,56,50,32,95,49,56,52,32,64,32,64,32,35,54,52,32,64,-32,64,32,64,32,64,32,64,32,66,32,83,39,32,83,39,32,79,32,64,-32,66,32,95,51,49,49,32,64,32,67,39,32,95,49,56,49,32,95,49,-48,52,32,64,32,64,32,85,32,75,32,64,32,64,32,35,50,50,52,32,-64,32,64,32,64,32,64,32,66,32,67,39,32,79,32,64,32,66,32,95,-51,49,49,32,64,32,67,39,32,95,49,56,49,32,95,49,48,52,32,64,-32,64,32,85,32,65,32,64,32,64,32,35,49,50,56,32,64,32,64,32,-64,32,64,32,67,39,32,79,32,64,32,66,32,95,51,49,49,32,64,32,-67,39,32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,85,32,65,-32,64,32,64,32,35,49,50,56,32,64,32,64,32,64,32,75,32,64,32,-64,32,64,32,67,39,32,95,49,56,50,32,95,49,56,52,32,64,32,64,-32,85,32,75,32,64,32,64,32,35,54,52,32,64,32,64,32,64,32,67,-32,95,49,56,50,32,95,49,56,52,32,64,32,64,32,35,54,52,32,64,-32,64,32,64,32,64,32,64,32,66,32,83,39,32,79,32,64,32,66,32,-95,51,49,49,32,64,32,67,39,32,95,49,56,49,32,95,49,48,52,32,-64,32,64,32,85,32,75,32,64,32,64,32,35,49,57,50,32,64,32,64,-32,64,32,67,39,32,79,32,64,32,66,32,95,51,49,49,32,64,32,67,-39,32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,85,32,65,32,-64,32,64,32,35,49,50,56,32,64,32,64,32,64,32,75,32,64,32,64,-32,64,32,67,32,95,49,56,50,32,95,49,56,52,32,64,32,64,32,35,-54,52,32,64,32,64,32,64,32,64,32,95,49,49,49,32,64,32,64,32,-64,32,67,32,79,32,64,32,75,32,64,32,64,32,58,49,53,53,54,32,-64,10,65,32,66,32,80,32,35,54,32,64,32,64,32,85,32,64,32,58,-49,53,53,53,32,64,10,65,32,66,32,95,53,57,32,35,51,52,32,64,-32,64,32,67,39,32,95,49,53,51,32,64,32,95,53,48,55,32,83,32,-83,32,83,39,32,95,53,54,32,64,32,67,32,95,52,48,32,95,49,54,-53,32,64,32,64,32,35,51,52,32,64,32,64,32,83,39,32,95,53,54,-32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,64,32,35,57,-50,32,64,32,64,32,83,39,32,95,53,54,32,64,32,67,32,95,56,55,-32,95,49,50,53,55,32,64,32,64,32,35,51,50,32,64,32,64,32,67,-32,95,49,52,57,32,95,49,50,53,55,32,64,32,64,32,35,49,50,54,-32,64,32,64,32,64,32,64,32,64,32,67,32,79,32,64,32,75,32,64,-32,64,32,64,32,66,32,95,53,57,32,35,57,50,32,64,32,64,32,67,-39,32,95,49,53,51,32,64,32,66,32,95,49,53,52,32,95,49,56,56,-32,64,32,64,32,95,49,49,49,32,64,32,64,32,79,32,35,51,56,32,-64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,79,32,35,51,-52,32,64,32,75,32,64,32,64,32,64,32,58,49,53,53,52,32,64,10,-65,32,67,39,66,32,66,32,95,48,32,95,50,51,32,64,32,64,32,67,-32,95,50,56,51,32,64,32,95,50,56,52,32,64,32,64,32,64,32,67,-39,32,83,39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,64,32,-67,32,95,49,53,53,50,32,64,32,64,32,95,49,51,56,32,64,32,64,-32,58,49,53,53,51,32,64,10,65,32,95,49,53,53,49,32,58,49,53,-53,50,32,64,10,65,32,73,79,46,115,101,114,105,97,108,105,122,101,32,-58,49,53,53,49,32,64,10,65,32,95,49,53,52,57,32,58,49,53,53,-48,32,64,10,65,32,114,110,102,32,35,49,32,64,32,58,49,53,52,57,-32,64,10,65,32,95,49,50,53,32,75,32,95,49,53,52,55,32,64,32,-64,32,58,49,53,52,56,32,64,10,65,32,85,32,75,50,32,75,52,32,-75,32,64,32,64,32,64,32,58,49,53,52,55,32,64,10,65,32,66,32,-95,49,48,54,32,95,50,51,32,64,32,95,49,50,50,32,102,114,111,109,-85,84,70,56,32,34,87,101,108,99,111,109,101,32,116,111,32,105,110,116,-101,114,97,99,116,105,118,101,32,77,105,99,114,111,72,115,33,34,32,64,-32,64,32,64,32,64,32,66,32,83,39,32,95,48,32,95,50,51,32,64,-32,64,32,95,50,56,50,32,64,32,67,39,32,67,39,32,95,48,32,95,-50,51,32,64,32,64,32,64,32,66,32,66,32,95,49,57,50,32,95,49,-53,52,51,32,64,32,64,32,64,32,66,32,67,32,64,32,80,32,95,49,-53,51,56,32,64,32,64,32,64,32,64,32,75,32,95,49,49,32,95,50,-51,32,64,32,95,49,48,55,32,64,32,64,32,64,32,64,32,64,32,67,-32,95,55,51,49,32,95,49,53,52,53,32,64,32,95,49,50,56,32,64,-32,64,32,95,52,51,32,64,32,64,32,64,32,58,49,53,52,54,32,64,-10,65,32,95,55,51,50,32,75,32,85,32,66,32,66,32,66,32,90,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,67,32,64,32,64,32,64,32,64,32,95,49,53,52,52,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,49,53,52,53,32,64,10,-65,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,67,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,-64,32,80,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,53,52,-52,32,64,10,65,32,95,49,48,54,32,95,50,48,48,32,64,32,95,49,-53,49,52,32,64,32,95,49,48,54,32,95,50,48,48,32,64,32,95,50,-54,32,95,50,48,57,32,64,32,95,49,50,50,32,102,114,111,109,85,84,-70,56,32,34,84,121,112,101,32,39,58,113,117,105,116,39,32,116,111,32,-113,117,105,116,44,32,39,58,104,101,108,112,39,32,102,111,114,32,104,101,-108,112,34,32,64,32,64,32,64,32,64,32,95,49,48,54,32,95,50,48,-48,32,64,32,95,50,54,32,95,49,52,54,32,95,49,57,54,32,64,32,-95,49,53,49,53,32,64,32,64,32,95,50,54,32,95,50,48,57,32,64,-32,95,49,50,50,32,102,114,111,109,85,84,70,56,32,34,87,65,82,78,-73,78,71,58,32,67,111,109,112,105,108,101,100,32,119,105,116,104,32,71,-72,67,44,32,115,111,32,108,105,109,105,116,101,100,32,102,117,110,99,116,-105,111,110,97,108,105,116,121,46,34,32,64,32,64,32,64,32,64,32,64,-32,95,49,53,52,50,32,64,32,64,32,64,32,58,49,53,52,51,32,64,-10,65,32,95,48,32,95,50,48,48,32,64,32,95,50,54,32,95,50,48,-57,32,64,32,95,49,53,50,52,32,102,114,111,109,85,84,70,56,32,34,-46,109,104,115,105,34,32,64,32,64,32,102,114,111,109,85,84,70,56,32,-34,62,32,34,32,64,32,64,32,64,32,64,32,80,32,95,49,53,52,50,-32,64,32,83,32,85,32,95,49,53,52,50,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,32,67,32,95,52,48,32,95,49,54,53,32,64,-32,35,53,56,32,64,32,64,32,64,32,67,39,32,95,49,48,54,32,95,-50,48,48,32,64,32,64,32,95,49,53,51,54,32,64,32,95,49,53,52,-50,32,64,32,64,32,64,32,67,39,32,95,48,32,95,50,48,48,32,64,-32,64,32,95,49,53,52,49,32,64,32,80,32,95,50,54,32,95,50,48,-57,32,64,32,95,49,50,50,32,102,114,111,109,85,84,70,56,32,34,66,-121,101,34,32,64,32,64,32,64,32,64,32,95,49,53,52,50,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,49,53,52,50,32,64,10,65,32,-67,32,67,32,95,49,53,51,55,32,64,32,95,49,49,32,95,50,48,48,-32,64,32,95,52,51,32,64,32,64,32,64,32,66,32,67,39,32,83,32,-85,32,95,49,48,54,32,95,50,48,48,32,64,32,95,50,54,32,95,50,-48,57,32,64,32,95,49,50,50,32,102,114,111,109,85,84,70,56,32,34,-85,110,114,101,99,111,103,110,105,122,101,100,32,99,111,109,109,97,110,100,-34,32,64,32,64,32,64,32,64,32,95,49,49,32,95,50,48,48,32,64,-32,95,52,51,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,-32,66,32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,67,-39,66,32,66,32,67,32,64,32,66,32,67,32,67,39,32,64,32,64,32,-66,32,85,32,64,32,95,50,57,55,32,64,32,64,32,64,32,64,32,90,-32,90,32,67,39,32,95,49,48,54,32,95,50,48,48,32,64,32,64,32,-66,32,95,50,54,32,95,50,48,57,32,64,32,64,32,66,32,95,50,54,-32,95,49,50,50,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,-109,85,84,70,56,32,34,65,109,98,105,103,117,111,117,115,32,99,111,109,-109,97,110,100,58,32,34,32,64,32,64,32,64,32,66,32,95,50,57,55,-32,64,32,95,54,48,32,95,50,52,57,32,64,32,64,32,64,32,64,32,-64,32,64,32,95,49,49,32,95,50,48,48,32,64,32,95,52,51,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-95,54,54,32,64,32,67,39,32,95,54,32,64,32,95,52,57,48,32,95,-49,54,53,32,64,32,64,32,95,50,52,57,32,64,32,64,32,95,49,53,-52,48,32,64,32,64,32,64,32,58,49,53,52,49,32,64,10,65,32,79,-32,80,32,102,114,111,109,85,84,70,56,32,34,113,117,105,116,34,32,64,-32,64,32,95,50,54,32,95,56,32,64,32,95,49,49,32,95,50,48,48,-32,64,32,95,52,52,32,64,32,64,32,64,32,64,32,79,32,80,32,102,-114,111,109,85,84,70,56,32,34,99,108,101,97,114,34,32,64,32,64,32,-95,50,54,32,95,56,32,64,32,95,49,48,54,32,95,50,48,48,32,64,-32,95,49,53,51,53,32,95,56,32,95,49,53,51,56,32,64,32,64,32,-64,32,95,49,48,54,32,95,50,48,48,32,64,32,95,50,54,32,95,50,-53,54,32,64,32,85,32,66,32,90,32,64,32,67,39,32,67,39,32,67,-32,64,32,64,32,80,32,64,32,95,49,52,52,32,64,32,64,32,64,32,-64,32,64,32,95,49,49,32,95,50,48,48,32,64,32,95,52,51,32,64,-32,64,32,64,32,64,32,64,32,64,32,79,32,80,32,102,114,111,109,85,-84,70,56,32,34,114,101,108,111,97,100,34,32,64,32,64,32,95,50,54,-32,95,56,32,64,32,95,48,32,95,50,48,48,32,64,32,95,50,48,49,-32,64,32,85,32,66,32,83,39,32,67,39,32,95,48,32,95,50,48,48,-32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,50,48,57,32,-64,32,64,32,64,32,95,50,56,49,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,95,49,48,54,32,95,50,48,48,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,95,49,52,55,49,32,64,32,64,32,-64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,64,32,-95,49,48,54,32,95,50,48,48,32,64,32,95,49,53,49,52,32,64,32,-95,49,49,32,95,50,48,48,32,64,32,95,52,51,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,79,32,80,32,102,114,111,-109,85,84,70,56,32,34,100,101,108,101,116,101,34,32,64,32,64,32,67,-39,32,95,49,48,54,32,95,50,48,48,32,64,32,64,32,66,32,95,49,-53,51,53,32,64,32,66,32,95,54,32,95,53,48,56,32,64,32,64,32,-67,39,32,95,54,32,64,32,66,32,95,54,54,32,64,32,66,32,95,54,-32,95,49,50,51,32,64,32,64,32,95,52,57,48,32,95,49,54,53,32,-64,32,64,32,64,32,64,32,95,49,53,49,54,32,64,32,64,32,64,32,-64,32,95,49,49,32,95,50,48,48,32,64,32,95,52,51,32,64,32,64,-32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,104,-101,108,112,34,32,64,32,64,32,75,32,95,49,48,54,32,95,50,48,48,-32,64,32,95,50,54,32,95,50,48,57,32,64,32,95,49,50,50,32,95,-49,53,51,57,32,64,32,64,32,64,32,95,49,49,32,95,50,48,48,32,-64,32,95,52,51,32,64,32,64,32,64,32,64,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,58,49,53,52,48,32,64,10,65,32,102,114,-111,109,85,84,70,56,32,34,67,111,109,109,97,110,100,115,58,92,49,48,-38,32,32,58,113,117,105,116,32,32,32,32,32,32,113,117,105,116,32,77,-105,99,114,111,72,115,92,49,48,38,32,32,58,114,101,108,111,97,100,32,-32,32,32,114,101,108,111,97,100,32,109,111,100,117,108,101,115,92,49,48,-38,32,32,58,99,108,101,97,114,32,32,32,32,32,99,108,101,97,114,32,-97,108,108,32,100,101,102,105,110,105,116,105,111,110,115,92,49,48,38,32,-32,58,100,101,108,101,116,101,32,100,32,32,100,101,108,101,116,101,32,100,-101,102,105,110,105,116,105,111,110,40,115,41,32,100,92,49,48,38,32,32,-58,104,101,108,112,32,32,32,32,32,32,116,104,105,115,32,116,101,120,116,-92,49,48,38,32,32,101,120,112,114,32,32,32,32,32,32,32,101,118,97,-108,117,97,116,101,32,101,120,112,114,101,115,115,105,111,110,92,49,48,38,-32,32,100,101,102,110,32,32,32,32,32,32,32,97,100,100,32,116,111,112,-32,108,101,118,101,108,32,100,101,102,105,110,105,116,105,111,110,92,49,48,-38,34,32,64,32,58,49,53,51,57,32,64,10,65,32,95,49,53,51,32,-102,114,111,109,85,84,70,56,32,34,109,111,100,117,108,101,32,34,32,64,-32,64,32,95,49,53,51,32,95,50,56,54,32,64,32,95,49,53,51,32,-102,114,111,109,85,84,70,56,32,34,40,109,111,100,117,108,101,32,34,32,-64,32,64,32,95,49,53,51,32,95,50,56,54,32,64,32,102,114,111,109,-85,84,70,56,32,34,41,32,119,104,101,114,101,92,49,48,38,105,109,112,-111,114,116,32,80,114,101,108,117,100,101,92,49,48,38,105,109,112,111,114,-116,32,83,121,115,116,101,109,46,73,79,46,80,114,105,110,116,79,114,82,-117,110,92,49,48,38,100,101,102,97,117,108,116,32,40,73,110,116,101,103,-101,114,44,32,68,111,117,98,108,101,41,92,49,48,38,34,32,64,32,64,-32,64,32,64,32,64,32,58,49,53,51,56,32,64,10,65,32,66,32,67,-32,83,32,95,52,48,32,95,54,53,32,64,32,75,32,64,32,64,32,66,-32,83,39,32,95,53,57,32,64,32,85,32,75,32,64,32,64,32,66,32,-95,49,53,51,55,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,-95,54,56,54,32,95,54,32,95,49,50,51,32,64,32,95,49,50,55,48,-32,64,32,64,32,64,32,64,32,64,32,95,53,56,32,64,32,64,32,95,-52,50,55,32,95,49,50,55,48,32,64,32,64,32,58,49,53,51,55,32,-64,10,65,32,66,32,95,48,32,95,50,48,48,32,64,32,95,50,48,49,-32,64,32,64,32,66,32,85,32,64,32,66,32,90,32,64,32,66,32,90,-32,64,32,83,39,32,83,32,64,32,67,39,32,67,39,32,83,32,64,32,-64,32,66,32,66,32,67,32,95,49,51,48,56,32,95,49,51,49,48,32,-64,32,95,49,52,54,57,32,64,32,75,32,64,32,64,32,64,32,64,32,-66,32,90,32,64,32,83,39,32,66,32,64,32,67,32,95,49,51,48,56,-32,95,55,48,51,32,64,32,95,49,53,50,53,32,64,32,75,32,64,32,-64,32,66,32,95,50,54,32,95,50,48,57,32,64,32,64,32,95,49,53,-49,49,32,64,32,64,32,64,32,66,32,90,32,64,32,67,39,32,67,39,-32,95,48,32,95,50,48,48,32,64,32,64,32,64,32,66,32,66,32,95,-49,53,49,48,32,64,32,64,32,66,32,67,32,95,49,53,51,32,64,32,-64,32,66,32,95,49,53,51,32,79,32,35,49,48,32,64,32,75,32,64,-32,64,32,64,32,95,49,53,50,55,32,64,32,64,32,64,32,64,32,80,-32,66,32,95,50,54,32,95,50,48,57,32,64,32,64,32,95,49,53,49,-51,32,64,32,64,32,95,49,53,51,52,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,90,32,83,39,32,95,48,32,95,50,48,48,32,64,-32,64,32,95,49,53,49,48,32,64,32,66,32,80,32,66,32,95,50,54,-32,95,50,48,57,32,64,32,64,32,95,49,53,49,51,32,64,32,64,32,-64,32,90,32,66,32,95,49,53,51,53,32,64,32,95,56,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,67,32,95,49,53,51,32,-64,32,64,32,67,32,95,49,53,51,32,64,32,79,32,35,49,48,32,64,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,-49,53,51,54,32,64,10,65,32,66,32,95,50,54,32,95,50,53,54,32,-64,32,64,32,66,32,85,32,64,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,66,32,80,32,64,32,64,32,64,32,64,32,58,49,53,51,-53,32,64,10,65,32,66,32,67,39,32,95,48,32,95,50,48,48,32,64,-32,64,32,66,32,95,50,54,32,95,50,48,57,32,64,32,64,32,66,32,-95,50,57,50,32,64,32,83,32,95,51,51,53,32,64,32,95,49,49,32,-95,50,51,32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,-95,50,48,57,32,64,32,64,32,80,32,95,49,53,49,51,32,64,32,67,-39,32,95,48,32,95,50,51,32,64,32,64,32,95,50,57,50,32,64,32,-80,32,95,49,53,49,51,32,64,32,75,32,95,49,49,32,95,50,51,32,-64,32,95,49,48,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,95,49,53,50,57,32,64,32,66,32,95,49,53,51,51,-32,64,32,80,32,95,53,50,48,32,95,49,53,51,32,95,50,56,54,32,-64,32,95,49,53,51,32,79,32,35,52,54,32,64,32,75,32,64,32,64,-32,95,49,53,50,54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,58,49,53,51,52,32,64,10,65,32,85,32,67,39,32,67,32,64,32,-67,39,32,67,32,64,32,66,32,83,32,73,32,64,32,64,32,66,32,66,-32,89,32,64,32,64,32,66,32,66,32,66,32,95,55,52,57,32,64,32,-64,32,64,32,67,39,32,67,39,32,89,32,64,32,64,32,66,32,66,32,-66,32,80,32,75,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-67,32,66,32,64,32,64,32,64,32,64,32,66,32,66,39,32,64,32,66,-32,66,32,67,39,32,67,39,32,95,53,57,32,64,32,64,32,64,32,64,-32,66,32,66,32,67,39,66,32,80,32,64,32,64,32,64,32,66,32,95,-49,53,51,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,83,39,32,95,50,54,32,64,32,-66,32,95,50,55,53,32,64,32,66,32,95,50,54,32,95,50,49,57,32,-64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,-34,116,114,97,110,115,108,97,116,101,58,32,110,111,116,32,102,111,117,110,-100,32,34,32,64,32,64,32,64,32,95,50,53,52,32,64,32,64,32,64,-32,64,32,64,32,67,32,95,50,48,55,32,64,32,64,32,64,32,64,32,-58,49,53,51,51,32,64,10,65,32,66,32,89,32,64,32,67,39,32,67,-39,32,83,32,64,32,64,32,67,39,32,83,39,32,67,32,64,32,64,32,-67,39,32,67,39,32,67,39,32,83,39,32,64,32,64,32,64,32,67,39,-66,32,80,32,64,32,83,39,32,67,39,66,32,64,32,66,32,95,49,53,-50,57,32,64,32,64,32,73,32,64,32,64,32,64,32,90,32,75,32,64,-32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,83,39,32,83,39,-32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,53,32,64,32,64,32,64,32,64,32,83,39,32,83,-39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,55,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,56,32,64,32,64,32,64,32,64,32,66,32,-67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,56,-32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,67,32,66,32,64,-32,66,32,95,53,50,52,32,95,53,51,48,32,95,53,51,49,32,102,114,-111,109,85,84,70,56,32,34,100,121,110,115,121,109,34,32,64,32,64,32,-64,32,64,32,64,32,66,32,95,53,51,48,32,64,32,95,55,49,54,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,83,39,32,95,-50,54,32,64,32,66,32,95,50,55,53,32,64,32,66,32,95,50,54,32,-95,50,49,57,32,64,32,64,32,95,49,53,51,32,102,114,111,109,85,84,-70,56,32,34,116,114,97,110,115,58,32,110,111,32,112,114,105,109,111,112,-32,34,32,64,32,64,32,64,32,64,32,64,32,67,32,95,54,57,55,32,-95,54,53,32,64,32,64,32,95,49,53,51,48,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,-32,61,61,32,64,32,35,53,32,64,32,64,32,64,32,64,32,66,32,85,-32,64,32,67,32,66,32,64,32,95,49,53,51,49,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,66,-32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,-64,32,64,32,64,32,64,32,66,32,67,39,32,67,32,64,32,66,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,32,64,32,64,32,-64,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,-35,50,32,64,32,64,32,64,32,85,32,95,49,53,50,57,32,64,32,64,-32,64,32,64,32,64,32,66,32,85,32,64,32,67,32,66,32,64,32,95,-54,56,49,32,64,32,64,32,64,32,64,32,64,32,85,32,95,49,53,50,-57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,-95,50,49,57,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,-85,84,70,56,32,34,116,114,97,110,115,58,32,105,109,112,111,115,115,105,-98,108,101,58,32,34,32,64,32,64,32,64,32,95,49,53,52,32,95,53,-49,48,32,64,32,64,32,64,32,64,32,64,32,58,49,53,51,50,32,64,-10,65,32,95,54,32,95,53,57,57,32,64,32,95,54,48,32,95,54,32,-95,53,51,48,32,64,32,95,54,32,95,54,55,51,32,64,32,95,49,49,-49,32,64,32,64,32,64,32,64,32,58,49,53,51,49,32,64,10,65,32,-79,32,80,32,79,32,35,54,54,32,64,32,75,32,64,32,64,32,66,32,-64,32,64,32,79,32,80,32,79,32,35,55,57,32,64,32,75,32,64,32,-64,32,79,32,64,32,64,32,79,32,80,32,79,32,35,55,53,32,64,32,-75,32,64,32,64,32,75,32,64,32,64,32,79,32,80,32,102,114,111,109,-85,84,70,56,32,34,67,39,34,32,64,32,64,32,67,39,32,64,32,64,-32,79,32,80,32,79,32,35,54,55,32,64,32,75,32,64,32,64,32,67,-32,64,32,64,32,79,32,80,32,79,32,35,54,53,32,64,32,75,32,64,-32,64,32,65,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,-56,32,34,83,39,34,32,64,32,64,32,83,39,32,64,32,64,32,79,32,-80,32,79,32,35,56,48,32,64,32,75,32,64,32,64,32,80,32,64,32,-64,32,79,32,80,32,79,32,35,55,51,32,64,32,75,32,64,32,64,32,-73,32,64,32,64,32,79,32,80,32,79,32,35,56,51,32,64,32,75,32,-64,32,64,32,83,32,64,32,64,32,79,32,80,32,79,32,35,56,53,32,-64,32,75,32,64,32,64,32,85,32,64,32,64,32,79,32,80,32,79,32,-35,56,57,32,64,32,75,32,64,32,64,32,89,32,64,32,64,32,79,32,-80,32,102,114,111,109,85,84,70,56,32,34,66,39,34,32,64,32,64,32,-66,39,32,64,32,64,32,79,32,80,32,79,32,35,57,48,32,64,32,75,-32,64,32,64,32,90,32,64,32,64,32,79,32,80,32,79,32,35,56,50,-32,64,32,75,32,64,32,64,32,82,32,64,32,64,32,79,32,80,32,102,-114,111,109,85,84,70,56,32,34,75,50,34,32,64,32,64,32,75,50,32,-64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,75,51,-34,32,64,32,64,32,75,51,32,64,32,64,32,79,32,80,32,102,114,111,-109,85,84,70,56,32,34,75,52,34,32,64,32,64,32,75,52,32,64,32,-64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,67,39,66,34,-32,64,32,64,32,67,39,66,32,64,32,64,32,79,32,80,32,79,32,35,-52,51,32,64,32,75,32,64,32,64,32,43,32,64,32,64,32,79,32,80,-32,79,32,35,52,53,32,64,32,75,32,64,32,64,32,45,32,64,32,64,-32,79,32,80,32,79,32,35,52,50,32,64,32,75,32,64,32,64,32,42,-32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,113,-117,111,116,34,32,64,32,64,32,113,117,111,116,32,64,32,64,32,79,32,-80,32,102,114,111,109,85,84,70,56,32,34,114,101,109,34,32,64,32,64,-32,114,101,109,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,-56,32,34,117,113,117,111,116,34,32,64,32,64,32,117,113,117,111,116,32,-64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,117,114,-101,109,34,32,64,32,64,32,117,114,101,109,32,64,32,64,32,79,32,80,-32,102,114,111,109,85,84,70,56,32,34,110,101,103,34,32,64,32,64,32,-110,101,103,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,-32,34,97,110,100,34,32,64,32,64,32,97,110,100,32,64,32,64,32,79,-32,80,32,102,114,111,109,85,84,70,56,32,34,111,114,34,32,64,32,64,-32,111,114,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,-32,34,120,111,114,34,32,64,32,64,32,120,111,114,32,64,32,64,32,79,-32,80,32,102,114,111,109,85,84,70,56,32,34,105,110,118,34,32,64,32,-64,32,105,110,118,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,-70,56,32,34,115,104,108,34,32,64,32,64,32,115,104,108,32,64,32,64,-32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,115,104,114,34,32,-64,32,64,32,115,104,114,32,64,32,64,32,79,32,80,32,102,114,111,109,-85,84,70,56,32,34,97,115,104,114,34,32,64,32,64,32,97,115,104,114,-32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,115,-117,98,116,114,97,99,116,34,32,64,32,64,32,115,117,98,116,114,97,99,-116,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,-61,61,34,32,64,32,64,32,61,61,32,64,32,64,32,79,32,80,32,102,-114,111,109,85,84,70,56,32,34,47,61,34,32,64,32,64,32,47,61,32,-64,32,64,32,79,32,80,32,79,32,35,54,48,32,64,32,75,32,64,32,-64,32,60,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,-32,34,60,61,34,32,64,32,64,32,60,61,32,64,32,64,32,79,32,80,-32,79,32,35,54,50,32,64,32,75,32,64,32,64,32,62,32,64,32,64,-32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,62,61,34,32,64,-32,64,32,62,61,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,-70,56,32,34,117,60,34,32,64,32,64,32,117,60,32,64,32,64,32,79,-32,80,32,102,114,111,109,85,84,70,56,32,34,117,60,61,34,32,64,32,-64,32,117,60,61,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,-70,56,32,34,117,62,34,32,64,32,64,32,117,62,32,64,32,64,32,79,-32,80,32,102,114,111,109,85,84,70,56,32,34,117,62,61,34,32,64,32,-64,32,117,62,61,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,-70,56,32,34,111,114,100,34,32,64,32,64,32,111,114,100,32,64,32,64,-32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,99,104,114,34,32,-64,32,64,32,99,104,114,32,64,32,64,32,79,32,80,32,102,114,111,109,-85,84,70,56,32,34,102,43,34,32,64,32,64,32,102,43,32,64,32,64,-32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,102,45,34,32,64,-32,64,32,102,45,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,-70,56,32,34,102,42,34,32,64,32,64,32,102,42,32,64,32,64,32,79,-32,80,32,102,114,111,109,85,84,70,56,32,34,102,47,34,32,64,32,64,-32,102,47,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,-32,34,102,61,61,34,32,64,32,64,32,102,61,61,32,64,32,64,32,79,-32,80,32,102,114,111,109,85,84,70,56,32,34,102,47,61,34,32,64,32,-64,32,102,47,61,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,-70,56,32,34,102,60,34,32,64,32,64,32,102,60,32,64,32,64,32,79,-32,80,32,102,114,111,109,85,84,70,56,32,34,102,60,61,34,32,64,32,-64,32,102,60,61,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,-70,56,32,34,102,62,34,32,64,32,64,32,102,62,32,64,32,64,32,79,-32,80,32,102,114,111,109,85,84,70,56,32,34,102,62,61,34,32,64,32,-64,32,102,62,61,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,-70,56,32,34,102,110,101,103,34,32,64,32,64,32,102,110,101,103,32,64,-32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,102,115,104,-111,119,34,32,64,32,64,32,102,115,104,111,119,32,64,32,64,32,79,32,-80,32,102,114,111,109,85,84,70,56,32,34,102,114,101,97,100,34,32,64,-32,64,32,102,114,101,97,100,32,64,32,64,32,79,32,80,32,102,114,111,-109,85,84,70,56,32,34,105,116,111,102,34,32,64,32,64,32,105,116,111,-102,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,-115,101,113,34,32,64,32,64,32,115,101,113,32,64,32,64,32,79,32,80,-32,102,114,111,109,85,84,70,56,32,34,101,114,114,111,114,34,32,64,32,-64,32,101,114,114,111,114,32,64,32,64,32,79,32,80,32,102,114,111,109,-85,84,70,56,32,34,115,101,113,117,97,108,34,32,64,32,64,32,115,101,-113,117,97,108,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,-56,32,34,101,113,117,97,108,34,32,64,32,64,32,101,113,117,97,108,32,-64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,115,99,-109,112,34,32,64,32,64,32,115,99,109,112,32,64,32,64,32,79,32,80,-32,102,114,111,109,85,84,70,56,32,34,105,99,109,112,34,32,64,32,64,-32,105,99,109,112,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,-70,56,32,34,114,110,102,34,32,64,32,64,32,114,110,102,32,64,32,64,-32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,110,111,77,97,116,-99,104,34,32,64,32,64,32,110,111,77,97,116,99,104,32,64,32,64,32,-79,32,80,32,102,114,111,109,85,84,70,56,32,34,110,111,68,101,102,97,-117,108,116,34,32,64,32,64,32,110,111,68,101,102,97,117,108,116,32,64,-32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,73,79,46,-62,62,61,34,32,64,32,64,32,73,79,46,62,62,61,32,64,32,64,32,-79,32,80,32,102,114,111,109,85,84,70,56,32,34,73,79,46,62,62,34,-32,64,32,64,32,73,79,46,62,62,32,64,32,64,32,79,32,80,32,102,-114,111,109,85,84,70,56,32,34,73,79,46,114,101,116,117,114,110,34,32,-64,32,64,32,73,79,46,114,101,116,117,114,110,32,64,32,64,32,79,32,-80,32,102,114,111,109,85,84,70,56,32,34,73,79,46,112,114,105,110,116,-34,32,64,32,64,32,73,79,46,112,114,105,110,116,32,64,32,64,32,79,-32,80,32,102,114,111,109,85,84,70,56,32,34,73,79,46,115,101,114,105,-97,108,105,122,101,34,32,64,32,64,32,73,79,46,115,101,114,105,97,108,-105,122,101,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,-32,34,73,79,46,100,101,115,101,114,105,97,108,105,122,101,34,32,64,32,-64,32,73,79,46,100,101,115,101,114,105,97,108,105,122,101,32,64,32,64,-32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,73,79,46,115,116,-100,105,110,34,32,64,32,64,32,73,79,46,115,116,100,105,110,32,64,32,-64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,73,79,46,115,-116,100,111,117,116,34,32,64,32,64,32,73,79,46,115,116,100,111,117,116,-32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,73,-79,46,115,116,100,101,114,114,34,32,64,32,64,32,73,79,46,115,116,100,-101,114,114,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,-32,34,73,79,46,103,101,116,65,114,103,115,34,32,64,32,64,32,73,79,-46,103,101,116,65,114,103,115,32,64,32,64,32,79,32,80,32,102,114,111,-109,85,84,70,56,32,34,73,79,46,112,101,114,102,111,114,109,73,79,34,-32,64,32,64,32,73,79,46,112,101,114,102,111,114,109,73,79,32,64,32,-64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,73,79,46,99,-97,116,99,104,34,32,64,32,64,32,73,79,46,99,97,116,99,104,32,64,-32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,100,121,110,-115,121,109,34,32,64,32,64,32,100,121,110,115,121,109,32,64,32,64,32,-79,32,80,32,102,114,111,109,85,84,70,56,32,34,110,101,119,67,65,83,-116,114,105,110,103,76,101,110,34,32,64,32,64,32,110,101,119,67,65,83,-116,114,105,110,103,76,101,110,32,64,32,64,32,79,32,80,32,102,114,111,-109,85,84,70,56,32,34,112,101,101,107,67,65,83,116,114,105,110,103,34,-32,64,32,64,32,112,101,101,107,67,65,83,116,114,105,110,103,32,64,32,-64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,112,101,101,107,-67,65,83,116,114,105,110,103,76,101,110,34,32,64,32,64,32,112,101,101,-107,67,65,83,116,114,105,110,103,76,101,110,32,64,32,64,32,79,32,80,-32,102,114,111,109,85,84,70,56,32,34,116,111,73,110,116,34,32,64,32,-64,32,116,111,73,110,116,32,64,32,64,32,79,32,80,32,102,114,111,109,-85,84,70,56,32,34,116,111,80,116,114,34,32,64,32,64,32,116,111,80,-116,114,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,-34,116,111,68,98,108,34,32,64,32,64,32,116,111,68,98,108,32,64,32,-64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,112,61,61,34,-32,64,32,64,32,112,61,61,32,64,32,64,32,79,32,80,32,102,114,111,-109,85,84,70,56,32,34,112,110,117,108,108,34,32,64,32,64,32,112,110,-117,108,108,32,64,32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,-32,34,112,99,97,115,116,34,32,64,32,64,32,112,99,97,115,116,32,64,-32,64,32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,112,43,34,-32,64,32,64,32,112,43,32,64,32,64,32,79,32,80,32,102,114,111,109,-85,84,70,56,32,34,112,45,34,32,64,32,64,32,112,45,32,64,32,64,-32,79,32,80,32,102,114,111,109,85,84,70,56,32,34,65,46,97,108,108,-111,99,34,32,64,32,64,32,65,46,97,108,108,111,99,32,64,32,64,32,-79,32,80,32,102,114,111,109,85,84,70,56,32,34,65,46,115,105,122,101,-34,32,64,32,64,32,65,46,115,105,122,101,32,64,32,64,32,79,32,80,-32,102,114,111,109,85,84,70,56,32,34,65,46,114,101,97,100,34,32,64,-32,64,32,65,46,114,101,97,100,32,64,32,64,32,79,32,80,32,102,114,-111,109,85,84,70,56,32,34,65,46,119,114,105,116,101,34,32,64,32,64,-32,65,46,119,114,105,116,101,32,64,32,64,32,79,32,80,32,102,114,111,-109,85,84,70,56,32,34,65,46,61,61,34,32,64,32,64,32,65,46,61,-61,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,49,53,51,48,32,64,10,65,32,95,49,53,50,-56,32,58,49,53,50,57,32,64,10,65,32,73,32,58,49,53,50,56,32,-64,10,65,32,66,32,95,49,53,51,32,95,49,53,50,54,32,64,32,64,-32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,32,58,-58,32,73,79,32,40,41,92,49,48,38,34,32,64,32,64,32,64,32,66,-32,95,49,53,51,32,95,49,53,50,54,32,64,32,64,32,66,32,95,49,-53,51,32,102,114,111,109,85,84,70,56,32,34,32,61,32,112,114,105,110,-116,79,114,82,117,110,32,40,34,32,64,32,64,32,64,32,67,32,95,49,-53,51,32,64,32,102,114,111,109,85,84,70,56,32,34,41,92,49,48,38,-34,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,53,50,55,32,-64,10,65,32,102,114,111,109,85,84,70,56,32,34,95,105,116,34,32,64,-32,58,49,53,50,54,32,64,10,65,32,95,49,51,49,49,32,95,49,51,-50,50,32,64,32,95,49,52,53,48,32,64,32,95,49,52,54,56,32,64,-32,58,49,53,50,53,32,64,10,65,32,83,39,32,66,32,64,32,66,32,-95,48,32,95,50,51,32,64,32,64,32,67,32,95,49,51,51,32,64,32,-95,49,51,52,32,64,32,64,32,64,32,66,32,66,32,67,39,32,95,48,-32,95,50,51,32,64,32,64,32,80,32,95,49,49,32,95,50,51,32,64,-32,95,53,56,32,64,32,64,32,67,39,32,95,48,32,95,50,51,32,64,-32,64,32,95,51,49,50,32,64,32,66,32,83,39,32,95,51,51,53,32,-64,32,95,51,50,49,32,64,32,95,49,49,32,95,50,51,32,64,32,64,-32,64,32,95,49,53,49,54,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,66,32,66,32,95,49,48,54,32,95,50,51,32,64,32,-64,32,95,49,53,49,55,32,64,32,64,32,64,32,66,32,67,39,32,95,-48,32,95,50,51,32,64,32,64,32,67,32,67,39,32,95,49,53,50,51,-32,64,32,67,39,32,80,32,64,32,95,52,49,54,32,64,32,95,53,56,-32,64,32,64,32,75,32,64,32,64,32,75,32,64,32,64,32,64,32,66,-32,85,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,49,-48,54,32,95,50,51,32,64,32,64,32,64,32,67,39,66,32,66,32,95,-50,54,32,64,32,95,50,56,53,32,64,32,64,32,95,53,48,56,32,64,-32,64,32,64,32,95,49,49,32,95,50,51,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,58,49,53,50,52,32,64,10,65,32,66,32,89,-32,64,32,66,32,66,32,66,32,66,32,95,49,48,54,32,95,50,51,32,-64,32,95,49,53,49,57,32,95,49,50,49,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,95,48,32,95,50,51,32,-64,32,95,49,53,50,49,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,-67,39,32,83,39,32,83,39,32,83,39,32,67,39,32,67,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,83,39,32,83,39,32,83,39,32,67,-39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,83,39,32,83,39,32,67,39,32,67,39,32,67,39,32,-67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,-83,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,83,39,32,67,-39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,83,39,32,-67,39,32,67,39,32,83,39,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,83,39,32,83,39,32,67,39,32,83,39,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,-32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,83,39,32,83,39,32,67,39,32,67,39,32,83,39,32,67,39,32,67,-39,32,67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,-32,83,39,32,67,39,32,67,39,32,83,39,32,67,39,32,67,39,32,67,-39,32,67,39,32,67,39,32,83,39,32,67,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,-83,39,32,83,39,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,-66,32,83,39,32,83,39,32,64,32,66,32,67,39,32,64,32,66,32,67,-39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,-67,39,32,64,32,66,32,83,39,32,64,32,66,32,67,39,32,64,32,66,-32,67,39,32,64,32,95,52,48,32,95,55,50,32,64,32,95,57,48,32,-95,49,48,52,32,64,32,95,49,48,50,32,35,52,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,-64,32,66,32,66,32,66,32,83,39,32,67,39,32,64,32,66,32,67,39,-32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,-39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,-67,39,32,64,32,66,32,83,39,32,64,32,95,52,48,32,95,55,50,32,-64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,50,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,-67,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,67,39,32,-64,32,66,32,83,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,-32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,-39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,95,52,-48,32,95,55,50,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,-49,48,50,32,35,54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,-83,39,32,83,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,-83,39,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,-64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,-32,64,32,66,32,83,39,32,64,32,66,32,67,39,32,64,32,66,32,67,-39,32,64,32,95,52,48,32,95,55,50,32,64,32,95,57,48,32,95,49,-48,52,32,64,32,95,49,48,50,32,35,49,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,83,39,32,83,39,32,67,32,64,32,64,32,64,32,-66,32,66,32,66,32,83,39,32,67,39,32,64,32,66,32,67,39,32,64,-32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,-64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,-32,64,32,66,32,67,39,32,64,32,95,52,48,32,95,55,50,32,64,32,-95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,53,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,32,-64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,67,39,32,64,32,-66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,-32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,-64,32,66,32,83,39,32,64,32,66,32,67,39,32,64,32,95,52,48,32,-95,55,50,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,-50,32,35,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,83,39,32,66,32,64,32,66,39,32,66,39,32,66,39,32,66,39,32,-66,39,32,66,39,32,66,32,67,39,32,64,32,95,52,48,32,95,55,50,-32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,-49,50,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,67,39,-32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,-39,32,64,32,66,32,67,39,32,64,32,66,32,83,39,32,64,32,66,32,-67,39,32,64,32,66,32,67,39,32,64,32,95,52,48,32,95,55,50,32,-64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,-51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,66,-32,64,32,66,39,32,66,39,32,66,39,32,66,39,32,66,32,67,39,32,-64,32,66,32,67,39,32,64,32,95,52,48,32,95,55,50,32,64,32,95,-57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,48,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,-64,32,66,32,66,32,66,32,83,39,32,67,39,32,64,32,66,32,67,39,-32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,83,-39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,95,52,-48,32,95,55,50,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,-49,48,50,32,35,49,52,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,-67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,-32,83,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,-66,32,67,39,32,64,32,95,52,48,32,95,55,50,32,64,32,95,57,48,-32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,53,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,-66,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,-32,66,32,64,32,66,39,32,66,32,67,39,32,64,32,66,32,67,39,32,-64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,95,52,48,32,-95,55,50,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,-50,32,35,50,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,67,-32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,67,39,32,64,-32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,-64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,95,52,48,32,-95,55,50,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,-50,32,35,49,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,-39,32,83,39,32,66,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,66,39,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,66,39,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,67,39,66,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,83,39,32,66,32,64,32,66,39,32,95,52,48,32,95,-55,50,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,-32,35,50,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,83,39,32,67,39,66,32,64,32,83,39,32,95,-49,54,56,32,64,32,67,32,95,50,48,53,32,95,56,48,32,64,32,64,-32,35,51,50,32,64,32,64,32,67,32,95,56,55,32,95,56,48,32,64,-32,64,32,35,49,50,55,32,64,32,64,32,64,32,64,32,64,32,64,32,-67,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,-67,39,32,83,39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,95,-49,53,50,50,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,83,-39,32,66,32,64,32,66,39,32,66,32,95,49,48,54,32,95,50,51,32,-64,32,64,32,95,49,53,49,55,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,83,39,32,67,39,66,32,64,32,66,32,66,32,95,49,48,-54,32,95,50,51,32,64,32,64,32,64,32,66,32,85,32,64,32,95,51,-50,49,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,67,39,32,-64,32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,-95,51,49,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,95,48,32,95,50,51,32,64,32,95,49,-53,50,49,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,67,32,67,32,95,54,55,-32,95,55,50,32,64,32,64,32,95,49,49,49,32,35,57,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,66,32,95,48,32,95,50,51,32,64,32,95,49,53,50,49,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,-67,39,32,67,39,66,32,64,32,64,32,64,32,64,32,66,32,66,32,67,-39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,83,32,95,52,48,32,95,49,54,53,32,64,32,35,54,53,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,-32,64,32,64,32,64,32,66,32,66,32,66,32,83,32,95,52,48,32,95,-49,54,53,32,64,32,35,54,54,32,64,32,64,32,64,32,64,32,64,32,-66,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,32,95,52,48,-32,95,49,54,53,32,64,32,35,54,55,32,64,32,64,32,64,32,64,32,-66,32,67,32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,35,-54,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,95,51,49,49,32,64,32,64,32,64,32,64,32,73,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,95,49,48,54,32,-95,50,51,32,64,32,64,32,95,49,53,49,55,32,64,32,64,32,64,32,-66,32,66,32,67,39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,-66,32,95,50,54,32,95,49,53,49,55,32,64,32,64,32,66,32,95,50,-54,32,95,50,57,52,32,64,32,64,32,67,39,32,95,51,49,57,32,64,-32,95,51,50,49,32,64,32,102,114,111,109,85,84,70,56,32,34,92,56,-38,32,92,56,38,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,82,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-32,95,49,48,54,32,95,50,51,32,64,32,64,32,64,32,80,32,75,32,-64,32,75,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,-64,32,73,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,-64,32,73,32,64,32,64,32,64,32,66,32,66,32,83,39,32,95,49,48,-54,32,95,50,51,32,64,32,64,32,95,49,53,49,55,32,64,32,64,32,-64,32,67,32,67,39,32,67,39,32,64,32,67,39,32,64,32,67,39,32,-95,49,53,51,32,64,32,95,52,49,54,32,64,32,64,32,64,32,75,32,-64,32,64,32,64,32,64,32,64,32,66,32,83,39,32,66,32,64,32,66,-32,67,39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,64,32,66,-32,85,32,64,32,95,51,50,49,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,39,32,85,32,75,32,64,32,64,32,64,32,66,32,95,49,53,-51,32,64,32,95,52,49,54,32,64,32,64,32,64,32,64,32,64,32,64,-32,73,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,66,32,64,32,64,32,66,32,83,39,32,83,39,32,67,-39,32,64,32,64,32,66,32,66,32,67,39,32,64,32,64,32,67,39,66,-32,66,32,95,49,54,56,32,64,32,95,51,48,49,32,64,32,64,32,95,-51,48,49,32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,67,39,-66,32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,-66,32,66,32,83,39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,-95,49,53,49,55,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,95,49,48,54,32,95,50,51,32,64,32,95,49,53,50,50,32,35,-51,50,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,-83,39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,64,32,67,32,-66,32,64,32,67,39,32,95,49,56,49,32,95,49,48,52,32,64,32,64,-32,95,51,50,49,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,85,32,95,53,50,32,64,32,64,-32,64,32,64,32,66,32,67,39,66,32,67,39,66,32,64,32,64,32,66,-32,66,32,67,39,66,32,66,39,32,66,32,95,49,48,54,32,95,50,51,-32,64,32,64,32,85,32,35,49,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,39,32,67,32,64,32,64,32,67,32,95,53,57,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,66,32,67,-39,66,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,-32,83,39,32,66,32,64,32,66,32,95,49,48,54,32,95,50,51,32,64,-32,64,32,85,32,35,49,32,64,32,64,32,64,32,64,32,64,32,66,32,-83,39,32,66,32,64,32,66,39,32,66,32,95,49,48,54,32,95,50,51,-32,64,32,64,32,95,49,53,49,55,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,95,49,48,54,32,95,50,51,32,64,32,95,49,-53,50,50,32,35,51,50,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,83,39,32,67,39,66,32,64,32,66,32,66,32,95,49,48,54,32,-95,50,51,32,64,32,64,32,64,32,66,32,85,32,64,32,67,39,32,95,-49,56,49,32,95,49,48,52,32,64,32,64,32,95,51,50,49,32,64,32,-35,49,32,64,32,64,32,64,32,64,32,64,32,67,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,95,49,53,49,55,32,64,-32,67,32,95,51,49,57,32,64,32,35,56,32,64,32,64,32,64,32,64,-32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,95,52,57,32,64,-32,64,32,66,32,95,49,53,51,32,64,32,95,52,49,54,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,64,32,67,-39,66,32,66,39,32,80,32,64,32,64,32,67,32,67,39,32,67,39,32,-64,32,66,32,83,39,32,64,32,67,39,32,64,32,64,32,66,32,66,32,-80,32,64,32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,-73,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,64,32,-67,39,66,32,66,32,67,39,66,32,64,32,85,32,64,32,64,32,67,32,-67,39,32,67,39,32,64,32,66,32,83,39,32,64,32,67,39,32,64,32,-64,32,66,32,66,32,67,32,80,32,64,32,64,32,64,32,67,32,95,53,-57,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,39,32,95,49,48,54,32,95,50,51,32,64,32,-64,32,64,32,66,32,83,39,32,95,49,48,54,32,95,50,51,32,64,32,-64,32,95,49,53,49,55,32,64,32,64,32,67,32,67,39,32,67,39,32,-64,32,95,49,53,50,51,32,64,32,95,52,49,54,32,64,32,64,32,75,-32,64,32,64,32,64,32,64,32,64,32,66,32,83,39,32,95,49,48,54,-32,95,50,51,32,64,32,64,32,95,49,53,49,55,32,64,32,64,32,66,-32,66,32,95,50,54,32,95,49,53,49,55,32,64,32,64,32,64,32,66,-32,66,32,95,50,54,32,95,50,57,52,32,64,32,64,32,64,32,67,39,-32,67,39,32,95,51,49,57,32,64,32,64,32,67,39,66,32,66,32,95,-49,56,49,32,95,49,48,52,32,64,32,64,32,95,51,50,49,32,64,32,-64,32,95,51,50,49,32,64,32,64,32,102,114,111,109,85,84,70,56,32,-34,92,56,38,32,92,56,38,34,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,82,32,64,32,64,32,66,32,66,32,83,39,-32,66,32,64,32,66,32,95,49,48,54,32,95,50,51,32,64,32,64,32,-95,49,53,50,50,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,-64,32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,-73,32,64,32,64,32,66,32,66,32,95,49,48,54,32,95,50,51,32,64,-32,95,49,53,50,50,32,35,49,48,32,64,32,64,32,64,32,64,32,66,-32,66,32,95,49,48,54,32,95,50,51,32,64,32,95,49,53,49,57,32,-95,49,50,49,32,64,32,64,32,64,32,64,32,66,32,67,39,32,66,32,-95,49,49,32,95,50,51,32,64,32,64,32,64,32,83,39,32,67,39,32,-80,32,64,32,64,32,66,32,83,32,95,49,53,51,32,64,32,64,32,67,-39,66,32,85,32,95,53,56,32,64,32,64,32,67,39,32,67,32,64,32,-66,32,83,32,95,52,48,32,95,54,53,32,64,32,75,32,64,32,64,32,-64,32,67,39,32,67,32,64,32,67,32,83,39,32,83,39,32,64,32,66,-32,95,49,54,56,32,64,32,66,32,95,49,50,51,32,64,32,95,51,48,-49,32,64,32,64,32,64,32,66,32,67,32,95,52,48,32,95,54,53,32,-64,32,64,32,64,32,95,52,54,49,32,64,32,64,32,64,32,67,32,79,-32,64,32,75,32,64,32,64,32,64,32,95,53,56,32,64,32,64,32,64,-32,95,53,56,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,-32,83,39,32,95,49,53,51,32,64,32,66,32,95,52,49,54,32,64,32,-95,50,52,57,32,64,32,64,32,95,50,55,57,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,49,53,50,51,32,64,10,65,32,-95,49,49,50,32,95,49,50,49,32,64,32,58,49,53,50,50,32,64,10,-65,32,95,48,32,95,50,51,32,64,32,95,49,53,50,48,32,64,32,83,-39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,67,39,32,95,50,-54,32,64,32,66,32,95,49,52,54,32,95,50,49,32,64,32,64,32,67,-32,95,56,55,32,95,56,48,32,64,32,64,32,35,48,32,64,32,64,32,-64,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,103,101,116,-82,97,119,32,102,97,105,108,101,100,34,32,64,32,64,32,64,32,64,32,-95,49,49,32,95,50,51,32,64,32,64,32,64,32,58,49,53,50,49,32,-64,10,65,32,94,103,101,116,82,97,119,32,58,49,53,50,48,32,64,10,-65,32,95,49,53,49,56,32,58,49,53,49,57,32,64,10,65,32,94,102,-108,117,115,104,98,32,58,49,53,49,56,32,64,10,65,32,95,49,49,51,-32,95,49,50,49,32,64,32,58,49,53,49,55,32,64,10,65,32,67,32,-83,32,95,52,48,32,95,54,53,32,64,32,75,32,64,32,64,32,67,32,-95,54,56,54,32,95,54,32,95,49,50,51,32,64,32,67,32,95,52,48,-32,95,49,54,53,32,64,32,64,32,35,49,48,32,64,32,64,32,64,32,-64,32,83,39,32,80,32,64,32,67,32,79,32,64,32,75,32,64,32,64,-32,90,32,67,39,66,32,95,53,57,32,64,32,95,49,53,49,54,32,64,-32,64,32,64,32,64,32,64,32,64,32,95,53,56,32,64,32,58,49,53,-49,54,32,64,10,65,32,95,52,52,32,58,49,53,49,53,32,64,10,65,-32,95,48,32,95,50,48,48,32,64,32,95,50,48,49,32,64,32,85,32,-90,32,90,32,67,39,32,95,48,32,95,50,48,48,32,64,32,64,32,95,-49,53,49,48,32,64,32,80,32,66,32,95,50,54,32,95,50,48,57,32,-64,32,64,32,95,49,53,49,51,32,64,32,64,32,75,32,95,49,49,32,-95,50,48,48,32,64,32,95,49,48,55,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,58,49,53,49,52,32,64,10,65,32,66,32,-95,50,54,32,95,49,53,49,49,32,64,32,64,32,95,49,53,49,50,32,-64,32,58,49,53,49,51,32,64,10,65,32,73,32,58,49,53,49,50,32,-64,10,65,32,66,32,95,50,54,32,95,49,50,50,32,64,32,64,32,95,-49,53,51,32,102,114,111,109,85,84,70,56,32,34,69,114,114,111,114,58,-32,34,32,64,32,64,32,64,32,58,49,53,49,49,32,64,10,65,32,66,-32,95,48,32,95,50,48,48,32,64,32,95,50,48,49,32,64,32,64,32,-66,32,85,32,64,32,67,32,67,39,32,67,39,32,64,32,66,32,67,39,-32,64,32,66,32,67,39,32,64,32,66,39,32,66,32,95,49,48,54,32,-95,50,48,48,32,64,32,64,32,66,32,95,50,54,32,95,50,48,57,32,-64,32,64,32,95,50,56,53,32,95,49,53,51,32,95,50,56,54,32,64,-32,102,114,111,109,85,84,70,56,32,34,46,104,115,34,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,83,39,32,67,-39,32,83,39,32,95,48,32,95,50,48,48,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,95,50,54,32,95,50,48,57,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,95,50,54,32,95,50,57,50,32,64,-32,64,32,64,32,64,32,66,32,67,32,64,32,95,49,53,48,57,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,80,32,66,32,95,-49,49,32,95,50,48,48,32,64,32,64,32,95,50,57,49,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,-32,67,39,32,95,49,48,54,32,95,50,48,48,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,95,49,52,55,49,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,-64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,64,32,-95,50,55,52,32,64,32,64,32,64,32,64,32,66,32,95,49,49,32,95,-50,48,48,32,64,32,64,32,95,50,57,48,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,95,53,50,48,32,95,50,56,54,32,64,32,64,-32,64,32,64,32,58,49,53,49,48,32,64,10,65,32,83,39,32,67,39,-32,67,39,32,95,48,32,95,50,51,32,64,32,64,32,64,32,64,32,95,-49,52,55,53,32,64,32,66,32,85,32,64,32,66,32,66,32,66,32,95,-48,32,95,50,51,32,64,32,95,51,48,48,32,64,32,64,32,64,32,64,-32,67,39,66,32,66,32,67,39,32,67,39,32,83,39,32,95,48,32,95,-50,51,32,64,32,64,32,66,32,95,49,49,32,95,50,51,32,64,32,64,-32,95,53,48,53,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,95,48,32,95,50,51,32,64,32,95,51,48,48,32,64,32,64,32,-64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,66,32,64,-32,66,32,66,32,67,39,32,95,49,48,54,32,95,50,51,32,64,32,64,-32,64,32,64,32,67,39,66,32,66,39,32,66,32,95,50,54,32,64,32,-66,32,95,49,52,54,32,95,50,49,32,64,32,64,32,67,32,95,49,53,-50,32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,95,50,54,32,95,49,50,50,32,64,32,64,32,64,32,66,32,66,32,-95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,99,111,109,98,105,-110,97,116,111,114,32,99,111,110,118,101,114,115,105,111,110,32,34,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,95,49,53,51,32,64,32,-64,32,66,32,66,32,95,49,52,55,52,32,35,54,32,64,32,64,32,64,-32,66,32,66,32,95,49,53,52,32,95,49,56,56,32,64,32,64,32,64,-32,67,32,95,56,49,32,95,49,48,52,32,64,32,64,32,64,32,64,32,-64,32,102,114,111,109,85,84,70,56,32,34,109,115,34,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,83,39,-32,95,49,48,54,32,95,50,51,32,64,32,64,32,64,32,67,39,66,32,-66,32,95,50,54,32,64,32,66,32,95,49,52,54,32,95,50,49,32,64,-32,64,32,67,32,95,49,53,50,32,64,32,35,51,32,64,32,64,32,64,-32,64,32,66,32,95,50,54,32,95,49,50,50,32,64,32,64,32,66,32,-95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,99,111,109,98,105,-110,97,116,111,114,115,58,92,49,48,38,34,32,64,32,64,32,64,32,95,-53,49,50,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,95,49,-49,32,95,50,51,32,64,32,64,32,64,32,67,32,80,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,89,32,66,32,80,32,75,32,-64,32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,67,39,32,67,-39,32,95,53,57,32,64,32,64,32,67,39,66,32,80,32,64,32,95,49,-53,48,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,58,49,53,48,57,32,64,10,65,32,95,54,32,95,49,52,-56,55,32,64,32,95,49,53,48,55,32,64,32,58,49,53,48,56,32,64,-10,65,32,83,32,67,32,67,32,83,32,73,32,64,32,75,32,64,32,64,-32,67,39,66,32,66,32,95,53,50,52,32,64,32,95,49,53,48,55,32,-64,32,64,32,95,49,53,48,55,32,64,32,64,32,64,32,95,49,53,48,-54,32,64,32,64,32,75,32,64,32,58,49,53,48,55,32,64,10,65,32,-66,32,89,32,64,32,67,39,32,67,39,32,83,32,64,32,64,32,67,39,-32,83,39,32,67,32,64,32,64,32,67,39,66,32,66,32,80,32,64,32,-67,39,32,67,32,64,32,67,39,32,83,32,64,32,95,52,48,32,95,50,-48,50,32,64,32,64,32,66,32,95,49,52,56,57,32,64,32,95,53,50,-53,32,64,32,64,32,64,32,95,49,52,57,48,32,64,32,64,32,64,32,-83,39,32,67,39,66,32,64,32,66,32,95,49,53,48,53,32,64,32,64,-32,73,32,64,32,64,32,64,32,67,39,66,32,66,39,32,95,50,54,32,-64,32,64,32,95,49,53,48,54,32,64,32,64,32,64,32,90,32,95,49,-52,56,57,32,64,32,64,32,64,32,58,49,53,48,54,32,64,10,65,32,-67,32,83,39,32,67,39,32,64,32,95,49,52,56,48,32,64,32,83,32,-67,39,32,83,39,32,64,32,66,32,83,32,64,32,95,49,52,55,56,32,-64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,95,49,52,-56,48,32,64,32,64,32,64,32,83,32,83,39,32,83,39,32,64,32,95,-49,52,55,56,32,64,32,67,32,83,39,32,83,39,32,64,32,95,49,52,-56,49,32,64,32,67,32,95,49,52,57,53,32,64,32,64,32,64,32,73,-32,64,32,64,32,64,32,67,39,32,83,39,32,67,39,66,32,64,32,64,-32,66,32,66,32,67,32,95,49,52,56,48,32,64,32,64,32,64,32,67,-32,95,49,52,57,53,32,64,32,64,32,64,32,66,32,66,32,95,49,52,-56,57,32,64,32,64,32,95,53,50,52,32,64,32,64,32,64,32,64,32,-64,32,64,32,95,49,53,48,52,32,64,32,64,32,64,32,95,49,52,57,-48,32,64,32,58,49,53,48,53,32,64,10,65,32,83,39,32,83,32,64,-32,66,32,83,32,95,49,52,55,56,32,64,32,64,32,95,49,52,57,57,-32,64,32,64,32,83,39,32,67,39,32,67,39,66,32,64,32,64,32,66,-32,66,32,67,32,95,49,52,56,48,32,64,32,64,32,64,32,95,49,52,-57,57,32,64,32,64,32,95,49,53,48,51,32,64,32,64,32,58,49,53,-48,52,32,64,10,65,32,83,32,67,39,32,83,39,32,64,32,66,32,83,-32,64,32,95,49,52,55,56,32,64,32,64,32,66,32,83,39,32,67,39,-66,32,64,32,67,32,95,49,52,55,56,32,64,32,64,32,64,32,83,39,-32,67,39,32,83,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,-32,83,39,32,83,39,32,64,32,95,49,52,56,50,32,64,32,64,32,64,-32,64,32,66,32,67,39,66,32,66,32,67,39,32,67,32,64,32,64,32,-67,32,67,39,32,67,39,32,64,32,66,32,95,49,54,56,32,64,32,95,-49,52,56,51,32,64,32,64,32,95,49,52,56,49,32,64,32,64,32,64,-32,64,32,64,32,67,32,95,53,54,54,32,95,49,52,57,50,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,67,32,64,32,67,32,95,49,53,-48,48,32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,53,48,50,-32,64,32,58,49,53,48,51,32,64,10,65,32,95,53,54,54,32,95,49,-53,48,49,32,64,32,58,49,53,48,50,32,64,10,65,32,95,53,51,48,-32,95,53,51,49,32,79,32,35,54,55,32,64,32,75,32,64,32,64,32,-64,32,58,49,53,48,49,32,64,10,65,32,95,49,52,57,54,32,95,53,-51,48,32,95,53,51,49,32,102,114,111,109,85,84,70,56,32,34,67,39,-34,32,64,32,64,32,64,32,64,32,58,49,53,48,48,32,64,10,65,32,-83,32,67,39,32,83,39,32,64,32,66,32,83,32,64,32,95,49,52,55,-56,32,64,32,64,32,66,32,83,39,32,67,39,66,32,64,32,67,32,95,-49,52,55,56,32,64,32,64,32,64,32,66,32,67,39,66,32,66,32,67,-39,66,32,64,32,67,32,95,49,52,56,50,32,64,32,64,32,64,32,64,-32,67,39,32,67,32,64,32,67,32,95,49,52,57,55,32,64,32,64,32,-64,32,64,32,64,32,64,32,95,53,54,54,32,95,49,52,57,56,32,64,-32,64,32,58,49,52,57,57,32,64,10,65,32,95,53,51,48,32,95,53,-51,49,32,79,32,35,56,51,32,64,32,75,32,64,32,64,32,64,32,58,-49,52,57,56,32,64,10,65,32,95,49,52,57,54,32,95,53,51,48,32,-95,53,51,49,32,102,114,111,109,85,84,70,56,32,34,83,39,34,32,64,-32,64,32,64,32,64,32,58,49,52,57,55,32,64,10,65,32,66,32,66,-32,66,32,95,53,50,52,32,64,32,64,32,64,32,95,53,54,54,32,64,-32,58,49,52,57,54,32,64,10,65,32,83,32,67,39,32,83,39,32,64,-32,66,32,83,32,64,32,95,49,52,55,56,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,67,32,64,32,-66,32,67,39,32,67,39,32,64,32,66,32,95,49,54,56,32,64,32,95,-49,52,56,50,32,64,32,64,32,64,32,66,32,67,39,32,95,49,54,56,-32,64,32,95,49,52,56,48,32,64,32,64,32,95,49,52,57,49,32,64,-32,64,32,64,32,64,32,95,53,51,48,32,95,53,51,49,32,79,32,35,-55,57,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,95,-49,52,57,52,32,64,32,58,49,52,57,53,32,64,10,65,32,83,39,32,-83,32,64,32,66,32,67,39,32,83,32,64,32,95,49,52,55,56,32,64,-32,64,32,83,39,32,83,39,32,67,32,64,32,64,32,66,32,66,32,83,-39,32,83,39,32,64,32,95,49,52,55,56,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,67,39,32,67,-39,32,64,32,66,32,67,39,32,64,32,66,32,95,49,54,56,32,64,32,-95,49,52,56,51,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,-54,56,32,64,32,95,49,52,56,51,32,64,32,64,32,95,49,52,56,49,-32,64,32,64,32,64,32,95,49,52,57,50,32,64,32,64,32,64,32,66,-32,66,32,67,39,32,67,32,64,32,64,32,64,32,67,39,32,67,39,32,-64,32,66,32,67,39,32,64,32,66,32,95,49,54,56,32,64,32,95,49,-52,56,54,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,54,56,-32,64,32,95,49,52,56,50,32,64,32,64,32,95,49,52,56,48,32,64,-32,64,32,64,32,64,32,64,32,64,32,95,49,52,57,51,32,64,32,58,-49,52,57,52,32,64,10,65,32,67,32,83,39,32,83,39,32,64,32,95,-49,52,56,49,32,64,32,95,53,54,54,32,95,53,51,48,32,95,53,51,-49,32,79,32,35,54,54,32,64,32,75,32,64,32,64,32,64,32,64,32,-64,32,64,32,73,32,64,32,58,49,52,57,51,32,64,10,65,32,95,53,-51,48,32,95,53,51,49,32,79,32,35,56,48,32,64,32,75,32,64,32,-64,32,64,32,58,49,52,57,50,32,64,10,65,32,95,49,52,55,57,32,-79,32,35,56,48,32,64,32,75,32,64,32,64,32,58,49,52,57,49,32,-64,10,65,32,95,53,51,48,32,95,53,51,49,32,79,32,35,55,51,32,-64,32,75,32,64,32,64,32,64,32,58,49,52,57,48,32,64,10,65,32,-95,53,50,52,32,95,49,52,56,56,32,64,32,58,49,52,56,57,32,64,-10,65,32,95,53,51,48,32,95,53,51,49,32,79,32,35,55,53,32,64,-32,75,32,64,32,64,32,64,32,58,49,52,56,56,32,64,10,65,32,67,-32,83,32,95,49,52,55,56,32,64,32,73,32,64,32,64,32,66,32,67,-39,32,67,32,67,39,32,67,32,64,32,83,32,67,39,32,83,39,32,64,-32,66,32,95,49,54,56,32,64,32,95,49,52,56,48,32,64,32,64,32,-95,49,52,56,49,32,64,32,64,32,67,39,32,67,32,64,32,83,32,67,-39,32,83,39,32,64,32,66,32,95,49,54,56,32,64,32,95,49,52,56,-50,32,64,32,64,32,95,49,52,56,48,32,64,32,64,32,67,39,32,67,-32,64,32,83,32,67,39,32,83,39,32,64,32,66,32,95,49,54,56,32,-64,32,95,49,52,56,51,32,64,32,64,32,95,49,52,56,49,32,64,32,-64,32,67,39,32,67,32,64,32,83,32,67,39,32,83,39,32,64,32,66,-32,95,49,54,56,32,64,32,95,49,52,56,50,32,64,32,64,32,95,49,-52,56,50,32,64,32,64,32,67,39,32,67,32,64,32,83,32,67,39,32,-83,39,32,64,32,66,32,95,49,54,56,32,64,32,95,49,52,56,51,32,-64,32,64,32,95,49,52,56,51,32,64,32,64,32,67,39,32,67,32,64,-32,83,32,67,39,32,83,39,32,64,32,66,32,95,49,54,56,32,64,32,-95,49,52,56,52,32,64,32,64,32,95,49,52,56,50,32,64,32,64,32,-83,39,32,83,32,64,32,66,32,83,32,95,49,52,55,56,32,64,32,64,-32,95,49,52,56,53,32,64,32,64,32,83,39,32,66,32,64,32,67,39,-32,67,39,32,64,32,66,32,95,49,54,56,32,64,32,95,49,52,56,54,-32,64,32,64,32,95,49,52,56,48,32,64,32,64,32,95,49,52,56,53,-32,64,32,64,32,64,32,64,32,95,53,51,48,32,95,53,51,49,32,102,-114,111,109,85,84,70,56,32,34,67,39,66,34,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,53,51,48,32,95,53,51,49,32,79,32,35,56,-50,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,-51,48,32,95,53,51,49,32,102,114,111,109,85,84,70,56,32,34,66,39,-34,32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,51,48,32,95,-53,51,49,32,79,32,35,56,53,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,53,51,48,32,95,53,51,49,32,79,32,35,57,-48,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,-51,48,32,95,53,51,49,32,79,32,35,54,53,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,49,52,56,55,32,64,32,64,32,-95,49,52,56,55,32,64,32,64,32,58,49,52,56,55,32,64,10,65,32,-95,49,52,55,57,32,79,32,35,56,57,32,64,32,75,32,64,32,64,32,-58,49,52,56,54,32,64,10,65,32,83,32,67,39,32,83,39,32,64,32,-66,32,83,32,64,32,67,39,32,83,32,64,32,67,32,67,32,83,39,32,-64,32,75,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,90,32,-75,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,-66,32,83,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,-35,55,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,-32,66,32,83,39,32,67,32,64,32,67,32,95,52,48,32,95,54,53,32,-64,32,79,32,35,55,53,32,64,32,75,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,83,32,64,32,67,39,32,83,32,64,32,67,32,67,32,-83,39,32,64,32,75,32,64,32,64,32,83,39,32,67,39,66,32,64,32,-83,39,32,67,32,64,32,83,39,32,80,32,64,32,75,32,64,32,90,32,-75,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,66,32,-66,32,85,32,64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,66,-32,64,32,67,32,67,32,61,61,32,64,32,35,55,32,64,32,64,32,64,-32,64,32,66,32,66,32,85,32,64,32,64,32,83,39,32,66,32,64,32,-80,32,64,32,83,39,32,66,32,64,32,66,32,67,39,66,32,64,32,67,-32,95,52,48,32,95,49,54,53,32,64,32,35,55,53,32,64,32,64,32,-64,32,64,32,67,39,32,83,39,32,67,32,64,32,64,32,66,32,66,32,-83,32,67,32,95,52,48,32,95,54,53,32,64,32,64,32,75,32,64,32,-64,32,64,32,64,32,67,39,32,83,39,32,67,32,64,32,64,32,66,32,-66,32,83,32,67,32,95,52,48,32,95,54,53,32,64,32,64,32,79,32,-35,53,48,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,32,67,32,64,32,67,32,67,32,95,52,48,32,95,54,53,32,-64,32,64,32,79,32,35,53,49,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,95,53,50,52,32,95,53,51,48,32,95,53,51,49,32,102,-114,111,109,85,84,70,56,32,34,75,52,34,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,95,53,50,52,32,95,53,51,48,32,95,53,51,-49,32,102,114,111,109,85,84,70,56,32,34,75,51,34,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,53,50,52,32,95,53,51,48,32,-95,53,51,49,32,102,114,111,109,85,84,70,56,32,34,75,50,34,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,75,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,95,53,50,52,32,64,32,58,49,-52,56,53,32,64,10,65,32,95,49,52,55,57,32,102,114,111,109,85,84,-70,56,32,34,67,39,34,32,64,32,64,32,58,49,52,56,52,32,64,10,-65,32,95,49,52,55,57,32,79,32,35,54,55,32,64,32,75,32,64,32,-64,32,58,49,52,56,51,32,64,10,65,32,95,49,52,55,57,32,79,32,-35,54,54,32,64,32,75,32,64,32,64,32,58,49,52,56,50,32,64,10,-65,32,95,49,52,55,57,32,79,32,35,55,51,32,64,32,75,32,64,32,-64,32,58,49,52,56,49,32,64,10,65,32,95,49,52,55,57,32,79,32,-35,55,53,32,64,32,75,32,64,32,64,32,58,49,52,56,48,32,64,10,-65,32,66,32,67,32,67,32,80,32,75,32,95,52,52,32,64,32,64,32,-75,50,32,95,52,52,32,64,32,64,32,64,32,75,50,32,95,52,52,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,67,39,66,32,-67,32,67,32,61,61,32,64,32,35,55,32,64,32,64,32,95,52,52,32,-64,32,64,32,64,32,66,32,85,32,64,32,95,52,48,32,95,54,53,32,-64,32,64,32,64,32,64,32,64,32,58,49,52,55,57,32,64,10,65,32,-67,32,67,32,80,32,75,32,95,49,52,55,54,32,64,32,64,32,95,49,-52,55,55,32,64,32,64,32,75,50,32,95,49,52,55,54,32,64,32,64,-32,64,32,75,32,95,49,52,55,54,32,64,32,64,32,58,49,52,55,56,-32,64,10,65,32,79,32,58,49,52,55,55,32,64,10,65,32,75,32,58,-49,52,55,54,32,64,10,65,32,83,39,32,67,39,32,67,39,32,95,48,-32,95,50,51,32,64,32,64,32,64,32,64,32,66,32,66,32,95,49,57,-50,32,64,32,64,32,95,49,52,55,51,32,64,32,64,32,66,32,85,32,-64,32,66,32,67,32,66,32,64,32,64,32,66,32,90,32,64,32,67,39,-66,32,66,32,67,39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,-64,32,67,39,66,32,66,32,95,50,54,32,64,32,66,32,95,49,52,54,-32,95,50,49,32,64,32,64,32,67,32,95,49,53,50,32,64,32,35,48,-32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,95,49,50,50,32,-64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,-34,116,111,116,97,108,32,105,109,112,111,114,116,32,116,105,109,101,32,32,-32,32,32,34,32,64,32,64,32,64,32,67,39,32,95,49,53,51,32,64,-32,66,32,95,49,52,55,52,32,35,54,32,64,32,64,32,95,49,53,52,-32,95,49,56,56,32,64,32,64,32,64,32,102,114,111,109,85,84,70,56,-32,34,109,115,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,95,49,49,32,95,50,51,32,64,32,64,32,83,39,32,80,32,64,-32,66,32,95,50,54,32,95,53,48,55,32,95,53,48,54,32,64,32,64,-32,64,32,66,32,95,50,54,32,95,54,48,32,95,49,50,49,56,32,64,-32,64,32,64,32,66,32,95,50,54,32,95,50,56,48,32,64,32,64,32,-95,50,48,56,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,58,49,52,55,53,32,64,10,65,32,67,-39,32,83,39,32,95,49,53,51,32,64,32,64,32,67,39,32,67,39,32,-95,51,49,57,32,64,32,64,32,67,39,66,32,95,56,49,32,95,49,48,-52,32,64,32,64,32,95,51,50,49,32,64,32,64,32,35,51,50,32,64,-32,64,32,73,32,64,32,58,49,52,55,52,32,64,10,65,32,66,32,66,-32,95,48,32,95,50,48,48,32,64,32,95,50,53,50,32,95,50,48,56,-32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,67,32,64,32,64,-32,66,32,83,39,32,67,32,64,32,95,50,48,55,32,64,32,64,32,66,-32,66,32,95,48,32,95,50,48,48,32,64,32,95,50,53,50,32,95,50,-57,51,32,64,32,64,32,64,32,64,32,66,32,83,39,32,67,39,32,95,-49,48,54,32,95,50,48,48,32,64,32,64,32,64,32,83,39,32,83,39,-32,95,50,54,32,64,32,64,32,66,32,66,32,95,49,52,54,32,95,49,-57,54,32,64,32,64,32,64,32,95,54,51,32,95,50,48,50,32,64,32,-64,32,64,32,66,32,66,32,95,50,54,32,95,50,49,57,32,64,32,64,-32,64,32,66,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,-32,34,114,101,99,117,114,115,105,118,101,32,109,111,100,117,108,101,58,32,-34,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,53,51,-32,64,32,95,50,53,52,32,64,32,64,32,66,32,95,49,53,51,32,102,-114,111,109,85,84,70,56,32,34,44,32,105,109,112,111,114,116,32,99,104,-97,105,110,58,32,34,32,64,32,64,32,64,32,66,32,95,50,57,55,32,-64,32,95,54,48,32,95,50,53,52,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,83,39,32,95,49,48,54,32,95,-50,48,48,32,64,32,64,32,66,32,95,50,54,32,95,50,53,54,32,64,-32,64,32,67,39,32,83,39,32,95,50,57,56,32,64,32,64,32,67,39,-66,32,95,53,57,32,64,32,95,50,57,51,32,64,32,64,32,73,32,64,-32,64,32,64,32,64,32,83,39,32,83,39,32,95,49,48,54,32,95,50,-48,48,32,64,32,64,32,64,32,67,39,66,32,66,32,95,50,54,32,64,-32,66,32,95,49,52,54,32,95,49,57,54,32,64,32,64,32,67,32,95,-49,53,50,32,64,32,35,48,32,64,32,64,32,64,32,64,32,66,32,95,-50,54,32,95,50,48,57,32,64,32,64,32,66,32,95,50,54,32,95,49,-50,50,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,-70,56,32,34,105,109,112,111,114,116,105,110,103,32,34,32,64,32,64,32,-64,32,95,50,53,52,32,64,32,64,32,64,32,64,32,64,32,83,39,32,-83,39,32,95,48,32,95,50,48,48,32,64,32,64,32,64,32,95,49,52,-55,48,32,64,32,66,32,66,32,85,32,64,32,64,32,83,39,32,83,39,-32,66,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,66,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,49,48,54,32,-95,50,48,48,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,-39,32,66,39,32,66,32,95,50,54,32,64,32,66,32,95,49,52,54,32,-95,49,57,54,32,64,32,64,32,67,32,95,49,53,50,32,64,32,35,48,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,-50,54,32,95,50,48,57,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,95,50,54,32,95,49,50,50,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,-105,109,112,111,114,116,105,110,103,32,100,111,110,101,32,34,32,64,32,64,-32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,32,95,49,53,51,-32,64,32,95,50,53,52,32,64,32,64,32,64,32,66,32,66,32,95,49,-53,51,32,102,114,111,109,85,84,70,56,32,34,44,32,34,32,64,32,64,-32,64,32,64,32,83,39,32,83,39,32,95,49,53,51,32,64,32,64,32,-66,32,66,32,95,49,53,52,32,95,49,56,56,32,64,32,64,32,64,32,-95,49,56,49,32,95,49,48,52,32,64,32,64,32,64,32,66,32,66,32,-95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,109,115,32,40,34,-32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,53,51,32,-64,32,95,49,53,52,32,95,49,56,56,32,64,32,64,32,64,32,66,32,-95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,32,43,32,34,32,-64,32,64,32,64,32,67,39,32,95,49,53,51,32,64,32,95,49,53,52,-32,95,49,56,56,32,64,32,64,32,79,32,35,52,49,32,64,32,75,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,-32,66,39,32,64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,-66,32,66,32,95,49,48,54,32,95,50,48,48,32,64,32,64,32,64,32,-67,39,32,83,39,32,95,50,54,32,64,32,64,32,66,32,66,32,95,49,-52,54,32,95,49,57,54,32,64,32,64,32,64,32,67,39,66,32,66,32,-95,49,54,56,32,64,32,95,49,50,52,32,95,49,52,56,32,64,32,95,-49,50,56,32,64,32,64,32,64,32,67,32,95,54,55,32,95,50,48,50,-32,64,32,64,32,95,53,50,48,32,102,114,111,109,85,84,70,56,32,34,-73,110,116,101,114,97,99,116,105,118,101,34,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,95,50,54,32,95,50,48,57,32,64,32,64,32,-66,32,95,50,54,32,95,49,50,50,32,64,32,64,32,66,32,95,49,53,-51,32,102,114,111,109,85,84,70,56,32,34,108,111,97,100,101,100,32,34,-32,64,32,64,32,64,32,95,50,53,52,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,48,-32,95,50,48,48,32,64,32,95,50,48,49,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,66,32,64,32,66,39,32,66,39,32,66,32,67,39,-32,95,49,48,54,32,95,50,48,48,32,64,32,64,32,64,32,66,32,66,-32,95,50,54,32,95,49,52,55,49,32,64,32,64,32,64,32,95,49,52,-55,50,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,95,49,49,32,95,50,48,48,32,64,32,64,32,64,32,64,32,64,32,-67,39,66,32,66,39,32,66,39,32,80,32,64,32,64,32,64,32,66,32,-66,32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,64,32,95,49,-56,49,32,95,49,48,52,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-67,39,32,67,39,66,32,64,32,66,32,66,32,95,49,48,54,32,95,50,-48,48,32,64,32,64,32,64,32,67,39,66,32,66,32,95,50,54,32,64,-32,66,32,95,49,52,54,32,95,49,57,54,32,64,32,64,32,67,32,95,-49,53,50,32,64,32,35,48,32,64,32,64,32,64,32,64,32,66,32,95,-50,54,32,95,50,48,57,32,64,32,64,32,66,32,95,50,54,32,95,49,-50,50,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,-70,56,32,34,105,109,112,111,114,116,105,110,103,32,99,97,99,104,101,100,-32,34,32,64,32,64,32,64,32,95,50,53,52,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,95,49,49,32,95,50,48,48,32,64,32,64,-32,67,32,80,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,-48,50,32,35,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-58,49,52,55,51,32,64,10,65,32,66,32,85,32,64,32,66,32,67,39,-66,32,85,32,95,50,50,48,32,64,32,64,32,64,32,66,32,66,32,66,-32,67,32,95,49,52,49,32,64,32,64,32,64,32,64,32,66,32,67,32,-64,32,67,32,95,55,51,53,32,64,32,64,32,64,32,64,32,64,32,58,-49,52,55,50,32,64,10,65,32,66,32,95,50,54,32,95,49,57,52,32,-64,32,64,32,90,32,66,32,95,49,49,32,95,50,51,32,64,32,64,32,-80,32,95,49,48,55,32,64,32,64,32,64,32,64,32,58,49,52,55,49,-32,64,10,65,32,66,32,66,32,95,48,32,95,50,48,48,32,64,32,95,-50,48,57,32,95,51,48,48,32,64,32,64,32,64,32,64,32,83,39,32,-83,39,32,66,32,64,32,64,32,66,32,66,32,95,48,32,95,50,48,48,-32,64,32,64,32,64,32,66,32,66,32,95,50,48,57,32,64,32,64,32,-95,51,49,51,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,-32,64,32,64,32,66,32,66,32,66,32,83,39,32,66,32,64,32,66,32,-95,48,32,95,50,48,48,32,64,32,64,32,66,32,95,50,48,57,32,64,-32,95,51,49,52,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,39,32,64,-32,64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,67,39,32,-67,32,64,32,66,32,67,39,32,67,39,32,64,32,66,32,67,39,32,64,-32,66,32,83,39,32,64,32,66,32,67,39,32,95,49,48,54,32,95,50,-48,48,32,64,32,64,32,64,32,83,39,32,83,39,32,95,50,54,32,64,-32,64,32,66,32,66,32,95,49,52,54,32,95,49,57,54,32,64,32,64,-32,64,32,95,54,55,32,95,50,48,50,32,64,32,64,32,64,32,66,32,-66,32,95,50,54,32,95,50,49,57,32,64,32,64,32,64,32,66,32,66,-32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,109,111,100,117,-108,101,32,110,97,109,101,32,100,111,101,115,32,110,111,116,32,97,103,114,-101,101,32,119,105,116,104,32,102,105,108,101,32,110,97,109,101,58,32,34,-32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,53,51,32,-64,32,95,50,53,52,32,64,32,64,32,66,32,95,49,53,51,32,79,32,-35,51,50,32,64,32,75,32,64,32,64,32,64,32,95,50,53,52,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,67,39,32,83,39,32,66,32,95,48,32,95,50,48,48,-32,64,32,95,50,48,57,32,95,51,48,48,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,-39,32,66,39,32,66,32,83,39,32,66,32,64,32,64,32,66,32,66,32,-95,48,32,95,50,48,48,32,64,32,64,32,64,32,66,32,66,32,95,50,-54,32,95,55,32,95,49,57,53,32,64,32,95,51,49,53,32,64,32,64,-32,64,32,64,32,66,32,95,51,49,54,32,95,50,48,48,32,64,32,64,-32,95,49,52,55,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,85,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,95,48,32,95,50,48,48,32,64,-32,95,50,48,57,32,95,51,48,48,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,66,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,32,66,32,-66,32,66,32,67,39,32,67,39,66,32,64,32,64,32,64,32,64,32,83,-39,32,66,32,64,32,66,39,32,66,39,32,66,39,32,66,32,67,39,32,-64,32,66,32,67,39,32,64,32,66,32,83,39,32,95,49,48,54,32,95,-50,48,48,32,64,32,64,32,64,32,67,39,66,32,66,32,95,50,54,32,-64,32,66,32,95,49,52,54,32,95,49,57,54,32,64,32,64,32,67,32,-95,49,53,50,32,64,32,35,50,32,64,32,64,32,64,32,64,32,66,32,-95,50,54,32,95,50,48,57,32,64,32,64,32,66,32,95,50,54,32,95,-49,50,50,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,-84,70,56,32,34,116,121,112,101,32,99,104,101,99,107,101,100,58,92,49,-48,38,34,32,64,32,64,32,64,32,67,39,32,95,49,53,51,32,64,32,-95,51,49,55,32,95,53,48,51,32,64,32,64,32,102,114,111,109,85,84,-70,56,32,34,45,45,45,45,45,92,49,48,38,34,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,83,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,66,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,83,39,32,95,48,32,95,50,48,48,32,-64,32,64,32,66,32,95,50,54,32,95,49,49,32,95,50,48,48,32,64,-32,64,32,64,32,66,32,95,50,54,32,95,53,48,53,32,64,32,64,32,-95,53,48,54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,85,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,95,48,32,95,50,-48,48,32,64,32,95,50,48,57,32,95,51,48,48,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,-39,32,66,39,32,66,39,32,66,39,32,66,39,32,66,32,83,39,32,66,-32,64,32,64,32,66,32,66,32,95,49,48,54,32,95,50,48,48,32,64,-32,64,32,64,32,67,39,66,32,66,32,95,50,54,32,64,32,66,32,95,-49,52,54,32,95,49,57,54,32,64,32,64,32,67,32,95,49,53,50,32,-64,32,35,51,32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,95,-50,48,57,32,64,32,64,32,66,32,95,50,54,32,95,49,50,50,32,64,-32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,-100,101,115,117,103,97,114,101,100,58,92,49,48,38,34,32,64,32,64,32,-64,32,95,51,49,55,32,95,53,49,50,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,66,32,95,49,49,32,95,50,-48,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,67,39,32,67,39,32,67,39,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-67,39,66,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,-39,66,32,64,32,66,32,66,32,67,39,32,80,32,64,32,64,32,64,32,-66,32,67,39,32,67,32,64,32,67,32,95,53,49,51,32,64,32,64,32,-64,32,95,50,55,53,32,95,50,50,48,32,64,32,64,32,64,32,64,32,-64,32,67,32,95,56,49,32,95,49,48,52,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,32,95,56,49,32,95,49,48,52,32,64,32,64,32,-64,32,64,32,64,32,95,53,49,52,32,95,49,48,52,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,95,55,50,54,32,64,32,64,-32,64,32,64,32,64,32,66,32,67,39,32,67,39,32,95,49,50,49,55,-32,64,32,64,32,67,39,66,32,95,54,51,48,32,64,32,95,54,48,32,-95,49,50,49,56,32,64,32,64,32,64,32,64,32,83,32,73,32,64,32,-90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,89,32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,-66,32,64,32,64,32,66,32,90,32,64,32,66,32,66,32,90,32,64,32,-64,32,66,32,66,32,90,32,64,32,64,32,66,32,67,32,95,53,57,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,89,32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,66,32,-64,32,64,32,83,39,32,83,39,32,67,39,66,32,64,32,64,32,66,32,-67,32,67,32,61,61,32,64,32,35,54,32,64,32,64,32,64,32,64,32,-66,32,66,32,85,32,64,32,64,32,66,32,67,32,95,53,57,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,75,32,65,32,-64,32,64,32,64,32,64,32,64,32,64,32,85,32,90,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,95,49,50,50,50,32,-64,32,64,32,95,49,51,48,57,32,95,49,51,49,48,32,64,32,95,49,-52,54,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,-52,55,48,32,64,10,65,32,95,49,51,49,49,32,95,49,51,50,50,32,-64,32,95,49,52,54,54,32,64,32,95,49,52,54,56,32,64,32,58,49,-52,54,57,32,64,10,65,32,95,48,32,95,49,51,50,49,32,64,32,95,-49,51,51,57,32,95,49,50,51,50,32,64,32,64,32,85,32,67,39,66,-32,67,32,67,32,61,61,32,64,32,35,49,48,32,64,32,64,32,95,49,-48,50,51,32,95,49,52,54,55,32,95,49,50,51,50,32,64,32,64,32,-102,114,111,109,85,84,70,56,32,34,101,111,102,34,32,64,32,64,32,64,-32,64,32,85,32,95,49,52,53,32,95,49,51,50,50,32,64,32,95,49,-48,55,32,64,32,64,32,64,32,64,32,64,32,58,49,52,54,56,32,64,-10,65,32,66,32,95,49,48,50,52,32,95,49,51,50,49,32,64,32,64,-32,66,32,66,32,95,50,54,32,95,49,51,49,50,32,64,32,64,32,64,-32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,90,32,64,32,64,-32,66,32,66,32,66,32,95,49,51,49,52,32,95,53,56,32,64,32,64,-32,64,32,64,32,67,39,66,32,66,32,67,32,64,32,83,39,32,83,39,-32,95,49,51,49,54,32,64,32,64,32,95,49,51,50,52,32,64,32,95,-49,51,50,53,32,64,32,64,32,64,32,67,32,79,32,64,32,75,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,52,54,55,32,64,-10,65,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,51,32,95,-49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,-49,50,49,57,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,-95,49,51,50,55,32,102,114,111,109,85,84,70,56,32,34,109,111,100,117,-108,101,34,32,64,32,64,32,64,32,95,49,51,51,51,32,64,32,64,32,-64,32,95,49,51,49,49,32,95,49,51,50,50,32,64,32,95,49,57,55,-32,95,49,51,50,50,32,64,32,95,49,51,51,52,32,35,52,48,32,64,-32,64,32,95,49,51,51,55,32,95,49,51,54,55,32,64,32,95,49,51,-51,52,32,35,52,52,32,64,32,64,32,64,32,64,32,95,49,51,51,52,-32,35,52,49,32,64,32,64,32,64,32,64,32,95,49,57,55,32,95,49,-51,50,50,32,64,32,95,49,51,50,55,32,102,114,111,109,85,84,70,56,-32,34,119,104,101,114,101,34,32,64,32,64,32,64,32,95,49,51,55,51,-32,95,49,52,54,53,32,64,32,64,32,64,32,58,49,52,54,54,32,64,-10,65,32,95,49,51,51,53,32,95,49,51,51,53,32,95,49,51,51,53,-32,95,49,51,51,53,32,95,49,51,51,53,32,95,49,51,51,53,32,95,-49,51,51,53,32,95,49,51,51,53,32,95,49,51,51,53,32,95,49,51,-51,53,32,95,49,51,51,53,32,95,49,51,32,95,49,51,50,50,32,64,-32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,-49,53,32,64,32,95,49,49,50,56,32,64,32,95,49,57,55,32,95,49,-51,50,50,32,64,32,95,49,51,50,55,32,102,114,111,109,85,84,70,56,-32,34,100,97,116,97,34,32,64,32,64,32,64,32,95,49,51,57,56,32,-64,32,64,32,64,32,95,49,51,51,53,32,95,49,57,55,32,95,49,51,-50,50,32,64,32,95,49,51,53,53,32,79,32,35,54,49,32,64,32,75,-32,64,32,64,32,64,32,95,49,51,53,54,32,95,49,52,48,54,32,64,-32,95,49,51,53,53,32,79,32,35,49,50,52,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,-32,95,53,56,32,64,32,64,32,64,32,64,32,95,49,52,48,55,32,64,-32,64,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,51,32,95,-49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,-49,49,50,53,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,-95,49,51,50,55,32,102,114,111,109,85,84,70,56,32,34,110,101,119,116,-121,112,101,34,32,64,32,64,32,64,32,95,49,51,57,56,32,64,32,64,-32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,53,-53,32,79,32,35,54,49,32,64,32,75,32,64,32,64,32,64,32,95,49,-51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,-64,32,95,49,49,50,54,32,95,53,56,32,64,32,95,53,56,32,64,32,-64,32,95,49,52,48,49,32,64,32,64,32,95,48,32,95,49,51,50,49,-32,64,32,95,49,52,48,53,32,64,32,83,39,32,95,49,48,54,32,95,-49,51,50,49,32,64,32,64,32,66,32,95,50,54,32,95,49,51,53,48,-32,95,49,51,53,49,32,95,49,50,51,50,32,64,32,64,32,64,32,64,-32,67,39,32,95,52,48,32,95,55,50,32,64,32,64,32,95,55,50,52,-32,95,51,50,49,32,64,32,95,51,50,49,32,64,32,64,32,35,49,32,-64,32,64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,95,49,52,48,55,32,64,32,64,-32,64,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,-49,51,49,53,32,64,32,95,49,49,50,51,32,64,32,95,49,57,55,32,-95,49,51,50,50,32,64,32,95,49,51,50,55,32,102,114,111,109,85,84,-70,56,32,34,116,121,112,101,34,32,64,32,64,32,64,32,95,49,51,57,-56,32,64,32,64,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,-32,95,49,51,53,53,32,79,32,35,54,49,32,64,32,75,32,64,32,64,-32,64,32,95,49,51,57,53,32,64,32,64,32,64,32,64,32,95,49,56,-32,95,49,51,49,53,32,64,32,95,54,50,56,32,95,51,56,55,32,64,-32,64,32,95,49,52,53,55,32,64,32,64,32,64,32,95,49,51,32,95,-49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,-49,49,50,50,32,64,32,95,49,51,49,49,32,95,49,51,50,50,32,64,-32,95,49,51,53,54,32,95,49,51,56,48,32,64,32,95,49,51,51,52,-32,35,52,52,32,64,32,64,32,64,32,95,49,51,51,53,32,95,49,51,-53,53,32,102,114,111,109,85,84,70,56,32,34,58,58,34,32,64,32,64,-32,64,32,95,49,51,53,53,32,79,32,35,56,55,53,57,32,64,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,51,57,53,32,64,-32,64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,50,-50,48,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,-51,50,55,32,102,114,111,109,85,84,70,56,32,34,105,109,112,111,114,116,-34,32,64,32,64,32,64,32,95,49,52,54,50,32,64,32,64,32,64,32,-64,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,51,32,95,49,-51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,-49,50,49,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,-49,57,55,32,95,49,51,50,50,32,64,32,95,49,57,55,32,95,49,51,-50,50,32,64,32,95,49,51,50,55,32,102,114,111,109,85,84,70,56,32,-34,102,111,114,101,105,103,110,34,32,64,32,64,32,64,32,95,49,51,50,-55,32,102,114,111,109,85,84,70,56,32,34,105,109,112,111,114,116,34,32,-64,32,64,32,64,32,64,32,95,49,51,50,55,32,102,114,111,109,85,84,-70,56,32,34,99,99,97,108,108,34,32,64,32,64,32,64,32,64,32,95,-49,52,51,51,32,64,32,64,32,64,32,95,49,51,55,56,32,64,32,64,-32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,53,53,32,-102,114,111,109,85,84,70,56,32,34,58,58,34,32,64,32,64,32,64,32,-95,49,51,57,53,32,64,32,64,32,64,32,64,32,95,49,51,32,95,49,-51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,-52,54,51,32,64,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,-56,32,95,49,51,49,53,32,64,32,80,32,64,32,95,49,51,51,53,32,-95,49,51,51,53,32,95,49,52,32,95,49,51,49,53,32,64,32,95,49,-48,49,48,32,64,32,95,49,51,50,55,32,102,114,111,109,85,84,70,56,-32,34,105,110,102,105,120,108,34,32,64,32,64,32,64,32,64,32,95,49,-52,32,95,49,51,49,53,32,64,32,95,49,49,57,53,32,64,32,95,49,-51,50,55,32,102,114,111,109,85,84,70,56,32,34,105,110,102,105,120,114,-34,32,64,32,64,32,64,32,64,32,64,32,95,49,52,32,95,49,51,49,-53,32,64,32,95,49,48,49,51,32,64,32,95,49,51,50,55,32,102,114,-111,109,85,84,70,56,32,34,105,110,102,105,120,34,32,64,32,64,32,64,-32,64,32,64,32,64,32,95,49,51,51,48,32,95,49,50,51,50,32,64,-32,102,114,111,109,85,84,70,56,32,34,100,105,103,105,116,34,32,64,32,-64,32,85,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,51,32,-64,32,64,32,95,53,50,32,64,32,64,32,85,32,75,32,66,32,83,32,-67,32,83,39,32,95,49,54,56,32,64,32,95,54,56,32,95,56,48,32,-64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,48,-32,64,32,64,32,64,32,64,32,67,32,95,54,56,32,95,56,48,32,64,-32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,-57,32,64,32,64,32,64,32,64,32,64,32,95,53,50,32,64,32,64,32,-95,52,57,32,64,32,64,32,95,57,48,32,95,49,48,52,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,51,-53,54,32,95,49,51,56,54,32,64,32,95,49,51,51,52,32,35,52,52,-32,64,32,64,32,64,32,64,32,64,32,95,49,51,32,95,49,51,50,50,-32,64,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,51,32,95,-49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,-49,49,49,56,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,-95,49,51,50,55,32,102,114,111,109,85,84,70,56,32,34,99,108,97,115,-115,34,32,64,32,64,32,64,32,95,49,51,57,57,32,64,32,64,32,64,-32,95,49,51,57,56,32,64,32,64,32,95,49,51,51,53,32,95,49,57,-55,32,95,49,51,50,50,32,64,32,95,49,51,53,53,32,79,32,35,49,-50,52,32,64,32,75,32,64,32,64,32,64,32,95,49,51,53,54,32,95,-49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,-32,64,32,80,32,64,32,95,49,51,52,50,32,95,49,51,55,56,32,64,-32,64,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,-51,56,52,32,64,32,95,49,51,52,50,32,95,49,51,55,56,32,64,32,-64,32,64,32,64,32,95,49,51,51,52,32,35,52,52,32,64,32,64,32,-64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,95,53,56,-32,64,32,64,32,64,32,64,32,95,49,52,51,57,32,95,49,52,50,50,-32,64,32,64,32,64,32,64,32,95,49,51,32,95,49,51,50,50,32,64,-32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,49,49,52,32,64,-32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,50,55,32,-102,114,111,109,85,84,70,56,32,34,105,110,115,116,97,110,99,101,34,32,-64,32,64,32,64,32,95,49,51,57,53,32,64,32,64,32,64,32,95,49,-52,51,57,32,95,49,52,50,50,32,64,32,64,32,64,32,64,32,95,49,-56,32,95,49,51,49,53,32,64,32,95,49,49,49,51,32,64,32,95,49,-57,55,32,95,49,51,50,50,32,64,32,95,49,51,50,55,32,102,114,111,-109,85,84,70,56,32,34,100,101,102,97,117,108,116,34,32,64,32,64,32,-64,32,95,49,51,52,54,32,95,49,51,55,49,32,95,49,51,57,53,32,-64,32,95,49,51,51,52,32,35,52,52,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,-56,32,95,49,51,49,53,32,64,32,95,49,52,54,52,32,64,32,95,49,-57,55,32,95,49,51,50,50,32,64,32,95,49,51,50,55,32,102,114,111,-109,85,84,70,56,32,34,116,121,112,101,34,32,64,32,64,32,64,32,95,-49,51,55,55,32,64,32,64,32,64,32,95,49,57,55,32,95,49,51,50,-50,32,64,32,95,49,51,53,53,32,102,114,111,109,85,84,70,56,32,34,-58,58,34,32,64,32,64,32,64,32,95,49,51,57,54,32,64,32,64,32,-64,32,58,49,52,54,53,32,64,10,65,32,66,32,66,32,80,32,35,53,-32,64,32,64,32,64,32,80,32,64,32,58,49,52,54,52,32,64,10,65,-32,66,32,66,32,80,32,35,56,32,64,32,64,32,64,32,80,32,64,32,-58,49,52,54,51,32,64,10,65,32,95,49,51,32,95,49,51,50,50,32,-64,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,51,32,95,49,-51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,-50,50,49,32,64,32,95,49,51,51,53,32,95,49,52,32,95,49,51,49,-53,32,64,32,95,52,51,32,64,32,95,49,51,50,55,32,102,114,111,109,-85,84,70,56,32,34,113,117,97,108,105,102,105,101,100,34,32,64,32,64,-32,64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,95,52,-52,32,64,32,64,32,64,32,64,32,95,49,51,51,51,32,64,32,64,32,-95,49,51,55,50,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,-49,51,50,55,32,102,114,111,109,85,84,70,56,32,34,97,115,34,32,64,-32,64,32,64,32,95,49,51,52,52,32,64,32,64,32,64,32,64,32,95,-49,51,55,50,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,56,-32,95,49,51,49,53,32,64,32,80,32,64,32,95,57,52,54,32,95,49,-51,53,49,32,95,49,50,51,50,32,64,32,64,32,95,49,52,32,95,49,-51,49,53,32,64,32,95,52,51,32,64,32,95,49,51,50,55,32,102,114,-111,109,85,84,70,56,32,34,104,105,100,105,110,103,34,32,64,32,64,32,-64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,95,52,52,-32,64,32,64,32,64,32,64,32,95,49,51,52,54,32,95,49,51,51,55,-32,95,49,52,54,49,32,64,32,95,49,51,51,52,32,35,52,52,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,49,52,54,50,32,64,10,65,-32,95,49,51,51,53,32,95,49,51,51,53,32,95,49,56,32,95,49,51,-49,53,32,64,32,95,49,52,53,56,32,64,32,95,49,51,49,49,32,95,-49,51,50,50,32,64,32,95,49,51,49,49,32,95,49,51,50,50,32,64,-32,95,49,51,49,49,32,95,49,51,50,50,32,64,32,95,49,51,53,52,-32,64,32,95,49,51,51,52,32,35,52,48,32,64,32,64,32,64,32,95,-49,51,53,56,32,64,32,64,32,95,49,51,51,52,32,35,52,49,32,64,-32,64,32,64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,-49,52,53,57,32,64,32,95,49,51,53,52,32,64,32,64,32,64,32,95,-49,56,32,95,49,51,49,53,32,64,32,95,49,52,54,48,32,64,32,95,-49,51,54,54,32,64,32,64,32,58,49,52,54,49,32,64,10,65,32,90,-32,90,32,85,32,64,32,64,32,58,49,52,54,48,32,64,10,65,32,90,-32,66,32,90,32,64,32,85,32,64,32,64,32,58,49,52,53,57,32,64,-10,65,32,66,32,90,32,64,32,66,32,90,32,64,32,85,32,64,32,64,-32,58,49,52,53,56,32,64,10,65,32,95,48,32,95,49,51,50,49,32,-64,32,95,49,52,53,54,32,75,50,32,95,52,51,32,64,32,64,32,64,-32,85,32,66,32,83,32,73,32,64,32,64,32,83,39,32,83,39,32,83,-39,32,67,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,66,-32,64,32,80,32,64,32,64,32,64,32,67,39,32,67,39,32,83,39,32,-67,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,67,39,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,66,32,66,32,83,39,32,67,39,66,32,64,32,85,32,64,32,64,32,-64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,67,39,32,67,-39,32,83,39,32,67,39,32,80,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,66,32,64,32,66,32,66,32,80,32,64,32,64,32,66,32,66,-32,95,49,52,53,32,95,49,51,50,50,32,64,32,64,32,64,32,67,39,-66,32,80,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,90,32,75,32,64,32,64,32,64,32,90,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,-64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,32,95,48,32,95,-49,51,50,49,32,64,32,64,32,64,32,66,32,66,32,95,49,51,52,49,-32,64,32,64,32,66,32,66,32,95,49,57,55,32,95,49,51,50,50,32,-64,32,95,49,51,51,52,32,35,53,57,32,64,32,64,32,64,32,64,32,-66,32,66,32,95,49,52,53,54,32,64,32,64,32,67,39,66,32,66,32,-67,39,66,32,64,32,66,32,66,32,95,49,54,56,32,64,32,64,32,67,-32,95,52,48,32,95,50,48,50,32,64,32,64,32,64,32,64,32,64,32,-66,32,67,32,95,52,48,32,95,55,50,32,64,32,64,32,64,32,95,51,-50,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,95,49,52,53,32,95,49,51,50,50,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,39,32,80,32,64,32,64,32,67,39,66,32,95,-53,57,32,64,32,95,54,48,32,95,50,55,57,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,49,52,53,55,32,64,10,-65,32,66,32,95,48,32,95,49,51,50,49,32,64,32,95,49,52,53,53,-32,64,32,64,32,66,32,85,32,64,32,66,32,66,32,66,32,95,48,32,-95,49,51,50,49,32,64,32,95,49,52,52,48,32,95,49,51,53,53,32,-79,32,35,54,49,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,83,39,32,83,39,32,66,32,64,32,64,32,64,-32,66,32,66,32,66,32,95,49,48,54,32,95,49,51,50,49,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,95,49,51,53,48,32,95,49,-51,53,49,32,95,49,50,51,50,32,64,32,64,32,64,32,64,32,64,32,-67,32,67,39,66,32,64,32,95,51,50,49,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,95,49,52,53,32,95,49,51,50,50,32,64,32,-64,32,64,32,64,32,67,39,66,32,66,39,32,80,32,64,32,64,32,95,-53,55,55,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,52,53,-54,32,64,10,65,32,83,39,32,95,49,51,51,53,32,64,32,95,57,52,-54,32,95,49,51,53,49,32,95,49,50,51,50,32,64,32,64,32,95,49,-51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,-64,32,80,32,64,32,95,49,51,56,48,32,64,32,64,32,95,49,51,52,-49,32,95,49,52,53,52,32,64,32,64,32,64,32,64,32,67,39,32,95,-49,51,32,95,49,51,50,50,32,64,32,64,32,66,32,95,49,56,32,95,-49,51,49,53,32,64,32,67,32,66,32,64,32,66,32,67,39,66,32,80,-32,64,32,64,32,67,32,95,49,53,51,32,64,32,64,32,64,32,64,32,-64,32,95,49,51,52,54,32,64,32,64,32,95,49,51,52,49,32,95,49,-52,53,52,32,64,32,64,32,64,32,95,49,51,32,95,49,51,50,50,32,-64,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,-51,49,53,32,64,32,66,32,67,39,66,32,80,32,64,32,64,32,67,39,-66,32,79,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,-64,32,95,49,52,49,54,32,64,32,64,32,95,48,32,95,49,51,50,49,-32,64,32,95,49,51,56,51,32,64,32,83,39,32,95,49,48,54,32,95,-49,51,50,49,32,64,32,64,32,66,32,95,49,51,53,48,32,95,49,51,-53,49,32,95,49,50,51,50,32,64,32,64,32,64,32,66,32,95,49,50,-51,32,64,32,95,54,52,52,32,64,32,64,32,64,32,95,49,52,53,32,-95,49,51,50,50,32,64,32,64,32,64,32,64,32,64,32,95,49,52,49,-54,32,64,32,64,32,58,49,52,53,53,32,64,10,65,32,95,49,51,51,-53,32,95,49,51,51,53,32,95,49,51,51,53,32,95,49,51,51,53,32,-95,49,51,51,53,32,95,48,32,95,49,51,50,49,32,64,32,95,49,51,-56,48,32,64,32,83,39,32,95,49,51,51,53,32,64,32,67,39,32,95,-49,56,32,95,49,51,49,53,32,64,32,64,32,95,54,53,48,32,64,32,-95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,53,53,32,79,-32,35,54,52,32,64,32,75,32,64,32,64,32,64,32,95,49,52,53,52,-32,64,32,64,32,64,32,66,32,95,49,52,53,32,95,49,51,50,50,32,-64,32,64,32,95,52,55,53,32,64,32,64,32,64,32,64,32,95,49,51,-32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,-32,83,39,32,80,32,64,32,95,52,55,53,32,64,32,66,32,95,57,57,-48,32,64,32,95,52,55,53,32,64,32,64,32,64,32,95,49,51,53,52,-32,64,32,64,32,95,49,52,48,56,32,95,49,51,53,49,32,95,49,50,-51,50,32,64,32,64,32,95,49,52,53,51,32,64,32,64,32,64,32,64,-32,95,49,51,56,57,32,64,32,64,32,95,49,56,32,95,49,51,49,53,-32,64,32,95,49,51,57,48,32,64,32,95,49,51,49,49,32,95,49,51,-50,50,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,-51,51,52,32,35,52,48,32,64,32,64,32,95,49,51,53,54,32,95,49,-52,49,57,32,64,32,95,49,51,51,52,32,35,52,52,32,64,32,64,32,-64,32,64,32,95,49,51,51,52,32,35,52,49,32,64,32,64,32,64,32,-64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,54,32,95,-52,55,55,32,64,32,95,52,55,56,32,64,32,64,32,95,49,51,49,49,-32,95,49,51,50,50,32,64,32,95,49,57,55,32,95,49,51,50,50,32,-64,32,95,49,51,51,52,32,35,57,49,32,64,32,64,32,95,49,51,53,-54,32,95,49,52,49,57,32,64,32,95,49,51,51,52,32,35,52,52,32,-64,32,64,32,64,32,64,32,95,49,51,51,52,32,35,57,51,32,64,32,-64,32,64,32,64,32,64,32,95,49,51,32,95,49,51,50,50,32,64,32,-95,49,56,32,95,49,51,49,53,32,64,32,95,57,56,57,32,64,32,95,-49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,51,52,32,35,52,-48,32,64,32,64,32,95,49,52,51,53,32,64,32,64,32,64,32,95,49,-51,49,49,32,95,49,51,50,50,32,64,32,95,49,57,55,32,95,49,51,-50,50,32,64,32,95,49,51,56,52,32,64,32,95,49,52,53,52,32,64,-32,64,32,95,49,51,51,52,32,35,52,49,32,64,32,64,32,64,32,64,-32,58,49,52,53,52,32,64,10,65,32,95,49,51,49,49,32,95,49,51,-50,50,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,-51,51,52,32,35,49,50,51,32,64,32,64,32,95,49,51,55,49,32,95,-49,51,51,53,32,95,48,32,95,49,51,50,49,32,64,32,95,49,51,32,-95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,-95,53,57,32,64,32,95,49,51,56,48,32,64,32,64,32,95,57,53,48,-32,95,49,51,53,49,32,95,49,50,51,50,32,64,32,64,32,95,49,52,-48,57,32,64,32,64,32,64,32,83,39,32,95,49,51,51,53,32,64,32,-67,39,32,95,49,56,32,95,49,51,49,53,32,64,32,64,32,95,56,50,-49,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,-53,53,32,79,32,35,54,49,32,64,32,75,32,64,32,64,32,64,32,95,-49,52,53,48,32,64,32,64,32,64,32,66,32,95,49,52,53,32,95,49,-51,50,50,32,64,32,64,32,95,49,52,53,49,32,64,32,64,32,64,32,-64,32,95,49,52,32,95,49,51,49,53,32,64,32,95,49,52,53,50,32,-64,32,95,49,51,53,53,32,102,114,111,109,85,84,70,56,32,34,46,46,-34,32,64,32,64,32,64,32,64,32,64,32,95,49,51,51,52,32,35,52,-52,32,64,32,64,32,64,32,64,32,95,49,51,51,52,32,35,49,50,53,-32,64,32,64,32,58,49,52,53,51,32,64,10,65,32,75,32,65,32,64,-32,58,49,52,53,50,32,64,10,65,32,90,32,66,32,90,32,64,32,85,-32,64,32,64,32,58,49,52,53,49,32,64,10,65,32,95,49,52,52,57,-32,58,49,52,53,48,32,64,10,65,32,95,49,51,56,50,32,95,49,51,-56,51,32,64,32,95,49,52,52,56,32,64,32,58,49,52,52,57,32,64,-10,65,32,95,49,51,51,53,32,95,49,57,55,32,95,49,51,50,50,32,-64,32,95,49,51,53,53,32,79,32,35,52,53,32,64,32,75,32,64,32,-64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,52,49,-48,32,64,32,95,49,52,52,55,32,64,32,64,32,64,32,95,49,52,52,-55,32,64,32,58,49,52,52,56,32,64,10,65,32,95,49,51,51,53,32,-95,49,51,51,53,32,95,49,51,51,53,32,95,49,51,51,53,32,95,49,-51,51,53,32,95,49,52,51,54,32,64,32,95,49,52,51,55,32,64,32,-64,32,95,49,52,52,50,32,64,32,64,32,95,49,52,52,51,32,64,32,-64,32,95,49,52,52,52,32,64,32,64,32,95,49,52,52,54,32,64,32,-58,49,52,52,55,32,64,10,65,32,95,49,51,32,95,49,51,50,50,32,-64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,57,56,52,32,64,-32,95,49,51,51,53,32,95,49,56,32,95,49,51,49,53,32,64,32,95,-52,57,32,64,32,95,49,52,52,53,32,64,32,64,32,95,49,52,32,95,-49,51,49,53,32,64,32,95,53,50,32,64,32,95,49,51,50,55,32,102,-114,111,109,85,84,70,56,32,34,100,111,34,32,64,32,64,32,64,32,64,-32,64,32,64,32,95,49,51,55,51,32,95,49,52,50,52,32,64,32,64,-32,58,49,52,52,54,32,64,10,65,32,95,48,32,95,49,51,50,49,32,-64,32,95,49,51,50,57,32,64,32,66,32,95,49,51,51,48,32,95,49,-50,51,50,32,64,32,102,114,111,109,85,84,70,56,32,34,81,117,97,108,-68,111,34,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,67,39,-66,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,95,53,-50,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,66,32,83,39,-32,66,32,64,32,85,32,95,53,50,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,90,32,64,32,64,32,64,32,66,32,66,32,66,32,90,-32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,67,32,95,52,48,-32,95,54,53,32,64,32,102,114,111,109,85,84,70,56,32,34,100,111,34,-32,64,32,64,32,64,32,95,53,50,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,95,52,57,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,95,49,51,51,49,32,64,32,95,50,57,54,32,79,-32,35,52,54,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,52,52,53,-32,64,10,65,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,51,-32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,-32,95,53,57,53,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,-32,95,49,51,50,55,32,102,114,111,109,85,84,70,56,32,34,105,102,34,-32,64,32,64,32,64,32,95,49,52,53,48,32,64,32,64,32,64,32,95,-49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,50,55,32,102,114,-111,109,85,84,70,56,32,34,116,104,101,110,34,32,64,32,64,32,64,32,-95,49,52,53,48,32,64,32,64,32,64,32,95,49,57,55,32,95,49,51,-50,50,32,64,32,95,49,51,50,55,32,102,114,111,109,85,84,70,56,32,-34,101,108,115,101,34,32,64,32,64,32,64,32,95,49,52,53,48,32,64,-32,64,32,58,49,52,52,52,32,64,10,65,32,95,49,51,32,95,49,51,-50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,53,55,-53,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,-50,55,32,102,114,111,109,85,84,70,56,32,34,108,101,116,34,32,64,32,-64,32,64,32,95,49,51,55,51,32,95,49,52,50,51,32,64,32,64,32,-64,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,-50,55,32,102,114,111,109,85,84,70,56,32,34,105,110,34,32,64,32,64,-32,64,32,95,49,52,53,48,32,64,32,64,32,58,49,52,52,51,32,64,-10,65,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,-49,51,49,53,32,64,32,95,54,52,49,32,64,32,95,49,57,55,32,95,-49,51,50,50,32,64,32,95,49,51,50,55,32,102,114,111,109,85,84,70,-56,32,34,99,97,115,101,34,32,64,32,64,32,64,32,95,49,52,53,48,-32,64,32,64,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,-95,49,51,50,55,32,102,114,111,109,85,84,70,56,32,34,111,102,34,32,-64,32,64,32,64,32,95,49,51,55,51,32,95,49,52,52,49,32,64,32,-64,32,64,32,58,49,52,52,50,32,64,10,65,32,95,49,51,32,95,49,-51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,80,32,-64,32,95,49,52,49,57,32,64,32,64,32,95,49,52,52,48,32,95,49,-51,56,52,32,64,32,64,32,58,49,52,52,49,32,64,10,65,32,67,39,-32,95,48,32,95,49,51,50,49,32,64,32,64,32,95,49,52,51,56,32,-64,32,66,32,95,48,32,95,49,51,50,49,32,64,32,95,49,52,51,57,-32,95,49,52,50,51,32,64,32,64,32,64,32,66,32,66,32,95,49,52,-53,32,95,49,51,50,50,32,64,32,64,32,64,32,95,53,55,56,32,64,-32,64,32,64,32,58,49,52,52,48,32,64,10,65,32,67,39,32,95,49,-51,51,53,32,64,32,66,32,95,49,57,55,32,95,49,51,50,50,32,64,-32,95,49,51,50,55,32,102,114,111,109,85,84,70,56,32,34,119,104,101,-114,101,34,32,64,32,64,32,64,32,64,32,95,49,51,55,51,32,64,32,-64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,95,53,56,32,64,-32,64,32,58,49,52,51,57,32,64,10,65,32,83,39,32,95,49,51,51,-53,32,64,32,66,32,95,49,51,52,50,32,64,32,66,32,95,49,51,32,-95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,-80,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,-53,53,32,79,32,35,49,50,52,32,64,32,75,32,64,32,64,32,64,32,-95,49,51,53,54,32,95,49,52,50,52,32,64,32,95,49,51,51,52,32,-35,52,52,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,95,49,-57,55,32,95,49,51,50,50,32,64,32,64,32,95,49,52,53,48,32,64,-32,64,32,64,32,64,32,66,32,95,49,56,32,95,49,51,49,53,32,64,-32,67,39,32,79,32,64,32,80,32,95,53,56,32,64,32,64,32,75,32,-64,32,64,32,64,32,67,32,95,49,57,55,32,95,49,51,50,50,32,64,-32,64,32,95,49,52,53,48,32,64,32,64,32,64,32,58,49,52,51,56,-32,64,10,65,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,56,-32,95,49,51,49,53,32,64,32,95,56,49,54,32,64,32,95,49,57,55,-32,95,49,51,50,50,32,64,32,95,49,51,53,53,32,79,32,35,57,50,-32,64,32,75,32,64,32,64,32,64,32,95,49,51,52,50,32,95,49,52,-53,52,32,64,32,64,32,64,32,64,32,95,49,57,55,32,95,49,51,50,-50,32,64,32,95,49,51,56,52,32,64,32,95,49,52,53,48,32,64,32,-64,32,58,49,52,51,55,32,64,10,65,32,95,48,32,95,49,51,50,49,-32,64,32,95,49,52,51,53,32,64,32,66,32,95,48,32,95,49,51,50,-49,32,64,32,95,49,51,52,49,32,95,49,52,51,53,32,64,32,64,32,-64,32,66,32,66,32,95,48,32,95,49,51,50,49,32,64,32,95,49,51,-55,50,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,53,-53,32,102,114,111,109,85,84,70,56,32,34,58,58,34,32,64,32,64,32,-64,32,95,49,51,57,53,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,67,39,32,66,32,95,50,54,32,95,49,52,53,32,95,49,51,50,-50,32,64,32,64,32,64,32,64,32,67,32,83,32,95,51,56,52,32,64,-32,95,56,49,55,32,64,32,64,32,64,32,64,32,64,32,95,52,51,56,-32,95,52,55,52,32,64,32,64,32,64,32,64,32,64,32,58,49,52,51,-54,32,64,10,65,32,95,48,32,95,49,51,50,49,32,64,32,95,49,52,-51,52,32,64,32,66,32,95,48,32,95,49,51,50,49,32,64,32,95,57,-53,48,32,95,49,51,53,49,32,95,49,50,51,50,32,64,32,64,32,95,-49,52,53,51,32,64,32,64,32,64,32,66,32,66,32,95,48,32,95,49,-51,50,49,32,64,32,95,57,53,48,32,95,49,51,53,49,32,95,49,50,-51,50,32,64,32,64,32,95,49,52,48,57,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,95,50,54,32,95,49,52,53,32,95,49,51,50,-50,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,67,32,-83,39,32,83,39,32,64,32,95,51,48,49,32,64,32,66,32,95,52,55,-52,32,64,32,95,49,52,51,50,32,64,32,64,32,64,32,73,32,64,32,-64,32,64,32,64,32,95,52,51,56,32,95,57,57,48,32,64,32,64,32,-64,32,64,32,64,32,64,32,58,49,52,51,53,32,64,10,65,32,95,49,-51,51,53,32,95,49,51,51,53,32,95,49,51,51,53,32,95,49,51,51,-53,32,95,49,51,51,53,32,95,49,51,51,53,32,95,49,51,51,53,32,-95,49,51,51,53,32,95,49,56,32,95,49,51,49,53,32,64,32,95,52,-55,53,32,64,32,95,49,51,54,54,32,64,32,64,32,95,49,56,32,95,-49,51,49,53,32,64,32,95,52,55,53,32,64,32,95,49,51,53,52,32,-64,32,64,32,64,32,95,49,51,56,57,32,64,32,64,32,95,49,56,32,-95,49,51,49,53,32,64,32,95,49,51,57,48,32,64,32,95,49,51,49,-49,32,95,49,51,50,50,32,64,32,95,49,57,55,32,95,49,51,50,50,-32,64,32,95,49,51,51,52,32,35,52,48,32,64,32,64,32,95,49,51,-53,54,32,95,49,52,53,48,32,64,32,95,49,51,51,52,32,35,52,52,-32,64,32,64,32,64,32,64,32,95,49,51,51,52,32,35,52,49,32,64,-32,64,32,64,32,64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,-32,95,52,55,55,32,64,32,95,49,51,49,49,32,95,49,51,50,50,32,-64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,51,52,-32,35,57,49,32,64,32,64,32,95,49,52,50,55,32,64,32,64,32,95,-49,51,51,52,32,35,57,51,32,64,32,64,32,64,32,64,32,64,32,95,-49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,-32,64,32,95,49,52,50,56,32,64,32,95,49,57,55,32,95,49,51,50,-50,32,64,32,95,49,51,51,52,32,35,52,48,32,64,32,64,32,95,49,-52,52,55,32,64,32,64,32,64,32,95,49,51,49,49,32,95,49,51,50,-50,32,64,32,95,49,52,50,57,32,64,32,95,49,51,51,52,32,35,52,-49,32,64,32,64,32,64,32,64,32,64,32,95,49,51,32,95,49,51,50,-50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,52,51,-48,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,-51,52,32,35,52,48,32,64,32,64,32,95,49,52,51,49,32,64,32,64,-32,64,32,95,49,51,49,49,32,95,49,51,50,50,32,64,32,95,49,52,-52,55,32,64,32,95,49,51,51,52,32,35,52,49,32,64,32,64,32,64,-32,64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,52,-51,50,32,64,32,95,49,51,49,49,32,95,49,51,50,50,32,64,32,95,-49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,51,52,32,35,52,-48,32,64,32,64,32,95,49,51,52,50,32,95,49,52,48,57,32,64,32,-64,32,64,32,95,49,51,51,52,32,35,52,49,32,64,32,64,32,64,32,-64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,54,32,95,-54,54,52,32,95,53,49,57,32,64,32,64,32,95,53,51,49,32,64,32,-64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,50,55,-32,102,114,111,109,85,84,70,56,32,34,112,114,105,109,105,116,105,118,101,-34,32,64,32,64,32,64,32,95,49,52,51,51,32,64,32,64,32,64,32,-58,49,52,51,52,32,64,10,65,32,95,49,51,51,48,32,95,49,50,51,-50,32,64,32,102,114,111,109,85,84,70,56,32,34,115,116,114,105,110,103,-34,32,64,32,64,32,85,32,67,39,66,32,67,32,67,32,61,61,32,64,-32,35,49,32,64,32,64,32,95,53,50,32,64,32,64,32,85,32,75,32,-95,52,57,32,64,32,64,32,64,32,64,32,64,32,58,49,52,51,51,32,-64,10,65,32,66,32,80,32,35,49,54,32,64,32,64,32,85,32,64,32,-58,49,52,51,50,32,64,10,65,32,95,48,32,95,49,51,50,49,32,64,-32,95,49,52,50,57,32,64,32,83,39,32,95,49,48,54,32,95,49,51,-50,49,32,64,32,64,32,66,32,95,49,51,53,48,32,95,49,51,53,49,-32,95,49,50,51,50,32,64,32,64,32,64,32,67,32,95,54,55,32,95,-50,48,50,32,64,32,64,32,95,53,50,48,32,79,32,35,52,53,32,64,-32,75,32,64,32,64,32,64,32,64,32,64,32,95,49,52,53,32,95,49,-51,50,50,32,64,32,64,32,64,32,58,49,52,51,49,32,64,10,65,32,-66,32,66,32,80,32,35,49,49,32,64,32,64,32,64,32,80,32,64,32,-58,49,52,51,48,32,64,10,65,32,95,49,51,51,53,32,95,49,51,56,-51,32,64,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,51,32,-95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,-95,49,51,51,49,32,64,32,95,49,51,50,57,32,64,32,64,32,95,49,-51,52,48,32,64,32,64,32,95,49,52,32,95,49,51,49,53,32,64,32,-79,32,35,52,52,32,64,32,75,32,64,32,64,32,95,49,51,51,52,32,-35,52,52,32,64,32,64,32,64,32,64,32,58,49,52,50,57,32,64,10,-65,32,66,32,66,32,80,32,35,49,48,32,64,32,64,32,64,32,80,32,-64,32,58,49,52,50,56,32,64,10,65,32,95,48,32,95,49,51,50,49,-32,64,32,95,49,52,53,48,32,64,32,83,39,32,95,49,51,51,53,32,-64,32,83,39,32,95,49,51,51,53,32,64,32,83,39,32,95,49,51,51,-53,32,64,32,83,39,32,95,49,51,51,53,32,64,32,66,32,95,49,57,-55,32,95,49,51,50,50,32,64,32,95,49,51,51,52,32,35,52,52,32,-64,32,64,32,64,32,66,32,95,48,32,95,49,51,50,49,32,64,32,95,-49,52,53,48,32,64,32,64,32,83,39,32,83,39,32,95,49,51,51,53,-32,64,32,64,32,83,39,32,83,39,32,95,49,51,51,53,32,64,32,64,-32,83,39,32,83,39,32,95,49,51,51,53,32,64,32,64,32,67,39,32,-67,39,32,95,49,56,32,95,49,51,49,53,32,64,32,64,32,64,32,66,-32,66,32,66,32,95,52,55,56,32,64,32,64,32,64,32,67,39,66,32,-66,39,32,95,53,57,32,64,32,64,32,95,53,57,32,64,32,64,32,64,-32,95,49,51,52,50,32,95,49,57,55,32,95,49,51,50,50,32,64,32,-95,49,51,51,52,32,35,52,52,32,64,32,64,32,95,49,52,53,48,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,32,95,49,56,32,95,49,-51,49,53,32,64,32,64,32,64,32,95,49,52,49,49,32,64,32,95,49,-57,55,32,95,49,51,50,50,32,64,32,95,49,51,53,53,32,102,114,111,-109,85,84,70,56,32,34,46,46,34,32,64,32,64,32,64,32,95,49,52,-53,48,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,95,49,52,-32,95,49,51,49,53,32,64,32,64,32,64,32,95,49,52,49,50,32,64,-32,95,49,51,53,53,32,102,114,111,109,85,84,70,56,32,34,46,46,34,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,95,49,52,53,32,-95,49,51,50,50,32,64,32,64,32,64,32,66,32,66,32,95,52,55,56,-32,64,32,64,32,67,39,66,32,79,32,64,32,67,32,79,32,64,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-95,49,56,32,95,49,51,49,53,32,64,32,64,32,95,53,57,52,32,64,-32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,53,53,32,-79,32,35,49,50,52,32,64,32,75,32,64,32,64,32,64,32,95,49,51,-53,54,32,95,49,52,50,52,32,64,32,95,49,51,51,52,32,35,52,52,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,95,49,56,32,-95,49,51,49,53,32,64,32,64,32,95,49,52,50,53,32,64,32,95,49,-57,55,32,95,49,51,50,50,32,64,32,95,49,51,53,53,32,102,114,111,-109,85,84,70,56,32,34,46,46,34,32,64,32,64,32,64,32,95,49,52,-53,48,32,64,32,64,32,64,32,64,32,67,39,32,95,49,52,32,95,49,-51,49,53,32,64,32,64,32,95,49,52,50,54,32,64,32,95,49,51,53,-53,32,102,114,111,109,85,84,70,56,32,34,46,46,34,32,64,32,64,32,-64,32,64,32,64,32,66,32,95,49,52,53,32,95,49,51,50,50,32,64,-32,64,32,66,32,95,52,55,56,32,64,32,67,32,79,32,64,32,75,32,-64,32,64,32,64,32,64,32,64,32,58,49,52,50,55,32,64,10,65,32,-66,32,80,32,35,50,32,64,32,64,32,85,32,64,32,58,49,52,50,54,-32,64,10,65,32,66,32,66,32,80,32,35,51,32,64,32,64,32,64,32,-80,32,64,32,58,49,52,50,53,32,64,10,65,32,95,49,51,51,53,32,-95,49,51,51,53,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,-56,32,95,49,51,49,53,32,64,32,95,49,48,51,50,32,64,32,95,49,-51,49,49,32,95,49,51,50,50,32,64,32,95,49,52,49,57,32,64,32,-95,49,52,50,48,32,64,32,64,32,64,32,95,49,52,53,48,32,64,32,-64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,48,52,54,32,-64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,50,55,-32,102,114,111,109,85,84,70,56,32,34,108,101,116,34,32,64,32,64,32,-64,32,95,49,51,55,51,32,95,49,52,50,51,32,64,32,64,32,64,32,-64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,48,51,-51,32,64,32,95,49,52,53,48,32,64,32,64,32,58,49,52,50,52,32,-64,10,65,32,95,49,51,51,53,32,95,49,51,32,95,49,51,50,50,32,-64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,48,53,54,32,-64,32,95,49,51,49,49,32,95,49,51,50,50,32,64,32,95,49,52,50,-49,32,64,32,95,49,51,53,53,32,79,32,35,54,49,32,64,32,75,32,-64,32,64,32,64,32,64,32,64,32,95,49,52,53,48,32,64,32,64,32,-95,49,52,50,50,32,64,32,58,49,52,50,51,32,64,10,65,32,95,49,-51,51,53,32,95,49,56,32,95,49,51,49,53,32,64,32,95,54,50,56,-32,95,53,55,54,32,64,32,64,32,95,49,52,53,55,32,64,32,64,32,-95,49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,-53,32,64,32,95,49,49,50,48,32,64,32,95,49,51,49,49,32,95,49,-51,50,50,32,64,32,95,49,51,56,48,32,64,32,95,49,51,53,53,32,-102,114,111,109,85,84,70,56,32,34,58,58,34,32,64,32,64,32,64,32,-64,32,64,32,95,49,51,57,53,32,64,32,64,32,58,49,52,50,50,32,-64,10,65,32,95,48,32,95,49,51,50,49,32,64,32,95,49,52,49,57,-32,64,32,83,39,32,95,49,48,54,32,95,49,51,50,49,32,64,32,64,-32,66,32,95,49,51,53,48,32,95,49,51,53,49,32,95,49,50,51,50,-32,64,32,64,32,64,32,95,49,52,49,53,32,64,32,64,32,95,49,52,-53,32,95,49,51,50,50,32,64,32,64,32,64,32,58,49,52,50,49,32,-64,10,65,32,95,49,51,51,53,32,95,49,51,53,53,32,102,114,111,109,-85,84,70,56,32,34,60,45,34,32,64,32,64,32,64,32,95,49,51,53,-53,32,79,32,35,56,53,57,50,32,64,32,75,32,64,32,64,32,64,32,-58,49,52,50,48,32,64,10,65,32,95,49,52,49,56,32,58,49,52,49,-57,32,64,10,65,32,95,49,51,56,50,32,95,49,52,49,51,32,64,32,-95,49,52,49,55,32,64,32,58,49,52,49,56,32,64,10,65,32,95,49,-51,51,53,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,-53,53,32,79,32,35,52,53,32,64,32,75,32,64,32,64,32,64,32,95,-49,56,32,95,49,51,49,53,32,64,32,95,49,52,49,48,32,64,32,95,-49,52,49,52,32,64,32,64,32,64,32,95,49,52,49,54,32,64,32,58,-49,52,49,55,32,64,10,65,32,95,48,32,95,49,51,50,49,32,64,32,-95,49,52,53,52,32,64,32,66,32,95,48,32,95,49,51,50,49,32,64,-32,95,49,51,52,49,32,95,49,52,53,52,32,64,32,64,32,64,32,83,-39,32,83,39,32,95,49,48,54,32,95,49,51,50,49,32,64,32,64,32,-64,32,66,32,66,32,95,49,51,53,48,32,95,49,51,53,49,32,95,49,-50,51,50,32,64,32,64,32,64,32,64,32,66,32,67,39,32,95,53,54,-32,64,32,95,51,48,49,32,64,32,64,32,95,49,52,49,53,32,64,32,-64,32,64,32,66,32,66,32,95,50,54,32,95,49,52,53,32,95,49,51,-50,50,32,64,32,64,32,64,32,64,32,95,52,51,56,32,95,52,55,52,-32,64,32,64,32,64,32,64,32,64,32,58,49,52,49,54,32,64,10,65,-32,85,32,67,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,-49,32,64,32,64,32,83,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,49,55,32,64,32,64,32,67,39,66,32,67,32,67,32,61,61,-32,64,32,35,49,55,32,64,32,64,32,95,52,51,32,64,32,64,32,85,-32,75,32,95,49,52,49,53,32,64,32,64,32,64,32,64,32,64,32,67,-39,66,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,32,95,-52,51,32,64,32,64,32,85,32,90,32,95,49,52,49,53,32,64,32,64,-32,64,32,64,32,64,32,64,32,85,32,95,54,52,52,32,64,32,64,32,-64,32,58,49,52,49,53,32,64,10,65,32,95,48,32,95,49,51,50,49,-32,64,32,95,49,51,56,57,32,64,32,83,39,32,95,49,48,54,32,95,-49,51,50,49,32,64,32,64,32,66,32,95,50,54,32,95,49,51,53,48,-32,95,49,51,53,49,32,95,49,50,51,50,32,64,32,64,32,64,32,64,-32,85,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,52,32,64,-32,64,32,95,52,52,32,64,32,64,32,85,32,75,32,85,32,83,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,-67,39,66,32,67,32,67,32,61,61,32,64,32,35,51,32,64,32,64,32,-95,52,52,32,64,32,64,32,85,32,75,32,95,52,51,32,64,32,64,32,-64,32,64,32,64,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,-49,32,64,32,64,32,95,52,52,32,64,32,64,32,85,32,75,32,95,52,-51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,95,49,49,32,95,49,51,50,49,32,64,32,64,32,64,32,-58,49,52,49,52,32,64,10,65,32,95,49,51,51,53,32,95,49,51,53,-51,32,64,32,95,49,51,49,49,32,95,49,51,50,50,32,64,32,95,49,-57,55,32,95,49,51,50,50,32,64,32,95,49,51,51,52,32,35,57,54,-32,64,32,64,32,95,49,51,52,52,32,64,32,64,32,95,49,51,51,52,-32,35,57,54,32,64,32,64,32,64,32,58,49,52,49,51,32,64,10,65,-32,66,32,66,32,80,32,35,52,32,64,32,64,32,64,32,80,32,64,32,-58,49,52,49,50,32,64,10,65,32,66,32,66,32,66,32,80,32,35,53,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,-32,64,32,64,32,58,49,52,49,49,32,64,10,65,32,66,32,80,32,35,-49,52,32,64,32,64,32,85,32,64,32,58,49,52,49,48,32,64,10,65,-32,95,48,32,95,49,51,50,49,32,64,32,95,49,51,50,57,32,64,32,-66,32,95,49,51,51,48,32,95,49,50,51,50,32,64,32,102,114,111,109,-85,84,70,56,32,34,115,101,108,101,99,116,34,32,64,32,64,32,64,32,-66,32,85,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,-32,35,57,32,64,32,64,32,95,53,50,32,64,32,64,32,64,32,66,32,-85,32,64,32,66,32,66,32,66,32,95,52,57,32,64,32,64,32,64,32,-95,49,51,51,49,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,-52,48,57,32,64,10,65,32,83,32,83,39,32,67,39,32,64,32,95,57,-52,54,32,64,32,67,39,32,95,49,56,32,64,32,66,32,95,49,53,32,-64,32,95,57,52,57,32,64,32,64,32,95,52,57,32,64,32,64,32,64,-32,67,39,32,95,49,52,53,32,64,32,95,57,52,57,32,64,32,95,53,-50,32,64,32,64,32,58,49,52,48,56,32,64,10,65,32,95,49,51,51,-53,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,50,55,-32,102,114,111,109,85,84,70,56,32,34,100,101,114,105,118,105,110,103,34,-32,64,32,64,32,64,32,95,49,51,51,53,32,95,49,51,52,54,32,95,-49,51,55,49,32,95,49,51,57,53,32,64,32,95,49,51,51,52,32,35,-52,52,32,64,32,64,32,64,32,64,32,95,49,56,32,95,49,51,49,53,-32,64,32,67,32,95,53,57,32,64,32,95,53,56,32,64,32,64,32,95,-49,51,57,53,32,64,32,64,32,64,32,64,32,95,49,52,53,32,95,49,-51,50,50,32,64,32,95,53,56,32,64,32,64,32,58,49,52,48,55,32,-64,10,65,32,95,49,51,51,53,32,95,49,51,32,95,49,51,50,50,32,-64,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,51,32,95,49,-51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,-49,50,54,32,64,32,95,49,51,56,49,32,64,32,64,32,95,49,51,57,-57,32,64,32,64,32,95,49,52,48,49,32,64,32,64,32,95,49,52,48,-53,32,64,32,64,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,-51,32,95,49,51,50,50,32,64,32,95,49,51,32,95,49,51,50,50,32,-64,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,-51,49,53,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,67,-39,66,32,64,32,64,32,95,49,49,50,54,32,64,32,64,32,66,32,66,-32,95,50,57,49,32,64,32,64,32,67,39,66,32,79,32,64,32,67,32,-79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,95,49,51,56,-49,32,64,32,64,32,95,49,51,57,57,32,64,32,64,32,95,49,52,48,-51,32,64,32,64,32,95,49,52,48,48,32,64,32,64,32,95,49,52,48,-51,32,64,32,64,32,58,49,52,48,54,32,64,10,65,32,95,57,52,54,-32,95,49,51,53,49,32,95,49,50,51,50,32,64,32,64,32,95,49,56,-32,95,49,51,49,53,32,64,32,95,50,57,49,32,64,32,95,49,51,52,-49,32,95,49,52,48,51,32,64,32,64,32,64,32,95,49,56,32,95,49,-51,49,53,32,64,32,95,50,57,48,32,64,32,95,49,57,55,32,95,49,-51,50,50,32,64,32,95,49,51,51,52,32,35,49,50,51,32,64,32,64,-32,95,49,51,49,49,32,95,49,51,50,50,32,64,32,95,49,56,32,95,-49,51,49,53,32,64,32,95,53,48,55,32,85,32,67,39,32,95,54,48,-32,64,32,67,32,80,32,64,32,64,32,64,32,64,32,64,32,95,49,51,-55,49,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,-49,51,49,53,32,64,32,80,32,64,32,95,49,51,49,49,32,95,49,51,-50,50,32,64,32,95,49,51,53,54,32,95,49,51,56,48,32,64,32,95,-49,51,51,52,32,35,52,52,32,64,32,64,32,64,32,95,49,51,53,53,-32,102,114,111,109,85,84,70,56,32,34,58,58,34,32,64,32,64,32,64,-32,64,32,64,32,95,49,52,48,52,32,64,32,64,32,95,49,51,51,52,-32,35,52,52,32,64,32,64,32,64,32,64,32,95,49,51,51,52,32,35,-49,50,53,32,64,32,64,32,64,32,64,32,64,32,58,49,52,48,53,32,-64,10,65,32,95,49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,-95,49,51,49,53,32,64,32,80,32,64,32,95,49,52,48,50,32,64,32,-64,32,95,49,51,57,53,32,64,32,58,49,52,48,52,32,64,10,65,32,-95,49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,-53,32,64,32,80,32,64,32,95,49,52,48,50,32,64,32,64,32,95,49,-51,57,49,32,64,32,58,49,52,48,51,32,64,10,65,32,95,49,51,51,-53,32,95,49,52,32,95,49,51,49,53,32,64,32,95,52,51,32,64,32,-95,49,51,53,53,32,79,32,35,51,51,32,64,32,75,32,64,32,64,32,-64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,95,52,52,-32,64,32,64,32,58,49,52,48,50,32,64,10,65,32,95,49,51,51,53,-32,95,49,51,55,53,32,64,32,95,49,51,52,54,32,95,49,52,48,48,-32,64,32,64,32,58,49,52,48,49,32,64,10,65,32,95,48,32,95,49,-51,50,49,32,64,32,95,49,51,55,54,32,64,32,83,39,32,95,49,48,-54,32,95,49,51,50,49,32,64,32,64,32,66,32,95,49,51,53,48,32,-95,49,51,53,49,32,95,49,50,51,50,32,64,32,64,32,64,32,95,49,-51,53,50,32,64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,-32,64,32,64,32,58,49,52,48,48,32,64,10,65,32,95,49,51,51,53,-32,95,49,51,49,49,32,95,49,51,50,50,32,64,32,95,49,51,51,53,-32,95,49,51,52,54,32,95,49,51,52,49,32,95,49,51,57,53,32,64,-32,64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,67,32,95,-53,57,32,64,32,95,53,56,32,64,32,64,32,95,49,51,57,50,32,64,-32,64,32,64,32,95,49,51,56,53,32,64,32,64,32,95,49,52,53,32,-95,49,51,50,50,32,64,32,95,53,56,32,64,32,64,32,58,49,51,57,-57,32,64,10,65,32,95,49,51,51,53,32,95,49,51,32,95,49,51,50,-50,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,80,32,64,32,-95,49,51,55,55,32,64,32,64,32,95,49,51,52,49,32,95,49,51,57,-55,32,64,32,64,32,64,32,95,49,51,32,95,49,51,50,50,32,64,32,-95,49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,-53,32,64,32,66,32,67,39,66,32,80,32,64,32,64,32,67,39,66,32,-79,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,-95,49,51,57,55,32,64,32,64,32,95,49,51,55,54,32,64,32,64,32,-95,49,51,57,55,32,64,32,64,32,58,49,51,57,56,32,64,10,65,32,-95,49,51,51,53,32,95,49,56,32,95,49,51,49,53,32,64,32,67,32,-95,56,49,49,32,64,32,95,52,55,53,32,95,53,50,49,32,64,32,64,-32,64,32,95,49,51,56,48,32,64,32,64,32,95,49,51,52,54,32,95,-49,51,32,95,49,51,50,50,32,64,32,95,49,56,32,95,49,51,49,53,-32,64,32,95,56,49,49,32,64,32,95,49,51,56,48,32,64,32,64,32,-95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,53,53,32,102,-114,111,109,85,84,70,56,32,34,58,58,34,32,64,32,64,32,64,32,95,-49,51,57,54,32,64,32,64,32,64,32,64,32,58,49,51,57,55,32,64,-10,65,32,95,49,51,57,53,32,58,49,51,57,54,32,64,10,65,32,95,-48,32,95,49,51,50,49,32,64,32,95,49,51,56,49,32,64,32,66,32,-95,48,32,95,49,51,50,49,32,64,32,95,49,51,57,52,32,64,32,64,-32,66,32,66,32,95,50,54,32,95,49,52,53,32,95,49,51,50,50,32,-64,32,64,32,64,32,64,32,67,32,83,39,32,83,39,32,64,32,95,51,-48,49,32,64,32,95,56,49,51,32,64,32,64,32,73,32,64,32,64,32,-64,32,64,32,58,49,51,57,53,32,64,10,65,32,95,49,51,56,50,32,-95,49,51,56,54,32,64,32,95,49,51,57,51,32,64,32,58,49,51,57,-52,32,64,10,65,32,95,49,51,57,50,32,58,49,51,57,51,32,64,10,-65,32,95,48,32,95,49,51,50,49,32,64,32,95,49,51,57,49,32,64,-32,66,32,95,48,32,95,49,51,50,49,32,64,32,95,49,51,52,49,32,-95,49,51,57,49,32,64,32,64,32,64,32,66,32,66,32,95,48,32,95,-49,51,50,49,32,64,32,95,49,51,55,50,32,95,49,57,55,32,95,49,-51,50,50,32,64,32,95,49,51,53,53,32,102,114,111,109,85,84,70,56,-32,34,58,58,34,32,64,32,64,32,64,32,95,49,51,57,53,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,66,32,95,50,54,-32,95,49,52,53,32,95,49,51,50,50,32,64,32,64,32,64,32,64,32,-67,32,83,32,95,51,56,52,32,64,32,95,56,49,55,32,64,32,64,32,-64,32,64,32,64,32,95,52,51,56,32,95,52,55,52,32,64,32,64,32,-64,32,64,32,64,32,58,49,51,57,50,32,64,10,65,32,95,49,51,51,-53,32,95,49,51,51,53,32,95,49,51,51,53,32,95,49,51,51,53,32,-95,49,56,32,95,49,51,49,53,32,64,32,95,52,55,53,32,64,32,95,-49,51,54,54,32,64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,-32,95,52,55,53,32,64,32,95,49,51,53,52,32,64,32,64,32,64,32,-95,49,51,56,57,32,64,32,64,32,95,49,56,32,95,49,51,49,53,32,-64,32,95,49,51,57,48,32,64,32,95,49,51,49,49,32,95,49,51,50,-50,32,64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,-51,52,32,35,52,48,32,64,32,64,32,95,49,51,53,54,32,95,49,51,-57,53,32,64,32,95,49,51,51,52,32,35,52,52,32,64,32,64,32,64,-32,64,32,95,49,51,51,52,32,35,52,49,32,64,32,64,32,64,32,64,-32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,54,32,95,52,-55,55,32,64,32,95,54,32,95,52,55,56,32,64,32,67,32,95,53,57,-32,64,32,95,53,56,32,64,32,64,32,64,32,64,32,95,49,51,49,49,-32,95,49,51,50,50,32,64,32,95,49,57,55,32,95,49,51,50,50,32,-64,32,95,49,51,51,52,32,35,57,49,32,64,32,64,32,95,49,51,57,-53,32,64,32,64,32,95,49,51,51,52,32,35,57,51,32,64,32,64,32,-64,32,64,32,58,49,51,57,49,32,64,10,65,32,83,32,85,32,95,50,-49,57,32,102,114,111,109,85,84,70,56,32,34,101,84,117,112,108,101,34,-32,64,32,64,32,64,32,64,32,66,32,67,32,80,32,64,32,64,32,90,-32,90,32,95,52,55,57,32,64,32,64,32,64,32,64,32,58,49,51,57,-48,32,64,10,65,32,95,48,32,95,49,51,50,49,32,64,32,95,49,51,-50,57,32,64,32,66,32,95,49,51,51,48,32,95,49,50,51,50,32,64,-32,102,114,111,109,85,84,70,56,32,34,108,105,116,101,114,97,108,34,32,-64,32,64,32,64,32,66,32,85,32,64,32,83,39,32,83,32,64,32,66,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,51,32,64,32,-64,32,64,32,83,39,32,67,32,64,32,66,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,66,32,67,39,-66,32,67,32,67,32,61,61,32,64,32,35,52,32,64,32,64,32,95,53,-50,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,67,32,66,32,-64,32,64,32,66,32,66,32,66,32,66,32,95,52,57,32,64,32,64,32,-64,32,64,32,67,39,66,32,66,32,67,39,32,67,39,32,95,54,54,52,-32,64,32,64,32,64,32,95,53,49,56,32,64,32,64,32,95,49,51,56,-55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,-64,32,66,32,67,32,66,32,64,32,64,32,66,32,66,32,66,32,66,32,-95,52,57,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,-32,67,39,32,95,54,54,52,32,64,32,64,32,64,32,95,53,49,56,32,-64,32,64,32,95,49,51,56,56,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,83,39,32,83,32,64,32,66,32,67,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,50,32,64,32,64,32,64,32,66,32,85,32,-64,32,66,32,67,32,66,32,64,32,64,32,66,32,66,32,66,32,66,32,-95,52,57,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,-32,67,39,32,95,54,54,52,32,64,32,64,32,64,32,95,53,49,56,32,-64,32,64,32,95,54,54,53,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,49,32,64,-32,64,32,95,53,50,32,64,32,64,32,64,32,66,32,85,32,64,32,66,-32,67,32,66,32,64,32,64,32,66,32,66,32,66,32,66,32,95,52,57,-32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,67,39,-32,95,54,54,52,32,64,32,64,32,64,32,95,53,49,56,32,64,32,64,-32,95,55,49,54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,49,51,56,57,32,64,10,65,32,66,32,80,32,-35,49,32,64,32,64,32,85,32,64,32,58,49,51,56,56,32,64,10,65,-32,66,32,80,32,35,51,32,64,32,64,32,85,32,64,32,58,49,51,56,-55,32,64,10,65,32,95,49,51,51,53,32,95,49,51,51,53,32,95,49,-51,56,51,32,64,32,95,49,52,32,95,49,51,49,53,32,64,32,95,53,-50,48,32,102,114,111,109,85,84,70,56,32,34,45,62,34,32,64,32,64,-32,64,32,95,49,51,56,52,32,64,32,64,32,64,32,95,49,52,32,95,-49,51,49,53,32,64,32,95,53,50,48,32,102,114,111,109,85,84,70,56,-32,34,61,62,34,32,64,32,64,32,64,32,95,49,51,56,53,32,64,32,-64,32,58,49,51,56,54,32,64,10,65,32,95,49,51,51,53,32,95,49,-51,53,53,32,102,114,111,109,85,84,70,56,32,34,61,62,34,32,64,32,-64,32,64,32,95,49,51,53,53,32,79,32,35,56,54,53,56,32,64,32,-75,32,64,32,64,32,64,32,58,49,51,56,53,32,64,10,65,32,95,49,-51,51,53,32,95,49,51,53,53,32,102,114,111,109,85,84,70,56,32,34,-45,62,34,32,64,32,64,32,64,32,95,49,51,53,53,32,79,32,35,56,-53,57,52,32,64,32,75,32,64,32,64,32,64,32,58,49,51,56,52,32,-64,10,65,32,95,49,51,51,53,32,95,49,51,52,57,32,64,32,95,49,-51,49,49,32,95,49,51,50,50,32,64,32,95,49,57,55,32,95,49,51,-50,50,32,64,32,95,49,51,51,52,32,35,57,54,32,64,32,64,32,95,-49,51,53,55,32,64,32,64,32,95,49,51,51,52,32,35,57,54,32,64,-32,64,32,64,32,58,49,51,56,51,32,64,10,65,32,66,32,83,39,32,-95,49,51,32,95,49,51,50,50,32,64,32,64,32,95,49,56,32,95,49,-51,49,53,32,64,32,83,39,32,83,32,64,32,67,39,32,67,32,64,32,-66,32,67,32,83,39,32,64,32,64,32,83,39,32,67,32,64,32,85,32,-67,39,66,32,67,32,67,32,61,61,32,64,32,35,49,52,32,64,32,64,-32,95,52,51,32,64,32,64,32,85,32,75,32,95,52,52,32,64,32,64,-32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,90,32,75,32,64,-32,64,32,64,32,95,56,52,51,32,64,32,64,32,64,32,64,32,66,32,-66,32,95,49,51,52,49,32,64,32,64,32,66,32,95,49,51,32,95,49,-51,50,50,32,64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,-80,32,64,32,64,32,64,32,64,32,58,49,51,56,50,32,64,10,65,32,-95,49,51,51,53,32,95,49,51,49,49,32,95,49,51,50,50,32,64,32,-95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,51,53,32,95,-49,51,50,55,32,102,114,111,109,85,84,70,56,32,34,102,111,114,97,108,-108,34,32,64,32,64,32,64,32,95,49,51,53,53,32,79,32,35,56,55,-48,52,32,64,32,75,32,64,32,64,32,64,32,64,32,95,49,51,52,50,-32,95,49,51,57,55,32,64,32,64,32,64,32,95,49,51,53,53,32,79,-32,35,52,54,32,64,32,75,32,64,32,64,32,64,32,64,32,95,49,52,-53,32,95,49,51,50,50,32,64,32,95,53,56,32,64,32,64,32,58,49,-51,56,49,32,64,10,65,32,95,49,51,51,53,32,95,49,51,55,56,32,-64,32,95,49,51,52,54,32,95,49,51,55,57,32,64,32,64,32,58,49,-51,56,48,32,64,10,65,32,95,48,32,95,49,51,50,49,32,64,32,95,-49,51,55,54,32,64,32,83,39,32,95,49,48,54,32,95,49,51,50,49,-32,64,32,64,32,66,32,95,49,51,53,48,32,95,49,51,53,49,32,95,-49,50,51,50,32,64,32,64,32,64,32,66,32,95,49,50,51,32,64,32,-95,49,51,53,50,32,64,32,64,32,64,32,95,49,52,53,32,95,49,51,-50,50,32,64,32,64,32,64,32,58,49,51,55,57,32,64,10,65,32,95,-48,32,95,49,51,50,49,32,64,32,95,49,51,50,57,32,64,32,66,32,-95,49,51,51,48,32,95,49,50,51,50,32,64,32,102,114,111,109,85,84,-70,56,32,34,76,73,100,101,110,116,34,32,64,32,64,32,64,32,66,32,-85,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,-48,32,64,32,64,32,95,53,50,32,64,32,64,32,64,32,66,32,85,32,-64,32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,67,32,-67,39,32,64,32,64,32,64,32,66,32,66,32,83,32,67,32,83,39,32,-95,49,54,56,32,64,32,66,32,95,52,56,51,32,64,32,95,52,56,48,-32,64,32,64,32,66,32,95,49,50,51,32,64,32,67,32,95,54,51,32,-95,54,53,32,64,32,64,32,95,49,51,54,49,32,64,32,64,32,64,32,-64,32,95,53,50,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-95,52,57,32,64,32,64,32,64,32,95,49,51,51,49,32,64,32,64,32,-64,32,64,32,75,50,32,95,53,50,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,49,51,55,56,32,64,10,65,32,95,49,51,51,53,-32,95,49,51,55,53,32,64,32,95,49,51,52,54,32,95,49,51,55,54,-32,64,32,64,32,58,49,51,55,55,32,64,10,65,32,95,48,32,95,49,-51,50,49,32,64,32,95,49,51,50,57,32,64,32,66,32,95,49,51,51,-48,32,95,49,50,51,50,32,64,32,102,114,111,109,85,84,70,56,32,34,-83,121,109,79,112,101,114,34,32,64,32,64,32,64,32,66,32,85,32,64,-32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,48,32,64,-32,64,32,95,53,50,32,64,32,64,32,64,32,66,32,85,32,64,32,67,-39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,67,32,67,39,32,-64,32,64,32,64,32,66,32,66,32,83,32,67,32,83,39,32,95,49,54,-56,32,64,32,66,32,95,49,50,51,32,64,32,66,32,95,49,51,52,55,-32,64,32,95,52,56,48,32,64,32,64,32,64,32,66,32,95,49,50,51,-32,64,32,67,32,95,54,51,32,95,54,53,32,64,32,64,32,95,49,51,-52,56,32,64,32,64,32,64,32,64,32,95,53,50,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,95,52,57,32,64,32,64,32,64,32,95,-49,51,51,49,32,64,32,64,32,64,32,64,32,75,50,32,95,53,50,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,51,55,54,32,-64,10,65,32,95,49,51,51,53,32,95,49,51,55,52,32,64,32,95,49,-51,52,51,32,64,32,58,49,51,55,53,32,64,10,65,32,95,48,32,95,-49,51,50,49,32,64,32,95,49,51,50,57,32,64,32,66,32,95,49,51,-51,48,32,95,49,50,51,50,32,64,32,102,114,111,109,85,84,70,56,32,-34,85,73,100,101,110,116,34,32,64,32,64,32,64,32,66,32,85,32,64,-32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,48,32,64,-32,64,32,95,53,50,32,64,32,64,32,64,32,66,32,85,32,64,32,67,-39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,67,32,67,39,32,-64,32,64,32,64,32,66,32,66,32,83,32,67,39,32,95,52,56,52,32,-64,32,95,52,56,48,32,64,32,95,53,50,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,95,52,57,32,64,32,64,32,64,32,95,49,51,-51,49,32,64,32,64,32,64,32,64,32,75,50,32,95,53,50,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,49,51,55,52,32,64,10,-65,32,66,32,83,39,32,95,57,52,54,32,95,49,51,53,49,32,95,49,-50,51,50,32,64,32,64,32,64,32,66,32,95,49,48,54,32,95,49,51,-50,49,32,64,32,95,49,51,51,52,32,35,49,50,51,32,64,32,64,32,-64,32,67,32,95,48,32,95,49,51,50,49,32,64,32,64,32,66,32,95,-49,48,54,32,95,49,51,50,49,32,64,32,95,49,51,51,52,32,35,49,-50,53,32,64,32,64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,-64,32,64,32,64,32,64,32,64,32,66,32,95,49,48,54,32,95,49,51,-50,49,32,64,32,95,49,51,51,52,32,35,54,48,32,64,32,64,32,64,-32,67,32,95,48,32,95,49,51,50,49,32,64,32,64,32,66,32,95,48,-32,95,49,51,50,49,32,64,32,95,49,51,51,57,32,95,49,50,51,50,-32,64,32,64,32,64,32,66,32,67,39,32,95,49,48,54,32,95,49,51,-50,49,32,64,32,64,32,67,32,67,32,66,32,64,32,83,39,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,53,32,64,32,64,32,-64,32,66,32,85,32,64,32,90,32,67,39,32,67,32,64,32,67,32,95,-52,48,32,95,49,54,53,32,64,32,35,54,50,32,64,32,64,32,64,32,-95,49,51,51,52,32,35,54,50,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,95,49,51,54,56,32,95,49,51,55,48,32,64,32,64,32,-64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,95,49,51,49,49,32,95,49,-51,50,50,32,64,32,64,32,67,32,95,49,51,55,49,32,64,32,95,49,-51,52,50,32,95,49,51,51,52,32,35,53,57,32,64,32,64,32,64,32,-64,32,95,49,51,55,50,32,95,49,51,51,52,32,35,53,57,32,64,32,-64,32,64,32,64,32,58,49,51,55,51,32,64,10,65,32,67,39,32,95,-49,51,51,53,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,-52,57,32,64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,-95,53,50,32,64,32,64,32,58,49,51,55,50,32,64,10,65,32,67,39,-32,67,39,32,95,49,51,51,53,32,64,32,64,32,95,49,51,53,54,32,-64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,95,53,56,32,64,-32,64,32,58,49,51,55,49,32,64,10,65,32,66,32,95,50,55,57,32,-64,32,85,32,95,49,51,54,57,32,64,32,64,32,58,49,51,55,48,32,-64,10,65,32,75,32,65,32,64,32,58,49,51,54,57,32,64,10,65,32,-66,32,95,49,51,49,50,32,64,32,66,32,85,32,64,32,67,39,32,67,-39,32,67,39,32,95,49,51,49,52,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,79,32,64,32,64,32,64,32,66,32,66,32,66,32,-80,32,95,49,48,55,32,64,32,64,32,64,32,64,32,66,32,80,32,64,-32,64,32,64,32,75,32,64,32,64,32,95,49,51,49,56,32,64,32,64,-32,64,32,58,49,51,54,56,32,64,10,65,32,95,49,51,51,53,32,95,-49,51,51,53,32,95,49,51,51,53,32,95,49,56,32,95,49,51,49,53,-32,64,32,95,49,51,51,56,32,64,32,95,49,57,55,32,95,49,51,50,-50,32,64,32,95,49,51,50,55,32,102,114,111,109,85,84,70,56,32,34,-109,111,100,117,108,101,34,32,64,32,64,32,64,32,95,49,51,52,52,32,-64,32,64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,-51,52,53,32,64,32,95,49,51,49,49,32,95,49,51,50,50,32,64,32,-95,49,51,49,49,32,95,49,51,50,50,32,64,32,95,49,51,49,49,32,-95,49,51,50,50,32,64,32,95,49,51,53,52,32,64,32,95,49,51,51,-52,32,35,52,48,32,64,32,64,32,64,32,95,49,51,53,56,32,64,32,-64,32,95,49,51,51,52,32,35,52,49,32,64,32,64,32,64,32,64,32,-64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,49,51,53,57,32,-64,32,95,49,51,53,52,32,64,32,64,32,64,32,95,49,56,32,95,49,-51,49,53,32,64,32,95,49,51,54,48,32,64,32,95,49,51,54,54,32,-64,32,64,32,58,49,51,54,55,32,64,10,65,32,95,49,51,51,53,32,-95,49,51,54,50,32,64,32,95,49,51,52,54,32,95,49,51,54,53,32,-64,32,64,32,58,49,51,54,54,32,64,10,65,32,95,49,51,51,53,32,-95,49,51,54,51,32,64,32,95,49,51,54,52,32,64,32,58,49,51,54,-53,32,64,10,65,32,95,48,32,95,49,51,50,49,32,64,32,95,49,51,-50,57,32,64,32,66,32,95,49,51,51,48,32,95,49,50,51,50,32,64,-32,102,114,111,109,85,84,70,56,32,34,45,62,34,32,64,32,64,32,64,-32,66,32,85,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,32,-64,32,35,48,32,64,32,64,32,95,53,50,32,64,32,64,32,64,32,66,-32,85,32,64,32,83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,-64,32,66,32,66,32,66,32,83,32,95,52,48,32,95,54,53,32,64,32,-102,114,111,109,85,84,70,56,32,34,45,62,34,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,83,32,67,32,95,52,48,32,-95,54,53,32,64,32,79,32,35,56,53,57,52,32,64,32,75,32,64,32,-64,32,64,32,95,53,50,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,95,52,57,32,64,32,64,32,64,32,64,32,95,49,-51,51,50,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-95,52,57,32,64,32,64,32,64,32,64,32,95,49,51,51,50,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,49,51,54,52,32,64,10,-65,32,95,48,32,95,49,51,50,49,32,64,32,95,49,51,52,57,32,64,-32,83,39,32,95,49,48,54,32,95,49,51,50,49,32,64,32,64,32,66,-32,95,49,51,53,48,32,95,49,51,53,49,32,95,49,50,51,50,32,64,-32,64,32,64,32,66,32,95,49,50,51,32,64,32,95,49,51,53,50,32,-64,32,64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,64,-32,64,32,58,49,51,54,51,32,64,10,65,32,95,48,32,95,49,51,50,-49,32,64,32,95,49,51,50,57,32,64,32,66,32,95,49,51,51,48,32,-95,49,50,51,50,32,64,32,102,114,111,109,85,84,70,56,32,34,76,81,-73,100,101,110,116,34,32,64,32,64,32,64,32,66,32,85,32,64,32,66,-32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,64,-32,95,53,50,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,66,-32,66,32,83,32,67,32,83,39,32,95,49,54,56,32,64,32,66,32,95,-52,56,51,32,64,32,95,52,56,48,32,64,32,64,32,66,32,95,49,50,-51,32,64,32,67,32,95,54,51,32,95,54,53,32,64,32,64,32,95,49,-51,54,49,32,64,32,64,32,64,32,64,32,95,53,50,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,52,57,32,64,32,-64,32,64,32,64,32,95,49,51,51,50,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,49,51,54,50,32,64,10,65,32,79,32,102,114,-111,109,85,84,70,56,32,34,99,97,115,101,34,32,64,32,64,32,79,32,-102,114,111,109,85,84,70,56,32,34,99,108,97,115,115,34,32,64,32,64,-32,79,32,102,114,111,109,85,84,70,56,32,34,100,97,116,97,34,32,64,-32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,100,101,102,97,117,-108,116,34,32,64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,-100,101,114,105,118,105,110,103,34,32,64,32,64,32,79,32,102,114,111,109,-85,84,70,56,32,34,100,111,34,32,64,32,64,32,79,32,102,114,111,109,-85,84,70,56,32,34,101,108,115,101,34,32,64,32,64,32,79,32,102,114,-111,109,85,84,70,56,32,34,102,111,114,97,108,108,34,32,64,32,64,32,-79,32,102,114,111,109,85,84,70,56,32,34,102,111,114,101,105,103,110,34,-32,64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,105,102,34,-32,64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,105,109,112,-111,114,116,34,32,64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,-34,105,110,34,32,64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,-34,105,110,102,105,120,34,32,64,32,64,32,79,32,102,114,111,109,85,84,-70,56,32,34,105,110,102,105,120,108,34,32,64,32,64,32,79,32,102,114,-111,109,85,84,70,56,32,34,105,110,102,105,120,114,34,32,64,32,64,32,-79,32,102,114,111,109,85,84,70,56,32,34,105,110,115,116,97,110,99,101,-34,32,64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,108,101,-116,34,32,64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,109,-111,100,117,108,101,34,32,64,32,64,32,79,32,102,114,111,109,85,84,70,-56,32,34,110,101,119,116,121,112,101,34,32,64,32,64,32,79,32,102,114,-111,109,85,84,70,56,32,34,111,102,34,32,64,32,64,32,79,32,102,114,-111,109,85,84,70,56,32,34,112,114,105,109,105,116,105,118,101,34,32,64,-32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,116,104,101,110,34,-32,64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,116,121,112,-101,34,32,64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,119,-104,101,114,101,34,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-58,49,51,54,49,32,64,10,65,32,90,32,90,32,90,32,85,32,64,32,-64,32,64,32,58,49,51,54,48,32,64,10,65,32,90,32,90,32,66,32,-90,32,64,32,85,32,64,32,64,32,64,32,58,49,51,53,57,32,64,10,-65,32,95,49,51,51,53,32,95,49,51,53,53,32,102,114,111,109,85,84,-70,56,32,34,46,46,34,32,64,32,64,32,64,32,95,49,52,32,95,49,-51,49,53,32,64,32,95,49,48,55,32,64,32,95,49,51,53,54,32,95,-49,51,53,55,32,64,32,95,49,51,51,52,32,35,52,52,32,64,32,64,-32,64,32,64,32,58,49,51,53,56,32,64,10,65,32,95,48,32,95,49,-51,50,49,32,64,32,95,49,51,50,57,32,64,32,66,32,95,49,51,51,-48,32,95,49,50,51,50,32,64,32,102,114,111,109,85,84,70,56,32,34,-81,73,100,101,110,116,34,32,64,32,64,32,64,32,66,32,85,32,64,32,-66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,-64,32,95,53,50,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,-66,32,66,32,83,32,67,39,32,95,49,51,52,55,32,64,32,95,52,56,-48,32,64,32,95,53,50,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,95,52,57,32,64,32,64,32,64,32,64,32,95,49,-51,51,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,-51,53,55,32,64,10,65,32,83,39,32,66,32,64,32,66,32,95,49,51,-32,95,49,51,50,50,32,64,32,64,32,95,49,56,32,95,49,51,49,53,-32,64,32,95,53,57,32,64,32,64,32,64,32,66,32,66,32,95,49,51,-52,49,32,64,32,64,32,67,32,95,49,57,55,32,95,49,51,50,50,32,-64,32,64,32,64,32,64,32,58,49,51,53,54,32,64,10,65,32,66,32,-95,49,52,32,95,49,51,49,53,32,64,32,95,49,48,55,32,64,32,64,-32,83,32,95,49,51,50,54,32,95,49,50,51,50,32,64,32,64,32,66,-32,85,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,-35,48,32,64,32,64,32,95,52,52,32,64,32,64,32,64,32,66,32,85,-32,64,32,90,32,67,39,32,67,32,64,32,66,32,67,32,67,39,32,64,-32,64,32,67,32,95,52,48,32,95,54,53,32,64,32,64,32,64,32,64,-32,75,50,32,95,52,52,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,58,49,51,53,53,32,64,10,65,32,95,49,51,51,53,32,-95,49,51,52,52,32,64,32,95,49,51,52,54,32,95,49,51,53,51,32,-64,32,64,32,58,49,51,53,52,32,64,10,65,32,95,48,32,95,49,51,-50,49,32,64,32,95,49,51,52,57,32,64,32,83,39,32,95,49,48,54,-32,95,49,51,50,49,32,64,32,64,32,66,32,95,49,51,53,48,32,95,-49,51,53,49,32,95,49,50,51,50,32,64,32,64,32,64,32,95,49,51,-53,50,32,64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,-64,32,64,32,58,49,51,53,51,32,64,10,65,32,95,54,32,67,32,95,-52,48,32,95,49,54,53,32,64,32,64,32,35,53,56,32,64,32,64,32,-95,54,32,95,52,56,48,32,64,32,95,50,49,51,32,64,32,64,32,58,-49,51,53,50,32,64,10,65,32,83,32,83,32,67,39,32,95,57,52,56,-32,95,49,51,50,50,32,64,32,64,32,66,32,95,50,54,32,95,49,51,-49,50,32,64,32,64,32,66,32,85,32,64,32,66,32,90,32,64,32,66,-32,66,32,95,49,51,49,52,32,95,53,56,32,64,32,64,32,64,32,67,-39,32,67,32,64,32,83,39,32,83,39,32,95,49,51,49,54,32,64,32,-64,32,95,49,51,50,52,32,64,32,95,49,51,50,53,32,64,32,64,32,-95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-95,50,54,32,95,49,51,49,50,32,64,32,64,32,64,32,67,39,66,32,-66,32,83,32,64,32,95,49,51,49,51,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,66,32,66,39,32,64,32,95,49,51,49,51,32,64,32,-64,32,67,39,66,32,66,32,67,39,66,32,64,32,66,32,66,32,95,49,-51,49,52,32,64,32,64,32,95,49,53,51,32,64,32,64,32,64,32,95,-49,51,49,57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,-57,53,49,32,64,32,95,49,51,53,49,32,64,32,64,32,64,32,66,32,-95,57,53,51,32,64,32,95,49,51,53,49,32,64,32,64,32,58,49,51,-53,49,32,64,10,65,32,83,39,32,80,32,64,32,95,57,52,53,32,64,-32,67,39,32,95,49,52,53,32,64,32,95,57,52,57,32,64,32,95,49,-48,55,32,64,32,64,32,58,49,51,53,48,32,64,10,65,32,95,48,32,-95,49,51,50,49,32,64,32,95,49,51,50,57,32,64,32,66,32,95,49,-51,51,48,32,95,49,50,51,50,32,64,32,102,114,111,109,85,84,70,56,-32,34,81,83,121,109,79,112,101,114,34,32,64,32,64,32,64,32,66,32,-85,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,-48,32,64,32,64,32,95,53,50,32,64,32,64,32,64,32,66,32,85,32,-64,32,66,32,66,32,66,32,83,32,67,32,83,39,32,95,49,54,56,32,-64,32,66,32,95,49,50,51,32,64,32,66,32,95,49,51,52,55,32,64,-32,95,52,56,48,32,64,32,64,32,64,32,66,32,95,49,50,51,32,64,-32,67,32,95,54,51,32,95,54,53,32,64,32,64,32,95,49,51,52,56,-32,64,32,64,32,64,32,64,32,95,53,50,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,95,52,57,32,64,32,64,32,64,-32,64,32,95,49,51,51,50,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,58,49,51,52,57,32,64,10,65,32,79,32,79,32,35,54,49,-32,64,32,75,32,64,32,64,32,79,32,79,32,35,49,50,52,32,64,32,-75,32,64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,58,58,-34,32,64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,60,45,-34,32,64,32,64,32,79,32,79,32,35,54,52,32,64,32,75,32,64,32,-64,32,79,32,102,114,111,109,85,84,70,56,32,34,46,46,34,32,64,32,-64,32,79,32,102,114,111,109,85,84,70,56,32,34,45,62,34,32,64,32,-64,32,79,32,79,32,35,56,55,53,57,32,64,32,75,32,64,32,64,32,-79,32,79,32,35,56,53,57,52,32,64,32,75,32,64,32,64,32,75,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,-51,52,56,32,64,10,65,32,83,39,32,95,53,54,32,64,32,95,52,56,-51,32,64,32,95,52,56,52,32,64,32,58,49,51,52,55,32,64,10,65,-32,67,39,32,95,49,51,49,49,32,95,49,51,50,50,32,64,32,64,32,-95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,51,52,32,35,-52,48,32,64,32,64,32,64,32,95,49,51,51,52,32,35,52,49,32,64,-32,64,32,58,49,51,52,54,32,64,10,65,32,90,32,66,32,90,32,64,-32,66,32,90,32,64,32,85,32,64,32,64,32,64,32,58,49,51,52,53,-32,64,10,65,32,95,49,51,51,53,32,95,49,51,51,51,32,64,32,95,-49,51,52,51,32,64,32,58,49,51,52,52,32,64,10,65,32,95,48,32,-95,49,51,50,49,32,64,32,95,49,51,50,57,32,64,32,66,32,95,48,-32,95,49,51,50,49,32,64,32,95,49,51,52,48,32,64,32,64,32,66,-32,66,32,83,39,32,95,49,51,51,53,32,64,32,83,39,32,95,49,51,-51,53,32,64,32,67,39,32,95,49,56,32,95,49,51,49,53,32,64,32,-64,32,67,32,95,54,32,64,32,95,54,48,32,95,56,32,35,52,52,32,-64,32,64,32,64,32,64,32,95,49,51,49,49,32,95,49,51,50,50,32,-64,32,95,49,57,55,32,95,49,51,50,50,32,64,32,95,49,51,51,52,-32,35,52,48,32,64,32,64,32,95,49,51,52,50,32,95,49,51,51,52,-32,35,52,52,32,64,32,64,32,64,32,64,32,95,49,51,51,52,32,35,-52,49,32,64,32,64,32,64,32,64,32,67,39,32,95,49,52,32,95,49,-51,49,53,32,64,32,64,32,85,32,102,114,111,109,85,84,70,56,32,34,-40,41,34,32,64,32,64,32,64,32,95,49,57,55,32,95,49,51,50,50,-32,64,32,95,49,51,51,52,32,35,52,48,32,64,32,64,32,95,49,51,-51,52,32,35,52,49,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-95,49,52,32,95,49,51,49,53,32,64,32,64,32,85,32,102,114,111,109,-85,84,70,56,32,34,91,93,34,32,64,32,64,32,64,32,95,49,57,55,-32,95,49,51,50,50,32,64,32,95,49,51,51,52,32,35,57,49,32,64,-32,64,32,95,49,51,51,52,32,35,57,51,32,64,32,64,32,64,32,64,-32,64,32,64,32,95,49,51,51,49,32,64,32,64,32,64,32,58,49,51,-52,51,32,64,10,65,32,83,39,32,95,49,51,32,95,49,51,50,50,32,-64,32,64,32,95,49,56,32,95,49,51,49,53,32,64,32,95,53,57,32,-64,32,64,32,95,49,51,52,49,32,64,32,58,49,51,52,50,32,64,10,-65,32,67,39,32,95,49,51,51,53,32,64,32,95,49,51,52,50,32,64,-32,95,49,52,53,32,95,49,51,50,50,32,64,32,95,53,56,32,64,32,-64,32,58,49,51,52,49,32,64,10,65,32,95,48,32,95,49,51,50,49,-32,64,32,95,49,51,51,57,32,95,49,50,51,50,32,64,32,64,32,66,-32,95,49,52,53,32,95,49,51,50,50,32,64,32,64,32,66,32,95,49,-50,50,54,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,-64,32,58,49,51,52,48,32,64,10,65,32,66,32,95,50,54,32,95,49,-51,49,50,32,64,32,64,32,66,32,83,32,73,32,64,32,64,32,66,32,-66,32,90,32,64,32,64,32,67,39,66,32,66,32,67,32,64,32,95,49,-51,50,51,32,64,32,64,32,66,32,90,32,64,32,67,39,32,67,39,32,-95,49,51,49,52,32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,-64,32,67,32,80,32,64,32,64,32,75,32,64,32,64,32,95,49,51,49,-56,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,51,51,57,32,-64,10,65,32,66,32,90,32,64,32,66,32,90,32,64,32,66,32,90,32,-64,32,85,32,64,32,64,32,64,32,58,49,51,51,56,32,64,10,65,32,-67,39,32,67,39,32,95,49,51,51,53,32,64,32,64,32,95,49,51,51,-54,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,95,53,56,-32,64,32,64,32,58,49,51,51,55,32,64,10,65,32,83,39,32,66,32,-64,32,66,32,95,49,51,32,95,49,51,50,50,32,64,32,64,32,95,49,-56,32,95,49,51,49,53,32,64,32,95,53,57,32,64,32,64,32,64,32,-67,39,32,67,39,32,95,49,51,51,53,32,64,32,64,32,66,32,83,32,-95,49,57,55,32,95,49,51,50,50,32,64,32,64,32,64,32,95,49,51,-51,55,32,64,32,64,32,95,49,52,53,32,95,49,51,50,50,32,64,32,-95,53,56,32,64,32,64,32,64,32,58,49,51,51,54,32,64,10,65,32,-66,32,66,32,95,50,54,32,95,49,51,49,50,32,64,32,64,32,64,32,-66,32,67,39,32,83,39,32,83,32,73,32,64,32,64,32,64,32,67,39,-32,67,39,66,32,64,32,66,32,66,32,67,32,64,32,64,32,66,32,66,-32,67,32,67,39,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,95,49,51,49,51,32,64,32,66,32,67,39,66,32,95,49,51,49,52,-32,64,32,64,32,95,49,51,49,57,32,64,32,64,32,64,32,64,32,64,-32,90,32,75,32,64,32,64,32,64,32,64,32,95,49,51,49,51,32,64,-32,64,32,58,49,51,51,53,32,64,10,65,32,66,32,95,49,52,32,95,-49,51,49,53,32,64,32,95,49,48,55,32,64,32,64,32,83,39,32,95,-49,51,50,54,32,95,49,50,51,50,32,64,32,64,32,67,32,79,32,64,-32,75,32,64,32,64,32,66,32,85,32,64,32,66,32,67,39,66,32,67,-32,67,32,61,61,32,64,32,35,53,32,64,32,64,32,95,52,52,32,64,-32,64,32,64,32,66,32,85,32,64,32,90,32,95,52,48,32,95,49,54,-53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,51,51,-52,32,64,10,65,32,95,48,32,95,49,51,50,49,32,64,32,95,49,51,-50,57,32,64,32,66,32,95,49,51,51,48,32,95,49,50,51,50,32,64,-32,102,114,111,109,85,84,70,56,32,34,85,81,73,100,101,110,116,34,32,-64,32,64,32,64,32,66,32,85,32,64,32,66,32,67,39,66,32,67,32,-67,32,61,61,32,64,32,35,48,32,64,32,64,32,95,53,50,32,64,32,-64,32,64,32,66,32,85,32,64,32,66,32,66,32,66,32,83,32,67,39,-32,95,52,56,52,32,64,32,95,52,56,48,32,64,32,95,53,50,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,52,57,-32,64,32,64,32,64,32,64,32,95,49,51,51,50,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,58,49,51,51,51,32,64,10,65,32,67,-39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,95,49,51,51,49,-32,64,32,64,32,66,32,66,32,95,50,57,54,32,79,32,35,52,54,32,-64,32,75,32,64,32,64,32,64,32,64,32,67,39,66,32,95,49,53,51,-32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,58,-49,51,51,50,32,64,10,65,32,66,32,67,32,66,32,64,32,64,32,66,-32,67,39,32,67,39,32,95,52,56,49,32,64,32,64,32,64,32,95,53,-49,56,32,64,32,64,32,58,49,51,51,49,32,64,10,65,32,66,32,66,-32,66,32,95,50,54,32,95,49,51,49,50,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,83,39,32,66,32,-64,32,66,39,32,66,32,83,39,32,66,32,64,32,64,32,95,49,51,50,-51,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,66,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,66,32,64,-32,64,32,64,32,64,32,66,32,66,32,67,39,66,32,67,32,64,32,64,-32,64,32,66,32,66,32,66,32,95,49,51,49,52,32,95,53,56,32,64,-32,64,32,64,32,64,32,67,39,66,32,66,32,67,32,64,32,83,39,32,-83,39,32,95,49,51,49,54,32,64,32,64,32,95,49,51,50,52,32,64,-32,95,49,51,50,53,32,64,32,64,32,64,32,67,32,79,32,64,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,95,49,51,49,52,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,79,32,64,32,64,32,64,32,66,32,66,32,67,32,80,32,64,-32,64,32,64,32,67,32,80,32,64,32,64,32,64,32,75,32,64,32,64,-32,95,49,51,49,56,32,64,32,64,32,64,32,64,32,64,32,58,49,51,-51,48,32,64,10,65,32,95,49,51,50,56,32,58,49,51,50,57,32,64,-10,65,32,95,50,54,32,95,49,51,49,50,32,64,32,83,32,73,32,64,-32,90,32,67,39,32,67,39,32,95,49,51,49,52,32,64,32,64,32,67,-39,32,67,39,32,79,32,64,32,64,32,67,32,80,32,64,32,64,32,75,-32,64,32,64,32,95,49,51,49,56,32,64,32,64,32,64,32,64,32,58,-49,51,50,56,32,64,10,65,32,66,32,95,49,52,32,95,49,51,49,53,-32,64,32,95,49,48,55,32,64,32,64,32,83,32,95,49,51,50,54,32,-95,49,50,51,50,32,64,32,64,32,66,32,85,32,64,32,66,32,67,39,-66,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,95,52,-52,32,64,32,64,32,64,32,66,32,85,32,64,32,90,32,67,39,32,67,-32,64,32,66,32,67,32,67,39,32,64,32,64,32,95,52,48,32,95,54,-53,32,64,32,64,32,64,32,75,50,32,95,52,52,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,49,51,50,55,32,64,10,65,-32,66,32,66,32,66,32,95,50,54,32,95,49,51,49,50,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,83,-39,32,66,32,64,32,66,39,32,66,32,83,39,32,66,32,64,32,64,32,-95,49,51,50,51,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,-39,32,66,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,-66,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,95,49,51,49,-52,32,95,53,56,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,-67,32,64,32,83,39,32,83,39,32,95,49,51,49,54,32,64,32,64,32,-95,49,51,50,52,32,64,32,95,49,51,50,53,32,64,32,64,32,64,32,-67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-67,39,32,67,39,32,67,39,32,95,49,51,49,52,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,39,32,79,32,64,32,64,32,64,32,66,32,-67,39,66,32,80,32,64,32,64,32,67,32,80,32,64,32,64,32,64,32,-75,32,64,32,64,32,95,49,51,49,56,32,64,32,64,32,64,32,64,32,-64,32,58,49,51,50,54,32,64,10,65,32,67,39,32,67,32,64,32,95,-49,51,50,51,32,64,32,90,32,67,32,79,32,64,32,75,32,64,32,64,-32,64,32,58,49,51,50,53,32,64,10,65,32,66,32,95,54,32,95,51,-50,49,32,64,32,64,32,95,49,50,50,56,32,64,32,58,49,51,50,52,-32,64,10,65,32,85,32,75,32,64,32,58,49,51,50,51,32,64,10,65,-32,95,50,32,95,49,51,49,53,32,64,32,66,32,95,50,54,32,95,49,-51,49,50,32,64,32,64,32,67,39,32,67,39,32,95,49,51,49,52,32,-64,32,64,32,67,39,32,67,39,32,79,32,64,32,64,32,80,32,64,32,-75,32,64,32,64,32,95,49,51,49,56,32,64,32,64,32,64,32,95,49,-50,32,95,49,51,50,49,32,64,32,64,32,67,39,66,32,95,48,32,95,-49,51,50,49,32,64,32,64,32,75,32,64,32,64,32,95,49,57,32,95,-49,51,50,50,32,64,32,64,32,95,50,48,32,95,49,51,50,50,32,64,-32,64,32,58,49,51,50,50,32,64,10,65,32,95,49,32,95,49,51,50,-50,32,64,32,66,32,66,32,95,50,54,32,95,49,51,49,50,32,64,32,-64,32,64,32,67,39,66,32,66,32,67,32,64,32,95,49,51,49,51,32,-64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,51,49,-53,32,64,32,64,32,66,32,66,32,89,32,66,32,80,32,75,32,64,32,-64,32,66,32,67,32,66,32,64,32,64,32,66,32,67,39,32,67,39,32,-95,53,57,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,89,32,64,32,66,32,66,32,80,32,75,32,64,32,-64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,39,-32,66,32,67,39,32,67,39,32,95,53,57,32,64,32,64,32,64,32,66,-32,95,49,51,49,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,67,39,66,32,66,32,95,49,51,49,52,32,64,-32,95,50,57,52,32,64,32,64,32,64,32,66,32,66,32,95,49,51,50,-48,32,64,32,64,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,-64,32,95,57,52,50,32,95,49,51,50,49,32,64,32,64,32,95,49,52,-53,32,95,49,51,50,50,32,64,32,64,32,58,49,51,50,49,32,64,10,-65,32,95,52,51,57,32,95,49,51,49,57,32,64,32,58,49,51,50,48,-32,64,10,65,32,83,32,66,32,64,32,66,32,83,39,32,66,32,64,32,-66,39,32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,90,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,66,32,83,39,32,-66,32,64,32,66,39,32,66,32,83,39,32,67,39,32,64,32,64,32,95,-56,55,32,95,56,48,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,67,32,64,32,64,32,64,32,83,39,32,66,32,64,-32,66,39,32,66,32,67,39,32,67,39,32,64,32,64,32,67,32,95,56,-55,32,95,56,48,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,66,32,66,39,32,64,32,95,49,51,49,54,32,64,32,-64,32,95,49,53,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,58,49,51,49,57,32,64,10,65,32,95,49,51,49,54,32,95,-49,51,49,55,32,64,32,95,53,56,32,64,32,95,53,56,32,64,32,58,-49,51,49,56,32,64,10,65,32,35,49,48,48,48,48,48,48,48,48,48,-32,58,49,51,49,55,32,64,10,65,32,66,32,66,32,67,32,64,32,64,-32,80,32,64,32,58,49,51,49,54,32,64,10,65,32,95,51,32,66,32,-66,32,95,50,54,32,95,49,51,49,50,32,64,32,64,32,64,32,66,32,-67,39,32,67,32,64,32,95,49,51,49,51,32,64,32,64,32,66,32,66,-32,95,49,51,49,52,32,64,32,64,32,66,32,89,32,64,32,66,32,66,-32,80,32,75,32,64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,-32,64,32,64,32,66,39,32,66,32,67,39,32,67,39,32,95,53,57,32,-64,32,64,32,64,32,66,32,80,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,57,32,95,49,51,49,53,32,64,-32,64,32,58,49,51,49,53,32,64,10,65,32,80,32,58,49,51,49,52,-32,64,10,65,32,85,32,73,32,64,32,58,49,51,49,51,32,64,10,65,-32,85,32,58,49,51,49,50,32,64,10,65,32,85,32,75,52,32,75,32,-64,32,64,32,58,49,51,49,49,32,64,10,65,32,95,49,53,53,32,95,-49,55,49,32,95,49,51,49,48,32,64,32,64,32,85,32,90,32,66,32,-66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,109,111,100,-117,108,101,32,34,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,-95,49,53,51,32,64,32,95,50,53,52,32,64,32,64,32,66,32,95,49,-53,51,32,102,114,111,109,85,84,70,56,32,34,40,46,46,46,41,32,119,-104,101,114,101,92,49,48,38,34,32,64,32,64,32,64,32,95,53,48,51,-32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,54,49,32,95,49,-51,49,48,32,64,32,64,32,58,49,51,49,48,32,64,10,65,32,67,39,-32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,67,39,32,67,39,-32,67,39,32,67,32,64,32,64,32,64,32,95,49,51,48,56,32,64,32,-95,50,49,57,32,64,32,64,32,73,32,64,32,58,49,51,48,57,32,64,-10,65,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,67,-39,32,67,39,32,67,32,64,32,64,32,67,39,32,83,39,32,83,32,64,-32,64,32,67,32,95,49,50,50,51,32,64,32,64,32,66,32,66,32,66,-32,95,50,54,32,95,50,57,49,32,64,32,64,32,64,32,64,32,67,39,-66,32,95,49,50,50,55,32,64,32,95,49,50,50,56,32,95,49,50,51,-50,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,83,32,67,32,-83,32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,66,32,90,32,-64,32,64,32,66,32,67,32,67,32,67,39,32,64,32,95,50,57,48,32,-64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,95,50,54,32,95,50,57,49,32,64,32,64,-32,64,32,66,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,-32,34,65,109,98,105,103,117,111,117,115,58,34,32,64,32,64,32,64,32,-64,32,66,32,66,32,95,53,48,56,32,64,32,64,32,66,32,95,54,48,-32,64,32,67,39,32,95,54,32,64,32,95,49,53,52,32,64,32,95,50,-52,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,-49,51,48,55,32,64,32,58,49,51,48,56,32,64,10,65,32,66,32,95,-50,54,32,95,49,50,51,51,32,64,32,64,32,67,39,32,95,49,50,52,-48,32,64,32,95,49,51,48,53,32,95,49,51,48,54,32,35,49,32,64,-32,35,49,32,64,32,64,32,64,32,95,53,56,32,64,32,64,32,58,49,-51,48,55,32,64,10,65,32,80,32,58,49,51,48,54,32,64,10,65,32,-66,32,89,32,64,32,66,32,66,32,83,32,85,32,95,53,56,32,64,32,-64,32,64,32,64,32,83,39,32,67,39,32,67,39,32,67,32,64,32,64,-32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,95,52,48,-32,95,49,54,53,32,64,32,35,51,50,32,64,32,64,32,64,32,64,32,-64,32,83,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,66,-32,66,32,66,32,83,39,32,83,39,32,64,32,95,52,48,32,95,49,54,-53,32,64,32,35,49,48,32,64,32,64,32,64,32,64,32,64,32,66,32,-67,39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,-32,95,52,48,32,95,49,54,53,32,64,32,35,49,51,32,64,32,64,32,-64,32,64,32,83,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,-83,39,32,83,39,32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,-57,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,-32,64,32,66,32,67,39,32,83,39,32,64,32,66,32,83,32,64,32,95,-52,48,32,95,49,54,53,32,64,32,35,49,50,51,32,64,32,64,32,64,-32,64,32,66,32,67,32,83,32,64,32,64,32,66,32,67,39,32,67,39,-66,32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,35,52,53,-32,64,32,64,32,64,32,64,32,67,39,32,95,49,50,52,51,32,64,32,-67,32,95,49,50,52,49,32,64,32,35,50,32,64,32,64,32,35,49,32,-64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,-32,83,32,64,32,66,32,67,39,32,83,39,32,64,32,66,32,83,32,64,-32,95,52,48,32,95,49,54,53,32,64,32,35,52,53,32,64,32,64,32,-64,32,64,32,66,32,67,32,83,32,64,32,64,32,66,32,83,39,32,67,-39,66,32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,35,52,-53,32,64,32,64,32,64,32,64,32,67,39,32,67,32,64,32,66,32,67,-39,32,83,39,32,64,32,66,32,83,32,64,32,67,39,32,80,32,95,52,-51,32,64,32,90,32,66,32,95,49,50,51,32,64,32,95,52,55,54,32,-64,32,64,32,64,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,-64,32,66,32,67,39,32,95,49,50,52,52,32,64,32,64,32,67,39,66,-32,66,32,95,50,54,32,64,32,95,49,50,52,49,32,64,32,64,32,66,-32,95,49,56,49,32,95,49,48,52,32,64,32,95,57,48,32,95,49,48,-52,32,64,32,95,49,48,50,32,35,50,32,64,32,64,32,64,32,64,32,-66,32,95,51,50,49,32,64,32,85,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,95,54,56,54,32,67,32,95,52,48,32,95,49,-54,53,32,64,32,64,32,35,52,53,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,83,39,32,67,39,32,83,32,64,32,64,32,66,-32,66,32,83,39,32,83,39,32,64,32,95,52,56,51,32,64,32,64,32,-64,32,83,39,32,83,39,32,67,32,64,32,64,32,66,32,66,32,83,39,-32,67,39,32,64,32,95,52,56,52,32,64,32,64,32,64,32,83,39,32,-66,32,64,32,66,32,83,32,64,32,66,32,67,39,32,83,39,32,64,32,-66,32,83,32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,52,56,-32,64,32,64,32,64,32,64,32,66,32,67,32,83,32,64,32,64,32,66,-32,67,39,32,67,39,66,32,64,32,67,32,67,39,32,95,52,48,32,95,-49,54,53,32,64,32,64,32,95,49,50,52,53,32,64,32,35,49,50,48,-32,64,32,64,32,64,32,64,32,95,49,50,53,48,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,66,32,64,32,66,32,67,32,64,32,66,32,-83,39,32,67,39,32,64,32,95,49,56,57,32,64,32,64,32,83,39,32,-83,32,64,32,66,32,67,39,32,83,39,32,64,32,66,32,83,32,64,32,-95,52,48,32,95,49,54,53,32,64,32,35,52,54,32,64,32,64,32,64,-32,64,32,66,32,67,32,83,32,64,32,64,32,66,32,67,39,32,83,39,-32,66,32,64,32,64,32,67,32,95,52,56,51,32,64,32,64,32,64,32,-66,32,66,32,67,32,95,54,56,54,32,95,52,56,53,32,64,32,64,32,-64,32,64,32,83,39,32,67,39,32,83,39,32,66,32,64,32,64,32,64,-32,66,32,66,32,66,32,95,53,57,32,64,32,64,32,64,32,67,39,66,-32,66,39,32,95,49,50,53,49,32,64,32,64,32,95,53,57,32,64,32,-64,32,64,32,66,32,66,32,95,49,51,48,53,32,64,32,64,32,67,39,-66,32,66,32,95,50,54,32,64,32,95,49,50,52,49,32,64,32,64,32,-66,32,95,49,56,49,32,95,49,48,52,32,64,32,95,57,48,32,95,49,-48,52,32,64,32,95,49,48,50,32,35,49,32,64,32,64,32,64,32,64,-32,95,51,50,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,83,39,32,83,32,64,32,66,32,83,39,32,83,39,32,64,-32,95,52,55,54,32,64,32,64,32,83,39,32,83,32,64,32,66,32,83,-39,32,83,39,32,64,32,95,49,50,53,50,32,64,32,64,32,83,39,32,-67,32,64,32,66,32,83,39,32,83,39,32,64,32,95,52,48,32,95,49,-54,53,32,64,32,35,51,52,32,64,32,64,32,64,32,83,39,32,67,39,-66,32,64,32,66,32,83,32,95,52,48,32,95,49,54,53,32,64,32,35,-51,57,32,64,32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,64,-32,67,39,66,32,66,32,95,50,54,32,64,32,95,49,50,51,56,32,64,-32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,-85,110,114,101,99,111,103,110,105,122,101,100,32,105,110,112,117,116,58,32,-34,32,64,32,64,32,64,32,95,49,53,52,32,95,49,57,49,32,64,32,-64,32,64,32,64,32,75,32,64,32,64,32,64,32,83,39,32,67,32,64,-32,67,32,67,32,67,32,83,32,95,49,50,54,48,32,64,32,83,39,32,-67,32,64,32,66,32,67,32,83,32,64,32,64,32,67,39,66,32,66,32,-67,39,32,80,32,64,32,64,32,95,49,50,54,49,32,64,32,64,32,90,-32,75,32,64,32,64,32,64,32,64,32,67,32,95,49,50,51,56,32,64,-32,102,114,111,109,85,84,70,56,32,34,73,108,108,101,103,97,108,32,67,-104,97,114,32,108,105,116,101,114,97,108,34,32,64,32,64,32,64,32,64,-32,64,32,35,51,57,32,64,32,64,32,35,48,32,64,32,64,32,95,53,-56,32,64,32,64,32,66,32,67,39,66,32,66,39,32,95,53,57,32,64,-32,64,32,64,32,66,32,66,32,95,49,51,48,53,32,64,32,64,32,67,-39,66,32,66,32,95,50,54,32,64,32,95,49,50,52,49,32,64,32,64,-32,95,49,56,49,32,95,49,48,52,32,64,32,95,57,48,32,95,49,48,-52,32,64,32,95,49,48,50,32,35,50,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,32,64,32,67,-32,67,32,67,32,83,32,95,49,50,54,48,32,64,32,95,49,50,54,50,-32,64,32,64,32,35,51,52,32,64,32,64,32,35,48,32,64,32,64,32,-95,53,56,32,64,32,64,32,66,32,67,39,66,32,66,39,32,95,53,57,-32,64,32,64,32,64,32,66,32,66,32,95,49,51,48,53,32,64,32,64,-32,67,39,66,32,66,32,95,50,54,32,64,32,95,49,50,52,49,32,64,-32,64,32,95,49,56,49,32,95,49,48,52,32,64,32,95,57,48,32,95,-49,48,52,32,64,32,95,49,48,50,32,35,50,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,66,-32,64,32,66,32,66,32,95,53,57,32,64,32,64,32,95,49,50,51,53,-32,64,32,64,32,66,32,95,49,51,48,53,32,64,32,67,32,95,49,50,-52,49,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,67,32,95,54,56,54,32,95,52,55,54,32,64,32,64,32,-64,32,64,32,83,39,32,67,39,32,83,39,32,66,32,64,32,64,32,64,-32,66,32,66,32,66,32,95,53,57,32,64,32,64,32,64,32,67,39,66,-32,66,39,32,67,32,95,49,50,54,51,32,64,32,95,53,56,32,64,32,-64,32,64,32,95,53,57,32,64,32,64,32,64,32,66,32,66,32,95,49,-51,48,53,32,64,32,64,32,67,39,66,32,66,32,95,50,54,32,64,32,-95,49,50,52,49,32,64,32,64,32,66,32,95,49,56,49,32,95,49,48,-52,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,-35,49,32,64,32,64,32,64,32,64,32,95,51,50,49,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,50,57,-57,32,64,32,64,32,64,32,64,32,67,32,83,32,95,49,51,48,50,32,-64,32,73,32,64,32,64,32,95,53,56,32,64,32,64,32,64,32,64,32,-66,32,66,32,67,32,95,54,56,54,32,95,52,56,53,32,64,32,64,32,-64,32,64,32,83,39,32,67,39,32,83,39,32,66,32,64,32,64,32,64,-32,67,39,66,32,66,39,32,67,32,95,49,51,48,49,32,64,32,95,53,-56,32,64,32,64,32,64,32,95,53,57,32,64,32,64,32,66,32,66,32,-95,49,51,48,53,32,64,32,64,32,67,39,66,32,66,32,95,50,54,32,-64,32,95,49,50,52,49,32,64,32,64,32,66,32,95,49,56,49,32,95,-49,48,52,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,-50,32,35,49,32,64,32,64,32,64,32,64,32,95,51,50,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-95,49,51,48,53,32,64,32,95,49,51,48,51,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,95,49,51,48,52,32,64,32,64,32,-66,32,95,49,51,48,53,32,64,32,95,49,50,52,50,32,64,32,64,32,-64,32,64,32,64,32,66,32,95,49,51,48,53,32,64,32,67,32,95,49,-50,52,49,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,58,-49,51,48,53,32,64,10,65,32,83,32,83,32,83,32,64,32,66,32,66,-32,90,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,67,-39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,56,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,75,32,64,32,64,32,-64,32,64,32,64,32,64,32,83,39,32,95,53,57,32,64,32,66,32,95,-49,50,51,55,32,64,32,95,49,50,50,54,32,64,32,64,32,73,32,64,-32,64,32,58,49,51,48,52,32,64,10,65,32,85,32,67,39,66,32,80,-32,64,32,67,39,32,95,50,49,55,32,95,49,48,52,32,64,32,64,32,-67,39,32,95,49,55,50,32,95,49,56,52,32,64,32,64,32,67,32,95,-49,56,49,32,95,49,48,52,32,64,32,64,32,35,55,32,64,32,64,32,-35,56,32,64,32,64,32,35,56,32,64,32,64,32,64,32,58,49,51,48,-51,32,64,10,65,32,66,32,66,32,66,32,67,32,95,54,56,54,32,95,-52,56,53,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,-83,39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,67,32,83,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,83,39,32,67,39,66,32,64,32,67,32,95,52,48,-32,95,49,54,53,32,64,32,35,52,54,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,32,64,-32,85,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,83,-39,32,83,39,32,83,39,32,83,39,32,67,39,32,83,39,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,-39,66,32,66,32,67,32,64,32,66,32,83,39,32,67,39,32,64,32,95,-52,56,52,32,64,32,64,32,67,39,32,67,32,64,32,66,32,83,39,32,-83,39,32,64,32,95,52,56,50,32,64,32,64,32,67,39,32,67,39,66,-32,64,32,67,32,95,52,55,54,32,64,32,64,32,85,32,95,52,55,54,-32,64,32,64,32,64,32,64,32,85,32,95,52,56,53,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,-32,64,32,66,32,66,32,83,32,64,32,64,32,66,32,67,39,32,95,49,-51,48,50,32,64,32,64,32,67,39,66,32,66,32,95,50,54,32,64,32,-95,49,50,52,49,32,64,32,64,32,66,32,95,49,56,49,32,95,49,48,-52,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,-35,49,32,64,32,64,32,64,32,64,32,95,51,50,49,32,64,32,64,32,-64,32,64,32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,67,39,32,67,32,64,32,67,32,95,54,56,-54,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,-39,32,83,39,32,83,39,32,66,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,39,32,95,49,51,48,49,32,64,32,64,32,66,32,66,32,95,-52,49,54,32,64,32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,95,49,51,48,53,32,64,32,64,32,-64,32,67,39,66,32,66,39,32,66,32,95,50,54,32,64,32,95,49,50,-52,49,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,56,49,32,-95,49,48,52,32,64,32,64,32,66,32,95,49,56,49,32,95,49,48,52,-32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,-49,32,64,32,64,32,64,32,64,32,95,51,50,49,32,64,32,64,32,64,-32,95,51,50,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,32,83,39,32,66,-32,64,32,64,32,64,32,66,32,66,32,66,32,95,53,57,32,64,32,64,-32,64,32,67,39,66,32,95,49,50,54,51,32,64,32,95,52,49,54,32,-64,32,64,32,64,32,64,32,66,32,66,32,95,49,51,48,53,32,64,32,-64,32,67,39,66,32,66,32,95,50,54,32,64,32,95,49,50,52,49,32,-64,32,64,32,95,51,50,49,32,64,32,64,32,64,32,64,32,64,32,58,-49,51,48,50,32,64,10,65,32,66,32,66,32,83,39,32,67,32,64,32,-67,32,67,39,32,83,39,32,64,32,66,32,83,39,32,64,32,67,32,95,-54,51,32,95,54,53,32,64,32,64,32,79,32,102,114,111,109,85,84,70,-56,32,34,108,101,116,34,32,64,32,64,32,79,32,102,114,111,109,85,84,-70,56,32,34,119,104,101,114,101,34,32,64,32,64,32,79,32,102,114,111,-109,85,84,70,56,32,34,100,111,34,32,64,32,64,32,79,32,102,114,111,-109,85,84,70,56,32,34,111,102,34,32,64,32,64,32,75,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,32,95,53,57,32,64,32,64,-32,64,32,66,32,67,32,95,53,57,32,64,32,64,32,83,32,83,32,83,-32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,83,39,32,-83,39,32,67,39,32,83,32,64,32,64,32,64,32,66,32,66,32,66,32,-83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,56,32,64,32,64,-32,64,32,64,32,64,32,66,32,67,39,66,32,66,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,56,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,90,32,64,32,67,-39,32,83,32,64,32,66,32,67,32,83,32,64,32,64,32,66,32,66,32,-90,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,83,39,-32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,53,32,64,-32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,90,-32,64,32,67,39,32,67,32,64,32,67,32,95,52,48,32,95,49,54,53,-32,64,32,35,49,50,51,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,83,39,32,95,53,57,32,64,32,66,32,95,-49,51,48,48,32,64,32,95,49,50,50,54,32,64,32,64,32,73,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,83,39,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,53,32,64,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,90,32,64,32,-67,39,32,67,32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,-35,49,50,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,95,53,57,32,64,32,66,32,95,49,51,48,-48,32,64,32,95,49,50,50,54,32,64,32,64,32,73,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,49,50,54,51,32,64,32,58,49,-51,48,49,32,64,10,65,32,66,32,80,32,35,55,32,64,32,64,32,85,-32,64,32,58,49,51,48,48,32,64,10,65,32,66,32,67,32,95,54,56,-54,32,95,49,56,57,32,64,32,64,32,64,32,83,39,32,83,39,32,83,-32,64,32,64,32,66,32,66,32,83,32,83,39,32,95,53,54,32,64,32,-95,51,48,49,32,64,32,83,39,32,95,53,54,32,64,32,66,32,95,49,-50,51,32,64,32,67,39,32,95,52,48,32,95,49,54,53,32,64,32,64,-32,95,52,56,48,32,64,32,35,52,54,32,64,32,64,32,64,32,67,39,-32,95,52,48,32,95,54,53,32,64,32,64,32,95,49,48,53,32,35,50,-32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,46,46,34,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,-95,54,56,54,32,95,49,56,57,32,64,32,64,32,95,53,54,48,32,64,-32,64,32,64,32,67,39,66,32,66,39,32,66,32,67,32,64,32,66,32,-67,39,32,67,32,64,32,67,32,83,39,32,83,39,32,64,32,66,32,83,-39,32,64,32,80,32,95,53,50,32,64,32,66,32,83,32,85,32,95,53,-50,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,32,64,-32,66,32,67,39,32,83,39,32,64,32,66,32,83,32,64,32,95,52,48,-32,95,49,54,53,32,64,32,35,52,53,32,64,32,64,32,64,32,64,32,-66,32,83,32,83,32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,-64,32,64,32,67,39,66,32,66,32,67,39,32,67,32,64,32,64,32,67,-39,32,67,39,32,67,39,66,32,64,32,64,32,67,39,32,67,39,32,64,-32,66,32,95,49,54,56,32,64,32,67,39,32,95,52,48,32,95,49,54,-53,32,64,32,64,32,95,49,50,52,53,32,64,32,35,49,48,49,32,64,-32,64,32,64,32,95,49,56,57,32,64,32,64,32,66,32,95,52,57,32,-64,32,83,39,32,80,32,64,32,66,32,95,53,57,32,35,49,48,49,32,-64,32,64,32,66,32,95,53,57,32,35,52,53,32,64,32,64,32,85,32,-75,32,64,32,64,32,64,32,64,32,85,32,65,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,54,56,54,32,95,49,56,57,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,-32,64,32,66,32,67,39,32,67,39,32,64,32,66,32,83,32,64,32,95,-52,48,32,95,49,54,53,32,64,32,35,52,51,32,64,32,64,32,64,32,-64,32,66,32,83,32,83,32,64,32,64,32,66,32,66,32,66,32,90,32,-64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,67,32,64,32,64,-32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,67,39,32,67,39,-32,64,32,66,32,95,49,54,56,32,64,32,67,39,32,95,52,48,32,95,-49,54,53,32,64,32,64,32,95,49,50,52,53,32,64,32,35,49,48,49,-32,64,32,64,32,64,32,95,49,56,57,32,64,32,64,32,66,32,95,52,-57,32,64,32,83,39,32,80,32,64,32,66,32,95,53,57,32,35,49,48,-49,32,64,32,64,32,66,32,95,53,57,32,35,52,51,32,64,32,64,32,-85,32,75,32,64,32,64,32,64,32,64,32,85,32,65,32,64,32,64,32,-64,32,64,32,64,32,64,32,95,54,56,54,32,95,49,56,57,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,32,-64,32,67,39,32,67,39,66,32,64,32,67,32,67,39,32,67,39,32,64,-32,66,32,95,49,54,56,32,64,32,67,39,32,95,52,48,32,95,49,54,-53,32,64,32,64,32,95,49,50,52,53,32,64,32,35,49,48,49,32,64,-32,64,32,64,32,95,49,56,57,32,64,32,64,32,95,53,50,32,64,32,-64,32,66,32,95,52,57,32,64,32,83,39,32,80,32,64,32,66,32,95,-53,57,32,35,49,48,49,32,64,32,64,32,85,32,75,32,64,32,64,32,-64,32,85,32,65,32,64,32,64,32,64,32,64,32,64,32,64,32,95,54,-56,54,32,95,49,56,57,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,32,80,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,66,32,67,32,66,32,64,32,64,32,95,49,53,51,32,64,-32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,66,32,64,32,64,-32,66,32,66,32,95,53,57,32,64,32,64,32,67,39,66,32,95,49,50,-54,52,32,64,32,95,49,50,57,56,32,64,32,64,32,64,32,66,32,66,-32,95,49,51,48,53,32,64,32,64,32,67,39,66,32,66,32,95,50,54,-32,64,32,95,49,50,52,49,32,64,32,64,32,95,51,50,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,95,49,53,51,-32,64,32,95,53,57,32,35,52,54,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,32,95,-53,57,32,64,32,64,32,67,39,66,32,95,49,50,52,55,32,64,32,95,-49,50,55,51,32,95,49,50,57,49,32,64,32,64,32,64,32,64,32,66,-32,66,32,95,49,51,48,53,32,64,32,64,32,67,39,66,32,66,32,95,-50,54,32,64,32,95,49,50,52,49,32,64,32,64,32,95,51,50,49,32,-64,32,64,32,64,32,64,32,64,32,58,49,50,57,57,32,64,10,65,32,-83,32,85,32,110,111,77,97,116,99,104,32,102,114,111,109,85,84,70,56,-32,34,46,47,108,105,98,47,84,101,120,116,47,83,116,114,105,110,103,46,-104,115,34,32,64,32,64,32,35,53,57,32,64,32,35,49,32,64,32,64,-32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,67,39,32,67,39,-32,67,39,66,32,64,32,64,32,67,39,32,67,39,32,67,39,66,32,64,-32,64,32,67,39,32,67,39,66,32,64,32,66,32,67,39,32,83,39,32,-64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,64,32,35,52,53,-32,64,32,64,32,64,32,85,32,64,32,64,32,66,32,66,32,95,50,54,-32,95,56,56,32,95,49,48,57,52,32,95,52,54,56,32,64,32,64,32,-64,32,64,32,64,32,85,32,64,32,64,32,64,32,66,32,67,32,95,54,-56,54,32,95,49,56,57,32,64,32,64,32,64,32,67,39,66,32,66,32,-67,32,64,32,83,39,32,83,32,64,32,66,32,67,39,32,83,39,32,64,-32,83,32,64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,-67,32,95,52,48,32,95,49,54,53,32,64,32,35,52,54,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,67,32,95,54,56,54,32,95,49,-56,57,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,32,-67,32,64,32,67,39,32,67,32,64,32,66,32,67,39,32,83,39,32,64,-32,83,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,-67,39,32,95,52,48,32,95,49,54,53,32,64,32,64,32,95,49,50,52,-53,32,64,32,35,49,48,49,32,64,32,64,32,64,32,64,32,64,32,64,-32,73,32,64,32,64,32,64,32,64,32,67,39,66,32,95,49,56,49,32,-95,49,48,57,52,32,95,52,54,56,32,64,32,64,32,64,32,83,39,32,-95,50,49,55,32,95,49,48,57,52,32,95,52,54,56,32,64,32,64,32,-64,32,66,32,95,49,50,54,53,32,95,49,50,54,56,32,64,32,64,32,-95,49,50,55,51,32,95,49,50,57,49,32,64,32,64,32,64,32,66,32,-95,49,50,57,53,32,67,32,80,32,95,49,50,57,55,32,80,32,95,52,-54,56,32,64,32,95,52,50,50,32,64,32,64,32,64,32,95,49,56,52,-32,64,32,64,32,95,56,48,32,64,32,64,32,95,57,48,32,95,49,48,-57,52,32,95,52,54,56,32,64,32,64,32,95,49,48,50,32,35,49,48,-32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,95,56,56,32,95,-49,48,52,32,64,32,64,32,64,32,95,51,50,49,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,32,64,32,-66,32,67,39,32,83,39,32,64,32,83,32,64,32,64,32,66,32,67,39,-32,67,39,66,32,64,32,67,32,67,39,32,95,52,48,32,95,49,54,53,-32,64,32,64,32,95,49,50,52,53,32,64,32,35,49,48,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,-66,32,95,49,50,54,53,32,95,49,50,54,56,32,64,32,64,32,95,49,-50,55,51,32,95,49,50,57,49,32,64,32,64,32,64,32,64,32,64,32,-64,32,83,39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,67,32,-83,32,64,32,64,32,64,32,83,39,32,83,39,32,67,39,32,67,32,64,-32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,95,-52,48,32,95,49,54,53,32,64,32,35,52,51,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,67,32,95,-52,48,32,95,49,54,53,32,64,32,35,52,53,32,64,32,64,32,64,32,-64,32,64,32,67,39,66,32,95,49,48,56,54,32,95,49,50,57,55,32,-80,32,95,52,54,56,32,64,32,95,52,50,50,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,67,39,66,32,95,50,49,55,32,95,49,48,-57,52,32,95,52,54,56,32,64,32,64,32,64,32,64,32,64,32,64,32,-67,39,66,32,95,50,49,55,32,95,49,48,57,52,32,95,52,54,56,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,49,50,57,52,32,-67,32,80,32,95,49,48,57,52,32,95,52,54,56,32,64,32,64,32,95,-52,54,56,32,64,32,64,32,95,52,50,50,32,64,32,64,32,95,57,48,-32,95,49,48,57,52,32,95,52,54,56,32,64,32,64,32,95,49,48,50,-32,35,49,48,32,64,32,64,32,64,32,64,32,95,49,50,55,51,32,95,-49,50,57,49,32,64,32,64,32,64,32,64,32,58,49,50,57,56,32,64,-10,65,32,83,32,83,32,83,39,32,95,49,48,55,48,32,64,32,66,32,-95,49,48,57,52,32,64,32,85,32,75,32,64,32,64,32,64,32,66,32,-67,32,66,32,64,32,64,32,66,32,67,39,66,32,66,32,64,32,64,32,-83,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,83,39,32,66,-32,64,32,66,32,67,39,32,64,32,66,32,95,49,50,57,54,32,64,32,-85,32,75,32,64,32,64,32,64,32,64,32,66,32,95,50,49,55,32,64,-32,66,32,85,32,65,32,64,32,64,32,66,32,95,49,55,57,32,64,32,-85,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-95,50,49,55,32,64,32,66,32,85,32,65,32,64,32,64,32,66,32,95,-49,55,57,32,64,32,85,32,75,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,67,39,32,67,39,32,-67,32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,32,64,32,83,-39,32,67,32,64,32,66,32,95,52,48,32,64,32,66,32,85,32,75,32,-64,32,64,32,66,32,95,49,55,57,32,64,32,85,32,75,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,95,57,48,32,64,32,66,32,85,32,-65,32,64,32,64,32,66,32,95,49,55,57,32,64,32,85,32,75,32,64,-32,64,32,64,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,83,32,64,32,67,39,32,83,39,32,83,39,-32,64,32,64,32,83,39,32,67,32,64,32,66,32,95,56,55,32,64,32,-85,32,65,32,64,32,64,32,64,32,67,39,32,95,57,48,32,64,32,66,-32,85,32,65,32,64,32,64,32,66,32,95,49,55,57,32,64,32,85,32,-75,32,64,32,64,32,64,32,64,32,95,49,48,50,32,35,48,32,64,32,-64,32,64,32,64,32,67,32,95,49,48,56,48,32,64,32,64,32,64,32,-83,39,32,66,32,64,32,66,32,67,39,32,95,49,48,56,48,32,64,32,-64,32,66,32,95,56,56,32,64,32,66,32,85,32,65,32,64,32,64,32,-66,32,95,49,55,57,32,64,32,85,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,95,56,56,32,64,32,66,32,85,32,65,32,64,-32,64,32,66,32,95,49,55,57,32,64,32,85,32,75,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,95,50,49,57,32,102,114,111,-109,85,84,70,56,32,34,68,97,116,97,46,82,97,116,105,111,46,114,101,-99,105,112,58,32,100,105,118,105,115,105,111,110,32,98,121,32,48,34,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,83,39,-32,67,39,66,32,64,32,83,39,32,66,32,64,32,66,32,95,49,50,57,-54,32,64,32,85,32,75,32,64,32,64,32,64,32,66,32,95,57,48,32,-64,32,66,32,85,32,65,32,64,32,64,32,66,32,95,49,55,57,32,64,-32,85,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,-57,48,32,64,32,66,32,85,32,65,32,64,32,64,32,66,32,95,49,55,-57,32,64,32,85,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,58,49,50,57,55,32,64,10,65,32,83,32,83,39,32,67,39,32,-64,32,66,32,83,39,32,64,32,95,49,48,57,51,32,64,32,64,32,83,-39,32,67,39,66,32,64,32,66,32,95,50,49,55,32,64,32,66,32,85,-32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,64,32,66,32,-95,49,56,48,32,64,32,66,32,85,32,65,32,64,32,64,32,95,49,55,-57,32,64,32,64,32,64,32,64,32,64,32,66,32,95,49,48,57,49,32,-64,32,66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,-32,64,32,58,49,50,57,54,32,64,10,65,32,83,39,32,83,39,32,83,-32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,32,64,32,83,39,-32,67,32,64,32,66,32,95,50,48,53,32,64,32,85,32,75,32,65,32,-64,32,64,32,64,32,64,32,67,39,32,95,57,48,32,64,32,66,32,85,-32,65,32,64,32,64,32,66,32,95,49,55,57,32,64,32,85,32,75,32,-75,32,64,32,64,32,64,32,64,32,64,32,95,49,48,50,32,35,48,32,-64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,-66,32,95,49,50,57,50,32,64,32,85,32,90,32,75,32,64,32,64,32,-64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,95,49,50,-57,52,32,64,32,83,39,32,67,32,64,32,83,39,32,80,32,64,32,66,-32,95,49,48,56,55,32,64,32,85,32,90,32,75,32,64,32,64,32,64,-32,64,32,85,32,75,32,75,32,64,32,64,32,64,32,64,32,85,32,75,-32,65,32,64,32,64,32,64,32,64,32,64,32,66,32,95,56,56,32,64,-32,66,32,85,32,65,32,64,32,64,32,66,32,95,49,55,57,32,64,32,-85,32,75,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,95,49,50,57,52,32,64,32,83,39,32,67,32,64,-32,83,39,32,80,32,64,32,66,32,95,49,48,56,55,32,64,32,85,32,-90,32,75,32,64,32,64,32,64,32,64,32,85,32,75,32,75,32,64,32,-64,32,64,32,64,32,85,32,75,32,65,32,64,32,64,32,64,32,64,32,-64,32,58,49,50,57,53,32,64,10,65,32,67,39,32,67,39,32,67,32,-64,32,64,32,83,39,32,66,32,64,32,66,32,83,32,64,32,83,39,32,-67,32,64,32,66,32,95,56,55,32,64,32,85,32,75,32,65,32,64,32,-64,32,64,32,64,32,67,39,32,95,57,48,32,64,32,66,32,85,32,65,-32,64,32,64,32,66,32,95,49,55,57,32,64,32,85,32,75,32,75,32,-64,32,64,32,64,32,64,32,64,32,95,49,48,50,32,35,48,32,64,32,-64,32,64,32,64,32,64,32,66,32,89,32,64,32,83,39,32,67,39,32,-67,39,32,67,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,-32,66,32,83,32,64,32,83,39,32,67,32,64,32,66,32,95,52,48,32,-64,32,66,32,85,32,75,32,64,32,64,32,66,32,95,49,55,57,32,64,-32,85,32,75,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,95,57,48,32,64,32,66,32,85,32,65,32,64,32,64,32,66,32,-95,49,55,57,32,64,32,85,32,75,32,75,32,64,32,64,32,64,32,64,-32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,-83,39,32,66,32,64,32,66,39,32,66,32,83,32,64,32,66,32,95,49,-50,57,51,32,64,32,85,32,75,32,75,32,64,32,64,32,64,32,64,32,-64,32,64,32,83,39,32,66,32,64,32,66,32,83,39,32,66,32,64,32,-64,32,66,32,95,50,49,55,32,64,32,85,32,90,32,75,32,64,32,64,-32,64,32,64,32,64,32,83,39,32,67,39,32,67,39,66,32,64,32,64,-32,66,32,67,32,66,32,64,32,64,32,67,39,32,83,32,64,32,66,32,-95,50,49,55,32,64,32,85,32,90,32,75,32,64,32,64,32,64,32,64,-32,73,32,64,32,64,32,64,32,83,39,32,67,32,64,32,66,32,95,49,-55,50,32,64,32,85,32,75,32,75,32,64,32,64,32,64,32,64,32,67,-39,32,95,57,48,32,64,32,66,32,85,32,65,32,64,32,64,32,66,32,-95,49,55,57,32,64,32,85,32,75,32,75,32,64,32,64,32,64,32,64,-32,64,32,95,49,48,50,32,35,50,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,67,39,32,67,39,66,32,64,32,64,32,66,-32,67,32,66,32,64,32,64,32,67,39,32,83,32,64,32,66,32,95,50,-49,55,32,64,32,85,32,90,32,75,32,64,32,64,32,64,32,64,32,73,-32,64,32,64,32,64,32,83,39,32,67,32,64,32,66,32,95,49,55,50,-32,64,32,85,32,75,32,75,32,64,32,64,32,64,32,64,32,67,39,32,-95,57,48,32,64,32,66,32,85,32,65,32,64,32,64,32,66,32,95,49,-55,57,32,64,32,85,32,75,32,75,32,64,32,64,32,64,32,64,32,64,-32,95,49,48,50,32,35,50,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,95,57,48,32,64,32,85,32,90,32,75,32,64,32,-64,32,64,32,95,49,48,50,32,35,49,32,64,32,64,32,64,32,64,32,-64,32,64,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,68,-97,116,97,46,73,110,116,101,103,114,97,108,46,94,58,32,110,101,103,97,-116,105,118,101,32,101,120,112,111,110,101,110,116,34,32,64,32,64,32,64,-32,58,49,50,57,52,32,64,10,65,32,83,32,83,39,32,67,39,32,64,-32,66,32,95,52,48,32,64,32,66,32,85,32,75,32,64,32,64,32,95,-49,55,57,32,64,32,64,32,64,32,83,39,32,67,32,64,32,95,49,55,-55,32,64,32,67,39,32,95,57,48,32,64,32,66,32,85,32,65,32,64,-32,64,32,95,49,55,57,32,64,32,64,32,95,49,48,50,32,35,50,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,95,57,48,32,64,32,66,-32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,95,49,-48,50,32,35,48,32,64,32,64,32,64,32,58,49,50,57,51,32,64,10,-65,32,85,32,75,50,32,75,32,64,32,64,32,58,49,50,57,50,32,64,-10,65,32,95,49,50,55,52,32,95,49,50,56,56,32,95,52,54,56,32,-64,32,64,32,95,49,50,57,48,32,95,49,50,57,49,32,64,32,64,32,-58,49,50,57,49,32,64,10,65,32,66,32,95,49,50,56,48,32,95,52,-52,32,64,32,64,32,67,39,66,32,66,32,89,32,64,32,66,32,66,32,-80,32,75,32,64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,-64,32,64,32,66,32,83,39,32,83,39,32,67,39,66,32,64,32,64,32,-66,32,67,32,95,52,48,32,95,54,53,32,64,32,79,32,35,57,49,32,-64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,67,39,66,32,64,32,66,32,66,32,89,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,32,80,32,64,32,64,32,67,39,66,32,95,53,-57,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,89,32,-64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,80,32,64,-32,64,32,83,39,32,66,32,64,32,66,32,89,32,64,32,66,32,66,32,-80,32,75,32,64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,-64,32,64,32,66,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,-66,32,66,32,66,32,89,32,64,32,64,32,64,32,67,39,32,67,39,66,-32,64,32,66,32,66,39,32,64,32,66,32,80,32,64,32,64,32,64,32,-66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,39,32,66,32,67,-39,32,67,39,32,95,53,57,32,64,32,64,32,64,32,66,32,66,32,80,-32,64,32,64,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,89,32,64,32,67,39,32,67,39,32,83,39,32,-89,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,66,32,64,32,-64,32,66,32,66,32,66,32,80,32,64,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,66,32,66,32,89,32,64,32,64,32,66,32,66,32,66,-32,80,32,75,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-32,66,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,83,39,-32,67,39,66,32,64,32,64,32,66,32,67,32,95,52,48,32,95,54,53,-32,64,32,79,32,35,52,52,32,64,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,67,39,32,67,39,32,67,39,66,32,64,-32,64,32,66,32,66,32,66,32,89,32,64,32,64,32,64,32,66,32,67,-39,32,67,39,66,32,64,32,66,32,80,32,64,32,64,32,64,32,66,32,-66,32,67,32,66,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-66,32,64,32,64,32,66,32,66,32,66,32,89,32,64,32,64,32,64,32,-67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,80,32,-64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,-66,39,32,66,32,67,39,32,67,39,32,95,53,57,32,64,32,64,32,64,-32,66,32,66,32,80,32,64,32,64,32,95,53,57,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,-49,50,56,57,32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,50,-55,57,32,64,32,64,32,64,32,66,32,67,32,66,32,64,32,64,32,83,-39,32,83,39,32,67,39,66,32,64,32,64,32,66,32,67,32,95,52,48,-32,95,54,53,32,64,32,79,32,35,57,51,32,64,32,75,32,64,32,64,-32,64,32,64,32,64,32,66,32,67,39,32,95,53,57,32,64,32,80,32,-95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,-50,55,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,-50,56,57,32,64,32,64,32,64,32,66,32,67,32,66,32,64,32,64,32,-83,39,32,83,39,32,67,39,66,32,64,32,64,32,66,32,67,32,95,52,-48,32,95,54,53,32,64,32,79,32,35,57,51,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,66,32,67,39,32,95,53,57,32,64,32,80,-32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,-49,50,55,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,-49,50,55,57,32,64,32,64,32,58,49,50,57,48,32,64,10,65,32,67,-32,95,49,50,54,57,32,64,32,35,48,32,64,32,58,49,50,56,57,32,-64,10,65,32,90,32,83,39,32,95,49,50,56,49,32,64,32,66,32,85,-32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,67,39,32,95,-54,32,64,32,83,39,32,83,32,64,32,66,32,67,32,83,32,64,32,64,-32,83,39,32,66,32,64,32,66,32,83,32,64,32,66,32,67,39,32,83,-39,32,64,32,66,32,83,32,64,32,95,52,48,32,95,49,54,53,32,64,-32,35,52,56,32,64,32,64,32,64,32,64,32,66,32,67,32,83,32,64,-32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,95,52,48,32,-95,49,54,53,32,64,32,35,49,50,48,32,64,32,64,32,64,32,64,32,-66,32,95,49,50,56,51,32,64,32,66,32,85,32,65,32,64,32,64,32,-95,49,55,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,-39,32,66,32,64,32,66,32,83,32,64,32,66,32,67,39,32,83,39,32,-64,32,66,32,83,32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,-52,56,32,64,32,64,32,64,32,64,32,66,32,67,32,83,32,64,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,67,32,95,52,48,32,95,49,-54,53,32,64,32,35,56,56,32,64,32,64,32,64,32,64,32,66,32,95,-49,50,56,51,32,64,32,66,32,85,32,65,32,64,32,64,32,95,49,55,-57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,66,-32,64,32,66,32,83,32,64,32,66,32,67,39,32,83,39,32,64,32,66,-32,83,32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,52,56,32,-64,32,64,32,64,32,64,32,66,32,67,32,83,32,64,32,64,32,66,32,-67,39,32,67,39,66,32,64,32,67,32,95,52,48,32,95,49,54,53,32,-64,32,35,49,49,49,32,64,32,64,32,64,32,64,32,66,32,95,49,50,-56,52,32,64,32,66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,-32,66,32,83,32,64,32,66,32,67,39,32,83,39,32,64,32,66,32,83,-32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,52,56,32,64,32,-64,32,64,32,64,32,66,32,67,32,83,32,64,32,64,32,66,32,67,39,-32,67,39,66,32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,-35,55,57,32,64,32,64,32,64,32,64,32,66,32,95,49,50,56,52,32,-64,32,66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,-83,32,64,32,66,32,67,39,32,83,39,32,64,32,66,32,83,32,64,32,-95,52,48,32,95,49,54,53,32,64,32,35,52,56,32,64,32,64,32,64,-32,64,32,66,32,67,32,83,32,64,32,64,32,66,32,67,39,32,67,39,-66,32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,35,57,56,-32,64,32,64,32,64,32,64,32,66,32,95,49,50,56,54,32,64,32,66,-32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,83,39,32,67,39,66,32,64,32,67,-32,95,52,48,32,95,49,54,53,32,64,32,35,52,56,32,64,32,64,32,-64,32,64,32,66,32,83,32,80,32,64,32,64,32,66,32,67,39,32,67,-39,66,32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,35,54,-54,32,64,32,64,32,64,32,64,32,66,32,95,49,50,56,54,32,64,32,-66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,95,49,50,56,55,32,64,32,66,32,85,32,65,32,64,32,64,32,95,-49,55,57,32,64,32,64,32,64,32,64,32,95,49,50,55,49,32,64,32,-64,32,64,32,58,49,50,56,56,32,64,10,65,32,67,32,67,32,83,32,-95,49,50,56,50,32,64,32,67,32,95,57,48,32,64,32,95,49,48,50,-32,35,49,48,32,64,32,64,32,64,32,64,32,95,49,56,57,32,64,32,-64,32,95,49,50,52,56,32,64,32,58,49,50,56,55,32,64,10,65,32,-67,32,67,32,83,32,95,49,50,56,50,32,64,32,67,32,95,57,48,32,-64,32,95,49,48,50,32,35,50,32,64,32,64,32,64,32,64,32,95,49,-50,56,53,32,64,32,64,32,95,49,50,52,56,32,64,32,58,49,50,56,-54,32,64,10,65,32,83,39,32,95,53,54,32,64,32,67,32,95,52,48,-32,95,49,54,53,32,64,32,64,32,35,52,56,32,64,32,64,32,67,32,-95,52,48,32,95,49,54,53,32,64,32,64,32,35,52,57,32,64,32,64,-32,58,49,50,56,53,32,64,10,65,32,67,32,67,32,83,32,95,49,50,-56,50,32,64,32,67,32,95,57,48,32,64,32,95,49,48,50,32,35,56,-32,64,32,64,32,64,32,64,32,95,49,50,55,55,32,64,32,64,32,95,-49,50,52,56,32,64,32,58,49,50,56,52,32,64,10,65,32,67,32,67,-32,83,32,95,49,50,56,50,32,64,32,67,32,95,57,48,32,64,32,95,-49,48,50,32,35,49,54,32,64,32,64,32,64,32,64,32,95,49,50,52,-54,32,64,32,64,32,95,49,50,52,56,32,64,32,58,49,50,56,51,32,-64,10,65,32,66,32,66,32,66,32,66,32,83,32,85,32,95,53,56,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,90,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,-32,66,32,64,32,66,39,32,66,32,67,32,64,32,82,32,95,53,56,32,-64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,67,39,-32,67,39,32,89,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,83,39,32,83,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,-83,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-67,39,66,32,66,39,32,66,39,32,66,32,67,39,32,83,39,32,66,32,-64,32,64,32,64,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,67,39,66,32,66,32,64,32,64,32,64,32,64,32,-83,39,32,67,39,66,32,64,32,66,32,66,32,67,39,66,32,64,32,64,-32,83,39,32,66,32,64,32,66,39,32,95,49,56,49,32,64,32,64,32,-66,32,67,32,64,32,95,50,49,55,32,64,32,64,32,64,32,64,32,66,-39,32,66,32,95,52,48,51,32,64,32,80,32,95,49,56,52,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-79,32,64,32,64,32,80,32,64,32,75,32,64,32,64,32,64,32,67,32,-95,57,48,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,49,50,56,50,32,64,10,65,32,66,32,66,32,-95,49,50,56,48,32,95,52,52,32,64,32,64,32,64,32,66,32,83,32,-83,39,32,95,49,53,51,32,64,32,64,32,64,32,67,39,32,67,39,66,-32,64,32,66,32,66,32,89,32,64,32,64,32,66,32,66,32,66,32,80,-32,75,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,66,-32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,67,-39,66,32,64,32,64,32,66,32,67,32,95,52,48,32,95,54,53,32,64,-32,79,32,35,52,53,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,64,32,66,32,-66,32,66,32,89,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,-32,64,32,66,32,80,32,64,32,64,32,64,32,66,32,66,32,67,32,66,-32,64,32,64,32,64,32,66,39,32,66,32,67,39,32,67,39,32,95,53,-57,32,64,32,64,32,64,32,66,32,66,32,80,32,64,32,64,32,95,56,-56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,49,50,55,57,32,64,32,64,32,64,32,58,49,-50,56,49,32,64,10,65,32,67,39,66,32,67,32,67,32,83,39,32,64,-32,85,32,65,32,64,32,64,32,64,32,85,32,75,32,64,32,64,32,64,-32,66,32,89,32,64,32,66,32,83,39,32,80,32,64,32,67,39,66,32,-66,32,89,32,64,32,66,32,66,32,80,32,75,32,64,32,64,32,64,32,-66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,32,83,39,32,83,-39,32,67,39,66,32,64,32,64,32,66,32,67,32,95,52,48,32,95,54,-53,32,64,32,79,32,35,52,48,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,66,32,66,-32,89,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,80,32,-64,32,64,32,66,32,67,32,66,32,64,32,64,32,67,39,32,67,39,32,-67,39,66,32,64,32,64,32,66,32,66,32,66,32,89,32,64,32,64,32,-64,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,-80,32,64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,-64,32,66,32,83,39,32,83,39,32,67,39,66,32,64,32,64,32,66,32,-67,32,95,52,48,32,95,54,53,32,64,32,79,32,35,52,49,32,64,32,-75,32,64,32,64,32,64,32,64,32,64,32,64,32,66,39,32,66,32,67,-39,32,95,53,57,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,49,50,55,57,32,64,32,64,32,64,32,64,32,-64,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,95,49,50,55,57,32,64,32,64,32,64,32,67,39,66,32,83,39,-32,95,49,53,51,32,64,32,64,32,85,32,75,32,64,32,64,32,64,32,-64,32,64,32,58,49,50,56,48,32,64,10,65,32,80,32,79,32,80,32,-75,32,64,32,75,32,64,32,64,32,75,32,64,32,64,32,67,32,83,39,-32,83,39,32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,51,57,-32,64,32,64,32,67,32,83,39,32,83,39,32,64,32,95,52,48,32,95,-49,54,53,32,64,32,35,51,52,32,64,32,64,32,67,39,32,67,32,64,-32,67,39,32,67,39,32,67,32,64,32,64,32,67,32,83,39,32,83,39,-32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,95,49,50,-55,48,32,64,32,64,32,64,32,83,32,83,39,32,83,39,32,64,32,66,-32,67,39,32,64,32,66,32,67,39,32,64,32,67,32,95,54,51,32,95,-49,54,53,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,44,59,-40,41,91,93,123,125,95,96,34,32,64,32,64,32,64,32,64,32,64,32,-83,39,32,83,39,32,67,39,32,83,32,64,32,64,32,64,32,83,39,32,-66,32,64,32,66,39,32,80,32,64,32,64,32,83,32,83,39,32,83,39,-32,64,32,66,32,67,39,32,64,32,95,49,49,55,54,32,64,32,64,32,-83,39,32,66,32,64,32,66,39,32,67,32,95,49,56,57,32,64,32,95,-53,56,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,89,32,-64,32,64,32,66,32,66,32,66,32,80,32,75,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,64,32,-67,39,66,32,66,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,89,32,64,32,64,32,64,32,64,32,-66,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,-80,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,66,32,-64,32,64,32,64,32,64,32,66,32,66,39,32,64,32,66,32,66,32,67,-39,32,67,39,32,95,53,57,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,80,32,64,32,64,32,64,32,67,39,66,32,66,39,32,95,53,-57,32,64,32,64,32,95,49,53,51,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,83,39,32,83,32,64,32,66,32,67,32,-83,32,64,32,64,32,66,32,83,39,32,67,39,66,32,64,32,67,32,95,-52,48,32,95,49,54,53,32,64,32,35,52,54,32,64,32,64,32,64,32,-64,32,66,32,83,32,80,32,64,32,64,32,66,32,67,39,32,83,39,32,-66,32,64,32,64,32,67,32,95,49,56,57,32,64,32,64,32,64,32,67,-39,66,32,66,39,32,66,32,89,32,64,32,66,32,66,32,80,32,75,32,-64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,-67,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,-89,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,-39,32,64,32,66,32,80,32,64,32,64,32,64,32,66,32,66,32,67,32,-66,32,64,32,64,32,64,32,66,39,32,66,32,67,39,32,67,39,32,95,-53,57,32,64,32,64,32,64,32,66,32,66,32,80,32,64,32,64,32,66,-32,66,32,95,53,57,32,35,52,54,32,64,32,64,32,64,32,95,49,53,-51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,95,49,50,55,53,32,64,32,-64,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-73,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,79,32,64,-32,95,54,56,54,32,95,49,56,57,32,64,32,64,32,75,32,64,32,64,-32,64,32,64,32,64,32,67,39,66,32,66,32,89,32,64,32,66,32,66,-32,80,32,75,32,64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,-32,64,32,64,32,66,39,32,66,32,67,39,32,67,39,32,95,53,57,32,-64,32,64,32,64,32,66,32,66,32,80,32,64,32,64,32,95,53,57,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,79,32,64,-32,95,54,56,54,32,83,39,32,95,53,54,32,64,32,95,49,50,55,54,-32,64,32,67,32,95,54,51,32,95,49,54,53,32,64,32,64,32,102,114,-111,109,85,84,70,56,32,34,95,39,34,32,64,32,64,32,64,32,64,32,-64,32,75,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,-32,66,32,89,32,64,32,66,32,66,32,80,32,75,32,64,32,64,32,64,-32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,39,32,66,32,-67,39,32,67,39,32,95,53,57,32,64,32,64,32,64,32,66,32,66,32,-80,32,64,32,64,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,64,32,67,32,-95,54,56,54,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,32,79,32,64,32,64,32,66,32,80,32,64,32,67,-32,79,32,64,32,75,32,64,32,64,32,64,32,75,32,64,32,64,32,64,-32,64,32,95,49,50,55,57,32,64,32,64,32,67,32,95,54,51,32,95,-49,54,53,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,33,64,-35,36,37,38,63,43,46,47,60,61,62,63,92,57,50,38,94,124,58,45,-126,34,32,64,32,64,32,64,32,64,32,83,32,67,32,83,32,64,32,67,-39,32,83,39,32,66,32,64,32,64,32,67,32,67,32,95,54,51,32,95,-49,54,53,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,101,69,-34,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,89,32,64,32,-64,32,83,39,32,67,39,66,32,64,32,66,32,66,32,80,32,64,32,64,-32,67,39,66,32,66,32,89,32,64,32,66,32,66,32,80,32,75,32,64,-32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,-39,32,66,32,67,39,32,67,39,32,95,53,57,32,64,32,64,32,64,32,-66,32,66,32,80,32,64,32,64,32,95,53,57,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,95,49,50,55,53,32,64,32,64,32,64,32,-66,32,83,39,32,67,32,64,32,67,32,83,39,32,64,32,64,32,64,32,-66,32,83,39,32,83,39,32,83,39,32,66,32,64,32,64,32,64,32,66,-32,67,32,67,32,95,54,51,32,95,49,54,53,32,64,32,64,32,102,114,-111,109,85,84,70,56,32,34,43,45,34,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,89,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,-32,80,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,66,-32,64,32,64,32,64,32,64,32,66,32,66,39,32,64,32,66,32,66,32,-67,39,32,67,39,32,95,53,57,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,80,32,64,32,64,32,64,32,67,39,66,32,66,39,32,95,-53,57,32,64,32,64,32,95,53,57,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,95,49,50,55,53,32,64,32,64,32,64,32,64,-32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,79,32,64,32,80,32,75,32,64,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,66,32,89,32,66,32,80,32,75,32,64,32,-64,32,66,32,67,32,66,32,64,32,64,32,66,32,67,39,32,67,39,32,-95,53,57,32,64,32,64,32,66,32,80,32,64,32,95,53,57,32,35,51,-52,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,89,32,-66,32,83,32,67,32,83,32,64,32,67,39,32,67,39,66,32,64,32,67,-32,95,52,48,32,95,49,54,53,32,64,32,35,51,52,32,64,32,64,32,-64,32,67,39,32,79,32,64,32,80,32,79,32,35,51,52,32,64,32,75,-32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,67,-39,66,32,66,32,89,32,64,32,66,32,66,32,80,32,75,32,64,32,64,-32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,89,32,64,-32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,-32,66,32,80,32,64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,-32,64,32,64,32,66,39,32,66,32,67,39,32,67,39,32,95,53,57,32,-64,32,64,32,64,32,66,32,66,32,80,32,64,32,64,32,95,49,53,51,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,32,67,32,83,32,64,32,66,32,83,32,67,39,32,83,39,-32,64,32,66,32,83,32,64,32,95,52,48,32,95,49,54,53,32,64,32,-35,57,50,32,64,32,64,32,64,32,67,32,83,32,64,32,67,39,32,67,-39,66,32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,35,51,-56,32,64,32,64,32,64,32,67,39,32,79,32,64,32,80,32,102,114,111,-109,85,84,70,56,32,34,92,57,50,38,38,34,32,64,32,64,32,64,32,-75,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,66,-32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,35,57,50,32,-64,32,64,32,64,32,83,32,80,32,64,32,67,39,32,67,39,66,32,64,-32,67,32,95,49,50,55,48,32,64,32,64,32,66,32,89,32,66,32,80,-32,75,32,64,32,64,32,83,39,32,67,32,64,32,66,32,67,39,32,83,-39,32,64,32,83,32,64,32,64,32,66,32,66,32,67,39,32,67,39,66,-32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,35,57,50,32,-64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,95,53,57,32,64,-32,80,32,102,114,111,109,85,84,70,56,32,34,92,57,50,38,38,34,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,-64,32,64,32,67,39,32,79,32,64,32,95,49,50,55,49,32,64,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,50,-55,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,89,32,66,32,80,32,75,32,64,32,64,32,83,39,32,67,32,64,32,-66,32,67,39,32,83,39,32,64,32,66,32,64,32,64,32,66,32,66,32,-83,39,32,66,32,64,32,80,32,64,32,64,32,64,32,66,32,66,32,67,-39,66,32,66,32,67,39,66,32,64,32,67,32,95,52,48,32,95,49,54,-53,32,64,32,35,51,57,32,64,32,64,32,64,32,64,32,64,32,64,32,-83,39,32,83,39,32,83,39,32,66,32,64,32,64,32,64,32,66,32,67,-32,67,32,95,54,55,32,95,54,53,32,64,32,64,32,79,32,35,51,57,-32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,-67,39,32,95,53,57,32,64,32,64,32,66,32,80,32,64,32,66,32,95,-53,57,32,35,51,57,32,64,32,64,32,67,32,95,49,53,51,32,64,32,-79,32,35,51,57,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,-64,32,95,49,50,55,56,32,64,32,64,32,64,32,58,49,50,55,57,32,-64,10,65,32,80,32,95,53,56,32,64,32,67,32,83,39,32,83,39,32,-64,32,95,52,48,32,95,49,54,53,32,64,32,35,57,50,32,64,32,64,-32,67,39,32,67,39,32,79,32,64,32,64,32,66,32,80,32,64,32,67,-32,79,32,64,32,75,32,64,32,64,32,64,32,75,32,64,32,64,32,64,-32,67,39,32,83,39,32,89,32,64,32,66,32,66,32,80,32,75,32,64,-32,64,32,64,32,66,32,67,39,66,32,64,32,66,32,66,32,95,53,57,-32,64,32,64,32,85,32,35,57,50,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,83,32,85,32,95,53,56,32,64,32,64,32,64,32,-67,39,32,67,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,-39,32,64,32,67,32,95,54,51,32,95,49,54,53,32,64,32,64,32,102,-114,111,109,85,84,70,56,32,34,97,98,102,110,114,116,118,92,57,50,38,-92,51,52,38,39,34,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,83,32,67,39,32,83,39,32,64,32,66,32,83,32,64,32,95,52,48,-32,95,49,54,53,32,64,32,35,57,52,32,64,32,64,32,64,32,67,32,-83,32,64,32,67,39,32,83,39,32,66,32,64,32,64,32,67,32,83,39,-32,95,49,54,56,32,64,32,67,32,95,50,48,53,32,95,49,50,53,55,-32,64,32,64,32,35,54,52,32,64,32,64,32,67,32,95,54,56,32,95,-49,50,53,55,32,64,32,64,32,35,57,53,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,32,79,32,64,32,64,32,66,32,80,32,64,32,66,-32,79,32,35,57,52,32,64,32,64,32,67,32,79,32,64,32,75,32,64,-32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,-39,32,83,39,32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,49,-49,49,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,-64,32,66,32,83,32,95,52,48,32,95,49,54,53,32,64,32,35,49,50,-48,32,64,32,64,32,64,32,66,32,67,32,67,32,95,49,56,57,32,64,-32,95,53,56,32,64,32,64,32,64,32,67,39,32,79,32,64,32,95,54,-56,54,32,95,49,56,57,32,64,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,79,32,64,32,64,32,67,39,66,32,-85,32,35,49,50,48,32,64,32,64,32,95,54,56,54,32,95,49,50,52,-54,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,32,79,32,64,32,64,32,67,39,66,32,85,32,35,49,49,49,-32,64,32,64,32,95,54,56,54,32,95,49,50,55,55,32,64,32,64,32,-64,32,75,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-79,32,64,32,64,32,66,32,80,32,64,32,67,32,79,32,64,32,75,32,-64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,66,32,85,32,-64,32,66,32,66,32,80,32,64,32,64,32,95,53,57,32,64,32,64,32,-64,32,64,32,64,32,58,49,50,55,56,32,64,10,65,32,83,39,32,95,-49,54,56,32,64,32,95,49,54,57,32,35,52,56,32,64,32,64,32,67,-32,95,49,54,57,32,64,32,35,53,53,32,64,32,64,32,58,49,50,55,-55,32,64,10,65,32,83,39,32,95,53,54,32,64,32,95,49,49,55,54,-32,64,32,95,49,56,57,32,64,32,58,49,50,55,54,32,64,10,65,32,-66,32,89,32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,66,32,-64,32,64,32,83,39,32,83,39,32,83,39,32,66,32,64,32,64,32,64,-32,66,32,85,32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,-32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,66,32,67,-39,32,67,39,32,95,53,57,32,64,32,64,32,80,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,79,32,64,32,-95,54,56,54,32,95,49,56,57,32,64,32,64,32,75,32,64,32,64,32,-58,49,50,55,53,32,64,10,65,32,80,32,58,49,50,55,52,32,64,10,-65,32,67,39,32,67,32,64,32,67,39,32,67,32,64,32,95,49,50,55,-50,32,64,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,114,-101,97,100,58,32,102,97,105,108,101,100,34,32,64,32,64,32,64,32,64,-32,73,32,64,32,58,49,50,55,51,32,64,10,65,32,67,39,32,67,32,-64,32,67,39,32,67,32,64,32,67,32,95,49,50,54,57,32,64,32,35,-48,32,64,32,64,32,95,53,50,32,64,32,64,32,67,32,66,32,64,32,-67,32,67,39,32,67,39,32,64,32,67,39,32,64,32,67,39,32,67,32,-64,32,66,32,67,32,95,49,50,55,49,32,64,32,64,32,95,52,57,32,-64,32,64,32,75,50,32,95,53,50,32,64,32,64,32,64,32,64,32,75,-50,32,95,53,50,32,64,32,64,32,64,32,64,32,58,49,50,55,50,32,-64,10,65,32,83,32,85,32,95,53,56,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,66,32,67,32,95,49,50,55,48,32,64,32,64,32,95,-52,51,32,110,111,77,97,116,99,104,32,102,114,111,109,85,84,70,56,32,-34,46,47,108,105,98,47,84,101,120,116,47,82,101,97,100,47,76,101,120,-46,104,115,34,32,64,32,64,32,35,54,57,32,64,32,35,49,32,64,32,-64,32,64,32,64,32,95,49,50,55,49,32,64,32,64,32,58,49,50,55,-49,32,64,10,65,32,83,39,32,95,53,54,32,64,32,67,32,95,52,48,-32,95,49,54,53,32,64,32,64,32,35,51,50,32,64,32,64,32,83,39,-32,95,53,54,32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,-64,32,35,57,32,64,32,64,32,67,32,95,52,48,32,95,49,54,53,32,-64,32,64,32,35,49,48,32,64,32,64,32,64,32,58,49,50,55,48,32,-64,10,65,32,85,32,75,32,64,32,58,49,50,54,57,32,64,10,65,32,-95,49,50,54,54,32,95,52,53,50,32,64,32,95,49,50,54,55,32,64,-32,58,49,50,54,56,32,64,10,65,32,67,32,95,49,48,56,48,32,64,-32,95,49,48,50,32,35,49,32,64,32,64,32,58,49,50,54,55,32,64,-10,65,32,80,32,58,49,50,54,54,32,64,10,65,32,85,32,65,32,64,-32,58,49,50,54,53,32,64,10,65,32,66,32,66,32,80,32,35,52,32,-64,32,64,32,64,32,80,32,64,32,58,49,50,54,52,32,64,10,65,32,-66,32,66,32,66,32,80,32,35,48,32,64,32,64,32,64,32,64,32,66,-32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,58,49,50,54,51,-32,64,10,65,32,66,32,66,32,80,32,35,49,32,64,32,64,32,64,32,-80,32,64,32,58,49,50,54,50,32,64,10,65,32,66,32,66,32,80,32,-35,50,32,64,32,64,32,64,32,80,32,64,32,58,49,50,54,49,32,64,-10,65,32,66,32,66,32,66,32,89,32,64,32,64,32,64,32,67,39,66,-32,66,32,83,39,32,66,32,64,32,64,32,66,32,66,32,83,39,32,66,-32,64,32,64,32,64,32,66,32,66,32,66,32,80,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,-66,32,80,32,64,32,64,32,67,39,66,32,95,49,50,51,56,32,64,32,-66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,85,110,109,-97,116,99,104,101,100,32,34,32,64,32,64,32,64,32,67,32,79,32,64,-32,75,32,64,32,64,32,64,32,64,32,64,32,95,53,56,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,83,39,32,83,39,32,83,-39,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,66,32,83,39,32,83,39,32,64,32,95,52,48,32,95,49,54,53,-32,64,32,35,57,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,67,39,32,83,39,32,83,39,32,67,32,64,32,64,-32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,66,32,83,39,32,-83,39,32,64,32,64,32,95,52,48,32,95,49,54,53,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,-64,32,67,32,66,32,64,32,67,32,95,49,56,49,32,95,49,48,52,32,-64,32,64,32,35,49,32,64,32,64,32,64,32,64,32,67,32,95,53,57,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,64,-32,64,32,64,32,66,32,67,39,32,80,32,64,32,64,32,67,32,66,32,-64,32,95,52,49,54,32,64,32,64,32,64,32,64,32,64,32,64,32,83,-39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,66,32,66,32,-66,32,67,32,83,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-67,39,32,67,39,66,32,64,32,67,32,95,52,48,32,95,49,54,53,32,-64,32,35,51,56,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,-66,32,64,32,67,32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,-35,50,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,66,32,66,-32,67,32,64,32,66,32,95,49,50,53,57,32,64,32,67,32,95,49,56,-49,32,95,49,48,52,32,64,32,64,32,35,49,32,64,32,64,32,64,32,-64,32,64,32,67,39,66,32,66,39,32,67,32,64,32,64,32,67,32,95,-53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,50,-54,48,32,64,10,65,32,83,39,32,83,32,64,32,66,32,85,32,64,32,-67,39,32,67,32,64,32,80,32,35,56,56,32,64,32,64,32,95,53,56,-32,64,32,64,32,64,32,83,39,32,67,39,32,67,32,64,32,64,32,66,-32,66,32,83,39,32,83,39,32,64,32,95,52,48,32,95,49,54,53,32,-64,32,35,49,49,48,32,64,32,64,32,64,32,64,32,83,39,32,67,39,-32,67,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,95,-52,48,32,95,49,54,53,32,64,32,35,57,55,32,64,32,64,32,64,32,-64,32,83,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,39,-32,83,39,32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,57,56,-32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,67,32,64,32,64,-32,66,32,66,32,83,39,32,83,39,32,64,32,95,52,48,32,95,49,54,-53,32,64,32,35,49,48,50,32,64,32,64,32,64,32,64,32,83,39,32,-67,39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,-32,95,52,48,32,95,49,54,53,32,64,32,35,49,49,52,32,64,32,64,-32,64,32,64,32,83,39,32,67,39,32,67,32,64,32,64,32,66,32,66,-32,83,39,32,83,39,32,64,32,95,52,48,32,95,49,54,53,32,64,32,-35,49,49,54,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,67,-32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,95,52,48,-32,95,49,54,53,32,64,32,35,49,49,56,32,64,32,64,32,64,32,64,-32,83,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,-83,39,32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,49,50,48,-32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,67,32,64,32,64,-32,66,32,66,32,83,39,32,83,39,32,64,32,95,52,48,32,95,49,54,-53,32,64,32,35,49,49,49,32,64,32,64,32,64,32,64,32,83,39,32,-66,32,64,32,66,32,83,32,64,32,66,32,67,39,32,83,39,32,64,32,-66,32,83,32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,57,52,-32,64,32,64,32,64,32,64,32,66,32,67,32,83,32,64,32,64,32,66,-32,67,39,32,83,39,32,66,32,64,32,64,32,67,32,83,39,32,95,49,-54,56,32,64,32,95,54,56,32,95,49,50,53,55,32,64,32,35,54,52,-32,64,32,64,32,67,32,95,54,56,32,95,49,50,53,55,32,64,32,64,-32,35,57,53,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,-32,64,32,64,32,66,32,67,39,32,80,32,64,32,66,32,95,51,49,49,-32,64,32,67,39,32,95,56,49,32,95,49,48,52,32,64,32,64,32,95,-49,49,49,32,64,32,95,49,49,49,32,35,54,52,32,64,32,64,32,64,-32,64,32,64,32,67,32,95,49,56,49,32,95,49,48,52,32,64,32,64,-32,35,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-83,39,32,66,32,64,32,66,32,67,32,64,32,66,32,83,39,32,67,39,-32,64,32,95,49,56,57,32,64,32,64,32,66,32,66,32,67,32,64,32,-64,32,66,32,67,32,80,32,64,32,64,32,67,32,95,49,56,49,32,95,-49,48,52,32,64,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,32,95,49,50,53,56,32,35,49,48,32,64,32,64,32,35,-48,32,64,32,64,32,64,32,64,32,64,32,67,39,32,95,49,50,53,56,-32,35,56,32,64,32,64,32,67,32,95,49,56,49,32,95,49,48,52,32,-64,32,64,32,35,49,32,64,32,64,32,35,48,32,64,32,64,32,64,32,-64,32,67,39,32,95,49,50,53,56,32,35,49,54,32,64,32,64,32,67,-32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,35,49,32,64,32,-64,32,35,48,32,64,32,64,32,64,32,64,32,66,32,67,32,64,32,66,-32,80,32,35,49,49,32,64,32,64,32,67,32,95,49,56,49,32,95,49,-48,52,32,64,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,67,32,64,32,66,32,80,32,35,57,32,64,32,64,32,67,-32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,35,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,67,32,64,32,66,32,80,32,-35,49,51,32,64,32,64,32,67,32,95,49,56,49,32,95,49,48,52,32,-64,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,32,64,32,66,32,80,32,35,49,50,32,64,32,64,32,67,32,95,-49,56,49,32,95,49,48,52,32,64,32,64,32,35,49,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,67,32,64,32,66,32,80,32,35,56,-32,64,32,64,32,67,32,95,49,56,49,32,95,49,48,52,32,64,32,64,-32,35,49,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,32,-64,32,66,32,80,32,35,55,32,64,32,64,32,67,32,95,49,56,49,32,-95,49,48,52,32,64,32,64,32,35,49,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,67,32,64,32,66,32,80,32,35,49,48,32,64,32,-64,32,67,32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,35,49,-32,64,32,64,32,64,32,64,32,64,32,58,49,50,53,57,32,64,10,65,-32,66,32,89,32,64,32,67,39,32,67,39,32,83,39,32,83,39,32,83,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,83,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,-67,39,32,64,32,66,32,83,32,64,32,95,49,50,52,54,32,64,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,-66,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,67,-32,64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,-32,66,39,32,66,39,32,66,32,67,39,32,83,32,64,32,64,32,66,32,-67,32,64,32,67,32,95,56,55,32,95,56,48,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,-32,66,32,66,32,67,39,32,64,32,64,32,67,32,66,32,64,32,67,32,-95,49,56,49,32,95,49,48,52,32,64,32,64,32,35,49,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,95,49,56,49,32,95,49,48,52,-32,64,32,64,32,64,32,67,32,95,50,49,55,32,95,49,48,52,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,50,52,56,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,67,-39,32,80,32,64,32,95,51,49,49,32,64,32,64,32,64,32,64,32,58,-49,50,53,56,32,64,10,65,32,95,54,57,32,95,49,54,53,32,64,32,-95,49,50,53,51,32,64,32,95,49,50,53,52,32,64,32,95,49,54,57,-32,64,32,95,49,50,53,53,32,64,32,95,49,50,53,54,32,64,32,95,-55,56,32,95,49,50,53,55,32,64,32,64,32,95,55,57,32,95,49,50,-53,55,32,64,32,64,32,58,49,50,53,55,32,64,10,65,32,62,61,32,-58,49,50,53,54,32,64,10,65,32,62,32,58,49,50,53,53,32,64,10,-65,32,60,32,58,49,50,53,52,32,64,10,65,32,105,99,109,112,32,58,-49,50,53,51,32,64,10,65,32,67,32,95,54,51,32,95,49,54,53,32,-64,32,64,32,102,114,111,109,85,84,70,56,32,34,40,41,91,93,44,123,-125,96,59,34,32,64,32,64,32,58,49,50,53,50,32,64,10,65,32,66,-32,66,32,80,32,35,57,32,64,32,64,32,64,32,80,32,64,32,58,49,-50,53,49,32,64,10,65,32,66,32,67,32,95,54,56,54,32,95,49,50,-52,54,32,64,32,64,32,64,32,83,39,32,83,39,32,66,32,64,32,64,-32,66,32,66,32,95,53,57,32,64,32,64,32,67,39,66,32,95,49,50,-52,55,32,64,32,95,49,50,52,57,32,64,32,64,32,64,32,66,32,66,-32,95,49,51,48,53,32,64,32,64,32,67,39,66,32,66,32,95,50,54,-32,64,32,95,49,50,52,49,32,64,32,64,32,67,39,32,95,49,56,49,-32,95,49,48,52,32,64,32,64,32,95,51,50,49,32,64,32,35,50,32,-64,32,64,32,64,32,64,32,64,32,58,49,50,53,48,32,64,10,65,32,-95,52,51,56,32,67,39,66,32,66,32,95,49,56,49,32,95,52,53,50,-32,64,32,64,32,67,32,95,50,49,55,32,95,52,53,50,32,64,32,64,-32,95,57,48,32,95,52,53,50,32,64,32,95,49,48,50,32,35,49,54,-32,64,32,64,32,64,32,64,32,64,32,66,32,95,52,48,50,32,95,49,-56,52,32,64,32,64,32,95,49,50,52,56,32,64,32,64,32,64,32,95,-49,48,50,32,35,48,32,64,32,64,32,58,49,50,52,57,32,64,10,65,-32,83,32,83,32,83,39,32,95,49,54,56,32,64,32,95,49,54,57,32,-35,52,56,32,64,32,64,32,67,32,95,49,54,57,32,64,32,35,53,55,-32,64,32,64,32,64,32,83,32,83,32,83,39,32,95,49,54,56,32,64,-32,95,49,54,57,32,35,57,55,32,64,32,64,32,67,32,95,49,54,57,-32,64,32,35,49,48,50,32,64,32,64,32,64,32,83,32,67,32,83,39,-32,95,49,54,56,32,64,32,95,49,54,57,32,35,54,53,32,64,32,64,-32,67,32,95,49,54,57,32,64,32,35,55,48,32,64,32,64,32,64,32,-95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,100,105,103,105,116,-84,111,73,110,116,34,32,64,32,64,32,64,32,64,32,67,39,32,95,56,-49,32,95,49,48,52,32,64,32,64,32,95,49,49,49,32,64,32,95,56,-49,32,95,49,48,52,32,64,32,95,49,49,49,32,35,54,53,32,64,32,-64,32,35,49,48,32,64,32,64,32,64,32,64,32,64,32,67,39,32,95,-56,49,32,95,49,48,52,32,64,32,64,32,95,49,49,49,32,64,32,95,-56,49,32,95,49,48,52,32,64,32,95,49,49,49,32,35,57,55,32,64,-32,64,32,35,49,48,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-95,56,49,32,95,49,48,52,32,64,32,64,32,95,49,49,49,32,64,32,-95,49,49,49,32,35,52,56,32,64,32,64,32,64,32,58,49,50,52,56,-32,64,10,65,32,66,32,66,32,80,32,35,51,32,64,32,64,32,64,32,-80,32,64,32,58,49,50,52,55,32,64,10,65,32,83,39,32,95,53,54,-32,64,32,95,49,56,57,32,64,32,83,39,32,95,53,54,32,64,32,83,-39,32,95,49,54,56,32,64,32,95,49,54,57,32,35,57,55,32,64,32,-64,32,67,32,95,49,54,57,32,64,32,35,49,48,50,32,64,32,64,32,-64,32,83,39,32,95,49,54,56,32,64,32,95,49,54,57,32,35,55,48,-32,64,32,64,32,67,32,95,49,54,57,32,64,32,35,55,48,32,64,32,-64,32,64,32,64,32,58,49,50,52,54,32,64,10,65,32,83,32,83,32,-83,39,32,95,49,54,56,32,64,32,95,49,54,57,32,35,54,53,32,64,-32,64,32,67,32,95,49,54,57,32,64,32,35,57,48,32,64,32,64,32,-64,32,95,52,51,32,110,111,77,97,116,99,104,32,102,114,111,109,85,84,-70,56,32,34,46,47,108,105,98,47,68,97,116,97,47,67,104,97,114,46,-104,115,34,32,64,32,64,32,35,57,51,32,64,32,35,49,32,64,32,64,-32,64,32,64,32,66,32,95,51,49,49,32,64,32,67,39,32,95,49,56,-49,32,95,49,48,52,32,64,32,64,32,67,39,32,95,56,49,32,95,49,-48,52,32,64,32,64,32,95,49,49,49,32,64,32,95,49,49,49,32,35,-54,53,32,64,32,64,32,64,32,95,49,49,49,32,35,57,55,32,64,32,-64,32,64,32,64,32,58,49,50,52,53,32,64,10,65,32,66,32,89,32,-64,32,66,32,66,32,83,32,85,32,95,53,56,32,64,32,64,32,64,32,-64,32,66,32,67,39,66,32,66,32,67,32,64,32,67,39,32,67,39,32,-64,32,95,52,48,32,95,49,54,53,32,64,32,35,49,48,32,64,32,64,-32,64,32,64,32,64,32,95,49,51,48,53,32,64,32,64,32,64,32,58,-49,50,52,52,32,64,10,65,32,66,32,66,32,89,32,64,32,64,32,83,-39,32,67,32,64,32,66,32,83,39,32,67,39,32,64,32,66,32,83,39,-32,64,32,95,52,48,32,95,55,50,32,64,32,95,57,48,32,95,49,48,-52,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,64,32,-64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,80,32,64,32,-67,39,32,79,32,64,32,67,32,95,49,50,51,56,32,64,32,102,114,111,-109,85,84,70,56,32,34,85,110,99,108,111,115,101,100,32,123,45,32,99,-111,109,109,101,110,116,34,32,64,32,64,32,64,32,75,32,64,32,64,32,-64,32,64,32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,32,-83,32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,64,32,66,32,-83,32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,49,50,51,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,83,32,64,32,-64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,67,32,95,-52,48,32,95,49,54,53,32,64,32,35,52,53,32,64,32,64,32,64,32,-64,32,64,32,67,39,66,32,66,32,95,49,50,52,51,32,64,32,67,32,-95,49,50,52,49,32,64,32,35,50,32,64,32,64,32,64,32,67,32,95,-49,56,49,32,95,49,48,52,32,64,32,64,32,35,49,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,66,32,64,32,-64,32,66,32,66,32,83,32,64,32,64,32,66,32,66,32,67,39,32,83,-39,32,64,32,66,32,83,32,64,32,95,52,48,32,95,49,54,53,32,64,-32,35,52,53,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,-32,83,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,-64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,35,49,50,53,32,-64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,50,52,-51,32,64,32,67,32,95,49,50,52,49,32,64,32,35,50,32,64,32,64,-32,64,32,67,32,95,56,49,32,95,49,48,52,32,64,32,64,32,35,49,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,-32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,-32,83,39,32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,49,48,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,-32,66,32,66,32,67,39,32,83,39,32,64,32,95,52,48,32,95,49,54,-53,32,64,32,35,49,51,32,64,32,64,32,64,32,64,32,66,32,95,49,-50,52,51,32,64,32,67,32,95,49,50,52,49,32,64,32,35,49,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,95,49,50,52,51,32,64,-32,95,49,50,52,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,95,49,51,48,53,32,64,32,64,32,58,49,50,52,51,32,64,10,65,-32,85,32,90,32,67,39,32,80,32,64,32,67,32,95,49,56,49,32,95,-49,48,52,32,64,32,64,32,35,49,32,64,32,64,32,95,57,48,32,95,-49,48,52,32,64,32,95,49,48,50,32,35,49,32,64,32,64,32,64,32,-64,32,64,32,58,49,50,52,50,32,64,10,65,32,67,32,66,32,64,32,-66,32,67,39,66,32,80,32,64,32,64,32,67,32,95,49,56,49,32,95,-49,48,52,32,64,32,64,32,64,32,64,32,58,49,50,52,49,32,64,10,-65,32,66,32,89,32,64,32,83,39,32,83,39,32,83,39,32,67,32,64,-32,64,32,64,32,83,39,32,83,39,32,83,39,32,80,32,64,32,64,32,-64,32,67,39,66,32,67,32,83,39,32,64,32,80,32,80,32,95,49,50,-51,52,32,64,32,95,50,54,32,95,49,50,51,51,32,64,32,95,49,50,-52,48,32,95,53,56,32,64,32,95,53,56,32,64,32,64,32,64,32,64,-32,75,32,66,32,80,32,95,49,50,51,53,32,95,49,50,50,53,32,64,-32,35,54,50,32,64,32,64,32,64,32,66,32,95,50,54,32,95,49,50,-51,51,32,64,32,64,32,95,49,50,52,48,32,95,53,56,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,83,32,64,-32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,66,32,64,32,64,-32,64,32,67,39,32,83,39,32,66,32,64,32,64,32,66,32,66,32,83,-39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,55,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,83,39,-32,67,39,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,56,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,-67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,56,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,-64,32,64,32,67,39,32,83,32,64,32,66,32,83,39,32,83,39,32,64,-32,66,32,67,39,32,64,32,83,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,67,39,32,67,-39,32,67,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,-83,39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,83,39,32,66,32,64,32,66,32,83,-32,64,32,67,32,95,52,48,32,95,55,50,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,-66,32,66,32,67,32,64,32,64,32,67,39,32,67,32,64,32,67,32,95,-56,55,32,95,56,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,66,32,66,32,80,32,64,32,67,39,32,95,49,50,51,-53,32,64,32,95,49,50,50,54,32,64,32,35,54,50,32,64,32,64,32,-64,32,64,32,66,32,95,50,54,32,95,49,50,51,51,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,83,39,32,80,32,64,32,67,-39,32,95,49,50,51,53,32,64,32,95,49,50,50,54,32,64,32,35,53,-57,32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,49,50,51,-51,32,64,32,64,32,64,32,67,32,95,49,50,52,48,32,64,32,64,32,-64,32,64,32,64,32,64,32,95,49,50,51,54,32,64,32,64,32,64,32,-67,39,32,67,32,64,32,67,32,95,49,50,52,48,32,64,32,64,32,95,-49,50,51,48,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,85,32,64,32,64,32,83,39,32,83,39,32,83,32,64,32,64,32,83,-32,67,39,32,83,39,32,64,32,66,32,83,39,32,64,32,83,39,32,64,-32,64,32,67,39,66,32,66,32,67,32,64,32,66,32,67,39,32,83,32,-64,32,67,32,67,32,95,49,52,57,32,95,56,48,32,64,32,64,32,35,-48,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,80,-32,64,32,67,39,32,95,49,50,51,53,32,64,32,95,49,50,50,54,32,-64,32,35,54,48,32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,-95,49,50,51,51,32,64,32,64,32,64,32,67,39,66,32,95,49,50,52,-48,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,49,50,51,54,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,66,32,66,32,67,39,32,67,32,64,32,64,32,64,32,-66,32,66,32,67,39,32,67,39,32,83,32,64,32,64,32,67,39,32,67,-32,64,32,67,32,95,49,52,57,32,95,56,48,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,83,39,32,66,32,64,32,66,32,80,32,64,-32,67,39,32,95,49,50,51,53,32,64,32,95,49,50,50,54,32,64,32,-35,54,48,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,-54,32,95,49,50,51,51,32,64,32,64,32,64,32,64,32,66,32,67,39,-66,32,95,49,50,52,48,32,64,32,64,32,67,32,95,53,57,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,95,49,50,51,54,32,64,32,-64,32,64,32,64,32,66,32,83,39,32,66,32,64,32,66,32,80,32,64,-32,67,39,32,95,49,50,51,53,32,64,32,95,49,50,50,54,32,64,32,-35,54,48,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,-54,32,95,49,50,51,51,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,95,49,50,52,48,32,64,32,64,32,83,39,32,66,32,64,32,66,-32,95,53,57,32,64,32,67,39,32,95,49,50,51,53,32,64,32,95,49,-50,50,54,32,64,32,35,54,50,32,64,32,64,32,64,32,67,39,32,95,-53,57,32,64,32,95,49,50,51,55,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,83,-39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,53,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-85,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,66,-32,64,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,32,66,32,-66,32,66,32,83,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,-32,83,32,64,32,95,52,48,32,95,49,54,53,32,64,32,35,49,50,53,-32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,83,32,-64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,67,32,95,-52,48,32,95,55,50,32,64,32,95,57,48,32,95,49,48,52,32,64,32,-95,49,48,50,32,35,48,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,39,32,80,32,64,32,64,32,66,32,66,32,95,-50,54,32,95,49,50,51,51,32,64,32,64,32,64,32,95,49,50,52,48,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,83,32,95,52,48,32,95,49,54,53,32,64,32,35,49,50,53,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,-32,67,32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,32,35,49,-50,51,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,66,-32,80,32,64,32,64,32,66,32,66,32,95,50,54,32,95,49,50,51,51,-32,64,32,64,32,64,32,66,32,67,32,95,49,50,52,48,32,64,32,64,-32,95,53,57,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,-32,35,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,80,32,64,32,67,32,95,49,50,51,56,32,64,-32,102,114,111,109,85,84,70,56,32,34,108,97,121,111,117,116,32,101,114,-114,111,114,32,125,34,32,64,32,64,32,64,32,95,50,54,32,95,49,50,-51,51,32,64,32,95,49,50,52,48,32,95,53,56,32,64,32,95,53,56,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,66,32,80,32,64,32,64,32,66,32,66,32,95,50,54,-32,95,49,50,51,51,32,64,32,64,32,64,32,67,32,95,49,50,52,48,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,-66,32,80,32,64,32,95,49,50,51,57,32,64,32,64,32,64,32,66,32,-95,50,54,32,95,49,50,51,51,32,64,32,64,32,64,32,64,32,64,32,-83,39,32,67,39,32,67,32,64,32,64,32,67,39,66,32,66,32,67,39,-66,32,64,32,67,32,80,32,64,32,64,32,64,32,66,32,83,39,32,67,-39,66,32,64,32,85,32,64,32,64,32,66,32,83,39,32,67,39,66,32,-64,32,66,32,66,39,32,64,32,85,32,64,32,64,32,64,32,66,32,66,-32,66,32,90,32,64,32,64,32,64,32,66,32,66,32,66,32,90,32,64,-32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,-95,54,55,32,95,55,50,32,64,32,64,32,35,48,32,64,32,64,32,64,-32,64,32,66,32,66,32,80,32,95,49,50,51,52,32,64,32,64,32,64,-32,66,32,95,50,54,32,95,49,50,51,51,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,80,32,64,32,-67,39,32,95,49,50,51,56,32,64,32,95,49,50,50,54,32,64,32,102,-114,111,109,85,84,70,56,32,34,115,121,110,116,97,120,32,101,114,114,111,-114,34,32,64,32,64,32,64,32,95,50,54,32,95,49,50,51,51,32,64,-32,95,49,50,52,48,32,95,53,56,32,64,32,95,53,56,32,64,32,64,-32,64,32,64,32,64,32,64,32,58,49,50,52,48,32,64,10,65,32,66,-32,80,32,35,49,49,32,64,32,64,32,85,32,64,32,58,49,50,51,57,-32,64,10,65,32,66,32,66,32,80,32,35,54,32,64,32,64,32,64,32,-80,32,64,32,58,49,50,51,56,32,64,10,65,32,66,32,80,32,35,56,-32,64,32,64,32,85,32,64,32,58,49,50,51,55,32,64,10,65,32,85,-32,65,32,64,32,58,49,50,51,54,32,64,10,65,32,66,32,66,32,80,-32,35,53,32,64,32,64,32,64,32,80,32,64,32,58,49,50,51,53,32,-64,10,65,32,80,32,35,49,48,32,64,32,73,32,64,32,58,49,50,51,-52,32,64,10,65,32,73,32,58,49,50,51,51,32,64,10,65,32,95,49,-50,50,57,32,85,32,95,49,50,51,48,32,64,32,64,32,80,32,95,49,-50,51,49,32,64,32,90,32,85,32,67,39,66,32,67,32,67,32,61,61,-32,64,32,35,49,49,32,64,32,64,32,95,50,50,48,32,64,32,64,32,-85,32,73,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,50,51,-50,32,64,10,65,32,75,32,75,32,64,32,58,49,50,51,49,32,64,10,-65,32,90,32,75,32,64,32,58,49,50,51,48,32,64,10,65,32,80,32,-58,49,50,50,57,32,64,10,65,32,85,32,65,32,64,32,58,49,50,50,-56,32,64,10,65,32,90,32,66,32,85,32,64,32,90,32,67,32,67,39,-32,83,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,95,49,-53,51,32,64,32,64,32,66,32,66,32,95,51,48,50,32,64,32,64,32,-67,32,67,39,32,83,39,32,64,32,95,53,49,56,32,64,32,85,32,75,-32,64,32,64,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,-32,34,58,92,49,48,38,34,32,64,32,64,32,64,32,64,32,66,32,66,-32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,32,32,102,111,-117,110,100,58,32,32,32,32,34,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,32,95,49,53,51,32,64,32,66,32,95,52,56,48,32,64,32,-67,39,32,95,49,53,51,32,64,32,95,54,48,32,95,49,50,50,52,32,-64,32,64,32,79,32,102,114,111,109,85,84,70,56,32,34,69,79,70,34,-32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,66,32,95,-49,53,51,32,79,32,35,49,48,32,64,32,75,32,64,32,64,32,64,32,-66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,32,32,101,-120,112,101,99,116,101,100,58,32,34,32,64,32,64,32,64,32,66,32,95,-50,57,55,32,64,32,95,57,57,51,32,95,54,53,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,50,50,54,32,64,-32,64,32,64,32,64,32,58,49,50,50,55,32,64,10,65,32,80,32,95,-49,50,50,53,32,64,32,90,32,85,32,83,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,53,32,64,32,64,32,83,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,55,32,64,32,64,32,67,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,56,32,64,32,64,32,-67,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,57,32,64,-32,64,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,57,32,64,-32,64,32,95,49,50,50,53,32,64,32,64,32,85,32,75,32,64,32,64,-32,64,32,64,32,85,32,73,32,64,32,64,32,64,32,64,32,85,32,73,-32,64,32,64,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,54,32,64,32,64,32,85,32,75,32,64,32,64,32,-64,32,85,32,75,32,64,32,64,32,64,32,64,32,64,32,83,32,83,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,50,32,64,32,64,32,67,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,51,32,64,32,-64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,52,-32,64,32,64,32,85,32,75,32,64,32,64,32,64,32,85,32,75,32,64,-32,64,32,64,32,64,32,85,32,75,32,64,32,64,32,64,32,64,32,67,-32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,-64,32,85,32,75,32,64,32,64,32,64,32,85,32,90,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,50,50,54,32,-64,10,65,32,80,32,95,56,56,32,95,49,48,52,32,64,32,95,57,48,-32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,32,64,32,64,32,-64,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,-35,48,32,64,32,64,32,64,32,58,49,50,50,53,32,64,10,65,32,85,-32,83,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,54,32,-64,32,64,32,83,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,57,32,64,32,64,32,67,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,49,48,32,64,32,64,32,67,32,67,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,49,49,32,64,32,64,32,85,32,75,32,102,-114,111,109,85,84,70,56,32,34,84,82,97,119,34,32,64,32,64,32,64,-32,64,32,64,32,85,32,102,114,111,109,85,84,70,56,32,34,69,79,70,-34,32,64,32,64,32,64,32,64,32,64,32,85,32,75,32,95,49,53,51,-32,79,32,35,52,54,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,32,83,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,55,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,56,32,64,32,64,32,85,32,75,32,102,114,111,109,85,-84,70,56,32,34,84,73,110,100,101,110,116,34,32,64,32,64,32,64,32,-64,32,64,32,85,32,75,32,102,114,111,109,85,84,70,56,32,34,84,66,-114,97,99,101,34,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,-65,32,64,32,64,32,64,32,64,32,64,32,83,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,67,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,67,32,-67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,53,32,64,32,64,-32,85,32,75,32,67,32,83,32,67,32,95,52,48,32,95,49,54,53,32,-64,32,64,32,35,54,48,32,64,32,64,32,67,32,83,32,67,32,95,52,-48,32,95,49,54,53,32,64,32,64,32,35,54,50,32,64,32,64,32,67,-32,79,32,64,32,75,32,64,32,64,32,64,32,102,114,111,109,85,84,70,-56,32,34,125,32,108,97,121,111,117,116,34,32,64,32,64,32,64,32,64,-32,102,114,111,109,85,84,70,56,32,34,123,32,108,97,121,111,117,116,34,-32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,75,32,95,49,53,-52,32,95,52,48,48,32,95,52,54,57,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,85,32,75,32,95,49,53,52,32,95,52,54,57,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,67,32,67,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,50,32,64,32,64,32,85,32,-75,32,95,49,53,52,32,95,49,57,49,32,64,32,64,32,64,32,64,32,-64,32,85,32,75,32,95,49,53,52,32,95,49,54,50,32,95,49,57,49,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,75,32,66,-32,66,32,95,50,57,54,32,79,32,35,52,54,32,64,32,75,32,64,32,-64,32,64,32,64,32,67,39,66,32,95,49,53,51,32,64,32,67,32,79,-32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,58,49,50,50,52,32,64,10,65,32,66,32,67,32,66,32,64,-32,64,32,67,39,32,67,39,32,80,32,64,32,64,32,67,32,80,32,64,-32,64,32,83,32,67,32,67,39,32,64,32,95,50,57,49,32,64,32,64,-32,90,32,90,32,66,32,95,50,57,48,32,64,32,89,32,66,32,80,32,-75,32,64,32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,67,39,-32,67,39,32,95,53,57,32,64,32,64,32,67,39,66,32,80,32,64,32,-95,50,55,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,58,49,50,50,51,32,64,10,65,32,85,-32,67,39,32,67,32,64,32,67,39,32,67,39,32,67,39,32,64,32,64,-32,66,32,66,32,83,32,64,32,64,32,67,39,32,67,32,64,32,67,39,-32,67,39,32,67,39,32,64,32,64,32,66,32,66,32,83,39,32,64,32,-64,32,66,32,66,39,32,64,32,95,49,50,49,57,32,64,32,64,32,64,-32,67,39,66,32,66,32,67,39,32,95,49,53,51,32,64,32,64,32,67,-39,32,83,32,64,32,66,32,85,32,64,32,67,39,32,79,32,64,32,66,-32,95,50,54,32,95,49,50,50,48,32,64,32,64,32,67,32,67,32,95,-49,50,50,49,32,95,52,52,32,64,32,64,32,95,53,50,32,64,32,64,-32,95,53,50,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,66,-32,67,32,66,32,64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,54,32,64,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,66,32,66,32,90,32,64,32,64,32,83,39,32,67,39,32,-67,32,64,32,64,32,66,32,66,32,67,39,32,67,39,32,64,32,67,39,-32,64,32,64,32,64,32,83,39,32,67,39,32,67,32,64,32,64,32,66,-32,66,32,67,32,67,39,32,64,32,64,32,64,32,83,39,32,66,32,64,-32,80,32,64,32,66,32,66,32,85,32,64,32,64,32,83,39,32,67,39,-32,67,32,64,32,64,32,66,32,66,32,67,32,67,39,32,64,32,64,32,-64,32,83,39,32,67,39,32,80,32,64,32,64,32,66,32,80,32,95,53,-56,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,90,32,75,32,-64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,-75,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,-85,32,75,32,64,32,64,32,64,32,64,32,67,39,32,95,53,51,55,32,-64,32,66,32,85,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,-32,64,32,35,54,32,64,32,64,32,95,52,52,32,64,32,64,32,64,32,-66,32,85,32,64,32,66,32,85,32,64,32,90,32,66,32,90,32,64,32,-66,32,90,32,64,32,67,32,95,52,48,32,95,50,48,50,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,95,53,50,48,32,102,114,111,109,85,84,70,56,32,34,80,114,101,108,-117,100,101,34,32,64,32,64,32,64,32,64,32,58,49,50,50,50,32,64,-10,65,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,66,-32,67,32,64,32,64,32,80,32,64,32,64,32,58,49,50,50,49,32,64,-10,65,32,66,32,80,32,35,54,32,64,32,64,32,85,32,64,32,58,49,-50,50,48,32,64,10,65,32,66,32,66,32,67,32,64,32,64,32,80,32,-64,32,58,49,50,49,57,32,64,10,65,32,85,32,90,32,75,32,64,32,-64,32,58,49,50,49,56,32,64,10,65,32,66,32,85,32,64,32,66,32,-67,39,32,67,39,32,67,32,64,32,64,32,67,39,32,67,39,32,67,32,-64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,32,83,39,32,64,-32,64,32,66,32,67,39,32,67,39,32,64,32,66,32,95,55,50,55,32,-64,32,95,49,49,57,52,32,64,32,64,32,64,32,67,39,32,83,32,64,-32,67,39,32,83,32,64,32,67,39,32,83,32,64,32,67,39,32,83,32,-64,32,67,39,32,83,32,64,32,67,32,67,39,32,83,39,32,64,32,95,-49,50,48,51,32,64,32,85,32,90,32,90,32,90,32,90,32,90,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,75,-32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,85,32,75,50,32,90,32,90,32,90,32,75,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,75,51,32,90,-32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,75,-52,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,85,32,75,32,-75,52,32,75,32,64,32,64,32,64,32,64,32,64,32,85,32,75,32,75,-52,32,65,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,67,39,66,32,64,32,66,32,66,32,83,39,32,83,32,64,32,64,32,-64,32,67,39,66,32,66,32,67,39,32,83,39,32,83,32,64,32,64,32,-64,32,66,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,67,39,-32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,67,39,32,83,39,-32,67,39,32,67,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,83,32,64,32,64,32,64,32,67,39,66,32,66,32,67,32,64,32,67,-39,32,67,39,32,67,39,32,64,32,64,32,67,39,66,32,95,49,50,48,-52,32,64,32,66,32,95,57,50,49,32,95,55,48,53,32,95,52,48,32,-95,50,48,50,32,64,32,64,32,95,50,52,57,32,64,32,64,32,64,32,-66,32,95,50,57,52,32,64,32,66,32,89,32,66,32,80,32,75,32,64,-32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,90,32,64,32,66,-32,66,32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,-32,66,32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,-32,66,32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,-32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,95,50,56,48,32,64,32,-64,32,64,32,64,32,64,32,66,32,95,50,57,52,32,64,32,85,32,90,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,53,-48,32,64,32,95,56,53,51,32,64,32,64,32,64,32,66,32,95,50,57,-52,32,64,32,85,32,75,32,75,32,64,32,64,32,64,32,64,32,64,32,-66,32,95,50,53,48,32,64,32,95,57,49,57,32,64,32,64,32,64,32,-66,32,95,50,57,52,32,64,32,85,32,75,32,65,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,54,32,95,-49,48,48,56,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,95,-54,48,32,64,32,64,32,83,39,32,67,32,64,32,83,39,32,67,32,64,-32,83,39,32,67,32,64,32,66,32,67,32,95,49,50,49,48,32,64,32,-64,32,95,55,52,50,32,64,32,64,32,95,55,52,49,32,64,32,64,32,-95,49,49,48,54,32,64,32,64,32,95,57,49,48,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,55,52,57,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,89,32,66,32,-80,32,75,32,64,32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,-67,39,32,67,39,32,95,53,57,32,64,32,64,32,80,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,-67,39,32,67,39,32,95,53,57,32,64,32,64,32,64,32,67,39,66,32,-66,39,32,80,32,64,32,64,32,95,49,50,49,49,32,64,32,64,32,64,-32,89,32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,66,32,64,-32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,32,66,-32,90,32,64,32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,-32,64,32,64,32,66,32,67,39,32,67,39,32,67,39,32,95,53,57,32,-64,32,64,32,64,32,67,39,32,67,39,32,80,32,64,32,64,32,95,50,-55,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,50,49,52,32,64,-32,64,32,64,32,95,54,48,32,95,49,50,49,54,32,64,32,64,32,64,-32,58,49,50,49,55,32,64,10,65,32,83,32,73,32,64,32,66,32,83,-32,66,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,-32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,67,39,66,-32,66,39,32,80,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,-66,32,67,39,66,32,66,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,83,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,32,83,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,32,83,39,32,67,39,32,67,39,32,67,39,-32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,-32,66,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,-32,67,39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,83,39,32,66,32,64,32,66,39,32,66,32,83,39,32,66,32,64,32,-64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,66,32,66,32,-83,39,32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,66,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,39,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,83,32,64,32,64,32,64,32,64,32,64,32,67,32,67,39,32,67,39,-32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,-39,32,64,32,67,39,32,64,32,64,32,64,32,64,32,83,39,32,67,39,-32,83,39,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,95,54,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,66,-32,95,49,50,49,53,32,64,32,64,32,64,32,66,32,66,32,67,32,95,-56,51,49,32,95,50,48,50,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,95,49,53,51,32,64,32,95,54,48,32,85,32,75,32,64,32,64,-32,64,32,64,32,95,53,48,55,32,85,32,75,50,32,95,54,48,32,85,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,67,39,66,32,95,49,50,49,53,32,64,32,64,32,66,-32,67,32,95,56,51,49,32,95,50,48,50,32,64,32,64,32,64,32,95,-54,48,32,85,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,95,49,54,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,39,-32,66,39,32,66,39,32,66,39,32,66,39,32,66,39,32,66,39,32,66,-39,32,66,39,32,66,39,32,66,39,32,80,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,39,32,67,39,-32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,83,39,32,83,-39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,67,-39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,67,39,-32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,66,32,66,32,-67,39,32,64,32,64,32,66,32,66,32,67,39,32,64,32,64,32,66,32,-66,32,67,39,32,64,32,64,32,66,32,66,32,67,39,32,64,32,64,32,-95,53,49,53,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,-32,66,32,83,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,39,-32,64,32,64,32,66,32,66,32,66,32,95,50,54,32,64,32,64,32,64,-32,66,32,66,32,66,32,95,54,48,32,64,32,64,32,64,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,-67,39,66,32,64,32,66,32,66,32,95,50,54,32,64,32,64,32,95,49,-50,48,53,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-95,54,54,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,-64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,67,39,-66,32,66,39,32,66,39,32,66,32,95,53,54,32,64,32,95,49,50,51,-32,64,32,64,32,64,32,64,32,67,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,83,39,32,67,39,-66,32,64,32,66,32,66,32,95,50,54,32,64,32,64,32,66,32,66,32,-95,54,48,32,64,32,64,32,66,32,66,32,83,32,73,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,-66,32,66,32,67,32,64,32,64,32,67,39,32,67,39,32,83,39,32,67,-39,32,64,32,64,32,64,32,67,32,64,32,67,39,32,67,32,64,32,95,-49,50,48,53,32,64,32,95,53,56,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,95,54,54,32,64,-32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,90,32,64,-32,64,32,66,32,66,32,90,32,64,32,64,32,67,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,32,95,54,54,32,64,32,64,32,66,32,66,32,85,32,64,32,64,-32,66,32,66,32,90,32,64,32,64,32,67,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,89,32,64,32,67,39,-66,32,80,32,64,32,83,39,32,67,39,32,83,32,64,32,64,32,67,39,-32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,66,32,67,39,66,-32,67,32,67,39,32,64,32,75,32,64,32,64,32,64,32,66,32,67,32,-95,53,57,32,64,32,64,32,64,32,64,32,75,32,64,32,64,32,73,32,-64,32,64,32,64,32,64,32,64,32,89,32,66,32,80,32,75,32,64,32,-64,32,83,39,32,67,39,32,83,32,64,32,64,32,67,39,32,67,39,32,-67,32,64,32,64,32,67,39,32,67,39,32,67,39,32,83,39,32,64,32,-64,32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,67,32,95,53,-57,32,64,32,64,32,64,32,64,32,75,32,64,32,64,32,75,32,64,32,-64,32,73,32,64,32,64,32,64,32,64,32,64,32,89,32,66,32,80,32,-75,32,64,32,64,32,83,39,32,67,32,64,32,66,32,67,39,32,83,39,-32,64,32,66,32,67,32,64,32,67,32,67,32,83,39,32,64,32,75,32,-64,32,64,32,75,32,64,32,64,32,64,32,64,32,66,32,67,32,95,53,-57,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,95,54,55,32,95,51,52,50,32,64,32,64,-32,64,32,95,54,51,32,95,50,48,50,32,64,32,64,32,64,32,64,32,-102,114,111,109,85,84,70,56,32,34,110,111,116,32,101,120,112,111,114,116,-101,100,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,58,49,50,49,54,32,64,10,65,32,66,32,82,32,64,32,-66,32,90,32,64,32,66,32,83,39,32,95,50,54,32,64,32,66,32,95,-51,48,51,32,95,51,48,53,32,64,32,64,32,95,51,48,54,32,95,51,-48,56,32,64,32,64,32,64,32,64,32,67,39,66,32,95,49,53,51,32,-64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,58,-32,34,32,64,32,64,32,64,32,95,50,53,52,32,64,32,64,32,64,32,-64,32,64,32,58,49,50,49,53,32,64,10,65,32,67,32,83,39,32,67,-39,32,67,32,64,32,64,32,83,39,32,83,39,32,67,32,64,32,64,32,-83,39,32,67,39,32,67,32,64,32,64,32,83,39,32,67,39,32,67,32,-64,32,64,32,83,39,32,67,39,32,67,32,64,32,64,32,83,39,32,66,-32,64,32,66,32,80,32,64,32,66,32,95,55,52,57,32,64,32,95,53,-48,55,32,85,32,75,32,85,32,75,32,90,32,90,32,90,32,90,32,90,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,49,50,-49,50,32,95,49,49,54,52,32,95,57,57,53,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,95,53,48,55,32,64,32,66,32,85,32,64,32,-66,32,66,32,85,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,-66,32,66,32,66,32,90,32,64,32,64,32,64,32,66,32,66,32,66,32,-90,32,64,32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,-64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,66,32,66,32,-66,32,90,32,64,32,64,32,64,32,66,32,66,32,66,32,89,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,80,32,75,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,66,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,-90,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,-32,67,39,66,32,64,32,66,32,66,32,67,39,32,89,32,64,32,64,32,-64,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,-80,32,64,32,64,32,64,32,66,32,67,39,66,32,64,32,66,32,66,32,-95,53,57,32,64,32,64,32,66,32,67,32,80,32,64,32,64,32,67,32,-79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,55,-52,57,32,64,32,95,53,48,55,32,85,32,75,32,85,32,75,51,32,90,-32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,95,55,52,57,32,-64,32,64,32,95,53,48,55,32,85,32,75,32,85,32,75,52,32,90,32,-90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,95,50,54,32,95,55,52,56,32,95,57,50,52,32,-64,32,64,32,64,32,95,53,48,55,32,85,32,75,32,85,32,75,32,75,-52,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,49,50,49,50,32,-95,49,49,54,52,32,95,57,57,53,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,95,53,48,55,32,64,32,66,32,85,32,64,32,66,32,66,-32,85,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,-32,66,32,90,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,90,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,90,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,89,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,-39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,66,32,80,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,67,39,32,89,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,67,39,66,32,66,32,80,32,64,32,89,32,66,32,80,32,-75,32,64,32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,66,32,-66,32,85,32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,-66,32,66,32,90,32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,-64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,67,39,-32,67,39,66,32,64,32,66,32,66,32,67,32,64,32,64,32,66,32,67,-39,32,67,39,32,95,53,57,32,64,32,64,32,66,32,83,32,80,32,64,-32,64,32,67,39,32,67,39,32,79,32,64,32,64,32,67,39,32,95,55,-54,53,32,64,32,95,52,55,53,32,64,32,64,32,75,32,64,32,64,32,-64,32,64,32,64,32,64,32,95,53,52,50,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,89,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,67,39,32,67,39,66,32,64,32,66,32,80,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,-66,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,-39,66,32,64,32,66,32,66,32,67,39,32,89,32,64,32,64,32,64,32,-67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,80,32,-64,32,64,32,64,32,66,32,67,39,66,32,64,32,66,32,66,32,95,53,-57,32,64,32,64,32,66,32,67,32,80,32,64,32,64,32,67,32,79,32,-64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,66,32,66,-32,67,39,32,89,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,66,32,66,39,32,64,32,66,32,80,32,64,32,64,32,64,32,66,32,-67,39,66,32,64,32,66,32,66,32,95,53,57,32,64,32,64,32,66,32,-67,32,80,32,64,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,95,50,54,32,95,55,52,57,32,64,32,64,32,95,53,48,55,32,-85,32,67,32,66,32,64,32,90,32,90,32,66,32,90,32,64,32,67,32,-66,32,64,32,66,32,90,32,64,32,66,32,66,32,90,32,64,32,64,32,-66,32,66,32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,-66,32,66,32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,-66,32,66,32,67,32,67,39,32,89,32,64,32,66,32,66,32,80,32,75,-32,64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,-32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,66,39,32,66,32,-67,39,32,67,39,32,95,53,57,32,64,32,64,32,64,32,83,39,32,67,-39,66,32,64,32,66,32,66,32,80,32,64,32,64,32,95,53,52,49,32,-95,51,48,53,32,64,32,64,32,64,32,66,32,89,32,64,32,66,32,66,-32,80,32,75,32,64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,-32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,66,-39,32,66,32,67,39,32,95,53,57,32,64,32,64,32,95,53,52,49,32,-95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-32,95,50,55,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,32,64,32,66,32,66,32,90,32,64,32,64,32,-66,32,66,32,66,32,90,32,64,32,64,32,64,32,66,32,67,39,32,67,-39,66,32,64,32,83,39,32,67,32,64,32,83,39,32,67,39,32,83,39,-32,64,32,64,32,66,32,67,32,95,53,54,32,64,32,64,32,95,49,50,-49,51,32,64,32,64,32,83,39,32,66,32,64,32,79,32,64,32,67,39,-32,67,39,32,79,32,64,32,64,32,67,32,95,53,52,49,32,95,51,48,-53,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,32,79,32,64,32,64,32,67,32,95,53,52,49,32,95,51,48,-53,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,95,50,-55,53,32,64,32,64,32,64,32,64,32,64,32,58,49,50,49,52,32,64,-10,65,32,66,32,95,52,57,48,32,95,49,54,53,32,64,32,95,49,53,-51,32,95,49,49,56,50,32,64,32,95,56,52,57,32,64,32,64,32,64,-32,95,50,49,51,32,64,32,58,49,50,49,51,32,64,10,65,32,67,39,-32,67,39,32,95,55,52,55,32,64,32,64,32,95,55,52,56,32,64,32,-95,53,56,32,64,32,58,49,50,49,50,32,64,10,65,32,67,39,32,83,-32,64,32,67,39,32,83,39,32,83,32,64,32,64,32,67,39,32,83,39,-32,83,39,32,67,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,39,32,67,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,-83,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,67,39,32,83,-39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,83,39,-32,83,32,64,32,83,39,32,67,39,32,67,39,32,64,32,64,32,66,32,-66,32,67,39,32,64,32,64,32,66,32,83,32,95,53,49,53,32,64,32,-64,32,67,39,32,89,32,64,32,66,32,66,32,80,32,75,32,64,32,64,-32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,32,83,-39,32,83,39,32,67,39,66,32,64,32,64,32,66,32,67,32,67,32,61,-61,32,64,32,35,56,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,89,-32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,-66,32,66,39,32,64,32,66,32,80,32,64,32,64,32,64,32,64,32,66,-32,66,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,95,53,57,-32,64,32,64,32,64,32,66,32,67,39,32,80,32,64,32,64,32,95,53,-52,49,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,-39,32,67,39,32,89,32,64,32,64,32,64,32,67,39,32,83,39,32,83,-39,32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,80,32,64,32,-64,32,64,32,83,39,32,67,39,32,67,39,32,89,32,64,32,64,32,64,-32,67,39,32,83,39,32,83,39,32,66,32,64,32,64,32,64,32,66,32,-66,32,66,32,80,32,64,32,64,32,64,32,83,39,32,67,39,32,67,39,-32,89,32,64,32,64,32,64,32,67,39,32,83,39,32,66,32,64,32,64,-32,66,32,66,39,32,64,32,66,32,66,32,80,32,64,32,64,32,67,39,-32,89,32,64,32,66,32,66,32,80,32,75,32,64,32,64,32,64,32,66,-32,66,32,67,32,66,32,64,32,64,32,64,32,66,32,83,39,32,83,39,-32,67,39,66,32,64,32,64,32,66,32,67,32,67,32,61,61,32,64,32,-35,50,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,-32,64,32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,-32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,66,-32,90,32,64,32,64,32,64,32,66,39,32,66,32,67,39,32,95,53,57,-32,64,32,64,32,67,39,32,67,32,64,32,83,32,95,49,50,48,53,32,-64,32,64,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,67,32,66,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,-32,83,39,32,67,39,66,32,64,32,64,32,66,32,67,32,67,32,61,61,-32,64,32,35,57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,90,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,90,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,-64,32,66,32,66,39,32,64,32,66,32,66,32,67,39,32,95,53,57,32,-64,32,64,32,64,32,66,32,83,32,64,32,83,32,95,49,50,48,53,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,66,32,66,32,-66,32,67,32,66,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,-32,83,39,32,67,39,66,32,64,32,64,32,66,32,67,32,67,32,61,61,-32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,90,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,90,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-85,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,90,32,-64,32,64,32,64,32,64,32,66,32,66,39,32,64,32,66,32,66,32,67,-39,32,95,53,57,32,64,32,64,32,64,32,66,32,83,32,64,32,83,32,-95,49,50,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,-66,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,64,32,66,32,-66,32,83,39,32,83,39,32,67,39,66,32,64,32,64,32,66,32,67,32,-67,32,61,61,32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,90,32,64,32,64,32,64,32,64,32,66,32,66,39,32,64,32,66,-32,66,32,67,39,32,95,53,57,32,64,32,64,32,64,32,66,32,83,32,-64,32,83,32,95,49,50,48,53,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,-64,32,64,32,67,39,32,89,32,64,32,66,32,66,32,80,32,75,32,64,-32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,-32,83,39,32,83,39,32,67,39,66,32,64,32,64,32,66,32,67,32,67,-32,61,61,32,64,32,35,50,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-32,66,32,64,32,64,32,64,32,64,32,66,39,32,66,32,67,39,32,67,-39,32,67,39,32,95,53,57,32,64,32,64,32,64,32,64,32,67,39,66,-32,66,32,67,39,66,32,64,32,66,32,66,32,80,32,64,32,64,32,95,-53,52,49,32,95,51,48,53,32,64,32,64,32,64,32,64,32,67,32,95,-56,49,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,95,50,53,48,32,64,32,95,-57,49,48,32,64,32,64,32,64,32,66,32,95,50,53,48,32,64,32,95,-57,49,57,32,64,32,64,32,64,32,67,39,32,89,32,64,32,66,32,66,-32,80,32,75,32,64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,-32,64,32,64,32,66,32,83,39,32,83,39,32,67,39,66,32,64,32,64,-32,66,32,67,32,67,32,61,61,32,64,32,35,52,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,-32,66,32,66,32,67,39,32,89,32,64,32,64,32,64,32,64,32,66,32,-67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,80,32,-64,32,64,32,64,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,-66,32,66,32,66,32,95,53,57,32,64,32,64,32,64,32,66,32,66,32,-83,32,95,49,50,48,54,32,64,32,64,32,64,32,66,32,67,39,32,95,-55,54,53,32,64,32,64,32,66,32,66,32,95,52,55,53,32,64,32,64,-32,95,53,52,49,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,95,53,53,48,32,95,51,48,53,32,64,32,64,32,64,32,67,39,66,-32,66,39,32,83,39,32,95,49,50,48,55,32,64,32,95,55,52,49,32,-64,32,95,49,49,48,54,32,64,32,64,32,64,32,95,53,52,49,32,95,-51,48,53,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,32,-64,32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,67,39,-32,67,39,32,95,57,57,56,32,75,32,64,32,64,32,64,32,95,53,52,-49,32,95,51,48,53,32,64,32,64,32,64,32,95,55,52,50,32,64,32,-64,32,75,32,95,53,53,48,32,95,51,48,53,32,64,32,64,32,64,32,-64,32,73,32,64,32,64,32,64,32,95,55,50,57,32,64,32,58,49,50,-49,49,32,64,10,65,32,67,39,32,67,39,32,83,39,32,67,39,32,67,-39,32,67,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,-67,39,32,67,39,32,83,39,32,67,32,64,32,64,32,64,32,64,32,64,-32,67,39,66,32,66,39,32,66,39,32,66,39,32,66,32,80,32,64,32,-67,39,32,67,32,64,32,67,39,32,83,32,64,32,67,32,95,50,48,55,-32,64,32,64,32,83,39,32,95,50,54,32,64,32,66,32,95,51,48,51,-32,95,51,48,53,32,64,32,64,32,95,51,48,54,32,95,51,48,56,32,-64,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,-56,32,34,117,110,100,101,102,105,110,101,100,32,109,111,100,117,108,101,58,-32,34,32,64,32,64,32,64,32,95,50,53,52,32,64,32,64,32,64,32,-64,32,85,32,75,50,32,90,32,66,32,90,32,64,32,66,32,66,32,90,-32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,-67,39,32,67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,-32,64,32,66,32,66,32,67,39,32,67,39,32,83,39,32,80,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,39,32,79,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,-39,32,67,39,66,32,64,32,95,49,50,48,53,32,64,32,64,32,64,32,-95,49,50,48,55,32,64,32,64,32,75,32,64,32,64,32,64,32,67,39,-32,83,32,64,32,67,39,32,67,32,64,32,67,32,95,50,48,55,32,64,-32,64,32,95,53,56,32,64,32,64,32,67,39,32,67,39,32,79,32,64,-32,64,32,80,32,64,32,75,32,64,32,64,32,64,32,64,32,95,53,56,-32,64,32,64,32,95,49,50,48,56,32,64,32,64,32,64,32,67,32,95,-49,50,48,57,32,64,32,64,32,64,32,64,32,66,32,67,39,32,83,32,-64,32,67,39,32,67,39,32,83,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,67,39,66,32,64,32,66,32,66,32,80,32,64,32,64,32,67,39,32,-67,39,32,79,32,64,32,64,32,67,39,32,67,32,64,32,95,49,50,48,-53,32,64,32,95,53,56,32,64,32,64,32,75,32,64,32,64,32,64,32,-64,32,67,39,32,83,32,64,32,67,39,32,67,32,64,32,67,32,95,50,-48,55,32,64,32,64,32,95,53,56,32,64,32,64,32,67,39,32,67,39,-32,79,32,64,32,64,32,80,32,64,32,75,32,64,32,64,32,64,32,64,-32,95,53,56,32,64,32,64,32,95,49,50,48,56,32,64,32,64,32,64,-32,67,32,95,49,50,48,57,32,64,32,64,32,64,32,64,32,66,32,66,-32,67,32,80,32,95,53,56,32,64,32,95,53,56,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,32,79,32,64,32,64,32,66,32,83,32,95,-49,50,48,54,32,64,32,64,32,67,32,95,49,50,48,57,32,64,32,64,-32,64,32,75,32,64,32,64,32,64,32,58,49,50,49,48,32,64,10,65,-32,83,39,32,66,32,64,32,66,32,95,50,54,32,64,32,67,39,32,95,-55,50,52,32,64,32,66,32,95,51,48,51,32,95,51,48,53,32,64,32,-64,32,95,51,48,54,32,95,51,48,56,32,64,32,64,32,64,32,95,49,-54,32,64,32,64,32,64,32,95,57,57,56,32,102,114,111,109,85,84,70,-56,32,34,101,120,112,111,114,116,34,32,64,32,64,32,64,32,58,49,50,-48,57,32,64,10,65,32,85,32,90,32,85,32,67,39,66,32,67,32,67,-32,61,61,32,64,32,35,48,32,64,32,64,32,95,50,49,57,32,102,114,-111,109,85,84,70,56,32,34,116,121,81,73,100,101,110,116,34,32,64,32,-64,32,64,32,64,32,85,32,73,32,64,32,64,32,64,32,64,32,64,32,-58,49,50,48,56,32,64,10,65,32,67,39,66,32,66,39,32,66,32,95,-54,48,32,64,32,66,32,83,39,32,95,49,50,48,54,32,64,32,95,52,-56,55,32,64,32,64,32,67,39,32,67,32,64,32,67,39,32,67,32,64,-32,67,32,95,57,57,56,32,75,32,64,32,64,32,64,32,75,32,95,53,-53,48,32,95,51,48,53,32,64,32,64,32,64,32,64,32,73,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,50,55,53,-32,95,53,56,32,64,32,64,32,64,32,64,32,67,32,95,50,48,55,32,-64,32,64,32,64,32,58,49,50,48,55,32,64,10,65,32,80,32,58,49,-50,48,54,32,64,10,65,32,66,32,66,32,67,32,64,32,64,32,80,32,-64,32,58,49,50,48,53,32,64,10,65,32,66,32,66,32,83,39,32,66,-32,64,32,66,39,32,66,39,32,66,32,83,39,32,66,32,64,32,64,32,-66,32,66,32,95,51,51,53,32,64,32,64,32,67,39,66,32,66,32,95,-51,51,53,32,64,32,89,32,66,32,80,32,95,49,48,55,32,64,32,64,-32,66,32,67,32,66,32,64,32,64,32,66,32,90,32,64,32,66,32,66,-32,90,32,64,32,64,32,66,32,67,32,95,51,51,53,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,89,32,66,32,80,32,-95,49,48,55,32,64,32,64,32,66,32,67,32,66,32,64,32,64,32,66,-32,90,32,64,32,66,32,67,32,95,51,51,53,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,95,53,49,53,32,64,32,58,49,50,48,52,32,64,10,65,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,66,32,67,39,32,67,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,67,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,67,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,-67,39,32,67,39,66,32,64,32,67,39,66,32,67,32,95,55,51,51,32,-64,32,35,49,32,64,32,64,32,95,49,49,57,54,32,64,32,64,32,67,-32,95,53,53,32,95,54,50,56,32,95,49,49,48,57,32,95,57,57,53,-32,64,32,64,32,64,32,64,32,95,49,50,48,49,32,64,32,64,32,64,-32,67,32,95,53,53,32,95,54,50,56,32,95,49,49,48,57,32,95,57,-57,53,32,64,32,64,32,64,32,64,32,95,49,50,48,50,32,64,32,64,-32,64,32,95,54,49,55,32,64,32,64,32,95,55,57,50,32,64,32,64,-32,64,32,64,32,67,39,32,67,32,64,32,67,32,80,32,64,32,95,53,-56,32,64,32,64,32,95,53,56,32,64,32,64,32,64,32,95,53,56,32,-64,32,64,32,95,53,56,32,64,32,58,49,50,48,51,32,64,10,65,32,-95,54,48,32,83,32,67,39,32,83,32,64,32,83,39,32,67,39,32,67,-39,32,83,32,80,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,39,32,79,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,39,32,66,32,83,39,32,95,50,54,32,64,32,64,32,66,32,66,32,-95,55,54,53,32,64,32,64,32,66,32,66,32,95,50,54,32,95,53,54,-57,32,64,32,64,32,64,32,67,39,32,67,32,64,32,67,39,32,83,39,-32,95,53,55,48,32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,-64,32,67,32,80,32,64,32,64,32,75,32,64,32,64,32,73,32,64,32,-64,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,39,32,66,32,95,50,54,32,64,32,95,56,49,51,32,64,32,-64,32,64,32,83,39,32,67,39,32,95,53,53,32,95,55,54,50,32,64,-32,64,32,64,32,67,32,95,56,52,50,32,64,32,64,32,73,32,64,32,-64,32,64,32,64,32,75,32,64,32,64,32,95,54,53,50,32,95,55,53,-49,32,64,32,64,32,64,32,95,54,48,32,95,49,49,54,51,32,64,32,-64,32,64,32,66,32,89,32,66,32,80,32,75,32,64,32,64,32,67,39,-66,32,66,32,95,53,57,32,64,32,67,39,32,95,56,49,49,32,64,32,-66,32,95,53,50,48,32,64,32,66,32,95,49,53,51,32,79,32,35,57,-55,32,64,32,75,32,64,32,64,32,64,32,95,49,53,52,32,95,49,56,-56,32,64,32,64,32,64,32,64,32,95,56,52,55,32,64,32,64,32,64,-32,64,32,64,32,64,32,95,53,52,52,32,95,52,52,53,32,64,32,95,-57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,53,52,52,32,95,52,52,53,32,-64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,50,-32,64,32,64,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,-48,50,32,35,49,48,32,64,32,64,32,64,32,64,32,58,49,50,48,50,-32,64,10,65,32,83,39,32,67,32,83,39,32,83,32,64,32,67,39,32,-67,39,32,67,32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,95,-49,53,51,32,64,32,64,32,66,32,83,39,32,79,32,64,32,66,32,80,-32,95,55,53,50,32,102,114,111,109,85,84,70,56,32,34,45,62,34,32,-64,32,64,32,64,32,64,32,67,39,32,79,32,64,32,80,32,95,55,53,-56,32,64,32,95,49,49,57,55,32,64,32,64,32,75,32,64,32,64,32,-64,32,64,32,83,39,32,83,39,32,79,32,64,32,64,32,66,32,66,32,-80,32,95,55,53,50,32,102,114,111,109,85,84,70,56,32,34,61,62,34,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,79,32,64,-32,64,32,80,32,95,49,49,57,56,32,64,32,64,32,75,32,64,32,64,-32,64,32,66,32,83,39,32,79,32,64,32,66,32,80,32,95,55,53,50,-32,79,32,35,49,50,54,32,64,32,75,32,64,32,64,32,64,32,64,32,-67,39,32,79,32,64,32,80,32,95,56,55,53,32,64,32,95,49,49,57,-57,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,66,32,83,39,-32,79,32,64,32,66,32,80,32,95,55,53,50,32,95,49,53,51,32,95,-53,55,49,32,64,32,102,114,111,109,85,84,70,56,32,34,91,93,34,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,79,32,64,32,80,32,95,-49,53,51,32,95,53,55,49,32,64,32,102,114,111,109,85,84,70,56,32,-34,91,93,34,32,64,32,64,32,64,32,95,49,50,48,48,32,64,32,64,-32,75,32,64,32,64,32,64,32,64,32,66,32,83,39,32,79,32,64,32,-66,32,80,32,95,55,53,50,32,79,32,35,56,53,57,52,32,64,32,75,-32,64,32,64,32,64,32,64,32,67,39,32,79,32,64,32,80,32,95,55,-53,56,32,64,32,95,49,49,57,55,32,64,32,64,32,75,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,64,32,66,32,66,-32,80,32,95,55,53,50,32,79,32,35,56,54,53,56,32,64,32,75,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,-64,32,80,32,95,49,49,57,56,32,64,32,64,32,75,32,64,32,64,32,-64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,95,54,48,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,39,32,83,39,32,83,32,80,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,79,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,-66,32,66,32,67,39,32,95,50,54,32,64,32,64,32,67,32,66,32,64,-32,95,50,49,51,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,-66,32,66,32,95,50,54,32,64,32,66,32,95,56,49,51,32,64,32,67,-32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,83,39,32,-66,32,64,32,95,53,53,32,95,49,49,49,54,32,64,32,64,32,67,32,-95,51,49,57,32,64,32,64,32,64,32,64,32,64,32,75,32,64,32,64,-32,95,54,53,50,32,95,55,53,49,32,64,32,64,32,64,32,95,53,52,-52,32,95,52,52,53,32,64,32,95,57,48,32,95,49,48,52,32,64,32,-95,49,48,50,32,35,50,32,64,32,64,32,64,32,95,57,48,32,95,49,-48,52,32,64,32,95,49,48,50,32,35,49,48,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,95,55,54,53,32,64,32,66,32,95,52,55,-53,32,64,32,95,55,53,50,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,95,50,54,32,64,32,66,32,95,56,49,51,32,64,32,67,32,79,-32,64,32,75,32,64,32,64,32,64,32,64,32,66,32,95,49,49,49,54,-32,95,49,49,49,53,32,64,32,64,32,83,32,95,49,49,49,54,32,64,-32,73,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,95,56,49,-49,32,64,32,95,55,53,52,32,64,32,64,32,95,52,55,53,32,64,32,-95,53,50,48,32,79,32,35,49,48,55,32,64,32,75,32,64,32,64,32,-64,32,58,49,50,48,49,32,64,10,65,32,95,49,49,49,54,32,95,56,-52,55,32,64,32,95,56,52,55,32,64,32,58,49,50,48,48,32,64,10,-65,32,95,49,49,49,54,32,95,56,52,55,32,64,32,95,49,49,49,54,-32,95,56,52,55,32,64,32,95,49,49,49,53,32,64,32,64,32,58,49,-49,57,57,32,64,10,65,32,102,114,111,109,85,84,70,56,32,34,80,114,-105,109,105,116,105,118,101,115,46,61,62,34,32,64,32,58,49,49,57,56,-32,64,10,65,32,95,50,54,32,95,49,49,49,54,32,95,56,52,55,32,-64,32,64,32,95,49,49,49,54,32,95,56,52,55,32,64,32,95,56,52,-55,32,64,32,64,32,58,49,49,57,55,32,64,10,65,32,95,54,32,95,-55,51,53,32,95,53,50,48,32,102,114,111,109,85,84,70,56,32,34,80,-114,105,109,105,116,105,118,101,115,46,45,62,34,32,64,32,64,32,64,32,-80,32,95,49,49,57,53,32,64,32,95,56,56,32,95,49,48,52,32,64,-32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,32,-64,32,64,32,64,32,64,32,64,32,64,32,95,55,51,53,32,95,53,50,-48,32,102,114,111,109,85,84,70,56,32,34,80,114,105,109,105,116,105,118,-101,115,46,61,62,34,32,64,32,64,32,64,32,80,32,95,49,49,57,53,-32,64,32,95,56,56,32,95,49,48,52,32,64,32,95,57,48,32,95,49,-48,52,32,64,32,95,49,48,50,32,35,50,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,49,49,57,54,32,64,10,65,32,75,32,75,32,64,-32,58,49,49,57,53,32,64,10,65,32,83,39,32,95,49,48,54,32,95,-53,53,54,32,64,32,64,32,95,49,48,56,32,95,53,53,54,32,64,32,-95,55,51,57,32,64,32,64,32,67,39,32,95,48,32,95,53,53,54,32,-64,32,64,32,95,49,49,51,51,32,95,51,48,53,32,64,32,64,32,83,-39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,95,49,48,56,-32,95,53,53,54,32,64,32,95,49,49,51,55,32,64,32,64,32,67,39,-32,95,48,32,95,53,53,54,32,64,32,64,32,95,49,49,56,52,32,64,-32,83,39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,95,49,-49,56,55,32,64,32,95,49,49,57,51,32,64,32,64,32,64,32,64,32,-64,32,58,49,49,57,52,32,64,10,65,32,83,39,32,95,49,48,54,32,-95,53,53,54,32,64,32,64,32,95,49,48,56,32,95,53,53,54,32,64,-32,95,49,49,56,57,32,64,32,64,32,95,51,49,54,32,95,53,53,54,-32,64,32,66,32,95,49,48,54,32,95,53,53,54,32,64,32,95,49,49,-57,48,32,64,32,64,32,95,49,49,57,50,32,95,51,48,53,32,64,32,-64,32,64,32,64,32,58,49,49,57,51,32,64,10,65,32,83,39,32,66,-32,64,32,66,32,95,50,54,32,64,32,67,32,95,55,57,51,32,64,32,-67,32,95,52,48,32,95,55,57,52,32,64,32,64,32,95,55,57,50,32,-64,32,64,32,64,32,64,32,67,39,32,83,32,64,32,66,32,67,32,66,-32,64,32,64,32,83,39,32,83,39,32,83,32,64,32,64,32,66,32,66,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,55,32,64,32,-64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,-32,61,61,32,64,32,35,55,32,64,32,64,32,64,32,64,32,66,32,85,-32,64,32,66,32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,64,-32,95,55,50,56,32,95,55,50,57,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,67,39,66,32,64,-32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,95,-56,53,54,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,67,39,66,32,66,39,32,95,49,49,50,49,32,64,32,-64,32,64,32,66,32,67,32,64,32,95,53,52,49,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,51,32,64,32,64,32,-64,32,64,32,66,32,85,32,64,32,83,39,32,83,39,32,66,32,64,32,-64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,-67,32,95,49,48,48,51,32,64,32,102,114,111,109,85,84,70,56,32,34,-116,121,112,101,32,115,105,103,110,97,116,117,114,101,34,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,-66,32,90,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,-67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,95,56,53,-54,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,32,95,48,-32,95,53,53,54,32,64,32,64,32,64,32,67,32,95,49,48,53,53,32,-95,52,51,32,64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,-32,66,39,32,66,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,-95,49,49,57,49,32,64,32,64,32,64,32,66,32,66,32,66,32,95,48,-32,95,53,53,54,32,64,32,95,55,50,56,32,95,55,50,57,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,50,54,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,67,39,32,95,51,56,55,32,64,32,64,32,64,32,66,-32,67,32,64,32,95,53,52,49,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,58,49,49,57,50,-32,64,10,65,32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,-56,32,95,56,53,56,32,64,32,64,32,64,32,66,32,80,32,95,49,49,-32,95,53,53,54,32,64,32,95,49,48,55,32,64,32,64,32,64,32,66,-32,90,32,64,32,66,32,85,32,64,32,66,32,66,32,67,39,32,95,48,-32,95,53,53,54,32,64,32,64,32,95,56,54,56,32,64,32,64,32,64,-32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,50,54,32,64,32,-64,32,67,39,66,32,95,55,56,57,32,64,32,95,51,48,54,32,95,51,-48,56,32,64,32,64,32,64,32,64,32,66,32,95,49,53,51,32,102,114,-111,109,85,84,70,56,32,34,67,97,110,110,111,116,32,115,97,116,105,115,-102,121,32,99,111,110,115,116,114,97,105,110,116,58,32,34,32,64,32,64,-32,64,32,95,49,53,52,32,95,55,48,51,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,58,49,49,57,49,32,64,10,65,32,95,-50,54,32,95,55,51,48,32,64,32,67,32,95,55,51,49,32,95,56,54,-51,32,64,32,95,49,50,56,32,64,32,64,32,95,54,49,55,32,64,32,-64,32,58,49,49,57,48,32,64,10,65,32,66,32,95,48,32,95,53,53,-54,32,64,32,95,55,50,56,32,95,55,50,57,32,64,32,64,32,64,32,-67,32,67,39,32,67,39,32,64,32,66,32,64,32,66,32,83,39,32,83,-32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,-52,32,64,32,64,32,64,32,83,39,32,83,32,64,32,66,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,55,32,64,32,64,32,64,32,-83,39,32,83,32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,57,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,57,32,64,32,64,32,64,32,85,-32,66,32,67,39,66,32,66,32,64,32,64,32,66,32,66,32,67,39,32,-67,32,64,32,64,32,64,32,66,32,67,39,32,67,32,64,32,64,32,95,-49,49,56,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,55,32,-64,32,64,32,64,32,85,32,75,32,95,49,49,49,49,32,95,51,48,53,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,52,32,64,32,64,32,-64,32,85,32,67,39,32,95,49,48,56,32,95,53,53,54,32,64,32,64,-32,67,32,95,49,49,49,49,32,95,51,48,53,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,67,32,-64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,49,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,32,-64,32,64,32,66,32,85,32,64,32,66,32,66,32,90,32,64,32,64,32,-66,32,67,32,66,32,64,32,64,32,66,32,67,39,66,32,66,32,64,32,-64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,-64,32,83,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,66,-32,66,32,66,32,67,39,32,83,39,32,64,32,95,49,49,49,48,32,95,-51,48,53,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,-32,66,32,64,32,66,32,95,50,54,32,64,32,95,56,49,51,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,50,54,32,95,56,-49,51,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,67,39,32,95,55,54,50,32,64,32,66,32,95,50,54,-32,95,50,55,57,32,64,32,64,32,66,32,95,50,54,32,95,52,56,48,-32,64,32,64,32,95,55,50,52,32,95,49,54,32,64,32,95,54,48,32,-95,50,55,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,56,52,50,32,64,-32,64,32,95,53,52,49,32,95,51,48,53,32,64,32,64,32,64,32,95,-54,48,32,95,49,49,54,51,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,95,50,54,32,95,53,54,57,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,-49,48,48,48,32,64,32,64,32,95,53,52,49,32,95,51,48,53,32,64,-32,64,32,64,32,95,55,50,52,32,95,56,32,95,53,56,32,64,32,64,-32,95,54,48,32,95,50,52,57,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-85,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,67,32,66,32,-64,32,64,32,67,39,32,83,39,32,83,39,32,67,39,32,95,49,48,54,-32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,-39,32,67,39,32,67,39,32,95,49,48,56,32,95,53,53,54,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,-64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,32,67,39,-32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,67,39,32,83,39,32,64,32,95,49,49,-49,48,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,83,39,32,66,32,64,32,66,39,32,66,39,32,66,-32,95,50,54,32,64,32,95,56,49,51,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,67,39,66,32,66,39,32,66,32,95,-50,54,32,64,32,95,56,49,51,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,67,39,66,32,66,32,95,50,54,32,64,32,-95,49,49,54,50,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,95,53,53,32,-95,54,32,95,55,54,50,32,64,32,95,50,55,57,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,56,-52,50,32,64,32,64,32,95,53,52,49,32,95,51,48,53,32,64,32,64,-32,64,32,95,54,48,32,95,49,49,54,51,32,64,32,64,32,64,32,64,-32,95,55,50,52,32,95,49,54,32,64,32,95,54,48,32,95,50,55,57,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,95,50,54,32,95,53,54,57,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,-83,39,32,67,39,66,32,64,32,66,32,66,32,95,53,55,48,32,64,32,-64,32,66,32,89,32,64,32,66,32,66,32,80,32,75,32,64,32,64,32,-64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,32,66,32,-90,32,64,32,64,32,66,39,32,66,32,67,39,32,67,39,32,67,39,32,-95,53,57,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,-66,32,64,32,66,32,66,32,80,32,64,32,64,32,95,53,52,49,32,95,-51,48,53,32,64,32,64,32,64,32,64,32,66,32,67,39,32,95,49,56,-49,32,95,49,48,52,32,64,32,64,32,95,55,50,52,32,95,51,50,49,-32,64,32,95,51,50,49,32,64,32,64,32,64,32,67,32,67,32,95,51,-48,49,32,64,32,35,49,32,64,32,64,32,35,48,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,52,-49,32,95,51,48,53,32,64,32,64,32,64,32,95,55,50,52,32,95,56,-32,95,53,56,32,64,32,64,32,95,54,48,32,95,50,52,57,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,67,39,-32,95,49,48,56,32,95,53,53,54,32,64,32,64,32,66,32,85,32,64,-32,90,32,90,32,90,32,66,32,80,32,75,32,95,49,49,32,95,53,53,-54,32,64,32,95,49,48,55,32,64,32,64,32,64,32,64,32,66,32,95,-49,48,56,32,95,53,53,54,32,64,32,64,32,66,32,85,32,64,32,66,-32,90,32,64,32,67,39,32,83,39,32,95,48,32,95,53,53,54,32,64,-32,64,32,64,32,66,32,66,32,95,50,54,32,95,49,48,48,51,32,95,-51,48,53,32,64,32,102,114,111,109,85,84,70,56,32,34,63,63,63,34,-32,64,32,64,32,64,32,64,32,64,32,95,49,49,53,52,32,64,32,64,-32,66,32,85,32,64,32,66,32,67,32,64,32,95,49,49,49,48,32,95,-51,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,95,49,48,-55,32,64,32,64,32,64,32,58,49,49,56,57,32,64,10,65,32,66,32,-66,32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,-50,56,32,95,55,50,57,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,83,39,32,67,39,32,67,39,32,67,39,32,83,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,-66,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,67,-32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,32,83,39,32,67,39,32,67,39,32,83,39,-32,67,39,32,83,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-67,39,66,32,66,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,-32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,83,39,32,66,32,64,32,66,39,32,66,32,67,39,-32,83,39,32,67,39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,67,39,32,83,32,64,32,67,32,-95,49,49,49,48,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,95,50,54,32,95,53,54,57,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,83,39,32,67,-39,32,83,39,32,95,53,55,48,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,79,32,64,32,64,32,64,32,67,39,66,32,66,32,67,-39,32,80,32,64,32,64,32,95,53,52,49,32,95,51,48,53,32,64,32,-64,32,64,32,95,51,50,49,32,64,32,64,32,75,32,64,32,64,32,95,-53,52,49,32,95,51,48,53,32,64,32,64,32,64,32,95,53,56,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,83,-39,32,66,32,64,32,66,32,67,39,32,83,39,32,83,39,32,66,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,49,48,54,32,-95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,95,49,48,56,32,95,53,53,54,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,-66,32,67,39,32,67,32,64,32,67,32,67,32,83,39,32,64,32,90,32,-75,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,66,32,66,32,67,39,32,83,32,64,32,64,32,66,-32,66,32,67,39,32,67,39,32,64,32,95,49,49,49,48,32,95,51,48,-53,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,-66,32,95,50,54,32,64,32,95,56,49,51,32,64,32,64,32,64,32,66,-32,66,32,95,49,49,52,50,32,64,32,64,32,66,32,67,32,95,56,52,-50,32,64,32,64,32,95,54,48,32,95,54,32,95,52,55,53,32,64,32,-95,56,53,52,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,95,50,54,32,95,52,55,53,32,64,32,64,32,64,32,-95,53,52,49,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,-95,53,53,48,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,67,39,66,32,66,39,32,95,49,49,-52,48,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,66,-32,64,32,64,32,66,32,66,32,67,39,32,67,39,32,67,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,67,39,-32,67,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,67,-32,80,32,64,32,64,32,64,32,64,32,95,54,48,32,67,32,67,39,32,-67,32,64,32,67,32,67,32,83,39,32,64,32,90,32,75,32,64,32,64,-32,64,32,90,32,75,32,64,32,64,32,64,32,75,32,64,32,64,32,110,-111,77,97,116,99,104,32,102,114,111,109,85,84,70,56,32,34,115,114,99,-47,77,105,99,114,111,72,115,47,84,121,112,101,67,104,101,99,107,46,104,-115,34,32,64,32,64,32,35,49,50,49,56,32,64,32,35,50,53,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,95,49,49,52,49,32,64,-32,95,54,48,32,95,56,53,52,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,53,52,50,32,64,32,64,32,83,39,32,66,32,-64,32,66,39,32,66,32,95,50,54,32,64,32,95,56,49,51,32,64,32,-64,32,64,32,66,32,66,32,95,53,53,32,95,55,54,50,32,64,32,64,-32,64,32,66,32,67,32,95,56,52,50,32,64,32,64,32,95,54,48,32,-95,49,49,54,51,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,-66,32,95,49,53,51,32,64,32,95,54,48,32,67,32,67,39,32,67,32,-64,32,67,32,67,32,83,39,32,64,32,90,32,75,32,64,32,64,32,64,-32,90,32,75,32,64,32,64,32,64,32,65,32,64,32,64,32,110,111,77,-97,116,99,104,32,102,114,111,109,85,84,70,56,32,34,115,114,99,47,77,-105,99,114,111,72,115,47,84,121,112,101,67,104,101,99,107,46,104,115,34,-32,64,32,64,32,35,49,50,49,55,32,64,32,35,50,53,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,89,32,66,32,80,32,75,32,64,-32,64,32,83,39,32,67,32,64,32,66,32,83,39,32,83,39,32,64,32,-66,32,67,32,64,32,67,32,67,32,83,39,32,64,32,90,32,75,32,64,-32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,67,-39,66,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,73,32,64,-32,64,32,64,32,64,32,64,32,67,32,95,53,52,49,32,95,51,48,53,-32,64,32,64,32,64,32,64,32,58,49,49,56,56,32,64,10,65,32,66,-32,95,50,54,32,95,49,49,56,54,32,64,32,64,32,66,32,95,50,54,-32,95,52,54,49,32,64,32,64,32,66,32,95,53,57,32,95,53,56,32,-64,32,64,32,89,32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,-66,32,64,32,64,32,83,39,32,83,39,32,67,39,66,32,64,32,64,32,-66,32,67,32,67,32,61,61,32,64,32,35,49,49,32,64,32,64,32,64,-32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,67,32,95,53,57,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,58,49,49,56,55,32,64,10,65,32,66,32,95,50,54,32,95,55,51,-48,32,64,32,64,32,67,32,95,55,51,49,32,95,49,49,56,53,32,64,-32,95,49,50,56,32,64,32,64,32,64,32,58,49,49,56,54,32,64,10,-65,32,95,55,51,50,32,75,32,85,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,55,51,-51,32,64,32,64,32,64,32,64,32,58,49,49,56,53,32,64,10,65,32,-66,32,95,50,54,32,95,55,56,54,32,64,32,64,32,67,39,32,95,48,-32,95,53,53,54,32,64,32,64,32,66,32,95,49,56,32,95,53,53,52,-32,64,32,95,50,57,52,32,64,32,64,32,95,51,49,54,32,95,53,53,-54,32,64,32,95,49,49,52,52,32,64,32,64,32,64,32,67,39,32,95,-48,32,95,53,53,54,32,64,32,64,32,66,32,95,49,56,32,95,53,53,-52,32,64,32,95,50,57,52,32,64,32,64,32,95,51,49,54,32,95,53,-53,54,32,64,32,95,49,49,53,56,32,64,32,64,32,64,32,67,39,32,-95,48,32,95,53,53,54,32,64,32,64,32,66,32,95,49,56,32,95,53,-53,52,32,64,32,95,50,57,52,32,64,32,64,32,95,51,49,54,32,95,-53,53,54,32,64,32,95,49,49,56,49,32,64,32,64,32,64,32,67,39,-32,95,48,32,95,53,53,54,32,64,32,64,32,66,32,95,49,56,32,95,-53,53,52,32,64,32,95,50,57,52,32,64,32,64,32,95,51,49,54,32,-95,53,53,54,32,64,32,95,49,49,56,51,32,64,32,64,32,64,32,95,-49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,-58,49,49,56,52,32,64,10,65,32,83,32,73,32,64,32,83,39,32,67,-39,66,32,64,32,66,32,67,32,67,32,61,61,32,64,32,35,49,48,32,-64,32,64,32,64,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,-32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,66,32,85,-32,64,32,66,32,83,39,32,66,32,64,32,66,32,95,48,32,95,53,53,-54,32,64,32,64,32,66,32,95,49,56,32,95,53,53,52,32,64,32,95,-57,49,51,32,64,32,64,32,95,56,53,54,32,95,51,48,53,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,83,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,67,39,32,67,39,-32,67,39,32,67,39,32,67,39,32,83,39,32,95,48,32,95,53,53,54,-32,64,32,64,32,67,32,95,56,53,48,32,64,32,95,49,49,56,50,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,95,48,32,95,-53,53,54,32,64,32,95,55,50,56,32,95,57,49,48,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,66,32,83,39,32,83,39,32,66,32,64,32,-64,32,66,32,66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,83,39,32,-66,32,64,32,66,32,67,32,64,32,95,50,48,55,32,64,32,64,32,66,-32,67,39,32,95,50,54,32,64,32,95,55,56,57,32,95,51,48,53,32,-64,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,-56,32,34,110,111,116,32,97,32,99,108,97,115,115,32,34,32,64,32,64,-32,64,32,95,50,53,52,32,64,32,64,32,64,32,64,32,95,49,49,32,-95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,90,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,90,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-66,32,64,32,66,32,66,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,83,39,32,67,39,32,64,32,66,32,83,39,32,-95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,67,39,32,67,-32,64,32,67,39,32,67,32,64,32,67,39,32,95,56,51,49,32,95,50,-48,50,32,64,32,64,32,95,54,48,32,95,50,52,57,32,64,32,64,32,-64,32,95,49,49,32,95,53,53,54,32,64,32,95,49,48,55,32,64,32,-64,32,64,32,90,32,83,39,32,95,50,54,32,64,32,66,32,95,55,56,-57,32,95,51,48,53,32,64,32,64,32,95,51,48,54,32,95,51,48,56,-32,64,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,-70,56,32,34,115,117,112,101,114,102,108,111,117,115,32,98,105,110,100,105,-110,103,32,34,32,64,32,64,32,64,32,95,49,53,52,32,95,50,53,53,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,95,48,32,-95,53,53,54,32,64,32,95,55,50,56,32,95,55,50,57,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,67,39,32,67,39,32,67,39,66,32,64,-32,64,32,66,32,66,32,66,39,32,64,32,64,32,66,32,66,32,66,32,-83,39,32,66,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-39,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,66,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,67,39,-32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,95,57,50,-53,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,67,39,32,79,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,67,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,32,67,-32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,32,67,32,64,-32,64,32,64,32,67,39,32,67,39,32,80,32,64,32,64,32,66,32,66,-32,95,50,54,32,95,52,55,53,32,64,32,64,32,64,32,67,32,95,53,-52,49,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,66,-39,32,66,39,32,66,39,32,66,39,32,79,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,32,83,39,32,66,-32,64,32,64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,66,-32,66,32,79,32,64,32,64,32,67,39,32,95,49,49,50,50,32,64,32,-67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,79,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-67,39,66,32,66,39,32,66,39,32,66,32,95,50,54,32,64,32,95,51,-56,55,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,95,50,54,32,95,56,49,53,32,95,53,56,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,-39,32,66,39,32,66,32,95,56,51,50,32,64,32,66,32,95,50,54,32,-95,52,55,53,32,64,32,64,32,95,53,52,50,32,64,32,64,32,64,32,-64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,39,32,-64,32,66,32,66,32,95,49,53,51,32,64,32,64,32,66,32,95,54,48,-32,64,32,66,32,95,56,32,64,32,66,32,95,50,54,32,95,52,55,53,-32,64,32,64,32,67,32,95,54,53,49,32,64,32,95,49,48,57,56,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,95,-54,48,32,64,32,64,32,67,39,66,32,66,32,83,39,32,95,50,54,32,-64,32,64,32,66,32,66,32,95,50,55,53,32,64,32,64,32,66,32,66,-32,95,50,54,32,95,56,49,52,32,64,32,64,32,64,32,66,32,66,32,-95,50,54,32,95,57,55,52,32,64,32,64,32,64,32,66,32,66,32,95,-50,54,32,95,52,55,53,32,64,32,64,32,64,32,67,39,66,32,66,32,-95,50,54,32,64,32,95,57,57,57,32,64,32,64,32,95,49,49,48,52,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,95,54,57,-55,32,95,50,48,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,89,32,66,32,80,32,75,32,64,32,64,32,83,39,32,-67,39,32,83,32,64,32,64,32,67,39,32,67,39,32,67,32,64,32,64,-32,67,39,32,67,39,32,67,39,32,83,39,32,64,32,64,32,64,32,66,-32,67,32,66,32,64,32,64,32,66,32,67,39,32,67,39,32,95,53,57,-32,64,32,64,32,67,39,66,32,80,32,64,32,95,56,49,52,32,64,32,-64,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,90,32,-75,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,51,48,54,32,95,54,54,51,32,-64,32,64,32,64,32,95,57,57,55,32,95,51,48,53,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,49,49,56,51,32,64,10,65,32,-102,114,111,109,85,84,70,56,32,34,105,110,115,116,34,32,64,32,58,49,-49,56,50,32,64,10,65,32,83,32,73,32,64,32,83,39,32,67,32,64,-32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,-64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,67,32,67,-32,61,61,32,64,32,35,49,32,64,32,64,32,64,32,66,32,95,49,49,-32,95,53,53,54,32,64,32,64,32,67,32,79,32,64,32,75,32,64,32,-64,32,64,32,64,32,66,32,85,32,64,32,67,39,66,32,66,39,32,66,-39,32,66,32,95,49,56,32,95,53,53,52,32,64,32,64,32,67,39,32,-95,54,32,64,32,95,53,57,32,64,32,95,50,57,52,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,95,51,49,54,32,95,53,53,54,32,-64,32,64,32,64,32,67,39,66,32,95,49,49,56,48,32,64,32,67,32,-79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,85,32,64,32,67,39,66,32,66,39,32,66,39,32,66,32,-95,49,56,32,95,53,53,52,32,64,32,64,32,67,39,32,95,54,32,64,-32,95,53,57,32,64,32,95,50,57,52,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,95,51,49,54,32,95,53,53,54,32,64,32,64,32,-64,32,95,49,49,56,48,32,64,32,64,32,64,32,64,32,64,32,58,49,-49,56,49,32,64,10,65,32,67,39,32,67,39,32,83,39,32,67,32,83,-32,67,39,32,95,54,57,55,32,95,54,53,32,64,32,64,32,95,50,49,-51,32,64,32,95,49,49,55,57,32,64,32,64,32,83,39,32,95,50,54,-32,64,32,66,32,95,55,56,57,32,95,51,48,53,32,64,32,64,32,95,-51,48,54,32,95,51,48,56,32,64,32,64,32,64,32,66,32,95,49,53,-51,32,102,114,111,109,85,84,70,56,32,34,67,97,110,110,111,116,32,100,-101,114,105,118,101,32,34,32,64,32,64,32,64,32,95,49,53,52,32,95,-50,53,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,95,57,57,55,-32,95,51,48,53,32,64,32,64,32,58,49,49,56,48,32,64,10,65,32,-79,32,80,32,102,114,111,109,85,84,70,56,32,34,68,97,116,97,46,84,-121,112,101,97,98,108,101,46,84,121,112,101,97,98,108,101,34,32,64,32,-64,32,95,49,49,54,49,32,64,32,64,32,79,32,80,32,102,114,111,109,-85,84,70,56,32,34,68,97,116,97,46,69,113,46,69,113,34,32,64,32,-64,32,95,49,49,55,50,32,64,32,64,32,79,32,80,32,102,114,111,109,-85,84,70,56,32,34,68,97,116,97,46,79,114,100,46,79,114,100,34,32,-64,32,64,32,95,49,49,55,53,32,64,32,64,32,79,32,80,32,102,114,-111,109,85,84,70,56,32,34,84,101,120,116,46,83,104,111,119,46,83,104,-111,119,34,32,64,32,64,32,95,49,49,55,56,32,64,32,64,32,75,32,-64,32,64,32,64,32,64,32,58,49,49,55,57,32,64,10,65,32,67,39,-32,83,39,32,83,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,-32,64,32,95,49,49,54,54,32,64,32,67,39,66,32,66,32,67,32,64,-32,67,39,32,67,32,64,32,67,39,32,67,39,32,83,39,32,64,32,64,-32,66,32,66,32,67,32,64,32,64,32,67,39,32,67,39,32,67,39,32,-83,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,-83,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,66,32,-64,32,64,32,66,32,66,32,66,32,67,39,32,67,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,32,67,39,32,83,39,32,67,39,32,67,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,83,39,32,67,-39,32,67,39,32,83,39,32,67,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,83,39,32,83,39,32,67,39,32,67,39,32,-67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,83,39,32,-67,39,32,83,39,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,79,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,66,32,66,39,32,-66,39,32,66,39,32,66,39,32,66,39,32,66,39,32,66,39,32,95,49,-49,49,52,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,79,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,66,-32,66,39,32,66,39,32,66,39,32,95,53,55,54,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,67,39,32,95,54,48,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,-66,32,66,32,83,32,73,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,90,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,67,39,66,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,83,39,32,66,32,64,32,66,39,32,66,39,32,66,39,32,66,32,-67,39,32,64,32,66,32,67,39,32,64,32,66,32,83,39,32,95,50,54,-32,64,32,64,32,66,32,66,32,95,53,55,57,32,64,32,64,32,67,39,-66,32,79,32,64,32,67,39,32,79,32,64,32,85,32,75,32,64,32,64,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,39,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,-83,39,32,66,32,64,32,66,32,83,39,32,83,39,32,66,32,64,32,64,-32,64,32,66,32,66,32,85,32,64,32,64,32,67,32,66,32,64,32,95,-49,49,55,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,90,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,83,-39,32,83,39,32,83,39,32,83,39,32,83,39,32,80,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,-66,39,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,32,66,32,-66,32,66,39,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,32,-66,32,66,32,66,32,95,50,54,32,64,32,64,32,64,32,67,39,32,67,-32,64,32,66,32,83,39,32,67,39,32,64,32,66,39,32,66,32,95,49,-49,52,54,32,64,32,85,32,102,114,111,109,85,84,70,56,32,34,115,104,-111,119,80,97,114,101,110,34,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,66,32,95,49,49,52,54,32,-64,32,85,32,79,32,35,54,50,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,67,32,66,32,64,32,95,54,55,51,32,64,32,64,32,64,-32,64,32,35,49,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,67,39,66,32,66,39,32,66,32,95,50,54,32,64,32,-85,32,79,32,35,51,50,32,64,32,75,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,66,32,66,-32,95,53,57,32,64,32,64,32,67,32,66,32,64,32,95,49,49,55,55,-32,64,32,64,32,64,32,64,32,66,32,95,54,48,32,64,32,85,32,35,-49,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,39,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,66,32,95,50,54,32,64,32,64,32,-64,32,64,32,64,32,67,32,83,39,32,67,39,32,64,32,66,32,83,39,-32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,67,39,32,-64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,39,32,-66,32,64,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,67,39,-66,32,66,32,64,32,67,32,66,32,64,32,67,39,32,95,49,53,51,32,-64,32,95,49,49,55,55,32,64,32,79,32,35,49,50,51,32,64,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,67,39,66,32,66,32,95,50,54,32,64,32,85,32,79,32,35,52,52,-32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,95,54,48,32,64,32,64,32,64,32,66,32,66,32,66,-32,85,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,67,39,-66,32,64,32,64,32,67,39,66,32,66,32,64,32,67,32,66,32,64,32,-67,39,32,95,49,53,51,32,64,32,95,49,49,55,55,32,64,32,79,32,-35,54,49,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-85,32,35,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,85,32,79,32,35,49,50,53,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,95,54,51,48,32,64,32,95,54,48,32,-95,50,52,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,85,32,65,32,64,32,64,32,64,32,64,32,67,32,95,49,49,55,48,-32,64,32,79,32,35,49,50,48,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,-75,32,64,32,64,32,67,39,66,32,66,39,32,66,32,95,54,32,64,32,-95,49,49,54,55,32,64,32,64,32,64,32,66,32,95,50,57,53,32,64,-32,64,32,64,32,64,32,66,32,67,39,66,32,66,32,95,52,55,52,32,-64,32,85,32,102,114,111,109,85,84,70,56,32,34,115,104,111,119,83,116,-114,105,110,103,34,32,64,32,64,32,64,32,64,32,64,32,67,32,66,32,-64,32,95,55,49,54,32,64,32,64,32,64,32,64,32,66,32,67,39,66,-32,66,32,95,49,49,52,54,32,64,32,95,52,55,53,32,64,32,64,32,-64,32,67,32,66,32,64,32,95,54,55,51,32,64,32,64,32,64,32,64,-32,66,32,95,49,49,52,54,32,64,32,85,32,79,32,35,52,54,32,64,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,102,114,111,-109,85,84,70,56,32,34,115,104,111,119,115,80,114,101,99,34,32,64,32,-64,32,64,32,64,32,85,32,79,32,35,49,49,50,32,64,32,75,32,64,-32,64,32,64,32,64,32,95,54,32,95,52,55,53,32,64,32,64,32,64,-32,64,32,95,54,53,49,32,64,32,64,32,95,54,54,52,32,64,32,64,-32,64,32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,58,-49,49,55,56,32,64,10,65,32,66,32,83,32,83,39,32,95,49,49,55,-54,32,64,32,95,52,56,48,32,64,32,66,32,95,49,53,51,32,79,32,-35,52,48,32,64,32,75,32,64,32,64,32,64,32,67,32,95,49,53,51,-32,64,32,79,32,35,52,49,32,64,32,75,32,64,32,64,32,64,32,64,-32,64,32,73,32,64,32,64,32,95,50,49,51,32,64,32,58,49,49,55,-55,32,64,10,65,32,83,39,32,95,53,54,32,64,32,95,52,56,50,32,-64,32,95,52,56,52,32,64,32,58,49,49,55,54,32,64,10,65,32,67,-39,32,83,39,32,83,39,32,95,48,32,95,53,53,54,32,64,32,64,32,-64,32,64,32,95,49,49,54,54,32,64,32,67,39,66,32,66,32,67,32,-64,32,67,39,32,67,39,32,83,39,32,66,32,95,49,49,32,95,53,53,-54,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,39,32,79,32,64,32,64,32,64,32,64,32,66,32,67,39,66,32,-66,39,32,95,49,49,49,52,32,64,32,64,32,64,32,67,39,32,67,39,-32,67,39,32,79,32,64,32,64,32,64,32,66,32,66,32,83,32,95,53,-55,54,32,64,32,64,32,64,32,67,39,32,67,39,32,95,53,48,55,32,-64,32,64,32,67,39,32,67,39,32,83,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,83,32,64,32,64,32,64,32,67,39,32,67,39,66,32,-64,32,66,32,66,32,67,39,32,67,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,67,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,39,32,83,39,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,83,39,32,67,39,-32,67,39,32,83,39,32,67,39,32,83,39,32,79,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,66,32,66,32,67,-39,32,95,50,54,32,64,32,64,32,66,32,66,32,95,53,55,57,32,64,-32,64,32,66,32,67,32,79,32,64,32,64,32,67,32,79,32,64,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,-67,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,-83,32,95,51,48,49,32,64,32,64,32,64,32,64,32,67,39,66,32,66,-39,32,66,39,32,66,32,95,50,54,32,64,32,66,32,95,49,49,54,55,-32,64,32,66,32,95,54,32,95,52,55,52,32,64,32,64,32,66,32,95,-52,55,52,32,64,32,66,32,95,50,54,32,95,52,55,53,32,64,32,64,-32,67,32,95,54,53,49,32,64,32,102,114,111,109,85,84,70,56,32,34,-60,62,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,66,32,66,32,67,32,64,32,66,32,95,52,52,48,-32,64,32,66,32,95,54,32,95,52,55,52,32,64,32,64,32,66,32,95,-52,55,52,32,64,32,95,52,55,53,32,64,32,64,32,64,32,64,32,64,-32,85,32,65,32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,54,-32,95,52,55,53,32,64,32,64,32,67,32,67,32,95,49,49,53,48,32,-64,32,95,49,49,55,51,32,64,32,64,32,102,114,111,109,85,84,70,56,-32,34,69,81,34,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,66,32,64,32,66,32,67,39,32,79,32,64,32,64,32,66,32,67,39,-32,95,50,54,32,64,32,66,32,95,53,55,57,32,64,32,67,32,79,32,-64,32,79,32,95,49,48,51,55,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,66,32,95,50,54,32,95,52,55,53,32,64,32,64,32,67,-32,67,32,95,49,49,53,48,32,64,32,95,49,49,55,51,32,64,32,64,-32,102,114,111,109,85,84,70,56,32,34,76,84,34,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,64,32,66,-32,67,39,32,95,50,54,32,64,32,66,32,95,53,55,57,32,64,32,66,-32,79,32,95,49,48,51,55,32,64,32,64,32,67,32,79,32,64,32,75,-32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,95,52,55,-53,32,64,32,64,32,67,32,67,32,95,49,49,53,48,32,64,32,95,49,-49,55,51,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,71,84,-34,32,64,32,64,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,85,32,75,32,64,32,64,32,64,32,85,32,65,32,64,32,-64,32,64,32,64,32,67,32,95,49,49,55,48,32,64,32,79,32,35,49,-50,48,32,64,32,75,32,64,32,64,32,64,32,64,32,85,32,75,32,64,-32,64,32,64,32,67,32,95,49,49,55,48,32,64,32,79,32,35,49,50,-49,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,75,32,-64,32,64,32,64,32,75,32,64,32,64,32,67,32,67,32,95,49,49,53,-48,32,64,32,95,49,49,55,52,32,64,32,64,32,102,114,111,109,85,84,-70,56,32,34,99,111,109,112,97,114,101,34,32,64,32,64,32,64,32,64,-32,64,32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,58,-49,49,55,53,32,64,10,65,32,102,114,111,109,85,84,70,56,32,34,68,-97,116,97,46,79,114,100,34,32,64,32,58,49,49,55,52,32,64,10,65,-32,102,114,111,109,85,84,70,56,32,34,68,97,116,97,46,79,114,100,101,-114,105,110,103,95,84,121,112,101,34,32,64,32,58,49,49,55,51,32,64,-10,65,32,67,39,32,83,39,32,83,39,32,95,48,32,95,53,53,54,32,-64,32,64,32,64,32,64,32,95,49,49,54,54,32,64,32,67,39,66,32,-66,32,67,32,64,32,67,39,32,67,39,32,83,39,32,66,32,95,49,49,-32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,67,39,32,79,32,64,32,64,32,64,32,64,32,66,32,-67,39,66,32,66,39,32,95,49,49,49,52,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,79,32,64,32,64,32,64,32,66,32,66,32,-83,32,95,53,55,54,32,64,32,64,32,64,32,67,39,32,83,39,32,67,-39,32,95,49,53,51,32,64,32,64,32,64,32,67,39,32,67,39,32,95,-54,48,32,64,32,64,32,67,39,32,67,32,64,32,67,39,32,67,39,32,-83,39,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,83,32,64,32,64,32,64,32,66,32,66,32,83,39,-32,67,39,66,32,64,32,66,32,66,32,95,50,54,32,64,32,64,32,66,-32,66,32,95,53,55,57,32,64,32,64,32,66,32,67,39,32,79,32,64,-32,85,32,75,32,64,32,64,32,64,32,67,39,32,79,32,64,32,85,32,-75,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,83,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,66,-32,66,32,66,32,83,32,95,51,48,49,32,64,32,64,32,64,32,64,32,-67,39,66,32,66,39,32,66,39,32,66,32,95,50,54,32,64,32,66,32,-95,49,49,54,55,32,64,32,66,32,95,54,32,95,52,55,52,32,64,32,-64,32,66,32,95,52,55,52,32,64,32,66,32,95,50,54,32,95,52,55,-53,32,64,32,64,32,67,32,67,32,95,49,49,53,48,32,64,32,95,49,-49,54,56,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,38,38,-34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,32,67,32,64,32,66,32,95,52,52,48,32,64,-32,66,32,95,54,32,95,52,55,52,32,64,32,64,32,66,32,95,52,55,-52,32,64,32,95,52,55,53,32,64,32,64,32,64,32,64,32,64,32,85,-32,65,32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,95,-52,55,53,32,64,32,64,32,67,32,67,32,95,49,49,53,48,32,64,32,-95,49,49,54,57,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,-84,114,117,101,34,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,-65,32,64,32,64,32,64,32,64,32,67,32,95,49,49,55,48,32,64,32,-79,32,35,49,50,48,32,64,32,75,32,64,32,64,32,64,32,64,32,67,-32,95,49,49,55,48,32,64,32,79,32,35,49,50,49,32,64,32,75,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,79,32,64,32,66,32,95,-53,55,57,32,79,32,95,49,48,51,55,32,64,32,79,32,95,49,48,51,-55,32,64,32,75,32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,-95,52,55,53,32,64,32,64,32,67,32,67,32,95,49,49,53,48,32,64,-32,95,49,49,54,57,32,64,32,64,32,102,114,111,109,85,84,70,56,32,-34,70,97,108,115,101,34,32,64,32,64,32,64,32,64,32,64,32,75,32,-64,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,75,32,64,32,-64,32,67,32,67,32,95,49,49,53,48,32,64,32,95,49,49,55,49,32,-64,32,64,32,102,114,111,109,85,84,70,56,32,34,61,61,34,32,64,32,-64,32,64,32,64,32,64,32,95,51,48,54,32,95,54,54,51,32,64,32,-64,32,64,32,58,49,49,55,50,32,64,10,65,32,102,114,111,109,85,84,-70,56,32,34,68,97,116,97,46,69,113,34,32,64,32,58,49,49,55,49,-32,64,10,65,32,67,32,66,32,64,32,90,32,90,32,66,32,83,39,32,-66,32,64,32,67,39,32,83,39,32,80,32,64,32,64,32,95,56,52,50,-32,64,32,73,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,-66,32,66,32,95,54,48,32,64,32,64,32,66,32,66,32,95,54,32,95,-52,55,53,32,64,32,64,32,64,32,66,32,67,39,32,95,54,32,64,32,-66,32,95,54,53,49,32,64,32,95,51,48,54,32,95,51,48,56,32,64,-32,64,32,64,32,64,32,67,39,32,95,54,32,64,32,95,49,53,51,32,-64,32,95,49,53,52,32,95,49,56,56,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,95,53,52,52,32,95,52,52,53,32,64,32,95,57,-48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,32,64,32,64,-32,64,32,64,32,95,55,50,52,32,95,51,50,49,32,64,32,95,51,50,-49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,49,55,-48,32,64,10,65,32,95,49,53,51,32,95,49,49,54,56,32,64,32,102,-114,111,109,85,84,70,56,32,34,95,84,121,112,101,34,32,64,32,64,32,-58,49,49,54,57,32,64,10,65,32,102,114,111,109,85,84,70,56,32,34,-68,97,116,97,46,66,111,111,108,34,32,64,32,58,49,49,54,56,32,64,-10,65,32,66,32,89,32,64,32,66,32,66,32,80,32,95,50,49,57,32,-102,114,111,109,85,84,70,56,32,34,102,111,108,100,114,49,34,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,83,32,64,32,85,-32,64,32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,-32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,67,39,66,32,64,-32,64,32,64,32,64,32,64,32,58,49,49,54,55,32,64,10,65,32,67,-39,66,32,66,32,64,32,66,32,66,32,66,32,66,32,95,48,32,95,53,-53,54,32,64,32,95,55,50,56,32,95,55,50,57,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,95,50,54,-32,95,49,52,53,32,95,53,53,53,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,83,39,32,66,32,64,32,66,32,-95,50,54,32,64,32,95,49,48,51,54,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,83,39,32,66,32,64,32,64,32,66,32,66,32,83,39,-32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,54,32,64,-32,64,32,64,32,66,32,66,32,66,32,95,49,49,54,50,32,64,32,64,-32,64,32,66,32,67,39,66,32,66,32,95,54,48,32,64,32,95,55,53,-57,32,64,32,64,32,64,32,66,32,66,32,95,54,48,32,95,49,49,54,-51,32,64,32,64,32,64,32,66,32,95,54,54,32,64,32,67,39,32,95,-54,32,64,32,66,32,67,32,95,54,51,32,95,50,48,50,32,64,32,64,-32,64,32,95,53,53,32,95,54,32,95,49,49,54,52,32,95,50,48,50,-32,64,32,64,32,95,49,49,54,53,32,64,32,64,32,95,53,56,32,64,-32,64,32,64,32,95,56,53,52,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,95,55,53,57,-32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,95,50,54,32,-64,32,64,32,66,32,66,32,95,56,52,50,32,64,32,64,32,67,32,95,-53,52,49,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,95,-54,48,32,95,49,49,54,51,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,49,49,54,54,32,64,10,65,32,85,32,66,32,90,-32,64,32,66,32,67,39,32,67,39,32,95,56,51,49,32,95,50,48,50,-32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,56,56,54,32,-64,32,64,32,64,32,67,39,66,32,95,49,53,51,32,64,32,95,55,50,-52,32,95,54,48,32,95,50,55,57,32,64,32,64,32,95,54,48,32,95,-54,32,95,50,55,57,32,64,32,95,50,55,57,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,95,54,48,32,95,56,53,52,32,64,32,64,-32,64,32,64,32,58,49,49,54,53,32,64,10,65,32,66,32,95,57,50,-50,32,64,32,95,52,48,32,64,32,58,49,49,54,52,32,64,10,65,32,-85,32,90,32,95,52,55,53,32,64,32,64,32,58,49,49,54,51,32,64,-10,65,32,83,32,83,32,64,32,66,32,90,32,64,32,66,32,90,32,64,-32,66,32,95,49,49,52,50,32,64,32,95,57,54,50,32,64,32,64,32,-64,32,64,32,58,49,49,54,50,32,64,10,65,32,90,32,67,32,66,32,-64,32,66,32,90,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,-64,32,95,55,50,56,32,95,55,50,57,32,64,32,64,32,64,32,64,32,-67,39,32,83,39,32,67,39,32,66,32,95,49,49,32,95,53,53,54,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,-39,32,79,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,83,39,-32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,95,49,49,49,52,-32,64,32,64,32,64,32,67,39,66,32,66,39,32,95,52,55,52,32,64,-32,64,32,66,32,66,32,95,50,54,32,95,52,55,53,32,64,32,64,32,-64,32,67,32,95,53,52,49,32,95,51,48,53,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,79,32,64,32,64,-32,64,32,66,32,66,32,83,39,32,95,53,55,54,32,64,32,67,32,67,-32,95,49,49,53,48,32,64,32,95,49,49,53,57,32,64,32,64,32,102,-114,111,109,85,84,70,56,32,34,116,121,112,101,82,101,112,34,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,54,32,95,56,-49,53,32,79,32,95,49,48,51,55,32,64,32,75,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,83,32,64,32,64,32,66,-32,66,32,83,39,32,95,49,49,52,54,32,64,32,66,32,95,52,55,53,-32,64,32,67,32,67,32,95,49,49,53,48,32,64,32,95,49,49,53,57,-32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,109,107,84,121,67,-111,110,65,112,112,34,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,39,32,83,32,64,32,66,32,83,39,32,95,49,49,52,54,32,64,-32,66,32,95,52,55,53,32,64,32,67,32,67,32,95,49,49,53,48,32,-64,32,95,49,49,53,57,32,64,32,64,32,102,114,111,109,85,84,70,56,-32,34,109,107,84,121,67,111,110,34,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,95,50,54,32,64,32,95,54,54,52,32,64,32,64,-32,66,32,95,50,54,32,95,55,49,54,32,64,32,64,32,95,50,49,51,-32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,95,50,54,32,-64,32,95,54,54,52,32,64,32,64,32,66,32,95,50,54,32,95,55,49,-54,32,64,32,64,32,95,50,49,51,32,64,32,64,32,64,32,64,32,64,-32,66,32,95,52,55,53,32,64,32,67,32,67,32,95,49,49,53,48,32,-64,32,95,49,49,54,48,32,64,32,64,32,102,114,111,109,85,84,70,56,-32,34,91,93,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-75,32,64,32,64,32,64,32,75,32,64,32,64,32,95,51,48,54,32,95,-51,48,56,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,49,54,-49,32,64,10,65,32,102,114,111,109,85,84,70,56,32,34,68,97,116,97,-46,76,105,115,116,95,84,121,112,101,34,32,64,32,58,49,49,54,48,32,-64,10,65,32,102,114,111,109,85,84,70,56,32,34,68,97,116,97,46,84,-121,101,97,98,108,101,34,32,64,32,58,49,49,53,57,32,64,10,65,32,-83,32,73,32,64,32,83,39,32,67,32,64,32,66,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,83,39,-32,67,39,66,32,64,32,66,32,67,32,67,32,61,61,32,64,32,35,49,-32,64,32,64,32,64,32,66,32,95,49,49,32,95,53,53,54,32,64,32,-64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,66,32,-85,32,64,32,66,32,66,32,90,32,64,32,64,32,67,39,66,32,66,39,-32,66,32,95,49,56,32,95,53,53,52,32,64,32,64,32,66,32,67,32,-95,49,53,51,32,64,32,64,32,67,32,79,32,64,32,75,32,64,32,64,-32,64,32,64,32,64,32,67,39,66,32,95,49,49,53,55,32,64,32,67,-32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,85,32,64,32,66,32,66,32,90,32,64,32,64,32,67,-39,66,32,66,39,32,66,32,95,49,56,32,95,53,53,52,32,64,32,64,-32,66,32,67,32,95,49,53,51,32,64,32,64,32,67,32,79,32,64,32,-75,32,64,32,64,32,64,32,64,32,64,32,95,49,49,53,55,32,64,32,-64,32,64,32,64,32,64,32,58,49,49,53,56,32,64,10,65,32,66,32,-66,32,95,49,56,32,95,53,53,52,32,64,32,95,50,57,52,32,64,32,-64,32,64,32,67,39,32,83,39,32,95,51,49,54,32,95,53,53,54,32,-64,32,64,32,64,32,95,49,49,53,54,32,64,32,66,32,95,57,50,49,-32,95,55,48,53,32,95,52,48,32,95,50,48,50,32,64,32,64,32,95,-50,52,57,32,64,32,64,32,64,32,89,32,66,32,80,32,75,32,64,32,-64,32,66,32,67,32,66,32,64,32,64,32,66,32,90,32,64,32,66,32,-90,32,64,32,66,32,90,32,64,32,83,39,32,83,39,32,80,32,64,32,-64,32,90,32,64,32,66,32,66,32,89,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,66,32,80,32,64,32,64,32,66,32,67,32,66,32,64,-32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,-32,90,32,64,32,64,32,66,32,67,39,32,67,39,32,95,53,57,32,64,-32,64,32,80,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,-49,49,53,55,32,64,10,65,32,67,39,66,32,66,32,64,32,66,32,67,-39,66,32,66,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,95,-48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,55,50,57,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,67,-39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,64,32,67,39,32,-83,39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,83,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,32,67,39,32,83,39,32,67,39,32,67,39,32,67,39,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,83,39,32,-67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,66,32,95,49,52,-53,32,95,53,53,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,83,39,32,66,32,64,32,66,32,83,39,-32,83,39,32,66,32,64,32,64,32,64,32,66,32,66,32,66,39,32,64,-32,64,32,66,32,66,32,66,32,83,39,32,66,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,79,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,67,39,32,95,50,54,32,64,32,66,32,95,49,49,-50,50,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,95,50,54,-32,64,32,95,49,48,51,54,32,64,32,64,32,64,32,66,32,67,39,32,-95,55,54,50,32,64,32,64,32,66,32,66,32,95,49,49,52,53,32,64,-32,64,32,67,32,80,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,39,-32,66,32,64,32,64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,-32,66,32,66,32,83,39,32,83,39,32,83,39,32,79,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,67,39,66,32,66,32,95,50,-54,32,64,32,95,51,56,55,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,95,54,48,32,64,32,64,32,64,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,-64,32,66,32,66,32,90,32,64,32,64,32,66,32,83,39,32,66,32,64,-32,66,32,83,39,32,80,32,64,32,64,32,67,39,32,67,39,32,95,50,-54,32,64,32,64,32,66,32,66,32,95,53,55,57,32,64,32,64,32,67,-39,32,67,39,32,79,32,64,32,64,32,67,39,66,32,66,32,95,56,51,-50,32,64,32,95,52,55,53,32,64,32,64,32,95,54,48,32,95,56,32,-95,49,48,51,55,32,64,32,64,32,64,32,64,32,75,32,64,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,66,-32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,83,39,32,95,-50,54,32,64,32,64,32,66,32,66,32,95,53,55,57,32,64,32,64,32,-67,39,32,67,39,32,79,32,64,32,64,32,67,39,66,32,66,32,95,56,-51,50,32,64,32,95,52,55,53,32,64,32,64,32,95,54,48,32,95,52,-55,53,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,67,32,64,32,64,32,66,32,67,32,64,32,95,-54,51,32,95,50,48,50,32,64,32,64,32,64,32,64,32,64,32,95,54,-48,32,95,50,52,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,83,39,32,83,39,-32,83,39,32,83,39,32,83,39,32,66,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,66,32,67,39,66,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,79,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,39,32,83,39,32,66,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,95,49,49,49,52,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,39,32,66,39,-32,66,32,95,50,54,32,64,32,95,49,48,51,54,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,67,39,32,67,32,64,32,64,32,64,32,-66,32,67,39,66,32,66,32,67,32,64,32,66,32,83,39,32,95,49,49,-52,55,32,64,32,66,32,95,52,55,53,32,64,32,67,32,95,54,53,49,-32,64,32,95,49,49,52,57,32,64,32,64,32,64,32,64,32,66,32,67,-32,95,54,54,52,32,64,32,64,32,66,32,95,55,49,54,32,64,32,95,-50,49,51,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,95,56,51,50,32,64,32,95,52,55,53,32,64,32,64,32,95,54,48,-32,95,54,32,95,52,55,53,32,64,32,95,56,53,52,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,79,32,-64,32,64,32,67,39,66,32,66,32,95,53,55,54,32,64,32,67,32,67,-32,95,49,49,53,48,32,64,32,95,49,49,52,56,32,64,32,64,32,95,-49,49,53,49,32,64,32,64,32,64,32,67,39,32,79,32,64,32,66,32,-95,50,54,32,95,53,55,57,32,79,32,95,49,48,51,55,32,64,32,75,-32,64,32,64,32,64,32,64,32,95,52,55,53,32,64,32,64,32,75,32,-64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,-32,67,39,32,79,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,67,39,32,83,39,32,67,39,32,67,39,32,83,39,32,66,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-39,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,-95,49,49,49,52,32,64,32,64,32,64,32,64,32,64,32,83,39,32,66,-32,64,32,66,39,32,66,39,32,66,39,32,66,32,95,50,54,32,64,32,-95,49,48,51,54,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-67,39,32,67,32,64,32,64,32,64,32,66,32,67,39,66,32,66,32,67,-32,64,32,66,32,83,39,32,95,49,49,52,55,32,64,32,66,32,95,52,-55,53,32,64,32,67,32,95,54,53,49,32,64,32,95,49,49,53,50,32,-64,32,64,32,64,32,64,32,66,32,67,32,95,54,54,52,32,64,32,64,-32,66,32,95,55,49,54,32,64,32,95,50,49,51,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,67,39,32,95,56,51,50,32,64,32,95,-52,55,53,32,64,32,64,32,95,54,48,32,95,54,32,95,52,55,53,32,-64,32,95,56,53,52,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,79,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,-66,32,66,39,32,66,32,95,50,54,32,64,32,66,32,95,53,55,54,32,-64,32,67,32,67,32,95,49,49,53,48,32,64,32,95,49,49,52,56,32,-64,32,64,32,95,49,49,53,51,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,95,54,48,32,64,32,64,-32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,-32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,83,-39,32,66,32,64,32,66,32,83,39,32,80,32,64,32,64,32,67,39,32,-67,39,32,95,50,54,32,64,32,64,32,66,32,66,32,95,53,55,57,32,-64,32,64,32,66,32,66,32,79,32,95,49,48,51,55,32,64,32,64,32,-64,32,67,39,32,67,39,32,79,32,64,32,64,32,67,39,66,32,66,32,-95,56,51,50,32,64,32,95,52,55,53,32,64,32,64,32,95,54,48,32,-95,56,32,95,49,48,51,55,32,64,32,64,32,64,32,64,32,75,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,67,39,66,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-66,32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,95,50,-54,32,64,32,66,32,95,53,55,57,32,64,32,66,32,79,32,95,49,48,-51,55,32,64,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,-66,32,66,32,67,39,66,32,64,32,64,32,66,32,67,32,64,32,95,54,-51,32,95,50,48,50,32,64,32,64,32,64,32,64,32,66,32,95,56,49,-54,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,32,95,56,51,50,32,64,32,95,52,55,53,32,-64,32,64,32,95,54,48,32,95,52,55,53,32,64,32,64,32,64,32,64,-32,95,54,48,32,95,50,52,57,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,95,52,55,53,32,64,32,64,32,64,32,95,-49,49,53,52,32,64,32,64,32,66,32,95,50,54,32,95,52,55,53,32,-64,32,64,32,67,32,67,32,95,49,49,53,48,32,64,32,95,49,49,53,-53,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,117,110,100,101,-102,105,110,101,100,34,32,64,32,64,32,64,32,64,32,64,32,95,51,48,-54,32,95,51,48,56,32,64,32,64,32,64,32,67,32,95,53,52,49,32,-95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,49,-53,54,32,64,10,65,32,102,114,111,109,85,84,70,56,32,34,67,111,110,-116,114,111,108,46,69,114,114,111,114,34,32,64,32,58,49,49,53,53,32,-64,10,65,32,66,32,66,32,95,50,54,32,95,53,52,49,32,95,51,48,-53,32,64,32,95,53,50,48,32,102,114,111,109,85,84,70,56,32,34,103,-101,116,34,32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,52,49,-32,95,51,48,53,32,64,32,64,32,58,49,49,53,52,32,64,10,65,32,-102,114,111,109,85,84,70,56,32,34,115,101,116,70,105,101,108,100,34,32,-64,32,58,49,49,53,51,32,64,10,65,32,95,49,53,51,32,95,49,49,-52,56,32,64,32,102,114,111,109,85,84,70,56,32,34,46,83,101,116,70,-105,101,108,100,34,32,64,32,64,32,58,49,49,53,50,32,64,10,65,32,-102,114,111,109,85,84,70,56,32,34,103,101,116,70,105,101,108,100,34,32,-64,32,58,49,49,53,49,32,64,10,65,32,90,32,95,54,53,49,32,64,-32,58,49,49,53,48,32,64,10,65,32,95,49,53,51,32,95,49,49,52,-56,32,64,32,102,114,111,109,85,84,70,56,32,34,46,72,97,115,70,105,-101,108,100,34,32,64,32,64,32,58,49,49,52,57,32,64,10,65,32,102,-114,111,109,85,84,70,56,32,34,68,97,116,97,46,82,101,99,111,114,100,-115,34,32,64,32,58,49,49,52,56,32,64,10,65,32,66,32,66,32,66,-32,95,52,55,52,32,64,32,64,32,64,32,95,49,49,52,54,32,64,32,-58,49,49,52,55,32,64,10,65,32,66,32,66,32,95,52,55,52,32,64,-32,64,32,95,52,55,52,32,64,32,58,49,49,52,54,32,64,10,65,32,-85,32,67,39,66,32,66,32,95,50,54,32,64,32,66,32,95,56,51,50,-32,64,32,95,52,55,53,32,64,32,64,32,64,32,95,54,48,32,95,54,-32,95,52,55,53,32,64,32,95,56,53,52,32,64,32,64,32,64,32,64,-32,58,49,49,52,53,32,64,10,65,32,83,32,73,32,64,32,83,39,32,-67,39,66,32,64,32,66,32,67,32,67,32,61,61,32,64,32,35,57,32,-64,32,64,32,64,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,-32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,66,32,85,-32,64,32,66,32,66,32,67,39,66,32,66,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,64,-32,95,55,50,56,32,95,55,50,57,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,83,39,32,67,-39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,39,32,67,39,66,32,64,32,66,32,66,32,83,39,32,83,39,32,-83,39,32,83,39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,66,32,66,32,-67,39,66,32,64,32,66,32,66,32,95,49,49,52,48,32,64,32,64,32,-67,32,95,53,52,49,32,95,51,48,53,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,66,32,66,32,83,39,32,67,39,32,67,32,-64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,67,-32,64,32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,67,32,80,-32,64,32,64,32,95,56,48,48,32,35,48,32,64,32,64,32,64,32,64,-32,95,54,48,32,67,32,67,39,32,67,32,64,32,67,32,67,32,83,39,-32,64,32,90,32,75,32,64,32,64,32,64,32,90,32,75,32,64,32,64,-32,64,32,75,32,64,32,64,32,110,111,77,97,116,99,104,32,102,114,111,-109,85,84,70,56,32,34,115,114,99,47,77,105,99,114,111,72,115,47,84,-121,112,101,67,104,101,99,107,46,104,115,34,32,64,32,64,32,35,49,49,-48,48,32,64,32,35,50,53,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,95,49,49,52,49,32,64,32,95,54,48,32,95,56,53,52,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,66,32,95,50,54,32,95,49,49,32,95,53,53,54,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,39,32,66,39,32,66,39,32,66,39,32,95,53,57,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,53,48,55,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,-67,32,64,32,67,32,67,32,83,39,32,64,32,90,32,75,32,64,32,64,-32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,39,32,67,39,32,83,39,32,67,32,64,32,-64,32,64,32,64,32,64,32,66,32,83,39,32,67,39,32,67,39,66,32,-64,32,64,32,66,32,66,32,66,32,67,39,32,83,39,32,79,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,95,-50,54,32,64,32,66,32,95,49,49,50,50,32,64,32,67,32,79,32,64,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,83,-39,32,66,32,64,32,66,39,32,66,32,95,50,54,32,64,32,95,56,49,-51,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,49,49,52,-50,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,95,56,52,-50,32,64,32,64,32,67,32,95,53,52,49,32,95,51,48,53,32,64,32,-64,32,64,32,64,32,95,54,48,32,95,54,32,95,52,55,53,32,64,32,-95,56,53,52,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,79,32,64,32,64,-32,64,32,64,32,66,32,67,39,32,83,39,32,67,39,32,95,50,54,32,-64,32,64,32,64,32,67,39,32,67,39,32,83,39,32,80,32,64,32,64,-32,64,32,66,32,66,32,67,39,32,95,50,54,32,64,32,95,51,56,55,-32,64,32,64,32,64,32,66,32,66,32,95,57,55,52,32,64,32,64,32,-66,32,66,32,95,52,55,52,32,95,49,49,52,51,32,64,32,64,32,64,-32,66,32,66,32,95,54,54,52,32,95,53,49,57,32,64,32,64,32,64,-32,66,32,66,32,95,55,49,54,32,64,32,64,32,67,39,66,32,66,32,-95,49,53,51,32,64,32,95,50,49,51,32,64,32,64,32,66,32,95,49,-53,51,32,79,32,35,52,54,32,64,32,75,32,64,32,64,32,64,32,95,-50,49,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-95,51,56,55,32,64,32,64,32,64,32,66,32,67,32,95,54,57,55,32,-95,50,48,50,32,64,32,64,32,64,32,89,32,66,32,80,32,75,32,64,-32,64,32,83,39,32,67,39,32,83,32,64,32,64,32,67,39,32,67,39,-32,67,32,64,32,64,32,67,39,32,67,39,32,67,39,32,83,39,32,64,-32,64,32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,67,39,32,-67,39,32,95,53,57,32,64,32,64,32,80,32,64,32,64,32,64,32,64,-32,90,32,75,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,-32,73,32,64,32,64,32,64,32,64,32,64,32,64,32,75,32,64,32,64,-32,64,32,95,49,49,48,52,32,64,32,64,32,64,32,95,53,53,48,32,-95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,89,-32,66,32,80,32,75,32,64,32,64,32,83,39,32,67,32,64,32,66,32,-83,39,32,83,39,32,64,32,66,32,67,32,64,32,67,32,67,32,83,39,-32,64,32,90,32,75,32,64,32,64,32,64,32,90,32,75,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,-32,90,32,64,32,64,32,67,39,66,32,95,53,57,32,64,32,64,32,64,-32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,49,49,52,52,32,64,10,65,32,95,50,54,32,95,-54,54,52,32,95,53,49,57,32,64,32,64,32,95,53,51,49,32,102,114,-111,109,85,84,70,56,32,34,110,111,68,101,102,97,117,108,116,34,32,64,-32,64,32,64,32,58,49,49,52,51,32,64,10,65,32,66,32,95,55,53,-57,32,64,32,95,55,53,57,32,95,55,54,49,32,95,55,53,49,32,64,-32,102,114,111,109,85,84,70,56,32,34,80,114,105,109,105,116,105,118,101,-115,46,61,62,34,32,64,32,64,32,64,32,64,32,58,49,49,52,50,32,-64,10,65,32,66,32,95,54,48,32,64,32,66,32,85,32,64,32,83,39,-32,67,39,66,32,64,32,66,32,66,32,80,32,64,32,64,32,67,39,32,-95,54,48,32,64,32,67,32,95,54,51,32,95,50,48,50,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,95,54,48,32,64,32,67,32,95,54,-51,32,95,50,48,50,32,64,32,64,32,64,32,64,32,64,32,64,32,58,-49,49,52,49,32,64,10,65,32,66,32,66,32,95,50,54,32,95,55,51,-48,32,64,32,64,32,64,32,66,32,66,32,83,32,95,55,51,49,32,95,-49,49,51,56,32,64,32,95,49,50,56,32,64,32,64,32,64,32,64,32,-67,39,32,67,39,66,32,64,32,95,55,51,53,32,64,32,95,49,50,52,-32,95,49,49,51,57,32,64,32,95,49,50,56,32,64,32,64,32,64,32,-64,32,58,49,49,52,48,32,64,10,65,32,95,49,50,53,32,75,32,95,-57,49,48,32,64,32,64,32,58,49,49,51,57,32,64,10,65,32,95,55,-51,50,32,75,32,85,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,95,55,51,51,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,49,49,51,56,32,64,10,65,32,85,32,67,39,-66,32,67,32,67,32,61,61,32,64,32,35,50,32,64,32,64,32,95,49,-49,32,95,53,53,54,32,64,32,95,49,48,55,32,64,32,64,32,64,32,-85,32,67,32,66,32,64,32,66,32,67,39,66,32,83,39,32,83,39,32,-95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,95,49,49,51,-54,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,-50,56,32,95,55,50,57,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,95,49,49,51,54,32,64,32,64,32,67,32,95,53,52,49,32,95,51,-48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,95,-56,49,51,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,49,51,-55,32,64,10,65,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,-95,55,50,56,32,95,56,53,51,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,95,49,49,51,53,32,64,32,64,32,64,32,95,55,51,53,-32,64,32,64,32,58,49,49,51,54,32,64,10,65,32,66,32,95,50,54,-32,95,55,51,48,32,64,32,64,32,67,32,95,55,51,49,32,95,49,49,-51,52,32,64,32,95,49,50,56,32,64,32,64,32,64,32,58,49,49,51,-53,32,64,10,65,32,95,55,51,50,32,75,32,85,32,66,32,66,32,66,-32,90,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,64,32,64,-32,64,32,64,32,95,55,51,51,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,49,51,52,32,-64,10,65,32,66,32,66,32,95,50,54,32,95,55,56,54,32,64,32,64,-32,64,32,83,39,32,83,39,32,95,48,32,95,53,53,54,32,64,32,64,-32,64,32,95,49,49,48,51,32,64,32,66,32,83,39,32,67,39,32,95,-49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,67,39,32,95,49,-48,56,32,95,53,53,54,32,64,32,64,32,95,49,49,49,50,32,64,32,-64,32,64,32,67,39,32,67,39,32,95,48,32,95,53,53,54,32,64,32,-64,32,64,32,66,32,95,51,49,54,32,95,53,53,54,32,64,32,64,32,-95,49,49,50,57,32,64,32,64,32,66,32,95,48,32,95,53,53,54,32,-64,32,95,55,50,56,32,95,55,52,49,32,64,32,64,32,64,32,66,32,-67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,95,49,49,51,49,-32,85,32,67,39,66,32,66,32,95,49,56,32,95,53,53,52,32,64,32,-64,32,67,39,32,95,54,32,64,32,95,55,54,53,32,64,32,95,49,49,-51,50,32,83,32,73,32,64,32,67,39,32,67,39,66,32,64,32,67,32,-67,32,61,61,32,64,32,35,49,57,32,64,32,64,32,64,32,85,32,75,-32,95,56,52,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,95,56,54,56,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,95,55,52,52,-32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,49,49,51,51,32,64,10,65,32,-66,32,89,32,64,32,67,39,32,83,32,64,32,66,32,67,32,66,32,64,-32,64,32,83,39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,51,32,64,32,64,-32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,32,64,32,66,32,-67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,49,32,64,32,-64,32,64,32,66,32,85,32,64,32,67,39,66,32,95,56,49,51,32,64,-32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,-67,32,67,32,61,61,32,64,32,35,49,51,32,64,32,64,32,64,32,64,-32,66,32,85,32,64,32,66,32,95,56,49,55,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,-32,61,61,32,64,32,35,49,32,64,32,64,32,64,32,64,32,66,32,85,-32,64,32,83,39,32,67,39,66,32,64,32,66,32,95,52,55,52,32,64,-32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,-49,49,51,50,32,64,10,65,32,66,32,85,32,64,32,83,39,32,67,39,-66,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,-64,32,66,32,95,49,49,51,48,32,95,53,53,54,32,64,32,64,32,95,-51,49,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,-64,32,64,32,66,32,95,51,49,54,32,95,53,53,54,32,64,32,64,32,-66,32,85,32,64,32,67,39,66,32,66,32,95,49,56,32,95,53,53,52,-32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,95,50,54,32,95,49,49,32,95,53,53,54,32,64,32,64,32,-64,32,64,32,95,55,52,55,32,64,32,64,32,64,32,64,32,58,49,49,-51,49,32,64,10,65,32,66,32,66,32,89,32,64,32,64,32,83,39,32,-83,39,32,66,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,83,-39,32,66,32,64,32,66,32,80,32,64,32,67,32,95,49,49,32,64,32,-95,49,52,50,32,64,32,64,32,64,32,66,32,67,39,66,32,64,32,67,-39,66,32,66,32,95,49,56,32,64,32,66,32,95,49,53,32,64,32,95,-49,57,56,32,64,32,64,32,64,32,95,50,54,51,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,32,83,39,32,67,39,32,67,39,32,-67,39,32,67,39,66,32,64,32,64,32,64,32,64,32,64,32,64,32,83,-39,32,66,32,64,32,66,39,32,66,39,32,66,39,32,66,39,32,66,39,-32,66,32,95,49,51,32,64,32,95,49,57,56,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,32,67,39,32,67,-39,66,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,-32,66,39,32,66,39,32,66,32,95,49,51,32,64,32,95,49,57,56,32,-64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,67,39,32,67,-39,66,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,-39,32,66,32,95,49,51,32,64,32,95,49,57,56,32,64,32,64,32,64,-32,64,32,83,39,32,67,39,32,67,39,66,32,64,32,64,32,83,39,32,-66,32,64,32,66,39,32,66,32,95,49,51,32,64,32,95,49,57,56,32,-64,32,64,32,64,32,66,39,32,67,39,32,95,49,56,32,64,32,66,32,-95,49,53,32,64,32,95,49,57,56,32,64,32,64,32,95,50,54,48,32,-64,32,64,32,64,32,64,32,95,49,49,32,64,32,64,32,64,32,95,49,-49,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,-58,49,49,51,48,32,64,10,65,32,83,39,32,67,32,64,32,67,39,32,-83,32,64,32,66,32,67,39,32,67,39,32,64,32,66,32,64,32,64,32,-83,39,32,66,32,64,32,66,32,83,39,32,83,32,64,32,64,32,66,32,-66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,55,32,64,-32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,32,64,32,-66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,48,32,-64,32,64,32,64,32,83,39,32,67,32,64,32,66,32,67,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,49,49,32,64,32,64,32,64,32,66,-32,85,32,64,32,66,32,66,32,95,49,56,32,95,53,53,52,32,64,32,-95,49,49,49,51,32,64,32,64,32,64,32,66,32,95,51,49,54,32,95,-53,53,54,32,64,32,64,32,67,32,95,49,48,51,53,32,64,32,95,56,-52,55,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,-32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,49,51,32,95,53,-53,53,32,64,32,64,32,64,32,66,32,66,32,95,49,56,32,95,53,53,-52,32,64,32,95,49,49,49,52,32,64,32,64,32,64,32,67,32,95,49,-48,51,56,32,64,32,95,49,49,49,53,32,64,32,64,32,64,32,64,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,66,32,64,32,66,32,83,32,64,32,66,32,67,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,57,32,64,32,64,32,64,-32,66,32,85,32,64,32,83,39,32,66,32,64,32,66,32,67,39,66,32,-64,32,66,32,66,39,32,64,32,66,32,66,32,95,50,54,32,64,32,64,-32,95,49,49,49,55,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,95,49,56,32,95,53,53,52,32,64,32,67,32,80,32,-64,32,95,49,49,49,53,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,83,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,-66,32,67,39,32,95,49,51,32,95,53,53,53,32,64,32,64,32,64,32,-64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,32,67,39,32,-95,49,51,32,95,53,53,53,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,32,66,32,95,49,51,32,95,53,53,53,32,64,-32,64,32,64,32,66,32,66,32,95,49,56,32,95,53,53,52,32,64,32,-95,49,49,49,56,32,64,32,64,32,64,32,95,49,49,49,57,32,64,32,-64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,-32,66,32,95,51,49,54,32,95,53,53,54,32,64,32,64,32,66,32,85,-32,64,32,66,32,67,32,67,39,32,67,39,32,64,32,66,32,83,39,32,-95,49,51,32,95,53,53,53,32,64,32,64,32,64,32,66,32,66,32,95,-49,56,32,95,53,53,52,32,64,32,80,32,64,32,64,32,64,32,67,32,-95,51,49,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,-67,32,95,51,49,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,83,39,32,95,48,32,95,53,53,54,32,64,32,64,32,-64,32,67,32,95,49,48,48,51,32,64,32,102,114,111,109,85,84,70,56,-32,34,102,117,110,100,101,112,34,32,64,32,64,32,64,32,90,32,95,49,-49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,95,51,49,54,32,95,53,53,54,32,64,32,64,-32,67,39,32,83,32,64,32,66,32,67,39,32,67,32,64,32,67,32,67,-32,83,39,32,64,32,90,32,75,32,64,32,64,32,64,32,90,32,75,32,-64,32,64,32,64,32,64,32,66,32,67,39,66,32,66,32,95,49,56,32,-95,53,53,52,32,64,32,64,32,95,49,49,50,48,32,64,32,64,32,64,-32,67,32,95,49,48,51,56,32,64,32,95,56,52,55,32,64,32,64,32,-64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,55,32,64,32,64,32,-64,32,64,32,66,32,85,32,64,32,66,32,67,39,32,67,39,66,32,64,-32,66,32,66,32,95,49,56,32,95,53,53,52,32,64,32,64,32,64,32,-95,49,49,50,49,32,64,32,64,32,64,32,67,32,95,49,48,51,56,32,-64,32,95,56,52,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,32,83,32,64,-32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,50,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,32,-64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,52,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,52,32,64,32,64,32,-64,32,64,32,66,32,85,32,64,32,66,32,67,39,66,32,66,32,95,49,-56,32,95,53,53,52,32,64,32,64,32,95,49,49,50,50,32,64,32,64,-32,64,32,67,32,95,49,48,51,56,32,64,32,95,56,52,55,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,50,32,64,32,64,32,64,32,64,-32,66,32,85,32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,32,-95,50,54,32,64,32,64,32,95,49,49,49,55,32,64,32,64,32,66,32,-66,32,67,39,32,95,49,56,32,95,53,53,52,32,64,32,64,32,66,32,-95,56,51,51,32,64,32,95,49,49,50,51,32,64,32,64,32,64,32,64,-32,95,49,49,50,52,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,83,39,32,67,32,64,32,64,32,66,32,66,32,67,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,83,39,32,66,32,64,-32,66,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,66,32,-95,50,54,32,64,32,64,32,95,49,49,49,55,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,66,32,95,49,56,32,95,53,53,52,-32,64,32,67,32,80,32,64,32,95,56,52,55,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,66,32,64,32,-66,32,66,32,67,39,32,95,49,51,32,95,53,53,53,32,64,32,64,32,-64,32,64,32,66,32,66,32,67,39,32,95,49,56,32,95,53,53,52,32,-64,32,64,32,95,49,49,50,53,32,64,32,64,32,64,32,95,49,49,50,-55,32,64,32,64,32,64,32,64,32,95,51,49,54,32,95,53,53,54,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,66,32,64,32,66,-32,66,39,32,64,32,66,32,66,32,95,50,54,32,64,32,64,32,95,49,-49,49,55,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,95,49,56,32,95,53,53,52,32,64,32,67,32,80,32,64,32,95,-56,52,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,32,67,39,66,32,64,32,66,32,66,32,67,39,32,95,49,51,-32,95,53,53,53,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,-32,95,49,56,32,95,53,53,52,32,64,32,64,32,95,49,49,50,56,32,-64,32,64,32,64,32,66,32,95,51,49,54,32,95,53,53,54,32,64,32,-64,32,95,49,49,50,55,32,64,32,64,32,64,32,64,32,64,32,95,51,-49,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,64,-32,64,32,67,32,95,49,48,51,53,32,64,32,95,49,49,49,54,32,95,-56,52,55,32,64,32,95,49,49,49,53,32,64,32,64,32,64,32,58,49,-49,50,57,32,64,10,65,32,66,32,66,32,66,32,80,32,35,48,32,64,-32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,-32,64,32,58,49,49,50,56,32,64,10,65,32,66,32,85,32,64,32,83,-39,32,66,32,64,32,66,39,32,66,39,32,66,39,32,66,32,95,50,54,-32,64,32,67,32,95,55,57,51,32,64,32,67,32,95,52,48,32,95,55,-57,52,32,64,32,64,32,95,55,55,51,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,39,32,-64,32,66,32,66,39,32,64,32,66,32,66,32,95,50,54,32,64,32,64,-32,95,56,49,50,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,-67,39,66,32,64,32,64,32,66,32,66,32,66,32,67,39,32,95,49,51,-32,95,53,53,53,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,66,32,66,32,67,39,32,95,49,51,32,95,53,53,53,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,95,49,56,32,-95,53,53,52,32,64,32,64,32,95,49,49,50,54,32,64,32,64,32,64,-32,95,49,49,49,57,32,64,32,64,32,64,32,95,49,52,53,32,95,53,-53,53,32,64,32,64,32,64,32,64,32,83,39,32,95,55,50,52,32,64,-32,66,32,66,32,95,49,56,32,95,53,53,52,32,64,32,95,50,57,49,-32,64,32,64,32,64,32,66,32,95,51,49,54,32,95,53,53,54,32,64,-32,64,32,66,32,85,32,64,32,66,32,67,39,66,32,66,32,95,49,56,-32,95,53,53,52,32,64,32,64,32,80,32,64,32,64,32,64,32,67,32,-95,56,52,53,32,64,32,95,56,48,54,32,95,56,52,55,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,95,49,56,32,95,-53,53,52,32,64,32,95,50,57,48,32,64,32,64,32,64,32,66,32,95,-51,49,54,32,95,53,53,54,32,64,32,64,32,66,32,85,32,64,32,66,-32,66,32,85,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,-66,32,66,32,95,49,56,32,95,53,53,52,32,64,32,64,32,64,32,67,-39,66,32,66,32,95,54,32,64,32,80,32,64,32,64,32,80,32,64,32,-64,32,64,32,64,32,67,32,95,56,52,53,32,64,32,95,56,48,54,32,-95,56,52,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,58,49,49,50,55,32,64,10,65,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,66,32,67,32,64,-32,64,32,80,32,64,32,64,32,58,49,49,50,54,32,64,10,65,32,66,-32,66,32,66,32,80,32,35,49,32,64,32,64,32,64,32,64,32,66,32,-66,32,67,32,64,32,64,32,80,32,64,32,64,32,58,49,49,50,53,32,-64,10,65,32,83,32,95,56,50,53,32,64,32,95,56,52,53,32,64,32,-58,49,49,50,52,32,64,10,65,32,66,32,66,32,80,32,35,50,32,64,-32,64,32,64,32,80,32,64,32,58,49,49,50,51,32,64,10,65,32,66,-32,66,32,80,32,35,52,32,64,32,64,32,64,32,80,32,64,32,58,49,-49,50,50,32,64,10,65,32,66,32,66,32,66,32,80,32,35,55,32,64,-32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,-32,64,32,58,49,49,50,49,32,64,10,65,32,66,32,90,32,64,32,79,-32,64,32,58,49,49,50,48,32,64,10,65,32,66,32,95,51,49,54,32,-95,53,53,54,32,64,32,64,32,67,32,95,49,48,51,53,32,64,32,95,-49,49,49,53,32,64,32,64,32,58,49,49,49,57,32,64,10,65,32,66,-32,66,32,66,32,66,32,80,32,35,57,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,66,32,-67,32,64,32,64,32,80,32,64,32,64,32,64,32,58,49,49,49,56,32,-64,10,65,32,66,32,67,32,66,32,64,32,64,32,83,39,32,66,32,64,-32,66,32,83,39,32,66,32,64,32,64,32,66,32,66,32,95,48,32,95,-53,53,54,32,64,32,64,32,64,32,95,49,48,48,53,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,90,32,64,32,64,32,64,32,83,39,32,66,32,64,-32,66,39,32,66,32,67,39,66,32,64,32,66,32,66,32,95,50,54,32,-64,32,64,32,95,56,49,50,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,83,39,32,66,32,64,32,64,32,66,32,66,32,83,39,32,95,48,-32,95,53,53,54,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,-64,32,80,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-85,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,-39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,-95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,-67,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,39,-32,64,32,64,32,67,32,67,39,32,67,39,32,64,32,95,56,57,49,32,-64,32,95,51,48,54,32,95,51,48,56,32,64,32,64,32,64,32,95,56,-56,57,32,64,32,64,32,64,32,66,32,67,32,95,53,53,32,95,49,49,-49,54,32,64,32,64,32,64,32,95,54,48,32,85,32,65,32,64,32,64,-32,64,32,64,32,64,32,64,32,90,32,95,49,49,32,95,53,53,54,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-58,49,49,49,55,32,64,10,65,32,95,55,54,50,32,58,49,49,49,54,-32,64,10,65,32,95,52,55,53,32,95,52,56,49,32,95,53,49,57,32,-64,32,102,114,111,109,85,84,70,56,32,34,80,114,105,109,105,116,105,118,-101,115,46,67,111,110,115,116,114,97,105,110,116,34,32,64,32,64,32,64,-32,58,49,49,49,53,32,64,10,65,32,66,32,66,32,80,32,35,49,48,-32,64,32,64,32,64,32,80,32,64,32,58,49,49,49,52,32,64,10,65,-32,66,32,80,32,35,49,49,32,64,32,64,32,85,32,64,32,58,49,49,-49,51,32,64,10,65,32,67,39,32,67,32,64,32,66,32,67,39,32,67,-32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,67,32,67,39,32,-67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,66,-32,64,32,64,32,64,32,66,32,83,39,32,83,39,32,67,39,32,83,32,-64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,50,32,64,32,64,32,64,32,64,32,64,32,83,-39,32,67,39,32,83,39,32,83,32,64,32,64,32,64,32,66,32,66,32,-66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,57,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,-64,32,67,32,67,32,61,61,32,64,32,35,57,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,90,32,64,32,-66,32,66,32,90,32,64,32,64,32,66,32,66,32,83,32,66,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,32,67,39,66,32,64,32,66,32,66,39,32,64,-32,66,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,64,-32,64,32,67,39,66,32,67,32,64,32,89,32,66,32,80,32,75,32,64,-32,64,32,83,39,32,67,32,64,32,66,32,67,39,32,83,39,32,64,32,-66,32,67,32,64,32,67,32,67,32,83,39,32,64,32,90,32,75,32,64,-32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,90,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,-66,32,89,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,80,-32,64,32,64,32,67,39,66,32,95,53,57,32,64,32,64,32,64,32,64,-32,83,32,79,32,64,32,67,39,32,79,32,64,32,95,49,49,48,52,32,-64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,-61,32,64,32,35,50,32,64,32,64,32,64,32,64,32,66,32,85,32,64,-32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,-32,83,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,83,32,66,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-39,66,32,66,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,-95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,83,32,66,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,-66,32,66,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,95,-49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,66,32,67,32,64,32,64,32,66,32,66,32,95,50,54,-32,95,57,57,51,32,95,50,48,50,32,64,32,64,32,64,32,64,32,95,-53,48,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,95,49,48,-55,32,64,32,64,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,-64,32,95,55,50,56,32,95,55,50,57,32,64,32,64,32,64,32,64,32,-67,39,66,32,66,32,83,39,32,95,49,49,48,56,32,64,32,64,32,67,-32,95,53,52,49,32,95,51,48,53,32,64,32,64,32,64,32,64,32,67,-39,32,95,54,48,32,64,32,95,53,52,49,32,95,51,48,53,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,-90,32,64,32,67,39,32,83,39,32,95,48,32,95,53,53,54,32,64,32,-64,32,64,32,67,39,32,67,32,64,32,67,39,32,67,32,64,32,67,32,-95,50,48,55,32,64,32,64,32,95,56,48,53,32,64,32,64,32,95,49,-49,32,95,53,53,54,32,64,32,64,32,64,32,95,49,49,49,49,32,95,-51,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,75,50,-32,83,39,32,80,32,64,32,90,32,67,32,79,32,64,32,75,32,64,32,-64,32,64,32,67,39,66,32,95,53,57,32,64,32,95,54,48,32,95,50,-52,57,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,49,49,50,-32,64,10,65,32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,64,-32,95,55,50,56,32,95,55,50,57,32,64,32,64,32,64,32,64,32,64,-32,83,39,32,83,39,32,67,39,66,32,64,32,64,32,95,49,49,49,48,-32,64,32,66,32,66,32,66,32,95,52,55,53,32,64,32,64,32,64,32,-66,32,67,32,64,32,95,53,52,49,32,64,32,64,32,64,32,64,32,58,-49,49,49,49,32,64,10,65,32,66,32,66,32,66,32,66,32,95,48,32,-95,53,53,54,32,64,32,95,55,50,56,32,95,55,50,57,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,95,-48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,55,52,49,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,66,32,66,32,95,55,52,52,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,83,39,32,83,39,32,83,39,32,66,32,64,32,64,32,64,-32,66,32,66,32,66,39,32,64,32,64,32,67,39,66,32,66,39,32,95,-49,49,48,57,32,95,57,57,53,32,64,32,64,32,64,32,67,39,32,67,-39,32,79,32,64,32,64,32,67,32,95,55,54,53,32,64,32,64,32,75,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,-66,32,66,39,32,64,32,66,32,66,32,67,39,32,95,49,49,48,57,32,-95,57,57,53,32,64,32,64,32,64,32,64,32,66,32,67,32,64,32,95,-53,52,49,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,79,32,-64,32,64,32,67,32,95,55,54,53,32,64,32,64,32,75,32,64,32,64,-32,64,32,64,32,64,32,64,32,58,49,49,49,48,32,64,10,65,32,75,-32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,66,32,95,55,52,-55,32,64,32,64,32,64,32,95,50,55,54,32,95,49,53,51,32,64,32,-64,32,64,32,64,32,58,49,49,48,57,32,64,10,65,32,66,32,66,32,-95,50,54,32,95,55,51,48,32,64,32,64,32,64,32,66,32,66,32,83,-32,95,55,51,49,32,95,49,49,48,53,32,64,32,95,49,50,56,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,95,55,51,53,-32,64,32,95,49,50,52,32,95,49,49,48,55,32,64,32,95,49,50,56,-32,64,32,64,32,64,32,64,32,58,49,49,48,56,32,64,10,65,32,95,-49,50,53,32,75,32,95,49,49,48,54,32,64,32,64,32,58,49,49,48,-55,32,64,10,65,32,85,32,75,50,32,75,52,32,90,32,90,32,90,32,-90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,58,49,49,48,54,32,64,10,65,32,95,55,51,50,32,75,32,85,-32,66,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,95,-55,51,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,58,49,49,48,53,32,64,10,65,32,67,32,95,53,51,53,-32,64,32,102,114,111,109,85,84,70,56,32,34,36,100,102,108,116,34,32,-64,32,64,32,58,49,49,48,52,32,64,10,65,32,67,39,66,32,66,32,-83,39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,66,32,95,-55,57,48,32,64,32,95,54,48,32,95,50,52,57,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,-32,64,32,66,32,95,51,49,54,32,95,53,53,54,32,64,32,64,32,66,-32,85,32,64,32,66,32,67,39,66,32,66,32,95,49,56,32,95,53,53,-52,32,64,32,64,32,80,32,64,32,64,32,64,32,67,32,95,49,49,48,-50,32,64,32,95,56,48,54,32,95,55,53,52,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,95,50,54,32,95,49,49,32,95,53,53,54,-32,64,32,64,32,64,32,95,55,52,57,32,64,32,64,32,64,32,64,32,-89,32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,66,32,64,32,-64,32,83,39,32,83,39,32,67,39,66,32,64,32,64,32,66,32,67,32,-67,32,61,61,32,64,32,35,53,32,64,32,64,32,64,32,64,32,66,32,-66,32,85,32,64,32,64,32,66,32,67,39,32,67,39,32,95,53,57,32,-64,32,64,32,80,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,58,49,49,48,51,32,64,10,65,32,83,39,32,66,32,64,32,66,-32,95,54,32,64,32,67,32,95,55,57,51,32,64,32,67,32,95,52,48,-32,95,55,57,52,32,64,32,64,32,95,55,55,51,32,64,32,64,32,64,-32,64,32,66,32,66,32,95,54,32,95,55,56,54,32,64,32,64,32,64,-32,95,49,49,48,49,32,64,32,64,32,58,49,49,48,50,32,64,10,65,-32,83,39,32,66,32,64,32,66,39,32,66,32,95,50,54,32,64,32,67,-32,95,55,57,51,32,64,32,67,32,95,52,48,32,95,55,57,52,32,64,-32,64,32,95,55,55,52,32,64,32,64,32,64,32,64,32,64,32,95,49,-49,48,48,32,64,32,58,49,49,48,49,32,64,10,65,32,67,39,32,67,-39,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,-32,95,49,48,57,57,32,64,32,95,49,49,32,95,53,53,54,32,64,32,-64,32,58,49,49,48,48,32,64,10,65,32,67,39,32,67,39,32,83,32,-64,32,64,32,67,39,32,67,39,32,83,32,64,32,64,32,66,32,66,32,-83,39,32,67,39,32,64,32,66,32,64,32,64,32,64,32,83,39,32,83,-39,32,66,32,64,32,64,32,66,32,66,32,83,39,32,67,39,32,83,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,56,32,64,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,83,39,32,83,39,32,67,39,32,83,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,49,50,32,64,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,83,39,32,83,39,32,83,39,32,83,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,49,53,32,64,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,83,39,32,67,39,32,67,39,32,67,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,49,54,32,64,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,-39,32,64,32,66,32,66,32,83,32,64,32,64,32,66,32,66,32,67,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,50,49,32,64,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,83,39,32,66,32,64,-32,66,32,67,39,66,32,64,32,66,32,66,32,95,50,54,32,64,32,64,-32,95,56,49,50,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-66,32,64,32,64,32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,-64,32,64,32,64,32,64,32,95,49,49,48,48,32,64,32,64,32,66,32,-66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,95,56,49,-51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,-64,32,35,49,54,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,67,39,32,67,39,32,67,39,32,64,32,64,32,66,32,66,39,32,64,-32,66,32,66,32,95,50,54,32,64,32,64,32,95,49,49,48,48,32,64,-32,64,32,64,32,66,32,83,39,32,95,50,54,32,64,32,66,32,95,56,-49,54,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,-32,67,32,95,52,51,56,32,67,39,32,95,52,55,52,32,64,32,95,56,-49,57,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,95,56,50,-48,32,64,32,102,114,111,109,85,84,70,56,32,34,36,120,34,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,66,32,66,32,83,39,32,67,39,32,95,48,32,95,53,53,-54,32,64,32,64,32,64,32,66,32,66,32,95,49,56,32,95,53,53,52,-32,64,32,95,50,57,52,32,64,32,64,32,64,32,66,32,95,51,49,54,-32,95,53,53,54,32,64,32,64,32,95,56,50,56,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,95,48,32,95,53,-53,54,32,64,32,64,32,64,32,95,56,51,53,32,95,56,51,54,32,64,-32,64,32,64,32,64,32,83,39,32,83,39,32,67,39,32,67,39,32,80,-32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,-66,39,32,64,32,66,32,66,32,95,50,54,32,64,32,64,32,95,49,49,-48,48,32,64,32,64,32,64,32,95,53,53,32,95,56,51,57,32,64,32,-64,32,64,32,95,49,49,48,48,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,83,39,32,83,39,32,83,39,32,67,39,32,67,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,49,51,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,67,39,32,67,39,66,32,64,32,67,-32,67,32,61,61,32,64,32,35,49,51,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,83,39,-32,66,32,64,32,66,39,32,66,39,32,66,32,67,39,32,95,48,32,95,-53,53,54,32,64,32,64,32,64,32,67,32,95,56,52,54,32,64,32,95,-56,48,54,32,95,56,52,55,32,64,32,64,32,64,32,64,32,64,32,64,-32,83,39,32,67,39,32,67,39,32,67,39,32,83,39,32,95,48,32,95,-53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,67,39,32,67,32,64,32,64,32,64,32,95,56,57,50,32,64,32,64,-32,66,32,67,32,64,32,95,57,56,49,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,-83,39,32,66,32,64,32,66,39,32,66,32,67,39,66,32,64,32,66,32,-66,39,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,-32,64,32,67,32,67,39,32,83,39,32,64,32,95,57,55,55,32,64,32,-66,32,95,57,56,51,32,64,32,95,51,48,54,32,95,54,54,51,32,64,-32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,64,-32,83,39,32,67,32,64,32,66,32,67,39,32,67,39,32,64,32,66,32,-83,39,32,64,32,66,32,83,39,32,64,32,83,39,32,64,32,64,32,64,-32,64,32,83,39,32,66,32,64,32,66,32,67,39,66,32,64,32,66,32,-66,39,32,64,32,66,32,66,39,32,64,32,66,32,66,32,95,48,32,95,-53,53,54,32,64,32,64,32,64,32,95,56,50,54,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,-32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,66,32,-64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,66,32,66,39,-32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,-32,95,56,50,54,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,-64,32,64,32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,39,-32,64,32,66,32,66,32,67,39,32,83,39,32,66,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,83,39,32,95,48,32,95,53,53,-54,32,64,32,64,32,64,32,64,32,64,32,64,32,95,56,56,56,32,64,-32,64,32,64,32,64,32,83,39,32,83,39,32,66,32,64,32,64,32,66,-32,66,39,32,64,32,66,32,66,32,83,39,32,67,39,32,67,39,66,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,95,48,-32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,67,39,32,67,32,64,32,64,32,64,32,95,56,56,56,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,-32,67,39,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,39,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,49,48,-54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,95,56,56,-48,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,49,49,32,-95,53,53,54,32,64,32,64,32,64,32,64,32,95,53,57,53,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,66,32,83,39,-32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,95,57,56,-49,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,-32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,95,48,32,95,53,-53,54,32,64,32,64,32,64,32,64,32,95,57,56,49,32,64,32,64,32,-64,32,66,32,66,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,-32,64,32,64,32,95,53,57,53,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,83,-32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,49,48,32,64,32,64,32,64,32,64,32,64,-32,83,39,32,83,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,-66,32,66,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,-49,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,-64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,67,39,32,67,39,-32,67,39,32,64,32,64,32,66,32,66,32,67,39,32,64,32,64,32,66,-32,66,39,32,64,32,95,49,49,48,48,32,64,32,64,32,64,32,66,32,-66,32,83,39,32,95,56,49,54,32,64,32,67,32,79,32,64,32,75,32,-64,32,64,32,64,32,64,32,66,32,67,39,32,95,52,55,52,32,64,32,-64,32,66,32,95,52,55,52,32,64,32,95,52,55,53,32,64,32,64,32,-64,32,64,32,64,32,67,32,95,56,50,48,32,64,32,102,114,111,109,85,-84,70,56,32,34,36,120,34,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,85,32,64,32,64,32,67,39,32,67,39,66,32,64,32,-66,32,66,39,32,64,32,95,49,49,48,48,32,64,32,64,32,67,39,32,-95,52,55,52,32,64,32,95,52,55,53,32,64,32,64,32,64,32,64,32,-64,32,64,32,83,39,32,83,39,32,83,39,32,67,32,64,32,64,32,64,-32,66,32,66,32,66,32,67,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,57,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-85,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,39,-32,66,32,80,32,64,32,95,53,53,48,32,64,32,64,32,64,32,64,32,-83,39,32,83,39,32,83,39,32,66,32,64,32,64,32,64,32,66,32,66,-32,66,32,83,39,32,83,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,64,32,83,39,32,67,39,66,-32,64,32,66,32,66,32,67,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,83,32,64,32,64,32,64,32,66,32,66,32,67,32,67,32,67,39,-32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,95,49,49,-48,48,32,64,32,64,32,75,32,64,32,64,32,64,32,67,39,32,67,39,-32,95,50,54,32,64,32,64,32,95,55,56,57,32,64,32,102,114,111,109,-85,84,70,56,32,34,98,97,100,32,102,105,110,97,108,32,100,111,32,115,-116,97,116,101,109,101,110,116,34,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,-64,32,64,32,64,32,83,39,32,83,39,32,67,39,32,83,39,32,67,39,-32,83,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,-39,32,83,39,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,67,32,83,39,32,64,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,32,83,39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,32,64,32,83,39,32,-67,39,32,83,39,32,64,32,64,32,66,32,66,32,67,39,32,64,32,64,-32,66,32,66,32,67,39,32,64,32,64,32,66,32,66,32,67,39,32,64,-32,64,32,66,32,66,32,67,39,32,64,32,64,32,66,32,66,32,67,39,-32,64,32,64,32,66,32,66,39,32,64,32,95,49,49,48,48,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,83,39,-32,66,32,64,32,64,32,66,32,66,39,32,64,32,66,32,66,32,67,39,-66,32,64,32,64,32,66,32,66,32,66,32,67,39,32,95,52,55,52,32,-64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,95,52,55,52,32,-64,32,64,32,64,32,66,32,66,32,66,32,95,52,55,53,32,64,32,64,-32,64,32,66,32,67,32,64,32,66,32,83,32,95,51,56,52,32,64,32,-64,32,66,32,67,32,64,32,95,53,52,49,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,83,39,32,95,56,49,54,32,64,32,67,32,79,32,64,32,75,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,-32,95,54,52,49,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,67,39,32,83,39,32,95,49,53,51,32,64,32,64,32,64,32,67,39,-32,67,39,32,67,39,32,79,32,64,32,64,32,64,32,66,32,66,32,67,-32,80,32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,57,55,-51,32,64,32,64,32,64,32,95,57,56,52,32,64,32,64,32,64,32,75,-32,64,32,64,32,64,32,67,39,32,67,32,64,32,66,32,67,32,95,57,-56,53,32,64,32,64,32,67,39,32,79,32,64,32,66,32,80,32,95,52,-55,53,32,95,53,50,49,32,64,32,64,32,64,32,66,32,95,50,54,32,-95,57,55,51,32,64,32,64,32,67,32,83,39,32,66,32,64,32,66,32,-95,52,55,52,32,64,32,66,32,95,52,55,53,32,64,32,67,32,95,54,-53,49,32,64,32,102,114,111,109,85,84,70,56,32,34,102,97,105,108,34,-32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,95,54,54,52,32,-64,32,95,55,49,54,32,64,32,64,32,64,32,102,114,111,109,85,84,70,-56,32,34,98,105,110,100,34,32,64,32,64,32,64,32,64,32,64,32,75,-32,64,32,64,32,64,32,95,53,56,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,32,95,54,53,49,32,64,32,102,114,111,109,85,84,-70,56,32,34,62,62,61,34,32,64,32,64,32,64,32,64,32,67,32,95,-56,50,48,32,64,32,102,114,111,109,85,84,70,56,32,34,36,98,34,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,83,-39,32,67,39,32,67,39,32,64,32,64,32,66,32,66,32,67,39,32,64,-32,64,32,66,32,66,32,67,39,32,64,32,64,32,66,32,66,39,32,64,-32,95,49,49,48,48,32,64,32,64,32,64,32,64,32,67,39,32,83,39,-32,66,32,64,32,64,32,66,32,66,32,67,39,32,67,39,32,95,52,55,-52,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,95,52,55,-52,32,64,32,64,32,64,32,66,32,66,32,66,32,95,52,55,53,32,64,-32,64,32,64,32,66,32,67,32,64,32,66,32,83,32,95,51,56,52,32,-64,32,64,32,66,32,67,32,64,32,95,53,52,49,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,95,57,56,52,32,64,32,64,32,64,32,-67,32,95,54,53,49,32,64,32,102,114,111,109,85,84,70,56,32,34,62,-62,34,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,-64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,95,49,49,48,-48,32,64,32,64,32,64,32,66,32,66,32,67,32,95,53,55,53,32,64,-32,64,32,64,32,95,57,56,52,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,-64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,83,39,-32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,66,32,66,32,66,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,51,32,64,32,-64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,67,32,64,-32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,83,39,32,83,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,-32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,53,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,-66,39,32,64,32,66,32,66,39,32,64,32,95,49,49,48,48,32,64,32,-64,32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,67,32,95,57,-56,54,32,64,32,102,114,111,109,85,84,70,56,32,34,70,114,111,109,84,-104,101,110,84,111,34,32,64,32,64,32,64,32,64,32,64,32,67,39,66,-32,66,39,32,79,32,64,32,64,32,67,39,66,32,79,32,64,32,67,32,-79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,95,-49,49,48,48,32,64,32,64,32,64,32,67,39,66,32,66,39,32,67,32,-95,57,56,54,32,64,32,102,114,111,109,85,84,70,56,32,34,70,114,111,-109,84,104,101,110,34,32,64,32,64,32,64,32,64,32,67,39,66,32,79,-32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,66,-39,32,64,32,95,49,49,48,48,32,64,32,64,32,64,32,67,39,66,32,-66,39,32,67,32,95,57,56,54,32,64,32,102,114,111,109,85,84,70,56,-32,34,70,114,111,109,84,111,34,32,64,32,64,32,64,32,64,32,67,39,-66,32,79,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,67,-32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,-83,39,32,83,39,32,83,39,32,67,32,64,32,64,32,64,32,66,32,66,-32,66,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,-64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,-95,49,49,48,48,32,64,32,64,32,67,39,66,32,67,32,95,57,56,54,-32,64,32,102,114,111,109,85,84,70,56,32,34,70,114,111,109,34,32,64,-32,64,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,83,-39,32,66,32,64,32,66,32,83,39,32,67,39,32,67,39,32,95,48,32,-95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-32,67,39,32,89,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,-66,32,64,32,66,32,66,32,83,39,32,80,32,64,32,64,32,64,32,67,-39,32,67,39,66,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,-64,32,64,32,64,32,95,56,50,54,32,64,32,64,32,66,32,66,32,95,-49,49,32,95,53,53,54,32,64,32,64,32,64,32,66,32,80,32,64,32,-95,52,49,54,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-83,39,32,83,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,67,-39,32,83,39,32,83,39,32,67,32,64,32,64,32,64,32,66,32,66,32,-66,32,67,32,83,39,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,56,48,-53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,39,32,66,39,32,66,39,32,66,32,67,39,32,83,39,32,95,48,32,-95,53,53,54,32,64,32,64,32,64,32,64,32,66,32,67,39,32,95,57,-55,54,32,64,32,64,32,66,32,95,55,53,57,32,64,32,95,56,52,49,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,50,54,32,64,32,-64,32,67,32,95,49,48,51,49,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,32,67,39,32,64,32,67,39,32,64,32,64,32,-67,39,32,67,39,32,95,53,57,32,64,32,64,32,67,32,95,49,48,51,-50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,83,-39,32,95,57,55,54,32,64,32,66,32,95,57,56,51,32,64,32,95,51,-48,54,32,95,54,54,51,32,64,32,64,32,64,32,73,32,64,32,64,32,-64,32,64,32,64,32,67,39,66,32,67,39,32,64,32,67,39,32,95,53,-57,32,64,32,95,49,48,51,51,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,67,39,32,95,50,54,32,64,32,95,49,48,54,48,-32,64,32,64,32,64,32,64,32,67,39,66,32,67,39,32,64,32,67,39,-32,95,53,57,32,64,32,95,49,48,52,54,32,64,32,64,32,64,32,64,-32,64,32,64,32,95,53,56,32,64,32,64,32,64,32,66,32,66,32,66,-32,85,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,66,32,64,32,64,-32,66,32,66,32,66,39,32,64,32,64,32,66,32,66,32,66,32,67,39,-32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,32,83,39,32,66,32,64,32,64,32,64,32,66,32,-67,32,64,32,95,57,57,50,32,64,32,64,32,66,32,95,55,53,57,32,-64,32,95,56,52,49,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,66,32,66,32,-95,52,55,55,32,64,32,64,32,67,32,95,53,57,52,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-95,48,32,95,53,53,54,32,64,32,95,56,48,53,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,67,39,32,67,39,66,32,64,32,64,32,66,-32,66,32,66,32,83,39,32,95,49,48,54,32,95,53,53,54,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,32,83,39,32,66,32,64,-32,64,32,64,32,66,32,67,32,64,32,95,57,57,50,32,64,32,64,32,-66,32,95,55,53,57,32,64,32,95,56,52,49,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,95,48,32,95,53,53,54,32,64,-32,64,32,64,32,64,32,66,32,67,39,32,95,51,49,54,32,95,53,53,-54,32,64,32,64,32,64,32,95,57,55,55,32,64,32,64,32,66,32,95,-49,49,32,95,53,53,54,32,64,32,64,32,66,32,95,52,55,55,32,64,-32,95,52,55,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,52,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,-83,39,32,66,32,64,32,64,32,66,32,66,32,83,39,32,83,32,64,32,-64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,54,32,64,32,64,32,64,32,64,32,64,32,83,39,32,-83,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,-67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,55,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,83,39,32,66,32,64,32,66,39,32,66,32,83,39,32,95,48,32,95,-53,53,54,32,64,32,64,32,64,32,66,32,66,32,95,55,32,95,53,53,-52,32,64,32,95,51,49,53,32,64,32,64,32,64,32,66,32,95,51,49,-54,32,95,53,53,54,32,64,32,64,32,95,56,50,54,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,67,39,32,95,49,48,54,32,95,-53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,83,39,32,66,32,64,32,64,32,64,32,66,32,66,32,66,39,32,-64,32,64,32,66,32,67,32,64,32,95,57,57,50,32,64,32,64,32,64,-32,66,32,66,32,95,56,52,50,32,64,32,64,32,67,39,66,32,95,54,-53,50,32,64,32,95,51,50,49,32,64,32,64,32,64,32,64,32,64,32,-66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,95,52,55,57,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,66,32,66,32,67,39,66,32,66,32,95,50,54,32,64,32,-95,49,48,54,48,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,66,32,64,32,64,32,66,32,66,32,66,32,95,48,32,95,53,53,-54,32,64,32,64,32,64,32,64,32,95,49,49,48,48,32,64,32,64,32,-66,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,95,-53,55,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,39,32,64,32,66,-32,66,32,67,32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,53,32,64,32,64,32,64,32,64,32,66,32,-66,32,85,32,64,32,64,32,67,39,66,32,66,32,67,39,66,32,64,32,-66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,95,56,-50,54,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,67,-39,66,32,66,39,32,66,39,32,66,32,95,48,32,95,53,53,54,32,64,-32,64,32,95,49,48,48,54,32,64,32,64,32,64,32,64,32,67,39,66,-32,66,32,67,39,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,32,95,51,49,54,32,95,53,53,54,-32,64,32,64,32,64,32,67,32,95,49,48,54,49,32,64,32,64,32,64,-32,64,32,66,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,-64,32,95,54,52,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,95,48,32,-95,53,53,54,32,64,32,95,55,50,56,32,95,55,52,48,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,83,39,32,83,39,32,67,39,32,67,39,32,83,39,32,83,39,32,-80,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,83,39,32,67,39,32,67,39,32,83,39,32,83,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,83,39,-32,67,39,32,64,32,66,32,64,32,64,32,64,32,64,32,64,32,64,32,-83,39,32,83,39,32,83,39,32,83,39,32,83,39,32,66,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,83,39,32,-83,39,32,83,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,51,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,-67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,51,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,83,39,32,66,32,64,32,66,39,32,66,39,32,-66,32,67,39,66,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,-64,32,64,32,64,32,85,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,83,39,32,66,32,64,32,66,39,32,66,32,83,39,32,67,39,32,-67,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,83,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,67,32,64,32,67,-32,67,32,95,52,48,32,95,50,48,50,32,64,32,64,32,95,53,50,48,-32,95,49,48,54,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,66,32,64,32,95,49,48,54,55,32,64,32,66,32,-95,49,48,54,56,32,64,32,95,49,48,54,57,32,95,49,48,57,53,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,66,32,64,32,66,39,32,66,39,32,66,32,67,39,32,95,48,32,95,-53,53,54,32,64,32,64,32,64,32,67,39,66,32,95,56,50,54,32,64,-32,66,32,95,52,55,53,32,64,32,67,32,95,54,53,49,32,64,32,102,-114,111,109,85,84,70,56,32,34,102,114,111,109,82,97,116,105,111,110,97,-108,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,83,39,32,-66,32,64,32,66,39,32,66,32,83,39,32,66,32,64,32,64,32,66,32,-66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,-32,95,56,56,50,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,90,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,-39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,67,39,66,32,66,-32,67,39,66,32,64,32,95,56,57,50,32,64,32,64,32,67,32,95,52,-55,52,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,-61,61,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,85,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-83,39,32,66,32,64,32,66,39,32,66,39,32,66,39,32,66,32,67,39,-66,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,-64,32,85,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-83,39,32,66,32,64,32,66,39,32,66,32,83,39,32,67,39,32,67,39,-32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,-32,83,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,67,-39,32,83,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,66,32,83,32,67,32,95,52,48,32,95,50,-48,50,32,64,32,64,32,95,53,50,48,32,95,49,48,54,54,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,-67,39,32,83,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,83,32,67,32,95,52,48,32,95,-50,48,50,32,64,32,64,32,95,53,50,48,32,95,49,48,57,54,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,-32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,67,39,32,67,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,32,67,32,-95,52,48,32,95,50,48,50,32,64,32,64,32,95,53,50,48,32,95,49,-48,54,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,67,39,32,67,32,64,32,67,32,67,32,95,52,48,32,95,-50,48,50,32,64,32,64,32,95,53,50,48,32,95,49,48,54,53,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,48,54,55,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,95,49,48,54,-55,32,64,32,66,32,95,49,48,54,56,32,64,32,95,57,48,32,95,49,-48,56,52,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,-32,64,32,67,39,32,67,39,32,67,39,32,64,32,64,32,95,49,48,54,-51,32,64,32,66,32,95,54,55,51,32,64,32,95,57,48,32,95,49,48,-52,32,64,32,64,32,64,32,64,32,67,32,95,55,54,49,32,64,32,95,-49,48,57,54,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-66,32,64,32,95,49,48,54,55,32,64,32,66,32,95,54,55,51,32,64,-32,95,57,48,32,95,49,48,52,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,39,-32,66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,-67,39,66,32,95,56,50,54,32,64,32,66,32,95,52,55,53,32,64,32,-67,32,95,54,53,49,32,64,32,102,114,111,109,85,84,70,56,32,34,102,-114,111,109,73,110,116,101,103,101,114,34,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,-64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,83,39,-32,66,32,64,32,64,32,66,32,66,32,67,39,32,95,48,32,95,53,53,-54,32,64,32,64,32,64,32,64,32,95,56,56,50,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,-32,64,32,66,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,-64,32,64,32,67,39,66,32,66,32,67,39,66,32,64,32,95,56,57,50,-32,64,32,64,32,67,32,95,52,55,52,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,95,49,48,54,55,32,64,32,64,32,66,32,80,32,75,32,95,49,-52,53,32,95,53,53,53,32,64,32,95,53,50,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,-64,32,66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,95,-56,54,56,32,64,32,64,32,95,56,53,54,32,64,32,64,32,85,32,67,-39,66,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,95,-49,52,53,32,95,53,53,53,32,64,32,95,53,50,32,64,32,64,32,64,-32,85,32,66,32,95,49,52,53,32,95,53,53,53,32,64,32,64,32,95,-52,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,-39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,-66,32,83,32,66,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,-83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,53,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,67,39,32,67,39,66,32,64,32,67,-32,67,32,61,61,32,64,32,35,53,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,66,32,67,-39,32,67,32,64,32,64,32,67,39,32,83,32,64,32,67,39,32,83,39,-32,67,39,32,64,32,64,32,95,56,57,50,32,64,32,95,54,54,52,32,-64,32,64,32,67,32,95,55,54,49,32,64,32,95,55,53,54,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,-35,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,90,32,64,32,64,32,64,32,66,32,67,39,32,67,32,64,32,64,32,-67,39,32,83,32,64,32,67,39,32,83,39,32,67,39,32,64,32,64,32,-95,56,57,50,32,64,32,95,54,54,52,32,64,32,64,32,67,32,95,55,-54,49,32,64,32,95,55,53,55,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,95,53,53,48,32,64,32,64,32,64,32,73,-32,64,32,64,32,95,53,53,48,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,39,-32,64,32,66,32,66,32,83,32,64,32,64,32,66,32,66,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,50,32,64,32,64,32,64,32,-64,32,66,32,83,39,32,67,32,64,32,66,32,67,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,51,32,64,32,64,32,64,32,66,32,85,32,-64,32,95,49,48,57,55,32,64,32,64,32,64,32,64,32,66,32,66,32,-85,32,64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,32,67,39,-32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,95,49,48,-50,49,32,64,32,64,32,95,49,49,48,48,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,83,39,32,83,39,32,66,32,64,32,64,32,66,-32,66,32,83,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,-67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,83,39,32,66,32,64,32,66,39,32,66,32,67,39,66,32,64,32,66,-32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,95,56,50,-54,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,-64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,39,32,-66,32,64,32,64,32,66,32,66,39,32,64,32,66,32,66,32,67,39,32,-95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,95,56,56,50,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,85,-32,64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,-32,66,32,67,39,66,32,64,32,66,32,66,32,67,39,66,32,64,32,64,-32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,-32,64,32,95,57,56,49,32,64,32,64,32,64,32,64,32,64,32,66,32,-67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,66,32,64,32,66,32,66,32,67,39,32,64,32,64,32,95,-56,57,50,32,64,32,64,32,95,52,55,52,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,67,-39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,83,32,95,54,54,55,32,95,49,48,57,56,32,64,32,64,32,-64,32,64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,-32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,83,32,-95,54,52,53,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,-66,39,32,66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,-64,32,95,49,48,48,53,32,64,32,64,32,64,32,66,32,66,32,66,32,-85,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,95,-48,32,95,53,53,54,32,64,32,64,32,83,32,73,32,64,32,83,39,32,-67,39,66,32,64,32,66,32,67,32,67,32,61,61,32,64,32,35,49,57,-32,64,32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,64,32,-64,32,66,32,85,32,64,32,67,39,66,32,66,32,95,55,32,95,53,53,-52,32,64,32,64,32,95,50,55,53,32,64,32,64,32,95,56,54,53,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-67,39,32,67,39,32,67,32,64,32,64,32,64,32,95,56,57,50,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,95,55,48,50,32,-64,32,80,32,95,55,48,51,32,64,32,95,54,54,51,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,67,39,32,95,48,32,95,53,53,54,-32,64,32,64,32,67,39,32,95,56,53,48,32,64,32,95,51,48,54,32,-95,51,48,56,32,64,32,64,32,95,49,48,57,56,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,32,83,39,32,95,49,48,54,32,95,53,53,-54,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,-32,85,32,64,32,90,32,95,53,53,48,32,64,32,64,32,64,32,95,56,-54,48,32,64,32,64,32,66,32,95,49,49,32,95,53,53,54,32,64,32,-64,32,95,52,55,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,95,50,49,57,32,-64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,-34,116,99,69,120,112,114,58,32,99,97,110,110,111,116,32,104,97,110,100,-108,101,58,32,34,32,64,32,64,32,64,32,83,39,32,95,49,53,51,32,-64,32,66,32,95,49,53,52,32,95,55,48,49,32,64,32,64,32,95,51,-48,54,32,95,54,54,51,32,64,32,64,32,64,32,66,32,95,49,53,51,-32,79,32,35,51,50,32,64,32,75,32,64,32,64,32,64,32,95,49,53,-52,32,95,55,48,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,58,49,48,57,57,-32,64,10,65,32,95,49,53,51,32,95,56,53,49,32,64,32,95,56,52,-57,32,64,32,58,49,48,57,56,32,64,10,65,32,67,39,66,32,66,32,-95,48,32,95,53,53,54,32,64,32,64,32,95,49,48,48,54,32,64,32,-64,32,66,32,66,32,95,49,56,32,95,53,53,52,32,64,32,95,56,49,-52,32,64,32,64,32,64,32,67,32,95,49,48,53,53,32,95,52,52,32,-64,32,64,32,64,32,64,32,58,49,48,57,55,32,64,10,65,32,102,114,-111,109,85,84,70,56,32,34,80,114,105,109,105,116,105,118,101,115,46,87,-111,114,100,34,32,64,32,58,49,48,57,54,32,64,10,65,32,95,49,48,-55,48,32,95,49,48,56,52,32,64,32,95,49,48,56,53,32,64,32,95,-49,48,56,56,32,95,49,48,57,53,32,64,32,64,32,67,32,83,32,67,-32,95,52,48,32,95,54,56,55,32,95,52,49,49,32,64,32,64,32,64,-32,95,49,48,56,57,32,64,32,64,32,67,32,83,32,67,32,95,52,48,-32,95,54,56,55,32,95,52,49,49,32,64,32,64,32,64,32,95,49,48,-57,48,32,64,32,64,32,67,32,83,32,67,32,95,52,48,32,95,54,56,-55,32,95,52,49,49,32,64,32,64,32,64,32,95,56,56,32,95,49,48,-57,52,32,95,52,54,56,32,64,32,64,32,95,49,48,57,48,32,64,32,-64,32,64,32,83,39,32,95,49,48,56,54,32,95,49,48,57,53,32,64,-32,64,32,66,32,95,57,48,32,95,49,48,56,52,32,64,32,64,32,95,-54,56,50,32,64,32,64,32,66,32,95,57,48,32,95,49,48,56,52,32,-64,32,64,32,95,54,56,51,32,64,32,64,32,64,32,64,32,95,49,48,-56,54,32,95,49,48,57,53,32,64,32,95,56,56,32,95,49,48,56,52,-32,64,32,95,57,48,32,95,49,48,56,52,32,64,32,95,49,48,50,32,-35,49,32,64,32,64,32,64,32,64,32,95,57,48,32,95,49,48,56,52,-32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,64,32,64,-32,64,32,95,49,48,56,54,32,95,49,48,57,53,32,64,32,95,57,48,-32,95,49,48,56,52,32,64,32,95,49,48,50,32,35,49,32,64,32,64,-32,64,32,95,57,48,32,95,49,48,56,52,32,64,32,95,49,48,50,32,-35,48,32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,48,56,54,-32,95,49,48,57,53,32,64,32,95,57,48,32,95,49,48,56,52,32,64,-32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,95,57,48,32,95,-49,48,56,52,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,-32,64,32,64,32,58,49,48,57,53,32,64,10,65,32,83,32,83,32,83,-32,83,32,83,32,83,39,32,95,56,50,32,64,32,66,32,67,32,66,32,-64,32,64,32,66,32,67,39,66,32,66,32,64,32,64,32,83,32,83,39,-32,67,39,32,64,32,66,32,83,39,32,64,32,66,32,67,39,32,64,32,-66,32,83,39,32,64,32,95,49,48,57,51,32,64,32,64,32,64,32,64,-32,83,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,83,39,32,-66,32,64,32,66,32,67,39,32,64,32,66,32,95,49,56,49,32,64,32,-66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,64,-32,64,32,66,32,95,50,49,55,32,64,32,66,32,85,32,65,32,64,32,-64,32,95,49,55,57,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-32,64,32,66,32,95,50,49,55,32,64,32,66,32,85,32,65,32,64,32,-64,32,95,49,55,57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,95,50,49,55,32,64,32,66,32,85,32,65,32,64,32,64,32,95,49,-55,57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,32,66,-32,64,32,64,32,66,32,67,39,66,32,66,32,64,32,64,32,83,32,83,-39,32,67,39,32,64,32,66,32,83,39,32,64,32,66,32,67,39,32,64,-32,66,32,83,39,32,64,32,95,49,48,57,51,32,64,32,64,32,64,32,-64,32,83,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,83,39,-32,66,32,64,32,66,32,67,39,32,64,32,66,32,95,56,49,32,64,32,-66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,64,-32,64,32,66,32,95,50,49,55,32,64,32,66,32,85,32,65,32,64,32,-64,32,95,49,55,57,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-32,64,32,66,32,95,50,49,55,32,64,32,66,32,85,32,65,32,64,32,-64,32,95,49,55,57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,95,50,49,55,32,64,32,66,32,85,32,65,32,64,32,64,32,95,49,-55,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-32,66,32,64,32,64,32,66,32,67,39,66,32,66,32,64,32,64,32,83,-39,32,67,39,66,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,-83,39,32,66,32,64,32,66,39,32,95,49,48,57,51,32,64,32,64,32,-66,32,95,50,49,55,32,64,32,66,32,85,32,65,32,64,32,64,32,95,-49,55,57,32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,49,55,-32,64,32,66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,-66,32,95,49,48,56,48,32,64,32,64,32,66,32,95,56,56,32,64,32,-66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,66,32,95,49,48,-56,48,32,64,32,64,32,66,32,95,49,48,57,49,32,64,32,66,32,85,-32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,85,32,64,32,66,32,90,32,64,32,83,39,32,67,-39,32,95,49,48,56,48,32,64,32,64,32,66,32,95,49,56,48,32,64,-32,66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,-64,32,67,39,32,95,57,48,32,64,32,66,32,85,32,65,32,64,32,64,-32,95,49,55,57,32,64,32,64,32,95,49,48,50,32,35,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,95,49,-48,56,48,32,64,32,64,32,66,32,95,57,48,32,64,32,66,32,85,32,-65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,64,32,67,39,32,-95,57,48,32,64,32,66,32,85,32,65,32,64,32,64,32,95,49,55,57,-32,64,32,64,32,95,49,48,50,32,35,49,32,64,32,64,32,64,32,64,-32,58,49,48,57,52,32,64,10,65,32,67,39,32,67,39,32,67,32,64,-32,64,32,83,39,32,66,32,64,32,66,32,83,32,64,32,83,39,32,67,-32,64,32,66,32,95,52,48,32,64,32,66,32,85,32,75,32,64,32,64,-32,95,49,55,57,32,64,32,64,32,64,32,67,39,32,95,57,48,32,64,-32,66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,-95,49,48,50,32,35,48,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,83,32,64,32,83,39,32,67,39,32,83,39,32,64,32,64,32,66,32,-66,32,83,39,32,95,49,48,56,48,32,64,32,64,32,64,32,95,49,55,-50,32,64,32,64,32,95,49,55,50,32,64,32,64,32,95,49,48,57,50,-32,64,32,64,32,64,32,95,50,49,57,32,102,114,111,109,85,84,70,56,-32,34,68,97,116,97,46,82,97,116,105,111,46,37,58,32,48,32,100,101,-110,111,109,105,110,97,116,111,114,34,32,64,32,64,32,64,32,58,49,48,-57,51,32,64,10,65,32,83,39,32,67,39,66,32,64,32,83,39,32,66,-32,64,32,66,32,89,32,64,32,67,39,32,67,39,32,83,39,32,67,32,-64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,83,32,-64,32,83,39,32,67,32,64,32,66,32,95,52,48,32,64,32,66,32,85,-32,75,32,64,32,64,32,95,49,55,57,32,64,32,64,32,64,32,67,39,-32,95,57,48,32,64,32,66,32,85,32,65,32,64,32,64,32,95,49,55,-57,32,64,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,67,39,66,32,83,32,64,32,64,32,95,49,-55,55,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,66,32,95,-49,48,57,49,32,64,32,66,32,85,32,65,32,64,32,64,32,95,49,55,-57,32,64,32,64,32,64,32,64,32,66,32,95,49,48,57,49,32,64,32,-66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,64,-32,58,49,48,57,50,32,64,10,65,32,85,32,75,52,32,90,32,75,32,-64,32,64,32,64,32,58,49,48,57,49,32,64,10,65,32,95,49,48,56,-48,32,95,57,48,32,95,52,53,50,32,64,32,95,49,48,50,32,35,49,-32,64,32,64,32,64,32,95,57,48,32,95,52,53,50,32,64,32,95,49,-48,50,32,35,48,32,64,32,64,32,64,32,58,49,48,57,48,32,64,10,-65,32,95,49,48,56,48,32,95,57,48,32,95,52,53,50,32,64,32,95,-49,48,50,32,35,48,32,64,32,64,32,64,32,95,57,48,32,95,52,53,-50,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,58,49,-48,56,57,32,64,10,65,32,83,32,95,49,48,56,54,32,64,32,67,39,-32,95,57,48,32,64,32,95,49,48,56,55,32,64,32,95,49,48,50,32,-35,49,32,64,32,64,32,64,32,58,49,48,56,56,32,64,10,65,32,85,-32,90,32,90,32,75,32,64,32,64,32,64,32,58,49,48,56,55,32,64,-10,65,32,85,32,75,32,90,32,75,32,64,32,64,32,64,32,58,49,48,-56,54,32,64,10,65,32,102,47,32,58,49,48,56,53,32,64,10,65,32,-95,56,50,32,95,49,48,55,49,32,64,32,95,49,48,55,50,32,64,32,-95,49,48,55,51,32,64,32,95,49,48,55,52,32,64,32,83,32,83,32,-67,32,95,56,55,32,95,49,48,55,57,32,64,32,64,32,38,48,46,48,-32,64,32,64,32,73,32,64,32,64,32,95,56,56,32,95,49,48,56,52,-32,64,32,64,32,64,32,67,32,67,32,67,32,67,32,95,56,57,32,95,-49,48,55,57,32,64,32,64,32,38,48,46,48,32,64,32,64,32,95,56,-56,32,95,49,48,56,52,32,64,32,95,49,48,54,57,32,95,49,48,57,-53,32,64,32,95,49,48,56,49,32,95,49,48,50,32,35,49,32,64,32,-64,32,95,49,48,50,32,35,49,32,64,32,64,32,64,32,64,32,64,32,-64,32,38,48,46,48,32,64,32,64,32,38,49,46,48,32,64,32,64,32,-95,49,48,56,51,32,64,32,58,49,48,56,52,32,64,10,65,32,85,32,-67,39,66,32,66,32,95,49,48,55,51,32,64,32,80,32,38,49,46,48,-32,64,32,95,49,48,55,50,32,38,48,46,48,32,64,32,38,49,46,48,-32,64,32,64,32,64,32,64,32,89,32,66,32,80,32,38,48,46,48,32,-64,32,64,32,66,32,67,39,66,32,66,32,95,49,48,55,49,32,64,32,-95,49,48,56,50,32,64,32,64,32,64,32,66,32,95,49,48,55,51,32,-95,49,48,56,50,32,95,49,48,48,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,58,49,48,56,51,32,64,10,65,32,105,116,111,-102,32,58,49,48,56,50,32,64,10,65,32,95,49,48,56,48,32,58,49,-48,56,49,32,64,10,65,32,83,39,32,66,32,64,32,115,101,113,32,64,-32,66,32,83,32,115,101,113,32,64,32,64,32,80,32,64,32,64,32,58,-49,48,56,48,32,64,10,65,32,95,54,57,32,95,54,57,48,32,64,32,-95,52,49,53,32,95,49,48,55,57,32,64,32,64,32,95,49,48,55,53,-32,64,32,95,49,48,55,54,32,64,32,95,49,48,55,55,32,64,32,95,-49,48,55,56,32,64,32,95,55,56,32,95,49,48,55,57,32,64,32,64,-32,95,55,57,32,95,49,48,55,57,32,64,32,64,32,58,49,48,55,57,-32,64,10,65,32,102,62,61,32,58,49,48,55,56,32,64,10,65,32,102,-62,32,58,49,48,55,55,32,64,10,65,32,102,60,61,32,58,49,48,55,-54,32,64,10,65,32,102,60,32,58,49,48,55,53,32,64,10,65,32,102,-110,101,103,32,58,49,48,55,52,32,64,10,65,32,102,42,32,58,49,48,-55,51,32,64,10,65,32,102,45,32,58,49,48,55,50,32,64,10,65,32,-102,43,32,58,49,48,55,49,32,64,10,65,32,66,32,66,32,66,32,67,-32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,-32,64,32,58,49,48,55,48,32,64,10,65,32,85,32,75,50,32,65,32,-64,32,64,32,58,49,48,54,57,32,64,10,65,32,66,32,80,32,35,50,-32,64,32,64,32,85,32,64,32,58,49,48,54,56,32,64,10,65,32,66,-32,66,32,83,32,73,32,64,32,64,32,64,32,83,39,32,83,39,32,83,-39,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,-67,32,61,61,32,64,32,35,55,32,64,32,64,32,64,32,64,32,64,32,-67,39,32,83,39,32,83,32,64,32,64,32,95,49,48,54,51,32,64,32,-67,39,32,67,32,64,32,66,32,67,32,66,32,64,32,64,32,83,39,32,-67,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,50,32,64,32,64,32,64,32,64,32,83,39,-32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,32,83,-39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,53,32,64,32,64,32,64,32,64,32,-66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,-35,53,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,90,32,83,-39,32,95,55,53,57,32,64,32,95,56,52,49,32,64,32,67,32,95,55,-54,49,32,64,32,95,49,48,54,52,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,85,32,64,32,90,32,67,32,95,55,54,49,32,-64,32,95,49,48,54,52,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,-35,50,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,90,32,67,-32,95,55,54,49,32,64,32,95,49,48,54,50,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,83,39,32,67,32,64,32,66,32,67,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,-66,32,85,32,64,32,90,32,67,32,95,55,54,49,32,64,32,95,49,48,-54,53,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,90,-32,67,32,95,55,54,49,32,64,32,95,49,48,54,54,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,53,53,48,32,95,51,48,53,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,-64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,32,66,32,-95,48,32,95,53,53,54,32,64,32,95,56,48,53,32,64,32,64,32,64,-32,64,32,95,49,48,54,51,32,64,32,64,32,64,32,64,32,64,32,58,-49,48,54,55,32,64,10,65,32,102,114,111,109,85,84,70,56,32,34,80,-114,105,109,105,116,105,118,101,115,46,73,110,116,34,32,64,32,58,49,48,-54,54,32,64,10,65,32,102,114,111,109,85,84,70,56,32,34,68,97,116,-97,46,73,110,116,101,103,101,114,95,84,121,112,101,46,73,110,116,101,103,-101,114,34,32,64,32,58,49,48,54,53,32,64,10,65,32,102,114,111,109,-85,84,70,56,32,34,80,114,105,109,105,116,105,118,101,115,46,67,104,97,-114,34,32,64,32,58,49,48,54,52,32,64,10,65,32,67,39,32,67,39,-32,67,32,64,32,64,32,83,39,32,66,32,64,32,95,56,57,50,32,95,-51,48,53,32,64,32,64,32,95,54,54,52,32,64,32,64,32,58,49,48,-54,51,32,64,10,65,32,102,114,111,109,85,84,70,56,32,34,80,114,105,-109,105,116,105,118,101,115,46,68,111,117,98,108,101,34,32,64,32,58,49,-48,54,50,32,64,10,65,32,66,32,66,32,85,32,64,32,64,32,66,32,-67,39,32,67,39,66,32,64,32,66,32,66,32,95,50,54,32,64,32,64,-32,95,49,48,51,49,32,64,32,64,32,64,32,67,39,32,67,39,66,32,-64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,-95,49,48,53,48,32,64,32,64,32,66,32,66,32,95,49,49,32,95,53,-53,54,32,64,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,58,-49,48,54,49,32,64,10,65,32,83,39,32,67,39,32,83,39,32,95,49,-48,54,32,95,53,53,54,32,64,32,64,32,95,55,57,48,32,64,32,64,-32,64,32,83,39,32,66,32,64,32,66,32,67,39,32,95,48,32,95,53,-53,54,32,64,32,64,32,64,32,66,32,95,51,49,54,32,95,53,53,54,-32,64,32,64,32,66,32,95,49,48,51,57,32,95,51,48,53,32,64,32,-64,32,66,32,95,55,52,57,32,64,32,89,32,66,32,80,32,75,32,64,-32,64,32,83,39,32,67,32,64,32,66,32,67,39,32,83,39,32,64,32,-66,32,67,32,64,32,67,32,67,32,83,39,32,64,32,90,32,75,32,64,-32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,39,32,67,39,32,95,53,57,32,64,32,64,32,80,32,64,32,64,-32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,67,39,32,95,50,54,32,64,32,95,57,56,56,-32,95,51,48,53,32,64,32,64,32,64,32,64,32,66,32,95,48,32,95,-53,53,54,32,64,32,64,32,95,51,49,54,32,95,53,53,54,32,64,32,-95,49,48,53,55,32,64,32,64,32,64,32,64,32,64,32,95,49,48,53,-57,32,64,32,58,49,48,54,48,32,64,10,65,32,95,53,48,55,32,95,-49,48,53,56,32,64,32,58,49,48,53,57,32,64,10,65,32,67,32,80,-32,90,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,90,32,95,-54,52,54,32,95,51,48,53,32,64,32,64,32,64,32,64,32,75,50,32,-95,53,56,32,64,32,64,32,58,49,48,53,56,32,64,10,65,32,83,32,-80,32,83,39,32,66,32,64,32,66,32,95,48,32,95,53,53,54,32,64,-32,64,32,95,49,48,48,53,32,95,51,48,53,32,64,32,64,32,64,32,-66,32,66,32,85,32,64,32,64,32,66,32,90,32,64,32,66,32,67,39,-32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,67,32,-95,49,48,53,53,32,95,52,52,32,64,32,64,32,64,32,64,32,66,32,-66,32,95,50,54,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,-32,64,32,95,53,55,54,32,64,32,64,32,64,32,64,32,64,32,64,32,-83,39,32,66,32,64,32,66,32,95,48,32,95,53,53,54,32,64,32,64,-32,95,49,48,48,57,32,64,32,64,32,66,32,66,32,85,32,64,32,64,-32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,67,39,66,32,66,-39,32,66,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,-32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,66,-32,67,39,32,67,39,32,95,50,54,32,64,32,64,32,66,32,66,32,95,-49,52,54,32,95,53,53,53,32,64,32,64,32,64,32,67,39,66,32,66,-32,95,53,54,32,64,32,66,32,95,49,50,51,32,64,32,95,51,48,49,-32,64,32,64,32,64,32,66,32,95,49,50,51,32,64,32,95,51,48,49,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,95,55,56,57,32,95,-51,48,53,32,64,32,64,32,95,51,48,54,32,95,54,54,51,32,64,32,-64,32,102,114,111,109,85,84,70,56,32,34,101,120,105,115,116,101,110,116,-105,97,108,115,32,110,111,116,32,97,108,108,111,119,101,100,32,105,110,32,-112,97,116,116,101,114,110,32,98,105,110,100,105,110,103,34,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,-66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,67,32,-95,57,55,54,32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,-49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,95,49,48,53,-54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,90,32,-90,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,58,-49,48,53,55,32,64,10,65,32,66,32,90,32,64,32,66,32,66,32,90,-32,64,32,64,32,80,32,64,32,64,32,58,49,48,53,54,32,64,10,65,-32,66,32,89,32,64,32,66,32,66,32,83,32,66,32,64,32,64,32,64,-32,67,39,32,83,39,32,67,39,32,83,39,32,67,39,66,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,67,32,61,61,32,-64,32,35,50,49,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,32,67,32,64,32,66,32,83,39,32,83,39,32,64,32,95,56,-52,56,32,64,32,64,32,66,32,66,32,83,39,32,95,48,32,95,53,53,-54,32,64,32,64,32,67,39,32,95,56,53,48,32,64,32,95,51,48,54,-32,95,54,53,52,32,95,54,54,50,32,64,32,64,32,64,32,102,114,111,-109,85,84,70,56,32,34,102,99,110,83,34,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,-32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,67,-39,66,32,66,39,32,66,32,95,50,54,32,64,32,95,49,48,52,52,32,-64,32,64,32,64,32,66,32,95,51,49,54,32,95,53,53,54,32,64,32,-64,32,95,49,48,53,49,32,64,32,64,32,64,32,64,32,66,32,85,32,-64,32,66,32,83,39,32,83,32,64,32,66,32,85,32,64,32,95,49,49,-32,95,53,53,54,32,64,32,64,32,64,32,64,32,66,32,66,32,90,32,-64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,32,66,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,79,32,64,32,64,32,64,32,66,32,66,32,66,32,-95,50,54,32,95,53,55,55,32,95,53,56,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,95,53,55,56,32,-64,32,67,39,32,79,32,64,32,66,32,80,32,95,53,56,32,64,32,64,-32,95,52,55,53,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,-66,32,66,32,67,39,32,95,49,53,51,32,64,32,95,57,55,53,32,64,-32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,64,32,95,53,55,-54,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,85,32,64,32,64,32,67,39,32,83,39,32,67,39,32,67,-39,32,83,39,32,95,48,32,95,53,53,54,32,64,32,64,32,95,56,57,-53,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-67,39,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,67,32,-95,56,53,48,32,64,32,102,114,111,109,85,84,70,56,32,34,102,99,110,-68,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,67,39,66,32,66,32,83,39,32,66,32,64,32,64,32,66,32,-66,32,95,50,54,32,64,32,64,32,67,32,95,57,50,57,32,95,51,48,-53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,-32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,-32,64,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,95,49,49,-32,95,53,53,54,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,79,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,-83,32,64,32,66,32,67,32,83,32,64,32,64,32,66,32,66,32,67,32,-66,32,64,32,64,32,64,32,67,39,32,83,39,32,67,39,32,67,32,64,-32,64,32,64,32,66,32,66,32,66,32,67,32,67,39,32,64,32,64,32,-64,32,64,32,67,39,66,32,66,32,67,32,64,32,66,32,67,32,67,39,-32,64,32,64,32,66,32,95,53,55,55,32,64,32,67,39,32,79,32,64,-32,95,52,55,53,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,-90,32,75,32,64,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,-64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,32,95,50,54,-32,64,32,66,32,95,53,55,55,32,64,32,67,39,32,79,32,64,32,95,-52,55,53,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,66,32,64,32,66,32,95,53,55,56,32,64,32,67,39,32,79,32,64,-32,66,32,80,32,95,53,56,32,64,32,64,32,95,52,55,53,32,64,32,-64,32,75,32,64,32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,-64,32,95,53,55,54,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,95,51,48,54,32,-95,54,53,52,32,95,54,54,50,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,67,39,-66,32,66,32,95,50,54,32,64,32,95,49,48,53,52,32,64,32,64,32,-64,32,64,32,67,32,64,32,64,32,64,32,64,32,64,32,58,49,48,53,-53,32,64,10,65,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,-95,55,50,56,32,95,55,52,50,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,39,32,66,32,95,49,48,54,32,95,53,53,54,32,64,32,64,-32,66,32,95,49,48,53,51,32,64,32,95,54,48,32,85,32,80,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,95,48,32,95,53,-53,54,32,64,32,64,32,67,39,66,32,66,32,95,49,48,54,32,95,53,-53,54,32,64,32,64,32,95,55,52,54,32,64,32,64,32,95,49,49,32,-95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,58,49,48,53,52,-32,64,10,65,32,95,49,48,56,32,95,53,53,54,32,64,32,95,54,50,-56,32,95,49,48,53,50,32,64,32,64,32,58,49,48,53,51,32,64,10,-65,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,-32,95,55,52,50,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-95,55,52,54,32,64,32,64,32,64,32,83,39,32,66,32,64,32,95,56,-48,55,32,64,32,66,32,95,55,54,53,32,64,32,95,52,55,53,32,64,-32,64,32,64,32,64,32,58,49,48,53,50,32,64,10,65,32,66,32,85,-32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,50,54,32,-64,32,64,32,95,49,48,52,53,32,64,32,64,32,67,39,32,67,39,66,-32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,-32,67,32,95,49,48,53,48,32,64,32,64,32,64,32,66,32,66,32,95,-49,49,32,95,53,53,54,32,64,32,64,32,64,32,95,53,55,55,32,64,-32,64,32,64,32,64,32,58,49,48,53,49,32,64,10,65,32,66,32,85,-32,64,32,66,32,66,32,67,39,32,95,50,54,32,64,32,95,49,48,54,-48,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,-32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,66,32,95,51,49,-54,32,95,53,53,54,32,64,32,64,32,95,49,48,52,57,32,64,32,64,-32,64,32,66,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,-64,32,67,32,95,53,55,56,32,64,32,64,32,64,32,64,32,64,32,58,-49,48,53,48,32,64,10,65,32,66,32,85,32,64,32,66,32,67,39,66,-32,66,32,95,50,54,32,64,32,95,49,48,52,56,32,64,32,64,32,64,-32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,48,32,95,53,53,-54,32,64,32,64,32,64,32,95,57,55,54,32,64,32,64,32,66,32,66,-32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,80,32,64,32,-64,32,64,32,64,32,58,49,48,52,57,32,64,10,65,32,67,32,67,32,-83,39,32,64,32,85,32,95,53,56,32,64,32,64,32,64,32,66,32,67,-39,66,32,66,32,95,50,54,32,64,32,95,49,48,52,55,32,64,32,64,-32,64,32,66,32,67,39,66,32,66,32,95,50,54,32,64,32,95,49,48,-52,56,32,64,32,64,32,64,32,67,39,66,32,66,32,64,32,95,53,57,-32,64,32,64,32,64,32,64,32,58,49,48,52,56,32,64,10,65,32,67,-39,32,83,32,64,32,67,32,67,32,83,39,32,64,32,66,32,66,32,67,-39,32,95,48,32,95,53,53,54,32,64,32,64,32,95,56,50,54,32,95,-51,48,53,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,-64,32,66,32,67,39,66,32,66,32,67,39,32,95,50,54,32,64,32,64,-32,67,32,95,49,48,51,49,32,64,32,64,32,64,32,64,32,67,39,66,-32,66,32,64,32,67,32,95,49,48,51,50,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,67,39,32,95,48,32,95,53,53,54,32,-64,32,64,32,83,39,32,95,57,55,54,32,64,32,66,32,95,57,56,51,-32,64,32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,73,-32,64,32,64,32,64,32,67,32,66,32,64,32,95,49,48,51,51,32,64,-32,64,32,64,32,64,32,66,32,67,39,32,95,50,54,32,64,32,95,49,-48,54,48,32,64,32,64,32,67,32,66,32,64,32,95,49,48,52,54,32,-64,32,64,32,64,32,58,49,48,52,55,32,64,10,65,32,90,32,90,32,-85,32,64,32,64,32,58,49,48,52,54,32,64,10,65,32,83,39,32,67,-32,64,32,66,32,67,32,83,39,32,64,32,64,32,67,32,80,32,64,32,-95,53,56,32,64,32,64,32,64,32,67,39,66,32,66,32,83,39,32,66,-32,64,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,-32,64,32,67,39,32,95,56,56,50,32,95,51,48,53,32,64,32,64,32,-95,51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,67,39,66,32,-66,32,67,39,66,32,64,32,66,32,66,32,95,50,54,32,64,32,64,32,-67,32,95,49,48,51,49,32,64,32,64,32,64,32,64,32,64,32,66,32,-67,39,32,67,39,66,32,64,32,66,32,66,32,95,50,54,32,64,32,64,-32,67,32,95,49,48,52,53,32,64,32,64,32,64,32,64,32,67,39,66,-32,67,39,66,32,64,32,95,53,57,32,64,32,64,32,64,32,64,32,64,-32,64,32,58,49,48,52,53,32,64,10,65,32,67,32,67,32,83,39,32,-64,32,95,57,55,50,32,64,32,64,32,67,32,95,48,32,95,53,53,54,-32,64,32,64,32,66,32,95,48,32,95,53,53,54,32,64,32,95,57,55,-49,32,64,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,-95,55,50,56,32,95,56,53,56,32,64,32,64,32,64,32,64,32,66,32,-66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,66,32,95,-56,55,48,32,64,32,95,54,48,32,95,50,55,57,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,67,39,32,95,48,32,95,53,53,54,32,-64,32,64,32,66,32,95,49,56,32,95,53,53,52,32,64,32,95,50,57,-52,32,64,32,64,32,95,51,49,54,32,95,53,53,54,32,64,32,95,49,-48,52,51,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,67,39,66,-32,66,39,32,80,32,64,32,64,32,95,49,53,51,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,49,48,52,52,32,64,10,65,-32,66,32,95,48,32,95,53,53,54,32,64,32,95,53,53,56,32,64,32,-64,32,83,39,32,83,39,32,95,48,32,95,53,53,54,32,64,32,64,32,-64,32,67,39,66,32,66,32,95,49,48,52,48,32,95,53,53,54,32,64,-32,64,32,95,49,48,52,49,32,64,32,64,32,95,56,53,56,32,64,32,-64,32,66,32,66,32,85,32,64,32,64,32,67,39,32,83,39,32,67,39,-32,67,39,32,89,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,66,32,80,32,95,49,49,32,95,53,53,54,32,64,32,95,53,56,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,-39,32,66,39,32,66,39,32,66,32,67,39,66,32,64,32,66,32,66,32,-95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,95,56,54,55,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,66,32,66,-39,32,66,39,32,66,32,95,49,48,54,32,95,53,53,54,32,64,32,64,-32,95,57,51,48,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,57,55,49,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,95,-48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,56,53,56,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,-39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,66,32,66,32,66,32,67,32,95,51,48,49,32,64,32,64,-32,64,32,64,32,66,39,32,66,32,95,49,48,54,32,95,53,53,54,32,-64,32,64,32,95,53,53,57,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,39,66,32,66,32,95,49,48,54,32,95,53,53,54,32,64,32,64,-32,95,57,51,48,32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,48,-52,50,32,64,32,64,32,64,32,64,32,58,49,48,52,51,32,64,10,65,-32,85,32,75,51,32,75,52,32,75,52,32,65,32,64,32,64,32,64,32,-64,32,58,49,48,52,50,32,64,10,65,32,66,32,85,32,64,32,90,32,-67,39,66,32,66,32,95,49,56,32,95,53,53,52,32,64,32,64,32,95,-54,51,32,95,55,50,32,64,32,64,32,64,32,66,32,95,56,55,48,32,-64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,-58,49,48,52,49,32,64,10,65,32,66,32,66,32,89,32,64,32,64,32,-83,39,32,66,32,64,32,66,39,32,66,32,80,32,64,32,67,32,95,49,-49,32,64,32,80,32,95,53,56,32,64,32,95,53,56,32,64,32,64,32,-64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,32,83,-39,32,66,32,64,32,64,32,64,32,66,39,32,95,48,32,64,32,64,32,-64,32,83,39,32,67,39,66,32,64,32,66,32,66,32,67,39,66,32,64,-32,64,32,66,39,32,95,48,32,64,32,64,32,64,32,66,32,66,32,66,-32,85,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,66,-39,32,66,32,95,50,54,32,64,32,95,49,49,32,64,32,64,32,64,32,-64,32,64,32,83,39,32,67,32,64,32,66,32,67,39,32,83,39,32,64,-32,83,39,32,64,32,64,32,66,32,67,39,66,32,80,32,64,32,64,32,-95,53,57,32,64,32,64,32,64,32,66,32,66,32,80,32,64,32,64,32,-95,53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-58,49,48,52,48,32,64,10,65,32,66,32,67,39,32,83,32,64,32,67,-39,32,83,32,64,32,67,32,95,50,48,55,32,64,32,64,32,66,32,95,-48,32,95,53,53,54,32,64,32,95,56,48,53,32,64,32,64,32,66,32,-66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,80,32,64,-32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,95,48,-32,95,53,53,54,32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,-95,55,56,54,32,64,32,64,32,64,32,67,32,95,49,48,51,56,32,64,-32,95,56,52,55,32,64,32,64,32,64,32,64,32,66,32,66,32,95,49,-49,32,95,53,53,54,32,64,32,64,32,64,32,80,32,64,32,64,32,64,-32,58,49,48,51,57,32,64,10,65,32,66,32,66,32,83,32,73,32,64,-32,64,32,64,32,83,39,32,83,39,32,83,39,32,67,39,66,32,64,32,-64,32,64,32,66,32,66,32,66,32,67,32,67,32,61,61,32,64,32,35,-50,49,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,-48,32,95,53,53,54,32,64,32,95,49,56,32,95,53,53,52,32,64,32,-95,49,48,51,52,32,64,32,95,55,50,56,32,95,55,52,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,-32,66,39,32,64,32,95,49,48,51,53,32,64,32,64,32,83,39,32,67,-39,32,95,49,48,51,54,32,64,32,64,32,66,32,66,32,95,54,48,32,-67,32,95,56,49,49,32,64,32,95,49,48,51,55,32,64,32,64,32,64,-32,64,32,66,32,95,56,51,49,32,95,50,48,50,32,64,32,64,32,66,-32,95,56,56,54,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,-64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,-64,32,66,32,66,32,90,32,64,32,64,32,95,49,48,51,53,32,64,32,-64,32,64,32,64,32,64,32,58,49,48,51,56,32,64,10,65,32,95,52,-55,53,32,95,53,50,49,32,64,32,58,49,48,51,55,32,64,10,65,32,-83,32,83,32,64,32,66,32,90,32,64,32,66,32,90,32,64,32,95,56,-49,51,32,64,32,64,32,64,32,58,49,48,51,54,32,64,10,65,32,66,-32,95,56,57,51,32,64,32,95,56,52,53,32,64,32,58,49,48,51,53,-32,64,10,65,32,85,32,75,32,95,54,48,32,95,50,52,57,32,64,32,-64,32,64,32,58,49,48,51,52,32,64,10,65,32,90,32,66,32,90,32,-64,32,85,32,64,32,64,32,58,49,48,51,51,32,64,10,65,32,66,32,-66,32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,80,32,-64,32,64,32,58,49,48,51,50,32,64,10,65,32,83,39,32,83,32,64,-32,66,32,83,39,32,83,39,32,64,32,66,32,64,32,64,32,66,32,66,-32,66,32,83,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,48,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-67,39,32,83,32,64,32,67,39,32,95,49,50,51,32,64,32,95,54,52,-52,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,-32,67,39,32,95,50,54,32,64,32,64,32,66,32,66,32,95,57,56,56,-32,95,51,48,53,32,64,32,64,32,64,32,67,39,32,67,39,32,79,32,-64,32,64,32,67,32,80,32,64,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,85,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-67,39,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,95,57,-57,49,32,64,32,64,32,64,32,67,39,32,67,39,32,83,39,32,83,39,-32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,95,55,57,48,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,95,48,32,-95,53,53,54,32,64,32,64,32,95,51,49,54,32,95,53,53,54,32,64,-32,67,39,32,95,49,56,32,95,53,53,52,32,64,32,64,32,80,32,64,-32,95,56,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,67,39,32,95,50,54,32,64,32,95,57,56,56,32,95,51,-48,53,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,-39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,95,49,48,50,-56,32,64,32,64,32,66,32,85,32,64,32,90,32,66,32,66,32,83,39,-32,95,48,32,95,53,53,54,32,64,32,64,32,95,49,48,50,57,32,35,-48,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,-64,32,64,32,67,39,66,32,66,32,95,50,54,32,64,32,95,49,48,51,-48,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,95,54,52,54,32,95,51,48,53,32,64,-32,64,32,64,32,64,32,58,49,48,51,49,32,64,10,65,32,75,32,66,-32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,56,-57,54,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,32,-95,49,48,54,32,95,53,53,54,32,64,32,64,32,95,49,48,56,32,95,-53,53,54,32,64,32,95,57,50,55,32,64,32,64,32,64,32,64,32,67,-39,66,32,95,48,32,95,53,53,54,32,64,32,64,32,67,39,66,32,66,-32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,95,57,50,56,32,-64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,49,48,51,48,32,64,10,65,32,66,32,89,32,64,-32,83,39,32,67,39,32,83,32,64,32,64,32,66,32,66,32,67,32,66,-32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,83,32,64,32,-64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,49,55,32,64,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,50,48,32,64,32,64,32,64,-32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,-32,64,32,35,50,48,32,64,32,64,32,64,32,64,32,66,32,85,32,64,-32,67,39,32,83,32,64,32,67,39,32,83,39,32,67,32,64,32,64,32,-83,39,32,66,32,64,32,66,32,83,32,64,32,95,56,55,32,95,56,48,-32,64,32,64,32,64,32,67,39,66,32,66,32,67,32,64,32,67,39,32,-67,32,64,32,95,49,52,57,32,95,56,48,32,64,32,64,32,95,49,49,-32,95,53,53,54,32,64,32,95,49,48,55,32,64,32,64,32,64,32,64,-32,67,39,32,95,50,54,32,64,32,66,32,95,55,56,57,32,95,51,48,-53,32,64,32,64,32,95,51,48,54,32,95,54,53,54,32,64,32,64,32,-64,32,102,114,111,109,85,84,70,56,32,34,116,111,111,32,109,97,110,121,-32,97,114,103,117,109,101,110,116,115,34,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,95,55,56,57,32,95,51,48,53,32,64,32,64,32,95,-51,48,54,32,95,54,53,54,32,64,32,64,32,102,114,111,109,85,84,70,-56,32,34,116,111,111,32,102,101,119,32,97,114,103,117,109,101,110,116,115,-34,32,64,32,64,32,64,32,64,32,95,54,57,56,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,-67,32,61,61,32,64,32,35,49,55,32,64,32,64,32,64,32,64,32,66,-32,85,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,49,51,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,49,51,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,90,-32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,-64,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,32,64,32,-64,32,66,32,85,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,-32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,66,32,95,-49,48,50,57,32,64,32,67,32,95,49,56,49,32,95,49,48,52,32,64,-32,64,32,35,49,32,64,32,64,32,64,32,64,32,95,49,48,50,57,32,-35,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,83,32,67,32,67,39,32,67,39,32,64,32,66,32,64,32,83,39,32,-83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,56,32,64,32,64,32,64,32,64,32,83,39,-32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,49,52,32,64,32,64,32,64,32,64,32,-83,39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,49,56,32,64,32,64,32,64,32,-64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,-64,32,35,49,56,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,-90,32,75,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,-39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,52,32,64,32,-64,32,64,32,64,32,66,32,85,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,66,32,83,39,32,67,39,66,32,64,32,67,32,67,32,61,-61,32,64,32,35,56,32,64,32,64,32,64,32,64,32,66,32,66,32,85,-32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,67,39,32,-67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,-64,32,64,32,64,32,66,32,85,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,32,64,32,-64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,52,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,-83,32,64,32,66,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,55,32,64,32,64,32,64,32,66,32,85,32,64,32,75,32,64,32,64,-32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,-61,61,32,64,32,35,52,32,64,32,64,32,64,32,64,32,66,32,85,32,-64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,48,-32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,75,32,64,32,64,-32,64,32,64,32,64,32,64,32,95,53,53,48,32,95,51,48,53,32,64,-32,64,32,64,32,64,32,67,39,66,32,67,32,67,32,95,54,55,32,95,-55,50,32,64,32,64,32,35,48,32,64,32,64,32,95,49,49,32,95,53,-53,54,32,64,32,95,49,48,55,32,64,32,64,32,64,32,67,39,32,95,-55,56,57,32,95,51,48,53,32,64,32,64,32,95,51,48,54,32,95,54,-54,51,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,66,97,100,-32,112,97,116,116,101,114,110,34,32,64,32,64,32,64,32,64,32,64,32,-64,32,58,49,48,50,57,32,64,10,65,32,95,56,57,51,32,95,49,48,-50,55,32,64,32,58,49,48,50,56,32,64,10,65,32,66,32,89,32,64,-32,67,39,32,67,39,32,83,32,64,32,64,32,67,39,32,67,39,32,83,-32,64,32,64,32,66,32,66,32,83,39,32,67,39,32,64,32,66,32,64,-32,64,32,64,32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,-32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,-56,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,-83,39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,-53,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,-67,39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,-55,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,-32,66,32,83,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,-32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,56,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,56,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,-32,67,39,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,95,-56,50,54,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,83,39,32,66,32,-64,32,66,39,32,66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,-64,32,64,32,95,56,56,50,32,95,51,48,53,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,-66,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,95,49,48,54,-32,95,53,53,54,32,64,32,64,32,64,32,64,32,67,32,95,57,57,50,-32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,-32,67,39,32,95,49,48,50,55,32,64,32,95,56,48,54,32,64,32,64,-32,64,32,66,32,85,32,64,32,66,32,66,32,66,32,66,32,95,49,49,-32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,67,39,66,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,-32,64,32,64,32,95,57,56,57,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,-32,66,32,64,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,95,-49,48,48,53,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,-64,32,66,32,67,39,66,32,66,39,32,66,32,67,39,66,32,64,32,66,-32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,67,-39,66,32,66,39,32,66,39,32,66,39,32,66,39,32,66,39,32,66,32,-95,48,32,95,53,53,54,32,64,32,64,32,95,49,48,48,54,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,-66,32,64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,66,32,-66,32,67,39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,-32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,66,32,67,39,66,-32,67,32,67,32,61,61,32,64,32,35,49,57,32,64,32,64,32,95,53,-53,48,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,85,32,64,32,64,32,66,32,67,32,64,32,95,56,56,48,32,95,-51,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,95,49,49,32,95,53,53,54,-32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,-64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,64,32,-95,54,53,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,-64,32,67,32,67,32,61,61,32,64,32,35,49,53,32,64,32,64,32,64,-32,64,32,66,32,85,32,64,32,83,39,32,83,39,32,83,32,64,32,64,-32,66,32,66,32,85,32,64,32,64,32,66,32,83,39,32,95,48,32,95,-53,53,54,32,64,32,64,32,95,56,50,54,32,95,51,48,53,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,90,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,67,39,-66,32,67,32,67,32,61,61,32,64,32,35,50,48,32,64,32,64,32,95,-53,53,48,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,85,32,64,32,64,32,67,39,66,32,66,39,32,95,50,54,32,-64,32,64,32,67,39,66,32,95,56,51,50,32,64,32,67,39,32,95,51,-49,57,32,64,32,95,54,57,56,32,64,32,95,52,55,53,32,95,53,50,-49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,32,-90,32,64,32,64,32,66,32,67,39,32,67,39,32,95,48,32,95,53,53,-54,32,64,32,64,32,64,32,95,56,51,53,32,95,50,54,32,95,56,32,-64,32,95,52,55,53,32,95,53,50,49,32,64,32,64,32,64,32,64,32,-64,32,80,32,95,53,53,48,32,95,51,48,53,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,-39,32,83,39,32,83,32,64,32,64,32,64,32,66,32,66,32,66,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,51,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,-67,32,67,32,61,61,32,64,32,35,49,51,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,66,32,67,-39,32,95,48,32,95,53,53,54,32,64,32,64,32,95,56,52,54,32,95,-51,48,53,32,64,32,95,56,48,54,32,95,56,52,55,32,64,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,-32,83,39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,-64,32,67,39,32,67,32,64,32,95,49,48,48,55,32,95,51,48,53,32,-64,32,64,32,64,32,64,32,67,32,95,49,48,50,56,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,67,39,66,-32,64,32,67,32,67,32,61,61,32,64,32,35,56,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,-32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,67,39,32,-67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,-66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,56,48,53,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,-83,39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,64,-32,67,39,32,83,39,32,66,32,64,32,64,32,67,32,95,57,57,50,32,-95,51,48,53,32,64,32,64,32,64,32,66,32,95,55,53,57,32,64,32,-95,56,52,49,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,95,-48,32,95,53,53,54,32,64,32,64,32,64,32,67,39,32,95,51,49,54,-32,95,53,53,54,32,64,32,64,32,95,49,48,50,56,32,64,32,64,32,-66,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,83,39,32,-67,32,64,32,83,39,32,80,32,64,32,66,32,95,50,57,52,32,64,32,-85,32,90,32,75,32,64,32,64,32,64,32,64,32,66,32,95,50,57,52,-32,64,32,85,32,75,32,75,32,64,32,64,32,64,32,64,32,64,32,66,-32,95,52,55,55,32,64,32,66,32,95,52,55,56,32,64,32,85,32,75,-32,65,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,48,-48,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,83,39,32,-83,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,83,39,32,67,39,32,67,39,32,83,39,32,83,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,32,83,39,32,66,-32,64,32,64,32,66,32,66,32,83,32,64,32,64,32,66,32,66,32,67,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,55,32,64,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,83,39,-32,95,48,32,95,53,53,54,32,64,32,64,32,66,32,95,55,32,95,53,-53,52,32,64,32,95,51,49,53,32,64,32,64,32,95,51,49,54,32,95,-53,53,54,32,64,32,95,49,48,48,57,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,95,49,48,54,32,95,53,53,54,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,66,32,64,-32,64,32,66,32,66,39,32,64,32,67,32,95,57,57,50,32,95,51,48,-53,32,64,32,64,32,64,32,64,32,66,32,66,32,95,56,52,50,32,64,-32,64,32,67,39,66,32,95,54,53,50,32,64,32,95,51,50,49,32,64,-32,64,32,64,32,64,32,64,32,66,32,95,49,49,32,95,53,53,54,32,-64,32,64,32,83,39,32,67,32,64,32,83,39,32,80,32,64,32,66,32,-95,50,57,52,32,64,32,85,32,90,32,75,32,64,32,64,32,64,32,64,-32,66,32,95,50,57,52,32,64,32,85,32,75,32,75,32,64,32,64,32,-64,32,64,32,64,32,66,32,95,52,55,57,32,64,32,85,32,75,32,65,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,48,-48,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,-61,61,32,64,32,35,52,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,90,32,-64,32,64,32,66,32,66,32,90,32,64,32,64,32,67,39,66,32,66,32,-64,32,67,39,32,83,39,32,95,57,56,57,32,64,32,64,32,67,39,32,-95,52,55,52,32,64,32,66,32,95,52,55,53,32,64,32,67,32,95,54,-53,49,32,64,32,102,114,111,109,85,84,70,56,32,34,61,61,34,32,64,-32,64,32,64,32,64,32,64,32,66,32,95,52,55,53,32,64,32,67,32,-95,54,53,49,32,64,32,102,114,111,109,85,84,70,56,32,34,84,114,117,-101,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,-67,32,61,61,32,64,32,35,50,32,64,32,64,32,64,32,64,32,66,32,-85,32,64,32,67,39,32,67,39,32,95,48,32,95,53,53,54,32,64,32,-64,32,64,32,95,49,48,50,49,32,95,51,48,53,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,39,-32,67,32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,49,32,64,32,64,32,64,32,64,32,66,32,66,32,-85,32,64,32,64,32,66,32,66,32,67,39,66,32,66,32,95,48,32,95,-53,53,54,32,64,32,64,32,95,49,48,48,57,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,-66,32,67,32,66,32,64,32,64,32,64,32,64,32,66,32,83,39,32,66,-32,64,32,66,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,-66,39,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,-32,64,32,95,56,56,50,32,95,51,48,53,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,85,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,66,-32,66,39,32,66,39,32,66,32,67,39,66,32,64,32,66,32,66,32,95,-48,32,95,53,53,54,32,64,32,64,32,64,32,67,32,95,49,48,50,56,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,-32,66,39,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,66,32,-66,32,66,39,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,32,-66,32,66,32,66,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,-64,32,64,32,67,39,32,67,32,64,32,95,49,48,48,55,32,95,51,48,-53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,66,32,66,32,95,49,49,32,95,53,53,54,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-66,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,67,-39,66,32,66,32,67,39,66,32,64,32,66,32,66,32,80,32,64,32,64,-32,95,49,53,51,32,64,32,64,32,64,32,95,49,53,51,32,64,32,64,-32,64,32,64,32,95,52,55,52,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,-32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,32,95,54,52,53,-32,64,32,64,32,64,32,83,39,32,83,39,32,83,32,64,32,64,32,66,-32,66,32,83,32,95,54,52,52,32,64,32,64,32,64,32,67,39,66,32,-66,39,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,95,49,48,-48,54,32,64,32,64,32,64,32,66,32,67,39,66,32,66,32,95,48,32,-95,53,53,54,32,64,32,64,32,95,49,48,48,53,32,95,51,48,53,32,-64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,67,39,-32,67,39,66,32,64,32,66,32,66,32,67,39,32,95,49,48,54,32,95,-53,53,54,32,64,32,64,32,64,32,64,32,66,32,66,32,83,32,73,32,-64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,66,-32,67,32,67,32,61,61,32,64,32,35,49,57,32,64,32,64,32,64,32,-95,55,48,50,32,95,51,48,53,32,64,32,80,32,95,55,48,51,32,64,-32,95,54,54,51,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,85,32,64,32,64,32,66,32,67,32,64,32,95,56,56,48,32,95,-51,48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,67,32,80,32,95,53,56,-32,64,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,67,39,32,95,48,32,95,53,53,54,32,-64,32,64,32,95,49,48,48,53,32,95,51,48,53,32,64,32,64,32,64,-32,64,32,66,32,66,32,83,39,32,95,49,48,54,32,95,53,53,54,32,-64,32,64,32,85,32,75,32,85,32,67,39,66,32,67,32,67,32,61,61,-32,64,32,35,50,49,32,64,32,64,32,95,50,50,48,32,64,32,64,32,-85,32,75,32,85,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,-50,49,32,64,32,64,32,95,50,50,48,32,64,32,64,32,85,32,75,50,-32,95,49,49,32,95,53,53,54,32,64,32,95,49,48,55,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,67,39,32,95,48,32,95,53,53,54,32,-64,32,64,32,95,49,48,50,50,32,64,32,64,32,64,32,66,32,66,32,-85,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,-66,32,66,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,-50,49,32,64,32,64,32,95,49,48,50,51,32,95,49,48,50,54,32,64,-32,102,114,111,109,85,84,70,56,32,34,98,105,110,100,34,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,-32,64,32,64,32,66,32,66,32,66,32,67,39,32,83,39,32,95,48,32,-95,53,53,54,32,64,32,64,32,64,32,95,56,56,52,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,-64,32,66,32,83,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,-66,32,66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,-32,64,32,64,32,66,32,83,39,32,67,39,32,67,32,64,32,64,32,66,-32,66,32,67,32,95,56,52,56,32,64,32,64,32,64,32,66,32,66,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,66,32,67,32,64,-32,80,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,85,32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,66,-32,95,48,32,95,53,53,54,32,64,32,64,32,95,56,57,53,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,49,49,32,95,53,-53,54,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,-67,32,64,32,64,32,64,32,66,32,67,39,32,83,39,32,80,32,64,32,-64,32,67,39,32,67,39,32,79,32,64,32,64,32,67,32,80,32,64,32,-64,32,75,32,64,32,64,32,64,32,67,39,66,32,95,52,55,52,32,64,-32,95,52,55,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,-67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,66,32,-67,39,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,-64,32,64,32,67,32,67,39,32,83,39,32,64,32,66,32,83,39,32,64,-32,83,39,32,64,32,64,32,67,39,66,32,66,32,67,39,32,67,39,32,-95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,66,32,-67,32,64,32,95,56,56,48,32,95,51,48,53,32,64,32,64,32,64,32,-64,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,66,-32,66,32,67,32,64,32,64,32,95,56,56,56,32,95,51,48,53,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,49,49,-32,95,53,53,54,32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,-64,32,64,32,80,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,-95,49,48,48,54,32,64,32,64,32,90,32,66,32,95,49,49,32,95,53,-53,54,32,64,32,64,32,67,32,80,32,95,53,56,32,64,32,95,53,56,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,95,50,54,32,95,50,49,57,32,64,32,64,32,-66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,116,99,80,-97,116,58,32,34,32,64,32,64,32,64,32,83,39,32,95,49,53,51,32,-64,32,66,32,95,49,53,52,32,95,55,48,49,32,64,32,64,32,95,51,-48,54,32,95,54,54,51,32,64,32,64,32,64,32,66,32,95,49,53,51,-32,79,32,35,51,50,32,64,32,75,32,64,32,64,32,64,32,95,49,53,-52,32,95,55,48,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,58,49,48,-50,55,32,64,10,65,32,95,49,48,50,52,32,95,53,53,54,32,64,32,-95,49,48,50,53,32,95,49,48,50,54,32,64,32,64,32,58,49,48,50,-54,32,64,10,65,32,75,32,95,50,49,57,32,64,32,58,49,48,50,53,-32,64,10,65,32,80,32,58,49,48,50,52,32,64,10,65,32,85,32,65,-32,64,32,58,49,48,50,51,32,64,10,65,32,83,32,73,32,64,32,66,-32,66,32,85,32,64,32,64,32,67,39,66,32,66,32,67,39,66,32,64,-32,66,32,67,32,67,32,61,61,32,64,32,35,50,49,32,64,32,64,32,-64,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,66,-32,85,32,64,32,95,56,54,49,32,64,32,64,32,64,32,64,32,58,49,-48,50,50,32,64,10,65,32,66,32,66,32,66,32,95,48,32,95,53,53,-54,32,64,32,95,55,50,56,32,95,55,51,54,32,64,32,64,32,64,32,-64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,32,67,39,32,95,-48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,66,32,67,39,32,-95,51,49,54,32,95,53,53,54,32,64,32,64,32,64,32,66,32,66,32,-85,32,64,32,64,32,67,39,66,32,66,32,83,39,32,66,32,64,32,64,-32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,95,-49,48,48,53,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,-32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,67,39,32,80,32,64,32,64,32,64,-32,66,32,67,39,66,32,66,32,80,32,64,32,95,52,55,53,32,64,32,-64,32,64,32,67,39,66,32,95,49,48,49,49,32,64,32,95,57,57,52,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,67,39,32,-67,32,64,32,95,49,48,50,48,32,64,32,64,32,66,32,85,32,64,32,-95,55,56,57,32,64,32,64,32,64,32,95,49,49,32,95,53,53,54,32,-64,32,64,32,64,32,64,32,58,49,48,50,49,32,64,10,65,32,67,39,-32,67,32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,67,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,-32,67,39,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,67,39,-32,67,39,32,67,32,64,32,64,32,67,39,32,67,39,32,67,39,32,89,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,89,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,-66,32,64,32,67,39,32,83,39,32,64,32,66,32,83,39,32,64,32,83,-32,64,32,64,32,67,39,32,67,39,32,83,39,32,67,39,32,80,32,64,-32,64,32,64,32,64,32,67,32,67,39,32,67,39,32,64,32,66,32,83,-39,32,64,32,67,39,32,64,32,64,32,67,39,66,32,67,32,67,39,32,-64,32,95,50,57,48,32,64,32,64,32,90,32,75,32,64,32,64,32,64,-32,64,32,90,32,75,32,64,32,64,32,64,32,90,32,75,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,83,39,32,66,32,64,32,66,-32,83,39,32,83,39,32,83,39,32,83,39,32,83,39,32,66,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,67,-32,64,32,66,32,67,39,32,83,39,32,64,32,83,39,32,64,32,64,32,-66,32,67,39,66,32,85,32,95,50,50,48,32,64,32,64,32,64,32,67,-39,66,32,66,32,67,32,64,32,66,32,83,32,67,39,32,64,32,64,32,-66,32,66,32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,-66,32,66,32,90,32,64,32,64,32,67,32,66,32,64,32,67,32,79,32,-64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,-32,67,39,32,67,39,32,64,32,67,39,32,64,32,64,32,64,32,64,32,-67,39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,-64,32,66,32,67,39,66,32,66,32,64,32,64,32,67,32,64,32,64,32,-95,53,56,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,66,32,-64,32,64,32,66,32,66,32,83,39,32,83,39,32,66,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,67,32,83,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,67,39,32,67,39,66,32,64,32,66,32,85,-32,64,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,67,39,66,-32,67,39,32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,66,32,83,39,32,66,32,64,32,83,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,83,39,32,83,39,32,66,32,64,32,64,32,66,39,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,67,39,32,67,39,32,67,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,83,32,67,39,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,-39,32,67,39,32,67,39,32,67,39,32,83,39,32,83,39,32,67,39,32,-83,39,32,67,39,32,83,39,32,83,39,32,67,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,67,32,83,39,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,-32,83,39,32,66,32,64,32,64,32,66,32,66,39,32,64,32,66,32,66,-39,32,64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,66,32,-66,32,83,39,32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,83,-39,32,66,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,83,39,-32,83,39,32,95,49,54,56,32,64,32,64,32,64,32,83,39,32,66,32,-64,32,67,39,32,95,52,48,32,95,55,50,32,64,32,64,32,64,32,73,-32,64,32,64,32,64,32,83,39,32,67,39,32,83,39,32,95,53,54,32,-64,32,64,32,64,32,83,39,32,66,32,64,32,67,39,32,95,54,55,32,-95,49,48,49,50,32,64,32,64,32,64,32,73,32,64,32,64,32,67,32,-67,39,32,95,52,48,32,95,49,48,49,50,32,64,32,64,32,64,32,95,-49,48,49,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,66,32,64,32,66,-32,66,39,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,83,39,32,66,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,-39,32,64,32,66,32,66,32,67,39,32,83,39,32,67,39,32,64,32,64,-32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,39,32,83,39,32,-95,53,54,32,64,32,64,32,64,32,83,39,32,66,32,64,32,67,39,32,-95,56,55,32,95,56,48,32,64,32,64,32,64,32,73,32,64,32,64,32,-64,32,67,39,66,32,66,32,83,39,32,67,39,32,95,49,54,56,32,64,-32,64,32,64,32,83,39,32,66,32,64,32,67,39,32,95,52,48,32,95,-55,50,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,67,32,67,-39,32,95,52,48,32,95,49,48,49,50,32,64,32,64,32,64,32,95,49,-48,49,48,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,67,32,64,-32,64,32,64,32,64,32,66,32,67,39,66,32,66,32,64,32,64,32,67,-32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,57,49,32,64,32,-67,39,32,80,32,64,32,95,51,48,54,32,95,54,54,51,32,64,32,64,-32,102,114,111,109,85,84,70,56,32,34,97,109,98,105,103,117,111,117,115,-32,111,112,101,114,97,116,111,114,32,101,120,112,114,101,115,115,105,111,110,-34,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,64,-32,64,32,67,39,66,32,66,39,32,66,32,67,39,32,83,39,32,66,32,-64,32,64,32,64,32,83,39,32,66,32,64,32,67,39,32,95,54,56,32,-95,56,48,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,-67,39,66,32,66,32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,-64,32,66,32,95,50,57,49,32,64,32,67,39,32,80,32,64,32,95,51,-48,54,32,95,54,54,51,32,64,32,64,32,102,114,111,109,85,84,70,56,-32,34,98,97,100,32,112,114,101,102,105,120,32,101,120,112,114,101,115,115,-105,111,110,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,110,111,77,-97,116,99,104,32,102,114,111,109,85,84,70,56,32,34,115,114,99,47,77,-105,99,114,111,72,115,47,70,105,120,105,116,121,46,104,115,34,32,64,32,-64,32,35,54,52,32,64,32,35,55,32,64,32,64,32,64,32,64,32,64,-32,95,53,56,32,64,32,64,32,95,53,56,32,64,32,64,32,64,32,64,-32,64,32,67,39,66,32,66,32,83,39,32,95,49,53,51,32,64,32,64,-32,85,32,64,32,64,32,67,39,32,95,53,48,55,32,64,32,66,32,85,-32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,67,39,32,67,39,-32,95,53,57,32,64,32,64,32,95,49,48,49,52,32,95,49,48,49,53,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,80,-32,75,50,32,85,32,75,32,64,32,64,32,64,32,75,32,95,50,50,48,-32,64,32,64,32,64,32,64,32,89,32,66,32,83,32,73,32,64,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,66,32,67,32,67,32,61,61,-32,64,32,35,49,52,32,64,32,64,32,64,32,67,39,32,79,32,64,32,-95,49,48,49,54,32,64,32,75,32,64,32,64,32,64,32,64,32,66,32,-85,32,64,32,83,39,32,95,53,57,32,64,32,67,39,32,95,49,48,49,-52,32,95,49,48,49,55,32,64,32,64,32,66,32,95,49,48,49,56,32,-64,32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,95,49,-48,49,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-67,32,67,32,67,39,32,64,32,66,32,66,32,90,32,64,32,64,32,83,-39,32,67,32,64,32,66,32,67,32,83,39,32,64,32,64,32,67,39,66,-32,85,32,95,50,50,48,32,64,32,64,32,66,32,66,32,80,32,95,50,-50,48,32,64,32,64,32,64,32,66,32,66,32,66,32,95,53,57,32,64,-32,64,32,64,32,66,32,67,39,32,95,52,55,52,32,64,32,64,32,95,-52,55,52,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,-85,32,95,50,50,48,32,64,32,64,32,66,32,66,32,95,53,57,32,64,-32,64,32,95,52,55,52,32,64,32,64,32,64,32,64,32,64,32,64,32,-75,32,95,50,50,48,32,64,32,64,32,64,32,64,32,80,32,75,50,32,-85,32,65,32,64,32,64,32,64,32,75,32,95,50,50,48,32,64,32,64,-32,64,32,58,49,48,50,48,32,64,10,65,32,80,32,95,49,48,49,48,-32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,-54,32,64,32,64,32,64,32,58,49,48,49,57,32,64,10,65,32,66,32,-95,52,55,53,32,64,32,67,32,95,54,53,49,32,64,32,102,114,111,109,-85,84,70,56,32,34,110,101,103,97,116,101,34,32,64,32,64,32,64,32,-58,49,48,49,56,32,64,10,65,32,65,32,58,49,48,49,55,32,64,10,-65,32,90,32,85,32,64,32,58,49,48,49,54,32,64,10,65,32,75,32,-58,49,48,49,53,32,64,10,65,32,66,32,66,32,66,32,90,32,64,32,-64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,-58,49,48,49,52,32,64,10,65,32,75,32,65,32,64,32,58,49,48,49,-51,32,64,10,65,32,95,52,49,32,67,39,32,83,32,64,32,67,32,67,-32,83,39,32,64,32,67,32,80,32,95,52,51,32,64,32,95,52,52,32,-64,32,64,32,95,52,52,32,64,32,64,32,64,32,67,32,80,32,95,52,-52,32,64,32,95,52,51,32,64,32,64,32,95,52,52,32,64,32,64,32,-64,32,67,32,80,32,95,52,52,32,64,32,95,52,52,32,64,32,64,32,-95,52,51,32,64,32,64,32,64,32,95,52,53,32,95,49,48,49,50,32,-64,32,64,32,58,49,48,49,50,32,64,10,65,32,66,32,66,32,95,50,-54,32,95,50,55,53,32,80,32,95,49,48,49,48,32,64,32,95,57,48,-32,95,49,48,52,32,64,32,95,49,48,50,32,35,57,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,32,95,50,48,55,32,64,32,64,-32,58,49,48,49,49,32,64,10,65,32,90,32,75,32,64,32,58,49,48,-49,48,32,64,10,65,32,95,56,50,53,32,95,51,48,53,32,64,32,95,-49,48,50,55,32,64,32,58,49,48,48,57,32,64,10,65,32,80,32,67,-32,80,32,95,53,56,32,64,32,95,53,56,32,64,32,64,32,95,53,56,-32,64,32,64,32,67,32,66,32,64,32,67,39,66,32,66,39,32,66,39,-32,95,49,48,48,56,32,64,32,64,32,64,32,67,39,32,67,39,66,32,-64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,67,39,66,-32,66,32,67,39,66,32,64,32,66,32,66,32,80,32,64,32,64,32,95,-53,57,32,64,32,64,32,64,32,95,53,57,32,64,32,64,32,64,32,64,-32,95,53,57,32,64,32,64,32,64,32,64,32,58,49,48,48,56,32,64,-10,65,32,83,39,32,83,39,32,83,39,32,80,32,64,32,64,32,64,32,-66,32,66,32,67,32,64,32,64,32,95,56,56,48,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,67,39,32,95,48,32,95,53,53,54,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,67,-39,32,67,32,64,32,95,56,56,56,32,64,32,95,50,50,48,32,64,32,-64,32,64,32,75,32,95,49,49,32,95,53,53,54,32,64,32,95,49,48,-55,32,64,32,64,32,64,32,64,32,58,49,48,48,55,32,64,10,65,32,-80,32,95,56,50,52,32,95,51,48,53,32,64,32,64,32,95,49,49,32,-95,53,53,54,32,64,32,64,32,58,49,48,48,54,32,64,10,65,32,66,-32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,55,-52,48,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,64,32,95,-49,48,48,51,32,64,32,95,49,48,48,52,32,64,32,64,32,58,49,48,-48,53,32,64,10,65,32,67,32,67,32,80,32,102,114,111,109,85,84,70,-56,32,34,118,97,108,117,101,34,32,64,32,64,32,102,114,111,109,85,84,-70,56,32,34,116,121,112,101,34,32,64,32,64,32,64,32,102,114,111,109,-85,84,70,56,32,34,107,105,110,100,34,32,64,32,64,32,64,32,102,114,-111,109,85,84,70,56,32,34,115,111,114,116,34,32,64,32,64,32,58,49,-48,48,52,32,64,10,65,32,66,32,66,32,66,32,95,48,32,95,53,53,-54,32,64,32,95,55,50,56,32,95,55,52,49,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,83,39,32,67,32,64,32,64,32,64,-32,66,32,67,39,32,83,39,32,67,32,64,32,64,32,95,57,57,56,32,-64,32,64,32,67,39,66,32,95,55,56,57,32,64,32,95,51,48,54,32,-95,51,48,56,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,-32,66,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,-64,32,66,32,66,32,80,32,64,32,64,32,66,32,95,49,48,48,50,32,-64,32,95,51,48,54,32,95,51,48,56,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,49,48,48,51,32,64,10,65,32,67,39,32,67,-32,64,32,66,32,67,32,66,32,64,32,64,32,83,39,32,83,39,32,83,-32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,52,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,-83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,50,48,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,50,48,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,66,32,95,53,-54,57,32,64,32,64,32,95,49,48,48,49,32,64,32,64,32,64,32,64,-32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,-32,64,32,35,52,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,-90,32,95,54,54,52,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,-48,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,66,32,-95,52,55,53,32,64,32,64,32,95,57,57,57,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,-34,115,101,116,83,76,111,99,69,120,112,114,34,32,64,32,64,32,64,32,-58,49,48,48,50,32,64,10,65,32,83,39,32,80,32,64,32,66,32,67,-39,66,32,95,53,55,48,32,64,32,64,32,95,57,57,57,32,64,32,64,-32,66,32,66,32,95,49,48,48,48,32,64,32,64,32,95,57,57,57,32,-64,32,64,32,58,49,48,48,49,32,64,10,65,32,79,32,58,49,48,48,-48,32,64,10,65,32,66,32,85,32,64,32,90,32,95,52,56,49,32,64,-32,64,32,58,57,57,57,32,64,10,65,32,66,32,66,32,85,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,66,-32,83,39,32,66,32,64,32,66,32,67,32,64,32,95,54,57,55,32,95,-50,48,50,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,67,32,-64,32,64,32,66,32,83,39,32,67,39,32,95,49,56,32,95,57,52,48,-32,64,32,95,57,57,51,32,95,57,57,53,32,64,32,64,32,64,32,64,-32,95,50,48,55,32,64,32,64,32,66,32,66,32,95,50,54,32,95,50,-57,49,32,64,32,64,32,64,32,66,32,66,32,95,49,53,51,32,102,114,-111,109,85,84,70,56,32,34,117,110,100,101,102,105,110,101,100,32,34,32,-64,32,64,32,64,32,64,32,67,39,66,32,95,49,53,51,32,64,32,66,-32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,58,32,34,32,-64,32,64,32,64,32,95,50,53,52,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,83,32,67,32,83,32,64,32,66,32,67,39,32,-80,32,64,32,95,50,57,48,32,64,32,64,32,90,32,75,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,54,32,95,-50,57,49,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,49,-53,51,32,102,114,111,109,85,84,70,56,32,34,97,109,98,105,103,117,111,-117,115,32,34,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,-39,32,95,49,53,51,32,64,32,64,32,66,32,66,32,95,49,53,51,32,-102,114,111,109,85,84,70,56,32,34,58,32,34,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,32,95,49,53,51,32,64,32,95,50,53,52,32,-64,32,64,32,66,32,95,49,53,51,32,79,32,35,51,50,32,64,32,75,-32,64,32,64,32,64,32,66,32,95,57,57,54,32,95,54,32,95,50,53,-52,32,64,32,95,57,57,55,32,95,51,48,53,32,64,32,64,32,64,32,-64,32,89,32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,66,32,-64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,67,32,95,53,-57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,50,57,48,-32,64,32,64,32,58,57,57,56,32,64,10,65,32,66,32,89,32,64,32,-67,39,32,67,39,32,83,32,64,32,64,32,66,32,66,32,67,32,66,32,-64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,-32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,50,48,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,50,48,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,95,-53,54,52,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,-39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,-32,64,32,64,32,66,32,85,32,64,32,90,32,64,32,64,32,64,32,64,-32,64,32,85,32,73,32,64,32,64,32,64,32,64,32,66,32,95,50,54,-32,95,50,49,57,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,-109,85,84,70,56,32,34,103,101,116,65,112,112,67,111,110,58,32,34,32,-64,32,64,32,64,32,95,49,53,52,32,95,55,48,51,32,64,32,64,32,-64,32,64,32,64,32,58,57,57,55,32,64,10,65,32,67,39,32,67,32,-64,32,66,32,95,49,53,57,32,64,32,66,32,95,49,53,51,32,64,32,-64,32,64,32,75,32,64,32,58,57,57,54,32,64,10,65,32,95,52,49,-32,67,32,66,32,64,32,66,32,90,32,64,32,67,32,66,32,64,32,66,-32,90,32,64,32,67,39,66,32,66,32,95,52,48,32,95,50,48,50,32,-64,32,64,32,95,57,57,52,32,64,32,64,32,95,57,57,52,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,52,53,32,95,57,57,53,32,64,-32,64,32,58,57,57,53,32,64,10,65,32,67,32,67,32,66,32,64,32,-83,39,32,83,32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,50,48,32,64,32,64,32,64,32,67,39,32,67,39,66,32,-64,32,67,32,67,32,61,61,32,64,32,35,50,48,32,64,32,64,32,64,-32,85,32,95,53,54,52,32,95,51,48,53,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,48,32,64,32,64,32,64,32,85,32,73,32,64,32,64,32,64,32,-64,32,64,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,103,-101,116,73,100,101,110,116,34,32,64,32,64,32,64,32,58,57,57,52,32,-64,10,65,32,66,32,95,57,50,49,32,64,32,95,52,48,32,64,32,58,-57,57,51,32,64,10,65,32,83,39,32,83,39,32,67,32,64,32,64,32,-66,32,66,32,67,32,83,39,32,64,32,64,32,64,32,66,32,66,32,67,-32,64,32,64,32,95,56,56,48,32,64,32,64,32,64,32,66,32,66,32,-67,32,64,32,64,32,95,56,55,57,32,64,32,64,32,58,57,57,50,32,-64,10,65,32,83,32,83,32,66,32,64,32,83,39,32,83,39,32,83,32,-64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,49,51,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,-83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,49,55,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,49,56,32,64,32,64,32,64,32,64,32,67,39,-32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,50,48,32,64,32,64,32,64,32,64,32,-66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,-35,50,48,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,90,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,-49,56,32,64,32,64,32,64,32,85,32,67,39,66,32,66,32,95,49,56,-32,95,53,53,52,32,64,32,64,32,95,57,56,57,32,64,32,64,32,95,-57,57,49,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,67,39,-66,32,66,32,95,49,56,32,95,53,53,52,32,64,32,64,32,95,54,53,-48,32,64,32,64,32,95,57,57,49,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,49,52,32,64,32,64,32,64,-32,64,32,66,32,67,39,32,67,32,64,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,49,53,32,64,32,64,32,64,32,67,39,-32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,53,32,-64,32,64,32,64,32,85,32,83,39,32,66,32,64,32,66,32,95,49,56,-32,95,53,53,52,32,64,32,64,32,67,39,32,95,54,32,64,32,95,57,-57,48,32,64,32,95,50,57,52,32,64,32,64,32,64,32,66,32,95,51,-49,54,32,95,53,53,54,32,64,32,64,32,95,56,50,56,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,90,32,95,-49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,-85,32,67,39,66,32,66,32,95,49,51,32,95,53,53,53,32,64,32,64,-32,66,32,95,49,56,32,95,53,53,52,32,64,32,95,56,49,55,32,64,-32,64,32,95,57,57,49,32,64,32,64,32,64,32,95,49,52,53,32,95,-53,53,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,32,66,-32,83,39,32,83,32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,55,32,64,32,64,32,64,32,67,39,32,67,32,64,32,-66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,56,32,64,-32,64,32,64,32,83,39,32,67,39,66,32,64,32,67,32,67,32,61,61,-32,64,32,35,56,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,-85,32,64,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,-64,32,35,48,32,64,32,64,32,64,32,85,32,66,32,95,49,56,32,95,-53,53,52,32,64,32,95,54,32,95,52,55,55,32,64,32,95,52,55,56,-32,64,32,64,32,64,32,95,51,49,54,32,95,53,53,54,32,64,32,95,-57,57,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,85,32,66,32,95,49,56,32,95,53,53,52,32,64,32,95,52,55,-57,32,64,32,64,32,95,51,49,54,32,95,53,53,54,32,64,32,95,57,-57,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,52,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,90,32,90,32,95,49,-49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,67,39,32,67,32,64,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,67,39,32,-67,32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,50,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,67,32,-67,32,61,61,32,64,32,35,50,32,64,32,64,32,64,32,85,32,67,39,-66,32,66,32,95,49,51,32,95,53,53,53,32,64,32,64,32,66,32,95,-49,56,32,95,53,53,52,32,64,32,95,56,52,51,32,64,32,64,32,95,-57,57,49,32,64,32,64,32,64,32,95,51,49,54,32,95,53,53,54,32,-64,32,85,32,67,39,66,32,66,32,95,49,56,32,95,53,53,52,32,64,-32,64,32,80,32,64,32,64,32,95,57,57,49,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,85,32,67,39,66,32,66,32,95,49,-51,32,95,53,53,53,32,64,32,64,32,66,32,95,49,56,32,95,53,53,-52,32,64,32,95,52,55,52,32,64,32,64,32,95,57,57,49,32,64,32,-64,32,64,32,95,57,57,49,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,85,32,64,32,90,32,95,49,49,32,95,53,53,54,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,-95,50,49,57,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,-85,84,70,56,32,34,100,115,69,70,105,101,108,100,115,32,34,32,64,32,-64,32,64,32,95,49,53,52,32,95,55,48,51,32,64,32,64,32,64,32,-64,32,58,57,57,49,32,64,10,65,32,66,32,66,32,80,32,35,49,53,-32,64,32,64,32,64,32,80,32,64,32,58,57,57,48,32,64,10,65,32,-66,32,66,32,80,32,35,49,56,32,64,32,64,32,64,32,80,32,64,32,-58,57,56,57,32,64,10,65,32,66,32,66,32,66,32,95,48,32,95,53,-53,54,32,64,32,95,55,50,56,32,95,55,52,49,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,-32,66,32,66,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,-32,95,57,56,55,32,64,32,64,32,64,32,67,39,66,32,95,48,32,95,-53,53,54,32,64,32,64,32,67,39,66,32,66,32,95,49,48,54,32,95,-53,53,54,32,64,32,64,32,95,55,52,52,32,64,32,64,32,95,49,49,-32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,58,57,56,56,-32,64,10,65,32,66,32,95,49,48,56,32,95,53,53,54,32,64,32,64,-32,66,32,95,54,50,56,32,64,32,95,56,48,57,32,64,32,64,32,58,-57,56,55,32,64,10,65,32,66,32,66,32,95,56,51,50,32,64,32,64,-32,66,32,66,32,95,52,55,53,32,64,32,64,32,67,39,66,32,95,54,-53,49,32,64,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,-101,110,117,109,34,32,64,32,64,32,64,32,64,32,64,32,58,57,56,54,-32,64,10,65,32,85,32,83,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,55,32,64,32,64,32,83,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,49,51,32,64,32,64,32,67,39,66,32,67,32,-67,32,61,61,32,64,32,35,49,51,32,64,32,64,32,95,52,52,32,64,-32,64,32,85,32,90,32,95,57,56,53,32,64,32,64,32,64,32,64,32,-64,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,55,32,64,32,-64,32,95,52,52,32,64,32,64,32,85,32,95,52,53,54,32,95,57,56,-53,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,67,32,-67,32,61,61,32,64,32,35,48,32,64,32,64,32,95,52,52,32,64,32,-64,32,85,32,75,32,95,52,51,32,64,32,64,32,64,32,64,32,64,32,-58,57,56,53,32,64,10,65,32,66,32,66,32,80,32,35,57,32,64,32,-64,32,64,32,80,32,64,32,58,57,56,52,32,64,10,65,32,67,39,32,-95,50,54,32,64,32,95,55,54,49,32,64,32,95,49,53,51,32,95,57,-56,50,32,64,32,102,114,111,109,85,84,70,56,32,34,66,111,111,108,34,-32,64,32,64,32,64,32,58,57,56,51,32,64,10,65,32,102,114,111,109,-85,84,70,56,32,34,68,97,116,97,46,66,111,111,108,95,84,121,112,101,-46,34,32,64,32,58,57,56,50,32,64,10,65,32,83,39,32,66,32,64,-32,66,32,83,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,-95,56,56,53,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,-32,64,32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,39,32,-64,32,66,32,66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,-32,64,32,64,32,66,32,67,32,64,32,95,57,55,55,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,-32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,95,51,48,49,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,95,48,-32,95,53,53,54,32,64,32,95,57,56,48,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,67,39,66,32,66,39,32,66,32,67,39,-32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,66,32,66,32,95,-56,56,55,32,64,32,64,32,95,53,57,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,67,39,66,-32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,67,39,-32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,66,-32,66,32,83,39,32,95,50,54,32,64,32,66,32,95,49,52,54,32,95,-53,53,53,32,64,32,64,32,66,32,95,49,50,51,32,64,32,95,51,48,-49,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,66,32,66,32,95,50,54,32,64,32,64,32,67,39,66,32,95,56,55,-50,32,64,32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,-64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,110,-111,116,32,112,111,108,121,109,111,114,112,104,105,99,32,101,110,111,117,103,-104,58,32,34,32,64,32,64,32,64,32,66,32,95,50,57,55,32,64,32,-95,54,48,32,95,50,53,52,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,-67,39,32,95,54,54,32,64,32,67,32,95,54,51,32,95,50,48,50,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,49,49,32,-95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,58,57,56,49,32,-64,10,65,32,95,55,50,56,32,95,54,32,95,54,48,32,95,57,55,56,-32,64,32,64,32,95,54,32,95,57,55,57,32,64,32,95,55,52,49,32,-64,32,64,32,64,32,58,57,56,48,32,64,10,65,32,85,32,75,32,95,-54,48,32,95,50,55,57,32,64,32,64,32,64,32,58,57,55,57,32,64,-10,65,32,85,32,65,32,64,32,58,57,55,56,32,64,10,65,32,83,39,-32,67,32,64,32,66,32,83,39,32,83,39,32,64,32,95,56,52,56,32,-64,32,64,32,66,32,95,56,57,51,32,64,32,95,49,49,48,48,32,64,-32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,83,39,32,-66,32,64,32,66,39,32,66,32,95,48,32,95,53,53,54,32,64,32,64,-32,66,32,95,56,57,53,32,64,32,95,51,48,54,32,95,54,54,51,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,39,32,83,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,66,32,64,32,66,-32,66,32,67,39,32,95,50,54,32,64,32,64,32,64,32,66,32,67,32,-64,32,95,57,50,57,32,64,32,64,32,64,32,64,32,67,32,95,57,55,-54,32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,49,49,32,-95,53,53,54,32,64,32,64,32,64,32,64,32,66,32,95,56,49,54,32,-64,32,67,39,32,79,32,64,32,95,52,55,53,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,57,55,55,32,64,10,65,-32,67,39,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,-32,66,32,66,32,95,50,54,32,95,57,55,50,32,64,32,64,32,64,32,-95,57,55,55,32,95,51,48,53,32,64,32,64,32,64,32,85,32,83,39,-32,67,32,64,32,66,32,83,32,95,51,48,49,32,64,32,64,32,66,32,-66,32,95,50,54,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,-32,64,32,67,39,32,95,53,55,53,32,64,32,95,57,55,53,32,64,32,-64,32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,-32,64,32,58,57,55,54,32,64,10,65,32,89,32,66,32,80,32,75,32,-64,32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,67,39,32,67,-39,32,95,53,57,32,64,32,64,32,67,39,66,32,66,32,95,50,54,32,-64,32,95,53,55,54,32,64,32,64,32,95,57,55,52,32,64,32,64,32,-64,32,64,32,64,32,64,32,58,57,55,53,32,64,10,65,32,67,39,32,-79,32,64,32,66,32,95,50,54,32,95,53,55,55,32,95,53,56,32,64,-32,64,32,64,32,95,57,55,51,32,64,32,64,32,75,32,64,32,58,57,-55,52,32,64,10,65,32,67,39,32,95,53,55,56,32,64,32,67,39,32,-79,32,64,32,80,32,95,53,56,32,64,32,64,32,75,32,64,32,64,32,-95,53,56,32,64,32,58,57,55,51,32,64,10,65,32,66,32,95,48,32,-95,53,53,54,32,64,32,95,55,50,56,32,95,56,53,56,32,64,32,64,-32,64,32,66,32,66,32,95,49,48,54,32,95,53,53,54,32,64,32,95,-57,51,48,32,95,53,56,32,64,32,64,32,64,32,64,32,67,39,66,32,-95,48,32,95,53,53,54,32,64,32,64,32,66,32,66,32,95,48,32,95,-53,53,54,32,64,32,95,57,55,49,32,64,32,64,32,64,32,66,32,66,-32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,56,-53,56,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,-66,32,67,39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,-32,66,32,66,32,95,57,51,48,32,64,32,64,32,67,32,95,49,53,51,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,95,49,49,32,95,-53,53,54,32,64,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,57,55,50,32,64,10,65,32,95,48,32,95,53,-53,54,32,64,32,95,55,50,56,32,95,56,53,56,32,64,32,64,32,67,-32,83,32,95,51,48,49,32,64,32,66,32,95,49,48,54,32,95,53,53,-54,32,64,32,95,57,51,49,32,64,32,64,32,67,39,32,95,48,32,95,-53,53,54,32,64,32,64,32,95,51,49,54,32,95,53,53,54,32,64,32,-85,32,66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,95,-56,54,56,32,64,32,64,32,66,32,66,32,95,49,49,32,95,53,53,54,-32,64,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,95,48,32,95,53,53,54,32,64,32,64,32,67,32,67,32,67,32,-95,57,55,48,32,64,32,95,53,56,32,64,32,64,32,95,53,56,32,64,-32,64,32,95,53,56,32,64,32,64,32,85,32,67,39,66,32,66,39,32,-66,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,95,57,51,48,-32,64,32,64,32,64,32,83,39,32,67,32,64,32,66,32,83,32,95,51,-48,49,32,64,32,64,32,66,32,67,39,32,95,49,48,54,32,95,53,53,-54,32,64,32,64,32,95,49,48,56,32,95,53,53,54,32,64,32,85,32,-95,56,55,57,32,95,51,48,53,32,64,32,64,32,64,32,64,32,64,32,-67,39,32,95,49,56,32,95,53,53,52,32,64,32,64,32,67,32,95,49,-53,51,32,64,32,64,32,95,57,55,49,32,64,32,64,32,64,32,64,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,95,53,-56,32,64,32,64,32,64,32,58,57,55,49,32,64,10,65,32,67,32,67,-39,32,83,39,32,64,32,66,32,83,39,32,64,32,83,39,32,64,32,64,-32,66,32,66,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,-64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,83,32,66,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,66,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,83,39,32,67,39,32,67,-39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,32,67,32,64,32,67,39,32,83,32,64,32,66,32,67,39,32,-95,52,56,48,32,64,32,67,39,32,89,32,64,32,66,32,66,32,80,32,-75,32,64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,-64,32,67,39,32,83,39,32,83,39,32,67,39,66,32,64,32,64,32,64,-32,66,39,32,80,32,64,32,64,32,66,32,67,32,95,53,57,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,57,54,57,32,64,32,64,32,64,-32,95,51,48,54,32,95,51,48,56,32,64,32,64,32,64,32,73,32,64,-32,64,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,83,39,32,83,39,32,67,39,32,83,39,32,-66,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,80,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,-32,67,32,64,32,64,32,64,32,66,32,67,39,32,67,32,64,32,64,32,-66,32,66,32,67,32,95,57,55,48,32,64,32,64,32,64,32,67,32,95,-53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,32,66,32,67,39,32,67,39,32,67,39,32,67,-39,66,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,-39,66,32,64,32,66,32,66,39,32,64,32,66,32,66,32,67,32,64,32,-64,32,67,39,32,67,39,32,95,57,55,48,32,64,32,64,32,67,32,95,-49,53,51,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,95,53,57,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,-67,32,95,49,53,51,32,64,32,64,32,64,32,64,32,64,32,64,32,85,-32,75,32,64,32,64,32,64,32,95,57,49,50,32,95,51,48,53,32,64,-32,64,32,64,32,64,32,58,57,55,48,32,64,10,65,32,79,32,80,32,-95,54,32,95,50,53,51,32,64,32,95,53,54,51,32,64,32,64,32,95,-57,51,50,32,64,32,64,32,79,32,80,32,67,32,95,52,48,32,95,50,-48,50,32,64,32,64,32,95,53,50,48,32,95,56,55,53,32,64,32,64,-32,64,32,95,57,51,52,32,64,32,64,32,79,32,80,32,67,32,95,52,-48,32,95,50,48,50,32,64,32,64,32,95,53,50,48,32,95,57,51,53,-32,64,32,64,32,64,32,95,57,54,54,32,64,32,64,32,79,32,80,32,-67,32,95,52,48,32,95,50,48,50,32,64,32,64,32,95,53,50,48,32,-95,57,54,55,32,64,32,64,32,64,32,95,57,54,56,32,64,32,64,32,-79,32,80,32,95,56,32,95,52,51,32,64,32,64,32,95,57,54,53,32,-64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,58,57,54,57,-32,64,10,65,32,83,39,32,83,39,32,83,32,64,32,64,32,66,32,66,-32,67,32,83,32,64,32,64,32,64,32,66,32,66,32,66,32,83,32,66,-32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,66,32,64,32,-66,39,32,66,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,-35,52,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,83,39,32,66,32,64,32,66,39,32,66,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,53,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,85,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,90,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,-67,39,32,80,32,64,32,64,32,64,32,95,57,51,54,32,64,32,64,32,-90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,95,57,54,53,32,64,32,58,57,54,56,32,-64,10,65,32,102,114,111,109,85,84,70,56,32,34,68,97,116,97,46,84,-121,112,101,76,105,116,115,46,75,110,111,119,110,83,121,109,98,111,108,34,-32,64,32,58,57,54,55,32,64,10,65,32,83,39,32,83,39,32,83,32,-64,32,64,32,66,32,66,32,67,32,83,32,64,32,64,32,64,32,66,32,-66,32,66,32,83,32,66,32,64,32,64,32,64,32,64,32,66,32,66,32,-83,39,32,66,32,64,32,66,39,32,66,32,67,39,66,32,64,32,67,32,-67,32,61,61,32,64,32,35,52,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,83,39,32,66,32,64,32,66,39,32,-66,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,90,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,-32,64,32,66,32,66,32,67,39,32,80,32,64,32,64,32,64,32,95,57,-51,54,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,57,54,53,32,-64,32,58,57,54,54,32,64,10,65,32,66,32,66,32,66,32,95,48,32,-95,53,53,54,32,64,32,95,55,50,56,32,95,57,49,57,32,64,32,64,-32,64,32,64,32,64,32,66,32,83,39,32,66,32,64,32,66,32,67,32,-64,32,67,39,32,67,32,64,32,95,50,48,55,32,64,32,95,49,49,32,-95,53,53,54,32,64,32,95,53,50,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,83,39,32,83,39,-32,83,32,64,32,64,32,66,32,66,32,83,39,32,67,39,32,64,32,66,-32,83,39,32,64,32,66,32,83,39,32,64,32,83,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,-32,66,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,66,32,83,39,32,66,32,64,32,66,32,-67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,67,-32,67,39,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,66,32,-66,39,32,66,32,67,32,64,32,67,32,95,50,48,55,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,32,64,-32,64,32,64,32,66,32,67,39,32,67,32,64,32,64,32,67,39,32,67,-32,64,32,67,32,95,57,54,52,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,95,50,54,32,95,49,49,32,95,53,53,54,32,64,32,64,-32,64,32,66,32,95,52,57,32,64,32,67,39,32,67,32,64,32,67,32,-80,32,64,32,95,53,56,32,64,32,64,32,95,53,56,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,32,64,32,64,-32,64,32,66,32,67,39,32,67,32,64,32,64,32,67,39,32,67,32,64,-32,67,32,95,57,54,52,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,58,57,54,53,32,64,10,65,32,67,39,32,67,39,32,83,-39,32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,83,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,95,50,54,32,-95,57,51,56,32,64,32,64,32,64,32,64,32,64,32,66,32,67,32,64,-32,67,32,95,57,54,49,32,64,32,64,32,64,32,95,49,49,32,95,53,-53,54,32,64,32,95,53,50,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,67,32,66,32,64,32,64,32,64,32,64,32,83,39,32,66,32,-64,32,66,39,32,66,32,67,32,64,32,66,32,67,39,32,67,39,32,64,-32,66,32,67,39,32,64,32,67,39,32,64,32,64,32,64,32,67,39,32,-83,39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,-32,95,51,48,49,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,-39,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,95,56,53,50,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,50,54,-32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,95,52,57,32,64,32,64,32,64,32,-64,32,66,32,66,32,67,39,32,67,32,64,32,64,32,64,32,67,39,66,-32,66,32,83,39,32,80,32,64,32,64,32,67,39,66,32,95,52,55,52,-32,64,32,95,52,55,53,32,64,32,64,32,64,32,67,39,32,67,39,32,-79,32,64,32,64,32,66,32,67,32,80,32,64,32,64,32,95,57,54,50,-32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,95,50,54,32,95,49,49,32,95,53,53,54,32,-64,32,64,32,64,32,64,32,66,32,66,32,95,52,57,32,64,32,64,32,-66,32,67,32,64,32,67,32,80,32,64,32,95,53,56,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,90,32,-64,32,64,32,66,32,66,32,90,32,64,32,64,32,67,39,66,32,66,39,-32,66,32,95,50,54,32,64,32,95,55,56,57,32,95,51,48,53,32,64,-32,64,32,64,32,64,32,66,32,66,32,95,49,53,51,32,102,114,111,109,-85,84,70,56,32,34,77,117,108,116,105,112,108,101,32,99,111,110,115,116,-114,97,105,110,116,32,115,111,108,117,116,105,111,110,115,32,102,111,114,58,-32,34,32,64,32,64,32,64,32,64,32,66,32,66,32,95,57,54,51,32,-64,32,64,32,95,56,52,50,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,57,54,52,32,64,10,65,32,95,54,32,95,51,53,-51,32,64,32,95,52,57,50,32,64,32,58,57,54,51,32,64,10,65,32,-83,32,85,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,116,-117,112,108,101,67,111,110,115,116,114,97,105,110,116,115,34,32,64,32,64,-32,64,32,64,32,66,32,67,32,80,32,64,32,64,32,90,32,90,32,83,-39,32,95,56,52,50,32,64,32,66,32,95,54,53,50,32,95,53,49,57,-32,64,32,64,32,95,51,50,49,32,64,32,64,32,73,32,64,32,64,32,-64,32,64,32,64,32,58,57,54,50,32,64,10,65,32,66,32,66,32,67,-39,32,89,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,80,32,-75,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-67,32,66,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-67,39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,89,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,-66,32,80,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,67,-32,64,32,67,32,83,39,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,64,32,66,32,66,39,32,64,-32,66,32,66,32,67,39,32,67,39,32,95,53,57,32,64,32,64,32,64,-32,64,32,66,32,66,32,83,39,32,66,32,64,32,66,32,80,32,64,32,-95,51,50,49,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-32,64,32,64,32,64,32,67,39,66,32,66,39,32,80,32,64,32,64,32,-67,39,32,95,54,48,32,64,32,95,57,51,57,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,67,39,32,79,32,64,32,64,32,-64,32,64,32,66,32,67,39,32,67,32,64,32,64,32,66,32,67,32,64,-32,95,57,54,48,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,58,57,54,49,32,64,10,65,32,66,32,83,39,32,83,39,-32,83,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,67,39,32,-67,39,32,95,48,32,95,57,52,51,32,64,32,64,32,64,32,89,32,67,-39,32,83,39,32,67,32,64,32,64,32,66,32,66,32,67,39,32,67,39,-32,64,32,83,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,-66,32,64,32,66,39,32,64,32,64,32,64,32,66,32,67,39,32,67,39,-66,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,66,32,66,32,-66,32,95,48,32,95,57,52,51,32,64,32,64,32,64,32,64,32,95,57,-52,52,32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,-32,67,32,64,32,64,32,64,32,64,32,64,32,95,49,52,53,32,95,57,-52,49,32,64,32,64,32,64,32,95,53,56,32,64,32,64,32,66,32,95,-49,52,53,32,95,57,52,49,32,64,32,64,32,67,32,80,32,64,32,95,-53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,90,32,64,32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,95,50,54,32,95,57,52,55,32,-95,57,53,52,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,95,54,48,32,64,32,64,32,64,32,95,57,53,57,32,64,32,-64,32,64,32,64,32,64,32,58,57,54,48,32,64,10,65,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,66,32,83,39,32,83,39,32,66,-32,64,32,64,32,66,32,66,32,83,39,32,95,48,32,95,57,52,51,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,54,32,95,57,-53,53,32,95,57,52,51,32,64,32,64,32,64,32,64,32,64,32,66,32,-67,32,64,32,67,32,95,57,53,54,32,80,32,95,57,52,52,32,95,53,-56,32,64,32,64,32,75,50,32,95,52,57,32,95,53,56,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,66,32,83,39,32,95,48,32,95,57,52,51,32,64,32,-64,32,95,57,53,55,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,67,39,66,32,66,32,67,39,66,32,64,32,66,32,66,-32,95,48,32,95,57,52,51,32,64,32,64,32,64,32,66,32,66,32,95,-57,53,55,32,64,32,64,32,66,32,66,32,89,32,66,32,80,32,75,32,-64,32,64,32,66,32,67,32,66,32,64,32,64,32,83,39,32,83,39,32,-67,39,66,32,64,32,64,32,66,32,85,32,64,32,64,32,66,32,67,32,-95,53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-95,54,51,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,83,39,32,66,32,64,32,66,39,32,66,39,32,66,32,67,39,66,32,-64,32,67,39,66,32,66,32,83,39,32,95,49,48,54,32,95,57,52,51,-32,64,32,64,32,64,32,66,32,67,39,32,95,50,54,32,64,32,66,32,-95,49,52,54,32,95,57,52,49,32,64,32,64,32,66,32,95,49,50,51,-32,64,32,66,32,95,51,48,49,32,64,32,66,32,95,56,54,57,32,64,-32,89,32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,66,32,64,-32,64,32,66,32,90,32,64,32,66,32,66,32,90,32,64,32,64,32,66,-32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,95,50,54,32,-64,32,95,51,48,51,32,95,51,48,53,32,64,32,64,32,102,114,111,109,-85,84,70,56,32,34,102,114,101,101,32,116,121,112,101,32,118,97,114,105,-97,98,108,101,32,105,110,32,111,117,116,112,117,116,32,102,117,110,100,101,-112,34,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,95,49,52,-53,32,95,57,52,49,32,64,32,64,32,64,32,80,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,66,32,67,-39,32,89,32,64,32,64,32,66,32,66,32,66,32,80,32,75,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,67,32,66,32,64,32,64,32,-64,32,64,32,66,32,66,32,83,39,32,83,39,32,67,39,66,32,64,32,-64,32,66,32,66,32,66,39,32,64,32,64,32,66,32,85,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,39,32,64,32,66,32,66,32,67,39,-32,67,39,32,95,53,57,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,67,32,64,32,64,32,64,32,67,39,66,32,66,39,32,80,32,64,-32,64,32,95,57,51,57,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,67,32,64,32,67,32,95,57,-53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,-57,53,57,32,64,10,65,32,95,57,53,54,32,66,32,66,32,67,32,64,-32,64,32,80,32,64,32,64,32,58,57,53,56,32,64,10,65,32,89,32,-66,32,83,39,32,80,32,64,32,95,52,57,32,64,32,64,32,66,32,67,-39,32,67,39,66,32,64,32,66,32,66,32,95,48,32,95,57,52,51,32,-64,32,64,32,64,32,89,32,66,32,83,39,32,80,32,64,32,95,52,57,-32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,-32,67,39,66,32,66,32,67,39,32,67,39,32,95,48,32,95,57,52,51,-32,64,32,64,32,64,32,64,32,67,39,32,67,32,64,32,67,39,32,83,-39,32,67,32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,32,64,-32,95,54,57,55,32,95,55,50,32,64,32,64,32,64,32,66,32,66,32,-66,32,95,52,57,32,64,32,64,32,64,32,66,32,66,32,95,53,57,32,-64,32,64,32,80,32,64,32,64,32,64,32,64,32,67,32,95,57,52,52,-32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,64,32,64,-32,64,32,95,53,56,32,64,32,58,57,53,55,32,64,10,65,32,66,32,-89,32,64,32,66,32,66,32,67,39,66,32,66,39,32,85,32,95,53,56,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,66,32,66,-39,32,66,39,32,85,32,95,53,56,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,67,39,66,32,66,39,32,66,39,32,66,39,32,-85,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,67,39,66,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,-66,32,66,32,66,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,-66,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,57,53,54,32,64,10,65,32,67,32,95,51,49,-54,32,64,32,95,49,54,32,64,32,58,57,53,53,32,64,10,65,32,95,-57,52,56,32,95,57,52,49,32,64,32,95,53,50,32,64,32,83,32,67,-32,64,32,75,32,64,32,64,32,95,57,53,49,32,95,57,53,52,32,64,-32,64,32,95,57,53,51,32,95,57,53,52,32,64,32,64,32,58,57,53,-52,32,64,10,65,32,83,32,83,39,32,67,39,32,64,32,95,57,52,54,-32,64,32,95,57,53,50,32,64,32,64,32,67,39,32,95,49,52,53,32,-64,32,95,57,52,57,32,64,32,95,53,56,32,64,32,64,32,58,57,53,-51,32,64,10,65,32,85,32,75,51,32,75,32,64,32,64,32,58,57,53,-50,32,64,10,65,32,83,32,83,39,32,83,39,32,64,32,66,32,95,49,-51,32,64,32,95,57,52,57,32,64,32,64,32,67,39,32,95,49,56,32,-64,32,66,32,95,49,53,32,64,32,95,57,52,57,32,64,32,64,32,95,-53,57,32,64,32,64,32,64,32,95,57,53,48,32,64,32,58,57,53,49,-32,64,10,65,32,85,32,75,51,32,65,32,64,32,64,32,58,57,53,48,-32,64,10,65,32,85,32,90,32,90,32,90,32,75,32,64,32,64,32,64,-32,64,32,58,57,52,57,32,64,10,65,32,66,32,66,32,66,32,66,32,-67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,-64,32,58,57,52,56,32,64,10,65,32,66,32,89,32,64,32,83,39,32,-66,32,64,32,66,32,80,32,64,32,95,57,52,53,32,64,32,64,32,66,-32,67,39,66,32,64,32,95,57,52,54,32,64,32,64,32,64,32,58,57,-52,55,32,64,10,65,32,85,32,75,50,32,90,32,75,32,64,32,64,32,-64,32,58,57,52,54,32,64,10,65,32,85,32,75,32,90,32,90,32,75,-32,64,32,64,32,64,32,64,32,58,57,52,53,32,64,10,65,32,89,32,-66,32,66,32,89,32,64,32,64,32,66,32,66,32,66,32,67,32,66,32,-64,32,64,32,64,32,64,32,66,32,83,39,32,83,39,32,83,39,32,83,-32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,32,64,32,-83,39,32,67,39,32,83,39,32,83,32,64,32,64,32,64,32,66,32,66,-32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,57,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,66,-32,67,32,67,32,61,61,32,64,32,35,49,57,32,64,32,64,32,95,53,-50,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,-64,32,64,32,64,32,67,39,66,32,66,32,83,39,32,67,32,64,32,64,-32,83,39,32,66,32,64,32,66,32,83,32,64,32,67,32,95,54,57,55,-32,95,55,50,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,-49,52,53,32,95,57,52,49,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,32,95,53,57,32,64,32,64,32,67,32,80,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,52,32,64,-32,64,32,95,53,50,32,64,32,64,32,64,32,64,32,66,32,66,32,85,-32,64,32,64,32,66,32,90,32,64,32,66,32,67,32,66,32,64,32,64,-32,66,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,52,-32,64,32,64,32,95,53,50,32,64,32,64,32,64,32,64,32,66,32,66,-32,85,32,64,32,64,32,66,32,90,32,64,32,66,32,67,39,32,67,32,-64,32,67,39,32,67,32,64,32,95,52,48,32,95,54,57,49,32,64,32,-64,32,95,53,50,32,64,32,64,32,64,32,95,49,52,53,32,95,57,52,-49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,83,39,32,-67,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,-35,49,32,64,32,64,32,95,53,50,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,67,-39,66,32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,-39,66,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,32,95,-53,50,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,-66,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,66,32,66,32,-95,48,32,95,57,52,51,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,67,32,64,32,64,32,67,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,-64,32,66,32,67,32,66,32,64,32,64,32,66,32,66,32,67,39,66,32,-67,32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,95,53,50,32,-64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,-67,39,32,67,32,64,32,67,39,32,67,32,64,32,95,52,48,32,95,50,-48,50,32,64,32,64,32,95,53,50,32,64,32,64,32,64,32,95,49,52,-53,32,95,57,52,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,58,57,52,52,32,64,10,65,32,95,49,-32,95,57,52,49,32,64,32,85,32,95,53,50,32,64,32,64,32,95,57,-52,50,32,95,57,52,51,32,64,32,64,32,95,49,52,53,32,95,57,52,-49,32,64,32,64,32,58,57,52,51,32,64,10,65,32,67,39,32,67,39,-66,32,64,32,95,48,32,64,32,75,32,64,32,58,57,52,50,32,64,10,-65,32,95,50,32,95,57,52,48,32,64,32,95,52,57,32,64,32,67,39,-66,32,85,32,95,53,50,32,64,32,64,32,67,39,66,32,85,32,95,53,-50,32,64,32,64,32,66,32,95,52,57,32,64,32,64,32,64,32,64,32,-95,49,55,32,95,57,52,49,32,64,32,64,32,95,49,57,32,95,57,52,-49,32,64,32,64,32,95,50,48,32,95,57,52,49,32,64,32,64,32,58,-57,52,49,32,64,10,65,32,95,51,32,66,32,80,32,95,53,50,32,64,-32,64,32,66,32,95,52,57,32,64,32,64,32,64,32,95,57,32,95,57,-52,48,32,64,32,64,32,58,57,52,48,32,64,10,65,32,66,32,89,32,-64,32,83,39,32,66,32,64,32,83,32,64,32,66,32,66,32,90,32,64,-32,64,32,66,32,66,32,90,32,64,32,64,32,67,39,32,67,39,32,67,-32,64,32,64,32,66,32,66,32,83,32,66,32,64,32,64,32,64,32,67,-39,32,83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,52,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,49,57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-67,39,66,32,66,39,32,66,32,83,32,64,32,66,32,67,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,50,49,32,64,32,64,32,64,32,66,-32,85,32,64,32,67,39,66,32,95,56,49,51,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,49,57,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,67,39,66,32,-66,32,95,50,54,32,64,32,95,50,55,53,32,64,32,64,32,64,32,67,-32,95,54,57,55,32,95,55,50,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,-32,61,61,32,64,32,35,52,32,64,32,64,32,64,32,64,32,66,32,85,-32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,66,32,66,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,-32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,-32,64,32,35,49,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,-83,39,32,67,39,66,32,64,32,66,32,95,52,55,52,32,64,32,64,32,-73,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,-75,32,64,32,64,32,64,32,64,32,64,32,95,53,53,48,32,95,51,48,-53,32,64,32,64,32,64,32,64,32,64,32,64,32,58,57,51,57,32,64,-10,65,32,83,32,85,32,95,53,56,32,64,32,64,32,90,32,90,32,67,-39,32,67,32,67,32,83,39,32,83,39,32,64,32,66,32,67,32,64,32,-83,32,95,51,48,49,32,64,32,64,32,64,32,67,32,66,32,64,32,85,-32,65,32,64,32,64,32,64,32,64,32,85,32,75,32,64,32,64,32,64,-32,64,32,95,53,51,55,32,85,32,75,32,85,32,90,32,90,32,85,32,-67,39,66,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,-95,52,51,32,64,32,64,32,85,32,66,32,95,52,57,48,32,95,49,54,-53,32,64,32,95,49,53,51,32,95,56,57,52,32,64,32,95,56,52,57,-32,64,32,64,32,64,32,95,50,49,51,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,89,32,64,-32,66,32,66,32,80,32,75,32,64,32,64,32,64,32,66,32,66,32,67,-32,66,32,64,32,64,32,64,32,67,39,32,83,39,32,83,39,32,67,39,-66,32,64,32,64,32,64,32,66,39,32,66,32,67,32,64,32,66,32,67,-32,95,52,48,32,95,55,50,32,64,32,64,32,64,32,66,32,95,57,51,-55,32,95,56,48,32,64,32,64,32,95,54,48,32,95,50,52,57,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,67,32,95,53,57,32,64,-32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,-32,64,32,58,57,51,56,32,64,10,65,32,66,32,80,32,95,50,49,57,-32,102,114,111,109,85,84,70,56,32,34,109,105,110,105,109,117,109,34,32,-64,32,64,32,64,32,64,32,66,32,95,53,53,32,64,32,67,39,32,83,-39,32,67,32,64,32,64,32,67,39,32,67,39,32,83,32,64,32,64,32,-95,56,55,32,64,32,73,32,64,32,64,32,73,32,64,32,64,32,64,32,-58,57,51,55,32,64,10,65,32,66,32,66,32,66,32,95,50,54,32,95,-49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,95,52,57,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,-80,32,64,32,64,32,64,32,66,32,67,39,66,32,66,32,95,52,55,52,-32,64,32,66,32,95,50,54,32,95,52,55,53,32,64,32,64,32,95,53,-52,50,32,64,32,64,32,64,32,64,32,66,32,95,52,55,52,32,64,32,-67,32,95,54,54,52,32,64,32,95,53,51,49,32,79,32,35,55,53,32,-64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,56,32,-64,32,64,32,95,53,56,32,64,32,64,32,64,32,58,57,51,54,32,64,-10,65,32,102,114,111,109,85,84,70,56,32,34,68,97,116,97,46,84,121,-112,101,76,105,116,115,46,75,110,111,119,110,78,97,116,34,32,64,32,58,-57,51,53,32,64,10,65,32,90,32,67,39,32,67,32,64,32,66,32,67,-32,83,32,64,32,64,32,66,32,83,39,32,66,32,64,32,80,32,64,32,-64,32,67,39,66,32,66,32,67,39,32,67,39,32,80,32,64,32,64,32,-64,32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,-50,56,32,95,57,48,52,32,64,32,64,32,64,32,64,32,64,32,66,32,-67,39,32,67,39,32,67,32,64,32,64,32,67,39,32,67,39,32,67,32,-64,32,64,32,66,32,67,32,64,32,67,32,95,57,51,51,32,64,32,64,-32,64,32,95,49,49,32,95,53,53,54,32,64,32,95,53,50,32,64,32,-64,32,64,32,64,32,66,32,85,32,64,32,67,39,66,32,66,32,67,39,-32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,66,32,95,51,49,-54,32,95,53,53,54,32,64,32,64,32,66,32,85,32,64,32,83,39,32,-66,32,64,32,66,39,32,66,32,95,48,32,95,53,53,54,32,64,32,64,-32,95,56,53,50,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,67,32,80,32,64,32,64,32,64,32,64,32,95,56,55,-54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-95,50,54,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,-32,66,32,66,32,95,52,57,32,64,32,64,32,67,39,32,67,39,32,67,-32,64,32,64,32,80,32,64,32,95,53,56,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,-32,64,32,64,32,95,53,53,48,32,95,51,48,53,32,64,32,64,32,64,-32,58,57,51,52,32,64,10,65,32,67,39,32,67,39,32,67,32,64,32,-64,32,66,32,83,39,32,83,32,64,32,95,57,48,54,32,64,32,64,32,-67,39,32,67,39,32,67,32,64,32,64,32,67,39,32,83,39,32,83,32,-64,32,64,32,67,39,32,67,39,32,95,54,50,32,95,57,48,55,32,64,-32,64,32,64,32,80,32,64,32,64,32,67,39,32,67,32,64,32,80,32,-64,32,67,32,66,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,-32,64,32,35,49,32,64,32,64,32,95,53,50,32,64,32,64,32,64,32,-66,32,85,32,64,32,67,39,66,32,66,32,64,32,66,32,66,32,67,39,-66,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,32,95,53,-50,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,-66,32,66,32,66,32,66,32,95,52,57,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,80,32,95,52,55,57,32,95,53,56,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,66,-32,64,32,66,32,66,32,79,32,64,32,64,32,80,32,64,32,64,32,64,-32,67,39,32,67,39,32,79,32,64,32,64,32,80,32,64,32,75,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,95,52,57,32,80,32,95,52,55,57,32,95,53,56,32,-64,32,64,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,95,52,-57,32,80,32,95,52,55,57,32,95,53,56,32,64,32,64,32,95,53,56,-32,64,32,64,32,64,32,58,57,51,51,32,64,10,65,32,90,32,67,39,-32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,66,32,-95,51,49,54,32,95,53,53,54,32,64,32,64,32,67,39,66,32,66,32,-95,48,32,95,53,53,54,32,64,32,64,32,95,56,53,50,32,64,32,64,-32,66,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,-67,32,80,32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,66,32,95,52,57,-32,64,32,67,39,32,67,32,64,32,83,39,32,80,32,64,32,66,32,95,-52,55,57,32,64,32,95,54,48,32,95,54,32,95,52,55,53,32,64,32,-95,50,52,57,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,95,-53,56,32,64,32,64,32,64,32,64,32,64,32,58,57,51,50,32,64,10,-65,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,56,57,-57,32,64,32,64,32,66,32,95,49,48,54,32,95,53,53,54,32,64,32,-95,57,48,49,32,95,53,56,32,64,32,64,32,64,32,95,49,48,56,32,-95,53,53,54,32,64,32,95,57,50,55,32,64,32,64,32,64,32,58,57,-51,49,32,64,10,65,32,66,32,95,50,54,32,95,55,51,48,32,64,32,-64,32,67,32,95,55,51,49,32,95,56,53,55,32,64,32,95,49,50,56,-32,64,32,64,32,64,32,58,57,51,48,32,64,10,65,32,75,32,66,32,-66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,-56,57,54,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,-32,64,32,66,32,66,39,32,64,32,66,32,66,32,95,49,48,54,32,95,-53,53,54,32,64,32,64,32,64,32,66,32,66,32,95,57,50,55,32,64,-32,64,32,80,32,64,32,64,32,64,32,64,32,67,39,66,32,95,48,32,-95,53,53,54,32,64,32,64,32,67,39,66,32,66,32,95,49,48,54,32,-95,53,53,54,32,64,32,64,32,95,57,50,56,32,64,32,64,32,95,49,-49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,58,-57,50,57,32,64,10,65,32,66,32,95,50,54,32,95,55,51,48,32,64,-32,64,32,67,32,95,55,51,49,32,95,57,48,48,32,64,32,95,49,50,-56,32,64,32,64,32,64,32,58,57,50,56,32,64,10,65,32,85,32,66,-32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,67,39,32,95,-48,32,95,53,53,54,32,64,32,64,32,95,56,53,54,32,95,51,48,53,-32,64,32,64,32,95,56,54,56,32,64,32,64,32,64,32,83,39,32,83,-32,64,32,66,32,83,39,32,95,51,48,49,32,64,32,66,32,95,56,54,-57,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,-95,57,48,50,32,95,51,48,53,32,64,32,64,32,64,32,83,39,32,83,-32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,83,39,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,67,32,-66,32,64,32,64,32,64,32,66,32,83,39,32,66,32,64,32,66,32,67,-39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,66,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,64,32,66,-32,83,39,32,66,32,64,32,66,39,32,66,32,67,39,66,32,64,32,67,-32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,-32,66,32,67,39,66,32,66,39,32,66,32,67,32,64,32,67,32,67,32,-95,52,48,32,95,50,48,50,32,64,32,64,32,95,53,50,48,32,95,56,-55,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-32,64,32,95,57,48,57,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,95,57,50,54,32,95,51,48,-53,32,64,32,64,32,64,32,64,32,64,32,58,57,50,55,32,64,10,65,-32,83,39,32,66,32,64,32,66,32,67,39,32,95,48,32,95,53,53,54,-32,64,32,64,32,64,32,95,56,53,54,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,-32,67,39,66,32,95,57,49,53,32,64,32,95,52,55,53,32,64,32,64,-32,95,57,50,53,32,64,32,64,32,58,57,50,54,32,64,10,65,32,67,-39,32,95,48,32,95,53,53,54,32,64,32,64,32,95,51,49,54,32,95,-53,53,54,32,64,32,85,32,66,32,83,39,32,83,39,32,67,39,66,32,-64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,67,32,64,-32,64,32,80,32,64,32,64,32,95,57,49,50,32,95,51,48,53,32,64,-32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,83,-39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,32,67,32,64,32,64,32,66,32,66,32,67,39,32,67,39,32,-64,32,66,32,67,39,32,64,32,83,39,32,64,32,64,32,64,32,64,32,-67,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,67,39,32,67,-39,32,64,32,83,39,32,64,32,64,32,64,32,66,32,66,32,67,32,66,-32,64,32,64,32,64,32,66,32,66,32,83,39,32,66,32,64,32,80,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,66,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,66,32,64,32,66,-39,32,66,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,-48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,66,32,64,32,66,32,66,32,67,39,32,67,32,64,32,64,32,-64,32,66,32,66,32,66,32,67,32,67,39,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,95,50,54,32,95,49,49,32,95,53,53,-54,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,-66,32,80,32,64,32,64,32,64,32,66,32,67,32,64,32,67,39,32,67,-39,32,95,57,49,54,32,64,32,64,32,67,32,95,57,49,55,32,64,32,-64,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,90,32,75,32,64,32,64,32,64,32,64,32,90,32,75,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,-64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,67,39,32,67,39,-32,67,39,32,66,32,95,50,54,32,95,49,49,32,95,53,53,54,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,67,39,66,32,66,39,32,80,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,67,39,32,67,39,32,95,57,49,54,32,95,49,52,51,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,-39,32,79,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,66,32,66,32,83,39,32,67,32,64,32,64,32,64,32,67,39,66,32,-66,39,32,80,32,64,32,64,32,67,39,32,95,54,48,32,64,32,95,56,-53,53,32,64,32,64,32,64,32,64,32,67,39,32,95,54,48,32,64,32,-95,56,53,53,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,-32,64,32,67,32,95,52,52,48,32,67,39,66,32,66,32,80,32,64,32,-95,56,53,52,32,64,32,64,32,95,56,48,48,32,64,32,64,32,64,32,-95,52,52,52,32,95,52,52,53,32,64,32,95,56,56,32,95,49,48,52,-32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,-49,32,64,32,64,32,64,32,64,32,95,56,56,32,95,49,48,52,32,64,-32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,50,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,-32,95,57,49,57,32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,-95,57,50,48,32,64,32,64,32,64,32,67,32,95,53,53,32,95,50,54,-32,95,54,50,56,32,64,32,95,50,55,54,32,95,57,50,52,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,57,50,53,32,64,10,65,-32,67,32,66,32,64,32,67,39,66,32,66,39,32,66,32,64,32,64,32,-66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,66,32,-66,32,67,32,64,32,64,32,67,39,66,32,66,32,67,39,32,67,39,32,-64,32,64,32,66,32,66,32,95,57,49,54,32,64,32,64,32,66,32,67,-32,95,53,53,32,95,50,54,32,95,54,50,56,32,64,32,95,50,55,54,-32,75,32,64,32,64,32,64,32,64,32,64,32,95,50,53,48,32,64,32,-64,32,64,32,64,32,95,57,50,50,32,95,57,50,51,32,64,32,64,32,-64,32,64,32,64,32,64,32,58,57,50,52,32,64,10,65,32,67,32,66,-32,64,32,66,32,90,32,64,32,66,32,90,32,64,32,67,32,66,32,64,-32,66,32,90,32,64,32,66,32,90,32,64,32,95,54,57,50,32,95,51,-48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,57,50,-51,32,64,10,65,32,66,32,83,39,32,66,32,64,32,95,49,53,51,32,-64,32,64,32,83,39,32,67,39,32,64,32,66,32,95,52,51,56,32,64,-32,66,32,95,49,51,49,32,64,32,95,56,50,57,32,64,32,64,32,64,-32,95,57,50,49,32,64,32,64,32,58,57,50,50,32,64,10,65,32,66,-32,89,32,64,32,66,32,66,32,80,32,95,53,56,32,64,32,64,32,64,-32,66,32,66,32,83,39,32,66,32,64,32,95,53,57,32,64,32,64,32,-64,32,66,32,67,39,66,32,66,32,64,32,64,32,66,32,66,32,95,54,-54,32,64,32,64,32,66,32,66,32,95,49,50,51,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,58,57,50,49,32,64,10,65,32,66,32,-95,48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,49,50,52,32,-95,56,57,56,32,64,32,95,49,50,56,32,64,32,64,32,64,32,64,32,-66,32,85,32,64,32,90,32,66,32,66,32,66,32,95,50,54,32,95,55,-51,48,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,95,-55,51,49,32,95,57,48,48,32,64,32,95,49,50,56,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,57,50,48,32,64,10,65,32,66,-32,95,49,50,52,32,95,57,49,56,32,64,32,95,49,50,56,32,64,32,-64,32,95,49,50,52,32,95,56,57,56,32,64,32,95,49,50,56,32,64,-32,64,32,58,57,49,57,32,64,10,65,32,95,49,50,53,32,75,32,85,-32,90,32,75,32,64,32,64,32,64,32,64,32,58,57,49,56,32,64,10,-65,32,95,50,54,51,32,58,57,49,55,32,64,10,65,32,66,32,66,32,-67,32,64,32,64,32,80,32,64,32,58,57,49,54,32,64,10,65,32,66,-32,67,39,66,32,66,32,95,49,51,50,32,95,53,53,54,32,64,32,64,-32,95,57,49,52,32,95,53,56,32,64,32,95,53,56,32,64,32,64,32,-64,32,64,32,95,56,53,54,32,64,32,58,57,49,53,32,64,10,65,32,-67,39,32,67,39,32,67,39,66,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,83,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,-67,39,32,83,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-32,67,39,32,67,39,32,67,39,32,83,39,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,-32,64,32,64,32,66,32,67,39,32,67,39,32,83,39,32,67,39,32,67,-39,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,66,32,-66,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,-32,83,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,-83,39,32,64,32,66,32,83,39,32,64,32,66,32,83,39,32,64,32,95,-53,54,51,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,-32,95,57,49,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,83,39,32,83,39,32,83,39,32,66,32,64,32,64,32,64,32,66,-32,66,32,66,32,83,39,32,83,39,32,67,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,83,39,32,66,32,64,32,66,39,32,66,32,67,-32,64,32,95,50,48,55,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,67,39,66,32,66,39,32,66,32,95,49,48,54,32,95,53,53,54,-32,64,32,64,32,83,39,32,95,50,54,32,64,32,66,32,95,49,52,54,-32,95,53,53,53,32,64,32,64,32,95,54,52,52,32,64,32,64,32,66,-32,95,50,49,57,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,-84,70,56,32,34,101,120,112,97,110,100,68,105,99,116,58,32,34,32,64,-32,64,32,64,32,95,49,53,52,32,95,50,53,53,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,-67,39,32,67,39,32,67,39,32,67,39,32,79,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,-64,32,64,32,66,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,-66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,64,32,95,53,-56,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-90,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,32,67,39,-32,83,39,32,83,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,95,49,-56,32,95,53,53,52,32,64,32,95,50,57,52,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,-32,66,32,67,39,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,39,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,-51,49,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,66,32,66,-32,67,39,32,67,39,66,32,64,32,95,57,49,52,32,64,32,64,32,64,-32,67,39,32,67,39,32,95,52,55,52,32,64,32,64,32,66,32,66,32,-95,52,55,53,32,64,32,64,32,95,53,52,51,32,95,51,48,53,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,95,54,51,48,32,95,52,52,49,32,95,52,52,53,32,64,32,-95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,95,54,48,-32,64,32,64,32,66,32,66,32,95,56,53,53,32,64,32,64,32,67,39,-32,95,54,51,48,32,64,32,95,54,48,32,95,56,53,52,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,66,32,66,32,95,50,54,32,95,49,49,32,95,53,53,-54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,95,53,57,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,-66,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,-67,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-90,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,49,56,32,-95,53,53,52,32,64,32,95,50,57,52,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,83,39,32,67,39,32,67,39,32,95,51,49,54,32,95,-53,53,54,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,85,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,-39,66,32,64,32,95,57,49,52,32,64,32,64,32,64,32,67,39,32,67,-39,32,95,52,55,52,32,64,32,64,32,66,32,67,32,95,57,49,49,32,-64,32,64,32,95,51,50,49,32,64,32,64,32,64,32,64,32,64,32,95,-54,51,48,32,95,52,52,49,32,95,52,52,53,32,64,32,95,57,48,32,-95,49,48,52,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,-32,95,49,53,51,32,64,32,85,32,75,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,66,32,95,49,53,51,32,64,32,85,32,90,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,65,32,64,-32,64,32,64,32,85,32,75,32,64,32,64,32,64,32,95,57,49,50,32,-95,51,48,53,32,64,32,64,32,64,32,85,32,75,32,65,32,64,32,64,-32,64,32,64,32,95,57,49,51,32,64,32,58,57,49,52,32,64,10,65,-32,83,32,73,32,64,32,67,39,32,67,39,66,32,64,32,66,32,67,32,-67,32,61,61,32,64,32,35,50,49,32,64,32,64,32,64,32,67,32,83,-32,95,56,52,56,32,64,32,67,32,80,32,95,53,56,32,64,32,95,53,-56,32,64,32,64,32,64,32,64,32,85,32,66,32,67,32,95,57,49,51,-32,64,32,64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,-32,67,39,66,32,80,32,64,32,64,32,95,53,57,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,85,32,66,32,67,32,95,57,49,51,32,-64,32,64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,-66,32,80,32,64,32,64,32,95,49,53,51,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,57,49,51,32,64,10,65,32,67,39,32,89,32,64,-32,66,32,66,32,66,32,83,32,73,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,83,39,32,67,39,32,67,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,39,32,66,32,67,39,32,67,39,66,32,64,32,64,32,66,32,-66,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,32,64,32,-64,32,67,32,95,55,48,50,32,64,32,80,32,95,55,48,51,32,64,32,-95,54,54,51,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,85,32,64,32,64,32,67,39,66,32,67,39,32,64,32,67,32,95,53,-57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,-67,32,80,32,64,32,64,32,64,32,64,32,64,32,95,53,56,32,64,32,-58,57,49,50,32,64,10,65,32,67,39,32,67,32,64,32,67,39,32,67,-39,32,83,39,32,95,56,49,54,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,79,32,64,32,64,32,64,32,66,32,66,32,66,32,95,-52,55,57,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,89,-32,64,32,64,32,66,32,66,32,66,32,80,32,75,32,64,32,64,32,64,-32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,66,32,66,32,66,-32,95,53,57,32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,54,-32,95,52,55,53,32,64,32,64,32,64,32,64,32,66,32,67,32,64,32,-67,39,32,67,32,64,32,67,32,95,52,48,32,95,55,50,32,64,32,64,-32,64,32,95,53,50,49,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,95,53,52,52,32,95,52,52,53,32,64,32,95,57,-48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,48,32,64,32,64,-32,64,32,64,32,67,32,95,56,49,32,95,49,48,52,32,64,32,64,32,-35,49,32,64,32,64,32,64,32,64,32,64,32,75,32,64,32,64,32,95,-52,55,53,32,64,32,64,32,95,53,50,48,32,102,114,111,109,85,84,70,-56,32,34,36,120,34,32,64,32,64,32,64,32,58,57,49,49,32,64,10,-65,32,85,32,75,32,75,52,32,75,52,32,90,32,90,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,57,49,48,32,64,10,65,32,75,-32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,32,-95,57,48,52,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,-57,48,53,32,64,32,64,32,64,32,95,57,48,56,32,64,32,64,32,64,-32,58,57,48,57,32,64,10,65,32,67,39,32,67,39,32,67,32,64,32,-64,32,67,39,32,67,39,32,83,32,64,32,64,32,83,39,32,83,39,32,-83,39,32,67,39,32,64,32,64,32,64,32,83,39,32,83,39,32,66,32,-64,32,64,32,66,32,66,32,95,53,54,32,64,32,64,32,95,57,48,54,-32,64,32,64,32,83,39,32,83,39,32,83,39,32,95,53,54,32,64,32,-64,32,64,32,66,32,66,32,95,54,50,32,95,57,48,55,32,64,32,64,-32,64,32,80,32,64,32,64,32,66,32,66,32,95,54,50,32,95,57,48,-55,32,64,32,64,32,64,32,67,32,80,32,64,32,64,32,64,32,64,32,-64,32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,39,32,64,-32,66,32,66,32,95,53,57,32,64,32,64,32,80,32,64,32,64,32,64,-32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,39,32,64,32,-66,32,66,32,95,53,57,32,64,32,64,32,67,32,80,32,64,32,64,32,-64,32,64,32,83,39,32,83,39,32,83,39,32,83,39,32,95,49,53,51,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,-32,64,32,64,32,67,39,32,67,39,32,83,39,32,67,39,32,95,49,53,-51,32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,-67,32,80,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,-64,32,64,32,73,32,64,32,64,32,66,32,66,32,89,32,64,32,64,32,-66,32,66,32,66,32,80,32,75,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,67,32,66,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,83,39,32,83,39,32,67,39,66,32,64,32,64,32,64,32,66,39,32,-66,32,67,32,64,32,95,57,48,54,32,64,32,64,32,64,32,64,32,66,-32,67,39,32,67,39,66,32,64,32,66,32,66,32,89,32,64,32,64,32,-67,39,32,67,39,66,32,64,32,66,32,80,32,64,32,64,32,67,39,66,-32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,-32,79,32,64,32,64,32,80,32,64,32,67,39,32,67,39,32,79,32,64,-32,64,32,67,32,80,32,64,32,64,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,58,57,48,56,32,64,10,65,32,67,32,-66,32,64,32,67,39,66,32,66,32,64,32,67,39,66,32,66,32,67,39,-66,32,64,32,66,32,66,32,95,49,54,56,32,64,32,64,32,95,57,48,-54,32,64,32,64,32,64,32,95,57,48,54,32,64,32,64,32,64,32,58,-57,48,55,32,64,10,65,32,95,54,57,50,32,95,51,48,53,32,64,32,-58,57,48,54,32,64,10,65,32,66,32,95,48,32,95,53,53,54,32,64,-32,95,55,50,56,32,95,49,50,52,32,95,56,57,56,32,64,32,95,49,-50,56,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,66,-32,90,32,64,32,64,32,66,32,66,32,66,32,95,50,54,32,95,55,51,-48,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,95,55,-51,49,32,95,57,48,48,32,64,32,95,49,50,56,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,80,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,57,48,53,32,64,10,65,32,-66,32,95,49,50,52,32,95,57,48,51,32,64,32,95,49,50,56,32,64,-32,64,32,95,49,50,52,32,95,56,57,56,32,64,32,95,49,50,56,32,-64,32,64,32,58,57,48,52,32,64,10,65,32,95,49,50,53,32,75,32,-85,32,75,32,65,32,64,32,64,32,64,32,64,32,58,57,48,51,32,64,-10,65,32,75,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,-55,50,56,32,95,56,57,57,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,95,57,48,49,32,64,32,64,32,64,32,66,32,66,32,95,53,-57,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,58,57,48,50,-32,64,10,65,32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,-56,32,95,49,50,52,32,95,56,57,56,32,64,32,95,49,50,56,32,64,-32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,90,32,64,32,66,-32,66,32,66,32,95,50,54,32,95,55,51,48,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,67,32,95,55,51,49,32,95,57,48,48,32,-64,32,95,49,50,56,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,67,32,64,32,64,32,67,32,80,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,57,48,49,32,64,10,65,32,95,55,51,50,32,75,-32,85,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,95,55,51,51,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,57,48,48,32,64,10,65,32,66,32,95,49,50,-52,32,95,56,57,55,32,64,32,95,49,50,56,32,64,32,64,32,95,49,-50,52,32,95,56,57,56,32,64,32,95,49,50,56,32,64,32,64,32,58,-56,57,57,32,64,10,65,32,95,49,50,53,32,75,32,95,56,57,54,32,-64,32,64,32,58,56,57,56,32,64,10,65,32,95,49,50,53,32,75,32,-85,32,75,32,75,32,64,32,64,32,64,32,64,32,58,56,57,55,32,64,-10,65,32,85,32,75,50,32,75,52,32,75,52,32,90,32,75,32,64,32,-64,32,64,32,64,32,64,32,58,56,57,54,32,64,10,65,32,67,32,95,-56,53,48,32,64,32,95,56,57,52,32,64,32,58,56,57,53,32,64,10,-65,32,102,114,111,109,85,84,70,56,32,34,97,100,105,99,116,34,32,64,-32,58,56,57,52,32,64,10,65,32,67,32,66,32,64,32,95,56,48,54,-32,64,32,58,56,57,51,32,64,10,65,32,83,39,32,83,39,32,83,39,-32,83,39,32,80,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,-95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,39,32,95,56,54,50,32,64,32,64,32,80,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,67,39,32,95,-49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,95,-56,56,48,32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,64,-32,64,32,64,32,64,32,95,56,57,49,32,64,32,58,56,57,50,32,64,-10,65,32,66,32,66,32,89,32,64,32,64,32,66,32,66,32,66,32,66,-32,83,32,66,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,-32,83,39,32,83,39,32,83,39,32,83,39,32,67,39,66,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,-32,67,32,67,32,61,61,32,64,32,35,50,49,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,-32,66,32,83,39,32,83,32,64,32,64,32,64,32,66,32,66,32,66,32,-83,39,32,83,39,32,64,32,95,56,52,56,32,64,32,64,32,64,32,64,-32,83,39,32,83,39,32,83,39,32,83,39,32,67,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,83,32,95,56,56,49,32,64,32,-64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,67,32,64,-32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,95,-56,56,49,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,66,32,66,32,67,39,32,67,39,32,95,49,48,54,32,95,53,53,54,-32,64,32,64,32,64,32,64,32,64,32,95,56,55,57,32,64,32,64,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,83,39,32,83,39,-32,66,32,64,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,66,-32,66,32,66,39,32,64,32,64,32,66,32,66,32,66,32,95,48,32,95,-53,53,54,32,64,32,64,32,64,32,64,32,95,56,56,50,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,-32,64,32,64,32,64,32,95,56,57,48,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,-64,32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,32,67,39,-66,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,32,66,32,66,-32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,95,-56,56,50,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,85,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,67,39,32,67,32,64,32,64,32,64,32,64,32,95,56,57,48,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,67,39,66,-32,66,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,-95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,39,32,95,56,54,50,32,64,32,64,32,80,32,64,32,64,32,64,32,-64,32,66,32,66,32,85,32,64,32,64,32,67,39,32,67,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,85,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,90,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,90,-32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,67,39,-66,32,64,32,64,32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,-64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,95,56,54,50,32,-64,32,64,32,80,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,58,56,57,49,32,64,10,65,32,83,39,32,83,-39,32,66,32,64,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,-66,32,66,32,66,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,67,32,64,32,64,32,67,39,32,67,32,64,32,95,-56,56,56,32,64,32,95,56,56,57,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,-32,95,56,57,49,32,64,32,64,32,58,56,57,48,32,64,10,65,32,95,-50,54,32,95,52,55,53,32,64,32,95,53,50,48,32,102,114,111,109,85,-84,70,56,32,34,99,97,110,110,111,116,45,104,97,112,112,101,110,34,32,-64,32,64,32,64,32,58,56,56,57,32,64,10,65,32,83,39,32,66,32,-64,32,66,39,32,66,39,32,66,32,83,39,32,95,48,32,95,53,53,54,-32,64,32,64,32,64,32,95,56,56,53,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,-64,32,83,39,32,83,39,32,67,39,32,83,39,32,66,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,39,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,56,57,49,32,64,32,64,32,64,-32,66,32,66,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,-32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,66,-32,66,32,95,56,56,55,32,64,32,64,32,67,39,66,32,79,32,64,32,-67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,-66,32,66,32,67,39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,32,95,50,54,-32,64,32,64,32,66,32,66,32,95,49,52,54,32,95,53,53,53,32,64,-32,64,32,64,32,66,32,66,32,95,49,50,51,32,64,32,64,32,66,32,-66,32,95,51,48,49,32,64,32,64,32,67,39,32,95,54,54,32,64,32,-67,32,95,54,51,32,95,50,48,50,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,67,32,64,32,95,56,55,50,-32,64,32,102,114,111,109,85,84,70,56,32,34,83,117,98,115,117,109,112,-116,105,111,110,32,99,104,101,99,107,32,102,97,105,108,101,100,34,32,64,-32,64,32,64,32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,56,56,56,32,64,10,65,32,67,-39,32,95,48,32,95,53,53,54,32,64,32,64,32,95,51,49,54,32,95,-53,53,54,32,64,32,95,56,54,56,32,64,32,64,32,66,32,95,49,49,-32,95,53,53,54,32,64,32,64,32,95,56,56,54,32,64,32,64,32,58,-56,56,55,32,64,10,65,32,95,53,53,32,89,32,83,39,32,67,32,83,-39,32,67,39,32,80,32,64,32,64,32,67,39,32,67,39,32,67,39,32,-83,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,67,39,32,-64,32,66,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,-32,83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,56,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,-83,39,32,83,39,32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,-83,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,49,57,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,83,39,32,67,32,64,32,64,32,64,32,66,-32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,-50,48,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,83,-39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,50,49,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,-66,32,67,39,32,67,32,64,32,64,32,64,32,67,39,66,32,66,32,64,-32,67,39,32,95,49,53,51,32,64,32,95,54,48,32,95,56,53,52,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,-75,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,83,39,32,-83,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,49,51,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,67,39,66,-32,64,32,67,32,67,32,61,61,32,64,32,35,49,51,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,66,32,67,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,-32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,56,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,67,39,66,32,-64,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,83,32,80,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,-66,32,67,39,32,80,32,64,32,64,32,64,32,64,32,66,32,67,32,64,-32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,-32,83,39,32,83,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,50,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,83,39,32,83,39,32,83,39,32,83,39,32,83,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,83,39,32,66,32,64,32,64,32,64,-32,66,32,66,32,66,32,83,32,64,32,64,32,64,32,66,32,66,32,66,-32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,55,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,52,32,64,-32,64,32,64,32,64,32,66,32,85,32,64,32,90,32,75,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,-39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,50,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,85,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,83,39,-32,66,32,64,32,64,32,66,32,67,39,66,32,64,32,64,32,64,32,67,-32,67,39,32,67,39,32,64,32,64,32,95,54,48,32,95,50,55,57,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,-39,32,83,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,-83,39,32,83,39,32,66,32,64,32,64,32,66,32,67,39,66,32,64,32,-64,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-85,32,64,32,64,32,67,39,32,83,39,32,67,32,64,32,64,32,67,39,-66,32,66,32,83,32,64,32,67,32,95,54,51,32,95,50,48,50,32,64,-32,64,32,64,32,64,32,83,39,32,67,32,64,32,83,39,32,83,32,64,-32,67,32,95,54,51,32,95,50,48,50,32,64,32,64,32,64,32,83,39,-32,67,32,64,32,66,32,83,32,95,54,52,52,32,64,32,64,32,67,32,-95,53,57,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,73,32,-64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,95,50,49,57,32,64,32,66,32,95,49,53,51,32,102,114,-111,109,85,84,70,56,32,34,102,114,101,101,84,121,86,97,114,115,58,32,-34,32,64,32,64,32,64,32,95,49,53,52,32,95,55,48,51,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,66,32,-95,53,53,32,64,32,64,32,64,32,64,32,64,32,85,32,65,32,64,32,-64,32,85,32,75,32,64,32,64,32,64,32,75,32,64,32,95,53,56,32,-64,32,64,32,95,53,56,32,64,32,58,56,56,54,32,64,10,65,32,75,-32,89,32,66,32,83,32,73,32,64,32,64,32,83,39,32,66,32,64,32,-66,32,83,32,64,32,66,32,67,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,50,49,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,-67,39,32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,-95,56,56,52,32,64,32,64,32,66,32,85,32,64,32,67,39,66,32,67,-39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,66,32,85,32,-64,32,66,32,66,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,-32,64,32,64,32,66,32,66,32,80,32,64,32,64,32,95,49,53,51,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,83,39,32,67,39,66,32,64,32,66,32,67,32,67,32,61,61,32,-64,32,35,49,32,64,32,64,32,64,32,66,32,95,49,49,32,95,53,53,-54,32,64,32,64,32,80,32,95,53,56,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,85,32,64,32,64,32,83,39,32,67,32,64,32,66,-32,67,39,32,67,39,32,64,32,66,32,67,39,32,64,32,95,56,56,49,-32,64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,95,48,-32,95,53,53,54,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,-64,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,-95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,66,32,66,32,-85,32,64,32,64,32,66,32,66,32,66,32,66,32,95,49,49,32,95,53,-53,54,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,-39,66,32,64,32,66,32,66,32,80,32,64,32,64,32,95,49,53,51,32,-64,32,64,32,64,32,95,52,55,52,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,85,32,64,32,67,39,66,32,67,39,32,-95,48,32,95,53,53,54,32,64,32,64,32,64,32,66,32,85,32,64,32,-66,32,66,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,-32,64,32,66,32,67,39,66,32,80,32,64,32,64,32,95,55,54,50,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,58,56,56,53,32,64,10,65,32,83,39,32,66,32,64,32,-66,32,95,48,32,95,53,53,54,32,64,32,64,32,95,51,49,54,32,95,-53,53,54,32,64,32,95,54,32,95,56,56,51,32,64,32,95,56,53,52,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,49,49,32,95,-53,53,54,32,64,32,64,32,64,32,64,32,66,32,66,32,83,32,80,32,-64,32,64,32,64,32,66,32,67,39,32,95,56,53,53,32,64,32,64,32,-67,39,66,32,66,32,95,54,51,48,32,64,32,95,54,48,32,95,56,53,-52,32,64,32,64,32,64,32,95,54,48,32,95,52,55,53,32,64,32,64,-32,64,32,64,32,64,32,64,32,58,56,56,52,32,64,10,65,32,66,32,-95,48,32,95,53,53,54,32,64,32,95,56,48,52,32,64,32,64,32,66,-32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,83,39,-32,66,32,64,32,66,32,95,54,53,49,32,64,32,95,51,48,54,32,95,-51,48,56,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,53,51,-32,64,32,95,50,49,51,32,64,32,64,32,66,32,95,49,53,51,32,79,-32,35,51,53,32,64,32,75,32,64,32,64,32,64,32,95,49,53,52,32,-95,49,56,56,32,64,32,64,32,64,32,64,32,64,32,64,32,58,56,56,-51,32,64,10,65,32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,-66,32,83,32,95,56,56,49,32,64,32,64,32,64,32,66,32,66,32,66,-32,95,48,32,95,53,53,54,32,64,32,95,56,48,53,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,-64,32,95,56,48,53,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,83,39,32,83,39,32,95,49,48,54,32,95,53,53,-54,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,66,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,32,95,-56,55,57,32,64,32,64,32,95,55,54,50,32,64,32,64,32,66,32,66,-32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,80,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,-32,64,32,58,56,56,50,32,64,10,65,32,85,32,67,39,66,32,67,32,-67,32,61,61,32,64,32,35,49,32,64,32,64,32,95,53,50,32,64,32,-64,32,85,32,67,32,66,32,64,32,66,32,67,39,66,32,67,32,67,32,-61,61,32,64,32,35,49,32,64,32,64,32,95,53,50,32,64,32,64,32,-64,32,66,32,85,32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,-66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,-64,32,95,53,50,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,66,32,66,32,67,32,67,32,83,39,32,95,53,54,32,64,-32,95,54,54,55,32,102,114,111,109,85,84,70,56,32,34,45,62,34,32,-64,32,64,32,64,32,95,54,54,55,32,102,114,111,109,85,84,70,56,32,-34,80,114,105,109,105,116,105,118,101,115,46,45,62,34,32,64,32,64,32,-64,32,64,32,95,53,50,32,64,32,64,32,64,32,64,32,66,32,66,32,-95,52,57,32,64,32,64,32,67,32,80,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,56,56,49,-32,64,10,65,32,66,32,66,32,66,32,66,32,95,48,32,95,53,53,54,-32,64,32,95,55,50,56,32,95,56,50,51,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,67,32,64,32,64,-32,83,39,32,66,32,64,32,66,32,83,32,64,32,95,54,48,54,32,64,-32,64,32,66,32,66,32,66,32,95,56,54,52,32,64,32,64,32,64,32,-95,54,49,53,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,-32,64,32,64,32,95,56,55,57,32,64,32,64,32,64,32,58,56,56,48,-32,64,10,65,32,83,39,32,66,32,64,32,66,32,67,39,66,32,64,32,-66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,95,56,-53,54,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,-66,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,-64,32,95,56,53,54,32,64,32,64,32,64,32,95,56,55,56,32,64,32,-64,32,58,56,55,57,32,64,10,65,32,66,32,66,32,89,32,64,32,64,-32,83,39,32,83,39,32,67,39,32,83,32,64,32,64,32,64,32,66,32,-66,32,66,32,67,39,32,83,39,32,64,32,66,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,83,39,32,83,39,32,67,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,-32,66,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,49,57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,49,57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,83,32,67,39,32,-83,39,32,64,32,66,32,64,32,66,32,83,39,32,67,39,66,32,64,32,-67,32,67,32,61,61,32,64,32,35,49,57,32,64,32,64,32,64,32,64,-32,66,32,66,32,85,32,64,32,64,32,67,39,32,67,39,32,67,32,64,-32,64,32,66,32,67,32,64,32,95,52,48,32,95,55,50,32,64,32,64,-32,64,32,95,49,49,32,95,53,53,54,32,64,32,95,49,48,55,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,-32,64,32,64,32,95,56,55,52,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,83,39,32,67,39,66,32,64,32,67,32,67,-32,61,61,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,67,39,66,32,66,-39,32,66,32,64,32,64,32,64,32,66,32,67,39,66,32,66,39,32,66,-32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,-32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,32,67,39,-66,32,64,32,64,32,66,32,66,32,95,49,48,54,32,95,53,53,54,32,-64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,-67,39,66,32,66,32,64,32,83,39,32,66,32,64,32,66,32,67,39,66,-32,64,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,64,-32,64,32,66,32,66,32,85,32,64,32,64,32,67,39,32,67,39,32,67,-32,64,32,64,32,67,39,32,67,32,64,32,95,52,48,32,95,50,48,50,-32,64,32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,95,49,-48,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,83,32,73,32,64,32,64,32,64,32,64,32,83,-39,32,83,39,32,83,39,32,67,39,32,67,39,66,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,67,32,67,32,61,61,32,64,32,-35,49,57,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,-55,52,48,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,83,39,-32,83,39,32,83,39,32,67,32,64,32,64,32,64,32,67,39,32,67,39,-32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,85,32,64,32,64,32,64,32,95,56,55,55,32,64,32,-64,32,73,32,64,32,64,32,73,32,64,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,66,32,66,39,32,64,32,66,32,66,32,95,50,54,32,-64,32,64,32,95,56,55,50,32,64,32,64,32,64,32,66,32,66,32,95,-49,53,51,32,102,114,111,109,85,84,70,56,32,34,99,97,110,110,111,116,-32,117,110,105,102,121,32,34,32,64,32,64,32,64,32,64,32,67,39,66,-32,66,32,95,49,53,51,32,64,32,95,54,52,51,32,64,32,64,32,66,-32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,32,97,110,100,-32,34,32,64,32,64,32,64,32,95,54,52,51,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,-64,32,64,32,66,32,66,32,67,32,64,32,64,32,95,56,55,52,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,56,55,56,32,64,10,65,32,-83,39,32,66,32,64,32,66,39,32,66,32,95,48,32,95,53,53,54,32,-64,32,64,32,95,56,53,50,32,64,32,64,32,64,32,66,32,66,32,66,-32,67,32,95,56,54,48,32,64,32,64,32,64,32,64,32,95,56,55,54,-32,64,32,64,32,58,56,55,55,32,64,10,65,32,66,32,66,32,95,52,-55,52,32,64,32,64,32,66,32,95,52,55,52,32,64,32,66,32,95,52,-55,53,32,64,32,67,32,95,54,53,49,32,64,32,95,56,55,53,32,64,-32,64,32,64,32,64,32,58,56,55,54,32,64,10,65,32,102,114,111,109,-85,84,70,56,32,34,80,114,105,109,105,116,105,118,101,115,46,126,34,32,-64,32,58,56,55,53,32,64,10,65,32,66,32,66,32,83,39,32,66,32,-64,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,95,56,54,53,-32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,67,39,32,83,39,-32,80,32,64,32,64,32,64,32,64,32,95,56,55,51,32,64,32,66,32,-66,32,67,32,64,32,64,32,95,56,55,57,32,64,32,64,32,64,32,58,-56,55,52,32,64,10,65,32,66,32,66,32,66,32,83,32,73,32,64,32,-64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,83,39,32,67,39,-66,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,-67,32,61,61,32,64,32,35,49,57,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,83,39,32,95,48,32,95,53,53,54,32,-64,32,64,32,66,32,95,56,55,48,32,64,32,67,32,79,32,64,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,-83,39,32,67,32,64,32,64,32,83,39,32,66,32,64,32,66,32,67,32,-64,32,95,54,50,32,95,52,48,32,95,55,50,32,64,32,64,32,64,32,-64,32,95,56,54,55,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-66,32,64,32,66,32,66,39,32,64,32,66,32,66,32,95,50,54,32,64,-32,64,32,95,56,55,50,32,64,32,64,32,64,32,66,32,66,32,95,49,-53,51,32,102,114,111,109,85,84,70,56,32,34,99,121,99,108,105,99,32,-34,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,53,51,-32,64,32,66,32,95,54,52,51,32,64,32,95,56,48,48,32,64,32,64,-32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,-32,61,32,34,32,64,32,64,32,64,32,95,54,52,51,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-85,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,-32,95,48,32,95,53,53,54,32,64,32,64,32,95,56,54,53,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,67,39,32,80,32,-64,32,64,32,95,56,54,55,32,64,32,64,32,64,32,67,39,32,67,39,-66,32,64,32,95,56,55,57,32,64,32,95,56,48,48,32,64,32,64,32,-64,32,64,32,64,32,64,32,58,56,55,51,32,64,10,65,32,66,32,66,-32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,55,-52,48,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,-64,32,66,32,66,39,32,64,32,66,32,66,32,95,50,54,32,64,32,64,-32,95,55,56,57,32,64,32,64,32,64,32,66,32,67,39,32,95,49,53,-51,32,64,32,95,56,55,49,32,64,32,64,32,95,49,53,51,32,102,114,-111,109,85,84,70,56,32,34,32,101,114,114,111,114,58,32,34,32,64,32,-64,32,64,32,64,32,64,32,58,56,55,50,32,64,10,65,32,67,32,67,-32,80,32,102,114,111,109,85,84,70,56,32,34,116,121,112,101,34,32,64,-32,64,32,102,114,111,109,85,84,70,56,32,34,107,105,110,100,34,32,64,-32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,115,111,114,116,34,-32,64,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,114,101,97,-108,109,34,32,64,32,64,32,58,56,55,49,32,64,10,65,32,67,39,32,-95,48,32,95,53,53,54,32,64,32,64,32,95,51,49,54,32,95,53,53,-54,32,64,32,95,56,54,56,32,64,32,64,32,66,32,95,49,49,32,95,-53,53,54,32,64,32,64,32,95,56,54,57,32,64,32,64,32,58,56,55,-48,32,64,10,65,32,95,53,53,32,89,32,67,39,32,67,32,64,32,66,-32,67,39,32,67,39,32,64,32,66,32,64,32,64,32,83,39,32,83,39,-32,83,39,32,83,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,83,39,32,83,39,32,83,32,64,32,64,32,-64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,49,57,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,-39,32,66,32,64,32,64,32,66,32,66,32,83,32,64,32,64,32,66,32,-66,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,49,32,-64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,-90,32,64,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,57,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,83,39,32,67,32,64,-32,83,39,32,83,32,64,32,67,32,95,54,51,32,95,55,50,32,64,32,-64,32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,73,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,52,32,64,32,64,32,64,32,64,-32,66,32,85,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,83,39,32,67,39,32,67,32,64,32,64,32,64,32,-66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,49,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,-67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,83,39,-32,66,32,64,32,67,39,66,32,64,32,67,32,64,32,64,32,64,32,64,-32,64,32,66,32,85,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,95,53,53,48,32,95,51,48,53,32,64,32,64,32,64,32,64,32,95,-53,56,32,64,32,58,56,54,57,32,64,10,65,32,67,32,83,32,66,32,-64,32,83,39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,49,51,32,64,32,64,32,-64,32,64,32,67,39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,-83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,57,32,64,32,-64,32,64,32,64,32,66,32,66,32,83,32,67,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,50,49,32,64,32,64,32,85,32,67,39,66,32,-66,32,95,49,56,32,95,53,53,52,32,64,32,64,32,95,56,49,51,32,-64,32,64,32,95,56,54,56,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,49,57,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,-32,83,39,32,95,48,32,95,53,53,54,32,64,32,64,32,95,56,54,53,-32,64,32,64,32,67,39,66,32,66,32,80,32,64,32,95,49,49,32,95,-53,53,54,32,64,32,64,32,64,32,66,32,67,39,32,95,48,32,95,53,-53,54,32,64,32,64,32,95,56,54,56,32,64,32,64,32,67,39,32,83,-39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,95,56,-54,55,32,64,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,-32,64,32,67,32,67,32,61,61,32,64,32,35,49,51,32,64,32,64,32,-64,32,85,32,66,32,67,39,32,95,49,56,32,95,53,53,52,32,64,32,-64,32,95,49,51,49,32,95,56,49,55,32,64,32,64,32,64,32,95,56,-54,56,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,-32,67,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,49,32,64,32,64,32,64,32,64,32,67,39,32,83,-39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,32,66,32,83,-39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,52,32,-64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,-90,32,64,32,66,32,66,32,85,32,64,32,64,32,83,39,32,83,39,32,-83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,53,32,64,32,64,32,64,32,64,32,66,32,67,39,32,-67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,53,32,64,32,-64,32,64,32,64,32,66,32,85,32,64,32,90,32,95,49,49,32,95,53,-53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,-67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,-64,32,64,32,64,32,66,32,85,32,64,32,90,32,95,49,49,32,95,53,-53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,-32,64,32,35,49,32,64,32,64,32,64,32,85,32,67,39,66,32,66,32,-95,48,32,95,53,53,54,32,64,32,64,32,95,56,54,56,32,64,32,64,-32,67,39,66,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,95,-56,54,56,32,64,32,64,32,66,32,66,32,95,50,54,32,95,49,49,32,-95,53,53,54,32,64,32,64,32,64,32,64,32,95,52,55,52,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,-90,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,95,53,53,48,32,95,51,48,53,32,64,32,64,32,58,-56,54,56,32,64,10,65,32,66,32,66,32,95,50,54,32,95,55,51,48,-32,64,32,64,32,64,32,66,32,66,32,83,32,95,55,51,49,32,95,56,-54,51,32,64,32,95,49,50,56,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,66,32,64,32,95,54,49,53,32,64,32,95,49,50,52,32,95,-56,54,54,32,64,32,95,49,50,56,32,64,32,64,32,64,32,64,32,58,-56,54,55,32,64,10,65,32,95,49,50,53,32,75,32,95,56,50,51,32,-64,32,64,32,58,56,54,54,32,64,10,65,32,66,32,95,55,50,56,32,-64,32,67,39,32,95,54,32,64,32,95,54,48,54,32,64,32,95,56,50,-51,32,64,32,64,32,58,56,54,53,32,64,10,65,32,66,32,95,50,54,-32,95,55,51,48,32,64,32,64,32,67,32,95,55,51,49,32,95,56,54,-51,32,64,32,95,49,50,56,32,64,32,64,32,64,32,58,56,54,52,32,-64,10,65,32,95,55,51,50,32,75,32,85,32,66,32,66,32,66,32,66,-32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,95,55,51,51,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,56,54,51,32,64,10,65,-32,75,32,89,32,66,32,83,32,73,32,64,32,64,32,66,32,66,32,66,-32,83,32,73,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,83,-39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,67,32,67,32,61,61,32,64,32,35,50,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,67,39,66,32,66,32,67,32,-64,32,66,32,67,32,95,56,52,56,32,64,32,64,32,95,49,49,32,95,-53,53,54,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,66,32,83,39,32,66,32,64,32,66,39,32,66,32,95,48,-32,95,53,53,54,32,64,32,64,32,66,32,95,56,53,50,32,64,32,95,-51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,67,39,66,32,66,32,83,39,32,95,49,48,54,32,95,-53,53,54,32,64,32,64,32,64,32,67,32,95,56,54,48,32,64,32,64,-32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,32,64,32,64,32,-66,32,67,39,32,80,32,64,32,64,32,67,39,66,32,95,52,55,52,32,-64,32,95,52,55,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,67,39,32,67,39,-32,67,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,-95,56,54,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,-56,54,50,32,64,10,65,32,83,39,32,67,32,64,32,66,32,83,39,32,-83,39,32,64,32,95,51,48,49,32,64,32,64,32,66,32,83,39,32,66,-32,64,32,66,32,95,48,32,95,53,53,54,32,64,32,64,32,95,51,49,-54,32,95,53,53,54,32,64,32,95,56,32,95,56,48,53,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,49,49,32,95,-53,53,54,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,-32,66,39,32,80,32,64,32,64,32,64,32,66,32,67,39,32,95,56,53,-53,32,64,32,64,32,66,32,95,54,51,48,32,64,32,95,54,48,32,95,-56,53,52,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,80,-32,64,32,64,32,58,56,54,49,32,64,10,65,32,66,32,67,39,32,95,-48,32,95,53,53,54,32,64,32,64,32,95,56,53,54,32,95,51,48,53,-32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,55,51,48,32,-64,32,64,32,64,32,66,32,66,32,83,32,95,55,51,49,32,95,56,53,-55,32,64,32,95,49,50,56,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,32,66,32,95,53,57,32,64,32,64,32,80,32,-64,32,64,32,95,49,50,52,32,95,56,53,57,32,64,32,95,49,50,56,-32,64,32,64,32,64,32,64,32,64,32,58,56,54,48,32,64,10,65,32,-95,49,50,53,32,75,32,95,56,53,56,32,64,32,64,32,58,56,53,57,-32,64,10,65,32,85,32,75,51,32,75,52,32,75,52,32,75,32,64,32,-64,32,64,32,64,32,58,56,53,56,32,64,10,65,32,95,55,51,50,32,-75,32,85,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,95,55,51,51,32,64,32,64,-32,64,32,64,32,64,32,58,56,53,55,32,64,10,65,32,66,32,89,32,-64,32,67,39,32,67,39,32,89,32,64,32,64,32,83,39,32,67,39,32,-67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,83,32,66,32,64,32,64,32,64,32,64,32,64,32,66,32,-83,39,32,66,32,64,32,66,32,83,39,32,83,39,32,83,39,32,83,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,49,51,32,64,32,64,32,64,32,-64,32,64,32,64,32,83,39,32,67,39,32,67,39,32,83,39,32,83,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,49,57,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,83,39,32,66,32,64,32,64,32,66,32,-66,32,83,39,32,83,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,49,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,95,-51,48,49,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,56,32,-95,53,53,52,32,64,32,64,32,95,56,49,51,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,49,57,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,90,32,64,32,-66,32,66,32,95,50,54,32,95,49,49,32,95,53,53,54,32,64,32,64,-32,64,32,64,32,67,32,95,56,51,50,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,-32,67,32,61,61,32,64,32,35,49,51,32,64,32,64,32,64,32,64,32,-66,32,85,32,64,32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,83,39,32,67,39,32,83,39,32,83,39,32,67,39,32,67,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,-32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,32,66,-32,83,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,-52,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,-66,32,90,32,64,32,66,32,66,32,85,32,64,32,64,32,83,39,32,83,-39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,53,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,53,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,90,32,95,49,49,32,-95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,90,32,95,49,49,32,-95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,-64,32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,67,39,32,95,-48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,67,39,66,-32,67,39,32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,95,48,-32,95,53,53,54,32,64,32,95,55,50,56,32,95,56,53,51,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,67,-39,32,83,39,32,67,32,64,32,64,32,64,32,66,32,66,32,67,39,32,-67,32,64,32,95,50,48,55,32,64,32,64,32,64,32,66,32,66,32,95,-50,54,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,-67,32,95,56,51,50,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,83,39,32,-66,32,64,32,66,39,32,66,39,32,66,32,67,39,66,32,64,32,66,32,-67,32,67,32,61,61,32,64,32,35,50,49,32,64,32,64,32,64,32,95,-53,53,48,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,85,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,83,39,-32,67,39,32,83,39,32,67,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,66,32,66,32,67,39,32,67,-39,32,67,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,83,39,-32,83,39,32,67,32,64,32,64,32,64,32,64,32,66,32,83,39,32,66,-32,64,32,66,39,32,66,32,83,32,64,32,66,32,67,32,95,56,57,32,-95,56,48,32,64,32,64,32,64,32,95,51,50,49,32,64,32,64,32,64,-32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,66,39,32,95,50,-54,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,-32,66,32,66,32,95,56,51,50,32,64,32,64,32,67,32,95,56,53,53,-32,64,32,64,32,64,32,64,32,67,32,95,52,54,52,32,64,32,64,32,-64,32,64,32,64,32,67,39,66,32,66,39,32,95,50,54,32,64,32,64,-32,67,32,95,56,53,53,32,64,32,64,32,64,32,64,32,64,32,64,32,-67,39,32,67,39,32,95,50,54,32,64,32,64,32,67,39,66,32,95,55,-56,57,32,64,32,95,51,48,54,32,95,51,48,56,32,64,32,64,32,64,-32,102,114,111,109,85,84,70,56,32,34,98,97,100,32,115,121,110,111,110,-121,109,32,117,115,101,34,32,64,32,64,32,64,32,64,32,64,32,95,51,-50,49,32,64,32,64,32,67,39,32,95,54,51,48,32,64,32,95,54,48,-32,95,56,53,52,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,95,53,53,48,32,64,32,64,-32,95,53,56,32,64,32,64,32,58,56,53,54,32,64,10,65,32,83,32,-85,32,95,49,54,32,64,32,64,32,90,32,90,32,66,32,89,32,64,32,-67,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,32,66,32,-64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,83,39,32,83,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,49,51,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,83,39,32,83,32,-64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,49,57,32,64,32,64,32,64,32,64,32,64,32,-67,39,66,32,66,39,32,66,32,83,32,64,32,66,32,67,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,50,49,32,64,32,64,32,64,32,66,-32,85,32,64,32,66,32,83,39,32,66,32,64,32,66,32,95,50,54,32,-64,32,95,56,49,51,32,64,32,64,32,64,32,66,32,66,32,95,56,53,-53,32,64,32,64,32,67,39,32,89,32,64,32,66,32,66,32,80,32,75,-32,64,32,64,32,64,32,66,32,66,32,83,32,66,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,67,-39,32,83,39,32,66,32,64,32,64,32,66,32,66,32,83,39,32,67,32,-64,32,64,32,64,32,66,39,32,66,32,67,39,32,95,49,50,51,32,64,-32,64,32,66,32,67,32,95,54,51,32,95,50,48,50,32,64,32,64,32,-64,32,95,54,48,32,95,56,53,52,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,39,66,32,95,53,57,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,57,-32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,75,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,-67,32,67,32,61,61,32,64,32,35,49,51,32,64,32,64,32,64,32,64,-32,66,32,85,32,64,32,66,32,95,56,49,55,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,67,39,32,83,39,32,67,39,32,67,32,64,-32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,66,32,-67,39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,52,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,90,32,-75,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,-39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,-32,64,32,64,32,66,32,85,32,64,32,83,39,32,67,39,66,32,64,32,-66,32,95,52,55,52,32,64,32,64,32,73,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,67,-39,66,32,66,32,95,50,54,32,64,32,95,50,55,53,32,64,32,64,32,-64,32,67,32,95,54,57,55,32,95,50,48,50,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,50,49,57,32,102,114,111,109,85,-84,70,56,32,34,115,117,98,115,116,32,117,110,105,109,112,108,101,109,101,-110,116,101,100,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-58,56,53,53,32,64,10,65,32,85,32,75,32,64,32,58,56,53,52,32,-64,10,65,32,85,32,75,52,32,90,32,90,32,90,32,90,32,90,32,90,-32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,58,56,53,51,32,64,10,65,32,67,32,95,56,53,48,32,64,-32,95,56,53,49,32,64,32,58,56,53,50,32,64,10,65,32,102,114,111,-109,85,84,70,56,32,34,100,105,99,116,34,32,64,32,58,56,53,49,32,-64,10,65,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,56,-48,52,32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,54,32,95,-49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,39,32,66,32,95,50,54,32,64,32,95,54,53,49,32,64,32,-64,32,64,32,67,39,66,32,95,49,53,51,32,64,32,66,32,95,49,53,-51,32,95,56,52,57,32,64,32,64,32,95,49,53,52,32,95,49,56,56,-32,64,32,64,32,64,32,64,32,64,32,64,32,58,56,53,48,32,64,10,-65,32,79,32,35,51,54,32,64,32,75,32,64,32,58,56,52,57,32,64,-10,65,32,85,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,49,-32,64,32,64,32,95,53,50,32,64,32,64,32,85,32,67,32,66,32,64,-32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,49,32,64,-32,64,32,95,53,50,32,64,32,64,32,64,32,66,32,85,32,64,32,66,-32,67,32,66,32,64,32,64,32,66,32,66,32,67,39,66,32,67,32,67,-32,61,61,32,64,32,35,48,32,64,32,64,32,95,53,50,32,64,32,64,-32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,67,-32,67,32,83,39,32,95,53,54,32,64,32,95,54,54,55,32,102,114,111,-109,85,84,70,56,32,34,61,62,34,32,64,32,64,32,64,32,95,54,54,-55,32,102,114,111,109,85,84,70,56,32,34,80,114,105,109,105,116,105,118,-101,115,46,61,62,34,32,64,32,64,32,64,32,64,32,95,53,50,32,64,-32,64,32,64,32,64,32,66,32,66,32,95,52,57,32,64,32,64,32,67,-32,80,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,58,56,52,56,32,64,10,65,32,95,52,55,53,-32,95,52,56,49,32,95,53,49,57,32,64,32,102,114,111,109,85,84,70,-56,32,34,80,114,105,109,105,116,105,118,101,115,46,84,121,112,101,34,32,-64,32,64,32,64,32,58,56,52,55,32,64,10,65,32,83,39,32,66,32,-64,32,66,32,95,54,32,64,32,67,32,95,55,57,51,32,64,32,67,32,-95,52,48,32,95,55,57,52,32,64,32,64,32,95,55,57,50,32,64,32,-64,32,64,32,64,32,66,32,66,32,95,54,32,95,55,56,54,32,64,32,-64,32,64,32,95,56,52,53,32,64,32,64,32,58,56,52,54,32,64,10,-65,32,83,39,32,66,32,64,32,66,39,32,66,32,95,50,54,32,64,32,-67,32,95,55,57,51,32,64,32,67,32,95,52,48,32,95,55,57,52,32,-64,32,64,32,95,55,55,51,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,66,32,64,32,95,49,49,48,48,32,64,32,95,56,52,52,-32,64,32,64,32,58,56,52,53,32,64,10,65,32,67,32,83,32,66,32,-64,32,83,39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,55,32,64,32,64,32,64,-32,64,32,66,32,83,39,32,83,32,64,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,49,51,32,64,32,64,32,64,32,66,32,-83,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,49,32,-64,32,64,32,85,32,67,39,66,32,95,56,49,51,32,64,32,95,56,52,-52,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,49,51,32,64,32,64,32,64,32,-85,32,66,32,95,56,49,55,32,64,32,95,56,52,52,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,67,32,64,32,-64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,56,32,64,32,64,32,64,32,64,32,66,32,83,39,32,67,39,66,32,-64,32,67,32,67,32,61,61,32,64,32,35,56,32,64,32,64,32,64,32,-64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,85,32,64,32,-64,32,66,32,83,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,-64,32,35,48,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,-32,64,32,66,32,83,32,80,32,64,32,64,32,67,39,66,32,66,32,67,-39,32,80,32,64,32,64,32,67,39,66,32,66,32,95,55,53,57,32,64,-32,66,32,95,56,52,49,32,64,32,95,51,48,54,32,95,54,54,51,32,-64,32,64,32,64,32,64,32,95,56,52,52,32,64,32,64,32,64,32,90,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,85,32,64,32,67,39,32,83,39,32,95,56,52,50,32,-64,32,64,32,67,39,66,32,66,32,95,54,53,50,32,64,32,95,51,48,-54,32,95,54,54,51,32,64,32,64,32,64,32,95,51,50,49,32,64,32,-64,32,95,54,48,32,95,56,52,52,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,67,39,32,83,32,64,32,64,32,66,32,66,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,32,64,32,-64,32,64,32,64,32,67,39,32,83,39,32,83,32,64,32,64,32,66,32,-66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,52,32,64,-32,64,32,64,32,64,32,66,32,83,39,32,67,39,66,32,64,32,67,32,-67,32,61,61,32,64,32,35,52,32,64,32,64,32,64,32,64,32,66,32,-66,32,85,32,64,32,64,32,66,32,90,32,64,32,66,32,66,32,85,32,-64,32,64,32,83,39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,-83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,53,32,64,32,64,-32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,-61,61,32,64,32,35,53,32,64,32,64,32,64,32,64,32,66,32,85,32,-64,32,75,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,-32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,32,64,-32,64,32,66,32,85,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,67,32,-67,32,61,61,32,64,32,35,50,32,64,32,64,32,64,32,85,32,67,39,-66,32,66,32,95,56,52,51,32,64,32,95,56,52,52,32,64,32,64,32,-89,32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,66,32,64,32,-64,32,66,32,67,39,32,67,39,32,95,53,57,32,64,32,64,32,67,39,-66,32,80,32,64,32,95,56,52,52,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,32,67,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,-85,32,67,39,66,32,66,32,95,52,55,52,32,64,32,95,56,52,52,32,-64,32,64,32,95,56,52,52,32,64,32,64,32,64,32,64,32,64,32,66,-32,85,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,95,-53,53,48,32,95,51,48,53,32,64,32,64,32,58,56,52,52,32,64,10,-65,32,66,32,66,32,80,32,35,50,32,64,32,64,32,64,32,80,32,64,-32,58,56,52,51,32,64,10,65,32,66,32,95,56,51,50,32,64,32,95,-55,54,48,32,64,32,58,56,52,50,32,64,10,65,32,95,54,32,95,55,-54,48,32,64,32,95,56,52,48,32,64,32,58,56,52,49,32,64,10,65,-32,67,39,32,95,50,54,32,64,32,95,54,53,49,32,64,32,95,49,53,-51,32,95,53,55,49,32,64,32,102,114,111,109,85,84,70,56,32,34,91,-93,34,32,64,32,64,32,64,32,58,56,52,48,32,64,10,65,32,67,39,-32,67,32,64,32,67,39,32,67,32,64,32,67,39,32,67,39,32,83,39,-32,64,32,64,32,67,32,66,32,64,32,66,32,66,32,95,52,55,52,32,-64,32,64,32,67,39,32,95,52,55,52,32,64,32,83,32,83,39,32,95,-53,53,32,64,32,66,32,95,54,32,95,52,55,52,32,64,32,64,32,66,-32,95,52,55,52,32,64,32,66,32,95,50,54,32,95,52,55,53,32,64,-32,64,32,67,39,32,95,54,53,49,32,64,32,95,51,48,54,32,95,54,-53,52,32,95,51,48,56,32,64,32,64,32,64,32,102,114,111,109,85,84,-70,56,32,34,99,111,109,112,111,115,101,83,101,116,34,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,95,56,51,55,32,64,32,95,52,54,-49,32,64,32,64,32,64,32,66,32,95,50,54,32,95,54,48,32,95,56,-51,56,32,64,32,64,32,64,32,95,52,54,54,32,64,32,64,32,64,32,-64,32,64,32,64,32,75,32,64,32,64,32,73,32,64,32,64,32,95,53,-53,48,32,95,51,48,53,32,64,32,64,32,58,56,51,57,32,64,10,65,-32,83,39,32,95,52,55,52,32,64,32,66,32,95,52,55,53,32,64,32,-67,39,32,95,54,53,49,32,64,32,95,51,48,54,32,95,51,48,56,32,-64,32,64,32,102,114,111,109,85,84,70,56,32,34,104,97,115,70,105,101,-108,100,34,32,64,32,64,32,64,32,64,32,95,56,49,56,32,64,32,58,-56,51,56,32,64,10,65,32,83,39,32,95,52,55,52,32,64,32,66,32,-95,52,55,53,32,64,32,67,39,32,95,54,53,49,32,64,32,95,51,48,-54,32,95,51,48,56,32,64,32,64,32,102,114,111,109,85,84,70,56,32,-34,115,101,116,70,105,101,108,100,34,32,64,32,64,32,64,32,64,32,95,-56,49,56,32,64,32,58,56,51,55,32,64,10,65,32,66,32,95,50,54,-32,95,52,55,53,32,64,32,64,32,67,39,32,95,54,53,49,32,64,32,-95,51,48,54,32,95,51,48,56,32,64,32,64,32,102,114,111,109,85,84,-70,56,32,34,117,110,100,101,102,105,110,101,100,34,32,64,32,64,32,64,-32,58,56,51,54,32,64,10,65,32,66,32,83,39,32,66,32,64,32,66,-32,95,48,32,95,53,53,54,32,64,32,64,32,95,56,50,54,32,95,51,-48,53,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,-32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,66,-32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-39,66,32,67,32,67,32,61,61,32,64,32,35,50,48,32,64,32,64,32,-95,49,49,32,95,53,53,54,32,64,32,95,53,50,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,67,39,32,67,39,66,32,64,32,66,32,66,32,67,32,64,32,64,32,-67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,32,66,32,67,32,64,32,64,32,66,32,66,32,-67,39,32,67,39,32,64,32,66,39,32,66,32,95,49,48,54,32,95,53,-53,54,32,64,32,64,32,67,32,67,39,32,83,32,64,32,95,54,54,32,-95,54,32,67,32,95,49,52,57,32,95,56,48,32,64,32,64,32,95,57,-48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,32,64,32,64,-32,64,32,64,32,95,54,32,95,51,50,49,32,64,32,95,50,52,57,32,-64,32,64,32,64,32,64,32,66,32,90,32,64,32,66,32,85,32,64,32,-66,32,90,32,64,32,67,32,80,32,64,32,90,32,67,39,32,95,55,56,-57,32,95,51,48,53,32,64,32,64,32,95,51,48,54,32,95,51,48,56,-32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,78,101,115,116,101,-100,32,102,105,101,108,100,115,32,110,111,116,32,97,108,108,111,119,101,100,-34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-95,49,49,32,95,53,53,54,32,64,32,95,49,48,55,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,-95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,66,32,66,32,-83,32,85,32,95,49,49,32,95,53,53,54,32,64,32,95,49,48,55,32,-64,32,64,32,64,32,66,32,90,32,64,32,66,32,67,39,32,95,50,54,-32,64,32,66,32,95,55,56,57,32,95,51,48,53,32,64,32,64,32,95,-51,48,54,32,95,51,48,56,32,64,32,64,32,64,32,64,32,66,32,95,-49,53,51,32,102,114,111,109,85,84,70,56,32,34,101,120,116,114,97,32,-102,105,101,108,100,40,115,41,32,34,32,64,32,64,32,64,32,66,32,95,-50,57,55,32,64,32,95,54,48,32,95,50,49,51,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,95,56,51,49,32,95,50,-48,50,32,64,32,64,32,95,54,48,32,95,50,52,57,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,50,54,32,-95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,95,50,54,32,95,52,57,32,64,32,64,-32,64,32,64,32,64,32,66,32,67,39,66,32,66,39,32,95,56,51,50,-32,64,32,64,32,64,32,66,32,66,32,95,54,48,32,64,32,64,32,67,-39,66,32,66,32,83,39,32,95,50,54,32,64,32,64,32,66,32,95,50,-55,53,32,64,32,64,32,64,32,67,32,95,54,57,55,32,95,50,48,50,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,95,56,50,55,32,64,32,64,32,95,54,48,32,95,56,51,51,-32,95,52,56,48,32,64,32,64,32,64,32,64,32,64,32,95,54,48,32,-95,56,51,52,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,58,56,51,53,32,64,10,65,32,67,32,67,32,67,39,32,83,39,32,-64,32,85,32,80,32,64,32,64,32,75,32,64,32,64,32,73,32,64,32,-64,32,95,53,53,48,32,95,51,48,53,32,64,32,64,32,58,56,51,52,-32,64,10,65,32,66,32,85,32,64,32,66,32,80,32,64,32,64,32,58,-56,51,51,32,64,10,65,32,95,52,51,56,32,95,52,55,52,32,64,32,-58,56,51,50,32,64,10,65,32,66,32,95,56,51,48,32,64,32,95,52,-48,32,64,32,58,56,51,49,32,64,10,65,32,66,32,95,52,51,56,32,-64,32,66,32,95,49,51,49,32,64,32,95,56,50,57,32,64,32,64,32,-58,56,51,48,32,64,10,65,32,66,32,66,32,89,32,64,32,64,32,66,-32,66,32,66,32,80,32,95,53,56,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,66,32,83,39,32,83,39,32,64,32,64,32,64,32,67,-39,66,32,95,53,57,32,64,32,64,32,64,32,73,32,64,32,64,32,64,-32,58,56,50,57,32,64,10,65,32,66,32,67,32,67,32,83,32,73,32,-64,32,90,32,90,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,-32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,67,39,32,79,-32,64,32,83,39,32,95,50,54,32,64,32,95,56,50,49,32,64,32,66,-32,95,52,55,53,32,64,32,95,52,54,49,32,64,32,64,32,64,32,75,-32,64,32,64,32,64,32,64,32,64,32,83,39,32,95,48,32,95,53,53,-54,32,64,32,64,32,95,56,50,54,32,95,51,48,53,32,64,32,64,32,-66,32,85,32,64,32,66,32,90,32,64,32,66,32,85,32,64,32,67,39,-32,67,39,66,32,64,32,66,32,67,32,67,32,61,61,32,64,32,35,50,-48,32,64,32,64,32,64,32,67,39,32,95,55,56,57,32,95,51,48,53,-32,64,32,64,32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,102,-114,111,109,85,84,70,56,32,34,114,101,99,111,114,100,32,119,105,108,100,-99,97,114,100,32,110,111,116,32,97,108,108,111,119,101,100,34,32,64,32,-64,32,64,32,64,32,85,32,66,32,95,49,49,32,95,53,53,54,32,64,-32,64,32,66,32,89,32,66,32,80,32,75,32,64,32,64,32,67,39,66,-32,66,32,95,53,57,32,64,32,83,39,32,95,56,50,49,32,64,32,67,-32,79,32,64,32,75,32,64,32,64,32,95,52,55,53,32,64,32,64,32,-64,32,64,32,64,32,64,32,95,56,50,55,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,56,50,56,32,64,10,65,32,-80,32,75,32,65,32,64,32,64,32,65,32,64,32,58,56,50,55,32,64,-10,65,32,83,32,95,56,50,53,32,64,32,95,49,49,48,48,32,64,32,-58,56,50,54,32,64,10,65,32,66,32,66,32,66,32,95,48,32,95,53,-53,54,32,64,32,95,56,48,52,32,64,32,64,32,64,32,64,32,66,32,-67,39,32,67,39,32,83,39,32,95,48,32,95,53,53,54,32,64,32,64,-32,64,32,64,32,67,32,67,39,32,64,32,95,56,50,50,32,64,32,64,-32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,48,32,95,-53,53,54,32,64,32,64,32,64,32,95,56,50,52,32,64,32,64,32,66,-32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,80,32,-64,32,64,32,64,32,64,32,58,56,50,53,32,64,10,65,32,75,32,66,-32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,56,50,51,-32,64,32,64,32,64,32,67,39,32,67,32,64,32,83,39,32,67,32,64,-32,95,54,48,54,32,64,32,66,32,95,49,49,32,95,53,53,54,32,64,-32,64,32,95,56,48,48,32,64,32,64,32,64,32,95,49,49,32,95,53,-53,54,32,64,32,64,32,64,32,64,32,58,56,50,52,32,64,10,65,32,-85,32,75,51,32,75,52,32,90,32,90,32,90,32,90,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,56,50,51,32,64,10,65,-32,66,32,90,32,64,32,85,32,64,32,58,56,50,50,32,64,10,65,32,-66,32,66,32,90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,-80,32,64,32,64,32,58,56,50,49,32,64,10,65,32,66,32,95,54,32,-95,52,55,53,32,64,32,64,32,95,54,53,49,32,64,32,58,56,50,48,-32,64,10,65,32,83,39,32,95,52,55,52,32,64,32,66,32,95,52,55,-53,32,64,32,67,39,32,95,54,53,49,32,64,32,95,51,48,54,32,95,-51,48,56,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,103,101,-116,70,105,101,108,100,34,32,64,32,64,32,64,32,64,32,95,56,49,56,-32,64,32,58,56,49,57,32,64,10,65,32,83,32,67,39,32,83,39,32,-83,32,95,56,49,55,32,64,32,64,32,64,32,66,32,66,32,67,32,95,-52,55,52,32,64,32,64,32,64,32,66,32,67,32,95,54,54,52,32,64,-32,64,32,66,32,95,55,49,54,32,64,32,95,50,49,51,32,64,32,64,-32,64,32,64,32,66,32,95,50,54,32,95,52,55,53,32,64,32,64,32,-67,32,95,54,53,49,32,64,32,102,114,111,109,85,84,70,56,32,34,80,-114,111,120,121,34,32,64,32,64,32,64,32,64,32,64,32,95,51,48,54,-32,95,51,48,56,32,64,32,64,32,58,56,49,56,32,64,10,65,32,66,-32,66,32,80,32,35,49,51,32,64,32,64,32,64,32,80,32,64,32,58,-56,49,55,32,64,10,65,32,66,32,66,32,95,50,54,32,95,56,49,52,-32,64,32,64,32,64,32,95,56,49,53,32,64,32,58,56,49,54,32,64,-10,65,32,67,39,32,67,39,32,79,32,64,32,64,32,95,53,55,57,32,-64,32,75,32,64,32,58,56,49,53,32,64,10,65,32,66,32,80,32,35,-51,32,64,32,64,32,85,32,64,32,58,56,49,52,32,64,10,65,32,66,-32,66,32,80,32,35,50,49,32,64,32,64,32,64,32,80,32,64,32,58,-56,49,51,32,64,10,65,32,83,39,32,66,32,64,32,66,39,32,66,32,-95,50,54,32,64,32,67,32,95,55,57,51,32,64,32,67,32,95,50,48,-53,32,95,55,57,57,32,64,32,64,32,95,55,55,51,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,-64,32,95,55,50,56,32,95,55,52,48,32,64,32,64,32,64,32,64,32,-64,32,66,32,67,39,32,67,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,89,32,64,32,64,32,64,32,66,32,67,39,66,32,66,39,32,66,-32,83,39,32,80,32,64,32,64,32,67,32,66,32,64,32,95,52,49,54,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,-32,66,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,66,32,-64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,66,32,66,39,-32,64,32,66,32,66,32,67,39,32,95,48,32,95,53,53,54,32,64,32,-64,32,64,32,64,32,66,32,66,32,83,32,67,32,66,32,64,32,83,39,-32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,48,32,64,-32,64,32,64,32,66,32,85,32,64,32,67,39,32,67,32,64,32,67,32,-67,32,95,52,48,32,95,50,48,50,32,64,32,64,32,95,53,50,49,32,-64,32,64,32,64,32,95,56,48,53,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,95,50,54,32,95,55,56,54,32,-64,32,64,32,64,32,64,32,67,39,66,32,95,49,49,48,48,32,64,32,-66,32,95,56,48,54,32,64,32,67,32,67,32,80,32,95,50,50,48,32,-64,32,95,55,53,52,32,64,32,64,32,95,55,54,56,32,64,32,64,32,-95,50,50,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,66,32,83,39,32,-83,39,32,95,50,54,32,64,32,64,32,64,32,95,56,49,48,32,64,32,-64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,64,32,67,39,32,-64,32,64,32,67,39,32,67,39,32,95,53,57,32,64,32,64,32,95,56,-49,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,56,-32,64,32,64,32,64,32,64,32,58,56,49,50,32,64,10,65,32,80,32,-58,56,49,49,32,64,10,65,32,66,32,66,32,66,32,66,32,95,48,32,-95,53,53,54,32,64,32,95,55,50,56,32,95,55,52,49,32,64,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,66,32,64,-32,64,32,66,32,66,32,66,39,32,64,32,64,32,66,32,66,32,66,32,-95,49,48,54,32,95,53,53,54,32,64,32,64,32,64,32,64,32,95,56,-48,57,32,64,32,64,32,64,32,67,39,66,32,95,48,32,95,53,53,54,-32,64,32,64,32,67,39,66,32,66,32,95,49,48,54,32,95,53,53,54,-32,64,32,64,32,95,55,52,52,32,64,32,64,32,95,49,49,32,95,53,-53,54,32,64,32,64,32,64,32,64,32,64,32,58,56,49,48,32,64,10,-65,32,67,39,32,83,39,32,67,39,32,95,50,54,32,64,32,64,32,64,-32,95,56,48,56,32,64,32,95,52,55,53,32,64,32,58,56,48,57,32,-64,10,65,32,75,32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,-64,32,95,55,50,56,32,95,55,52,49,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,95,55,52,52,32,64,32,64,32,64,-32,64,32,67,39,66,32,66,39,32,95,56,48,55,32,64,32,64,32,67,-32,95,55,54,53,32,64,32,64,32,64,32,64,32,64,32,58,56,48,56,-32,64,10,65,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,67,-39,66,32,95,55,52,55,32,64,32,64,32,64,32,66,32,66,32,95,53,-57,32,64,32,64,32,80,32,64,32,64,32,64,32,58,56,48,55,32,64,-10,65,32,90,32,85,32,64,32,58,56,48,54,32,64,10,65,32,95,49,-56,32,95,53,53,52,32,64,32,95,56,48,48,32,64,32,95,56,48,52,-32,64,32,58,56,48,53,32,64,10,65,32,95,48,32,95,53,53,54,32,-64,32,95,53,53,56,32,64,32,83,32,67,32,67,39,32,83,39,32,64,-32,66,32,67,39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,-64,32,66,32,66,32,95,50,54,32,95,53,53,57,32,64,32,64,32,64,-32,66,32,83,39,32,95,50,54,32,64,32,95,51,51,53,32,64,32,64,-32,95,55,51,49,32,95,56,48,49,32,64,32,95,49,50,56,32,64,32,-64,32,64,32,64,32,64,32,95,49,49,32,95,53,53,54,32,64,32,64,-32,64,32,67,32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,95,-57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,32,64,32,-64,32,64,32,64,32,64,32,95,49,50,52,32,95,56,48,51,32,64,32,-95,49,50,56,32,64,32,64,32,64,32,58,56,48,52,32,64,10,65,32,-95,49,50,53,32,75,32,95,56,48,50,32,64,32,64,32,58,56,48,51,-32,64,10,65,32,85,32,75,32,90,32,90,32,90,32,90,32,90,32,90,-32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,56,48,50,32,-64,10,65,32,95,55,51,50,32,75,32,85,32,90,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,64,-32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,66,32,67,32,64,-32,95,55,51,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,56,48,49,-32,64,10,65,32,66,32,80,32,35,49,57,32,64,32,64,32,85,32,64,-32,58,56,48,48,32,64,10,65,32,95,54,57,32,95,55,57,52,32,64,-32,83,39,32,83,32,64,32,67,39,32,67,39,32,83,32,64,32,64,32,-67,39,32,67,39,32,83,32,64,32,64,32,67,32,66,32,64,32,67,32,-67,32,80,32,95,50,53,56,32,64,32,95,52,49,52,32,64,32,64,32,-95,52,49,52,32,64,32,64,32,95,52,49,52,32,64,32,64,32,64,32,-73,32,64,32,64,32,73,32,64,32,64,32,66,32,83,32,67,39,32,83,-32,64,32,67,39,32,83,32,64,32,85,32,95,52,49,51,32,64,32,64,-32,73,32,64,32,64,32,73,32,64,32,64,32,64,32,83,39,32,83,32,-64,32,67,39,32,67,39,32,83,32,64,32,64,32,67,39,32,67,39,32,-83,32,64,32,64,32,67,39,66,32,67,32,64,32,67,32,67,32,80,32,-95,52,49,52,32,64,32,95,50,53,56,32,64,32,64,32,95,52,49,52,-32,64,32,64,32,95,52,49,52,32,64,32,64,32,64,32,73,32,64,32,-64,32,73,32,64,32,64,32,66,32,83,32,67,39,32,83,32,64,32,67,-39,32,83,32,64,32,82,32,95,52,49,51,32,64,32,64,32,73,32,64,-32,64,32,73,32,64,32,64,32,64,32,83,39,32,83,32,64,32,67,39,-32,67,39,32,83,32,64,32,64,32,67,39,66,32,66,32,67,32,64,32,-67,32,83,32,64,32,73,32,64,32,64,32,64,32,67,32,67,32,80,32,-95,52,49,52,32,64,32,95,52,49,52,32,64,32,64,32,95,50,53,56,-32,64,32,64,32,95,52,49,52,32,64,32,64,32,64,32,73,32,64,32,-64,32,66,32,83,32,67,39,32,83,32,64,32,67,39,32,67,32,64,32,-67,32,83,32,64,32,73,32,64,32,64,32,95,52,49,51,32,64,32,64,-32,73,32,64,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,66,-32,67,32,64,32,67,39,32,83,32,64,32,67,32,83,32,64,32,73,32,-64,32,64,32,73,32,64,32,64,32,64,32,67,32,67,32,80,32,95,52,-49,52,32,64,32,95,52,49,52,32,64,32,64,32,95,52,49,52,32,64,-32,64,32,95,50,53,56,32,64,32,64,32,64,32,67,32,67,39,32,67,-32,64,32,67,39,32,83,32,64,32,67,32,83,32,64,32,73,32,64,32,-64,32,73,32,64,32,64,32,95,52,49,51,32,64,32,64,32,110,111,77,-97,116,99,104,32,102,114,111,109,85,84,70,56,32,34,115,114,99,47,77,-105,99,114,111,72,115,47,84,67,77,111,110,97,100,46,104,115,34,32,64,-32,64,32,35,50,51,50,32,64,32,35,53,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,95,55,57,53,32,95,55,-57,57,32,64,32,64,32,95,55,57,54,32,95,55,57,57,32,64,32,64,-32,95,55,57,55,32,95,55,57,57,32,64,32,64,32,95,55,57,56,32,-95,55,57,57,32,64,32,64,32,95,55,56,32,95,55,57,57,32,64,32,-64,32,95,55,57,32,95,55,57,57,32,64,32,64,32,58,55,57,57,32,-64,10,65,32,66,32,67,32,64,32,95,54,56,32,64,32,58,55,57,56,-32,64,10,65,32,67,39,32,67,39,32,67,32,64,32,64,32,67,39,32,-67,39,32,67,32,64,32,64,32,95,54,56,32,64,32,95,52,51,32,64,-32,64,32,95,52,52,32,64,32,58,55,57,55,32,64,10,65,32,67,39,-32,67,39,32,67,32,64,32,64,32,67,39,32,67,39,32,67,32,64,32,-64,32,67,39,32,67,39,32,67,32,64,32,64,32,95,56,57,32,64,32,-95,52,51,32,64,32,64,32,95,52,51,32,64,32,64,32,95,52,52,32,-64,32,58,55,57,54,32,64,10,65,32,67,39,32,67,39,32,67,32,64,-32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,67,32,64,-32,95,54,56,32,64,32,64,32,95,52,51,32,64,32,64,32,95,52,52,-32,64,32,58,55,57,53,32,64,10,65,32,95,52,49,32,67,39,32,83,-32,64,32,67,39,32,83,32,64,32,67,32,67,32,83,39,32,64,32,67,-32,67,32,80,32,95,52,51,32,64,32,95,52,52,32,64,32,64,32,95,-52,52,32,64,32,64,32,95,52,52,32,64,32,64,32,64,32,67,32,67,-32,80,32,95,52,52,32,64,32,95,52,51,32,64,32,64,32,95,52,52,-32,64,32,64,32,95,52,52,32,64,32,64,32,64,32,67,32,67,32,80,-32,95,52,52,32,64,32,95,52,52,32,64,32,64,32,95,52,51,32,64,-32,64,32,95,52,52,32,64,32,64,32,64,32,67,32,67,32,80,32,95,-52,52,32,64,32,95,52,52,32,64,32,64,32,95,52,52,32,64,32,64,-32,95,52,51,32,64,32,64,32,64,32,95,52,53,32,95,55,57,52,32,-64,32,64,32,58,55,57,52,32,64,10,65,32,75,32,66,32,66,32,95,-48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,55,52,48,32,64,-32,64,32,64,32,64,32,66,32,67,32,64,32,83,32,83,32,64,32,66,-32,66,32,95,50,54,32,95,50,49,57,32,64,32,64,32,64,32,66,32,-66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,97,115,115,-101,114,116,84,67,77,111,100,101,58,32,101,120,112,101,99,116,101,100,61,-34,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,53,51,-32,64,32,66,32,95,49,53,52,32,95,49,54,50,32,95,55,57,49,32,-64,32,64,32,64,32,67,32,95,54,54,32,64,32,79,32,95,55,57,50,-32,64,32,79,32,95,55,55,51,32,64,32,79,32,95,55,55,52,32,64,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,-49,53,51,32,102,114,111,109,85,84,70,56,32,34,44,32,103,111,116,61,-34,32,64,32,64,32,64,32,95,49,53,52,32,95,55,57,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,55,57,51,-32,64,10,65,32,90,32,90,32,75,32,64,32,64,32,58,55,57,50,32,-64,10,65,32,95,49,53,53,32,75,32,67,32,67,32,80,32,95,49,54,-55,32,102,114,111,109,85,84,70,56,32,34,84,67,69,120,112,114,34,32,-64,32,64,32,64,32,95,49,54,55,32,102,114,111,109,85,84,70,56,32,-34,84,67,84,121,112,101,34,32,64,32,64,32,64,32,64,32,95,49,54,-55,32,102,114,111,109,85,84,70,56,32,34,84,67,75,105,110,100,34,32,-64,32,64,32,64,32,64,32,95,49,54,55,32,102,114,111,109,85,84,70,-56,32,34,84,67,83,111,114,116,34,32,64,32,64,32,64,32,64,32,64,-32,95,49,53,56,32,95,55,57,49,32,64,32,64,32,95,49,54,49,32,-95,55,57,49,32,64,32,64,32,58,55,57,49,32,64,10,65,32,83,39,-32,95,50,54,32,64,32,66,32,95,49,52,54,32,95,53,53,53,32,64,-32,64,32,95,55,56,56,32,95,50,48,50,32,64,32,64,32,64,32,66,-32,83,39,32,95,50,54,32,64,32,66,32,95,55,56,57,32,95,51,48,-53,32,64,32,64,32,95,51,48,54,32,95,51,48,56,32,64,32,64,32,-64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,77,-117,108,116,105,112,108,121,32,100,101,102,105,110,101,100,58,32,34,32,64,-32,64,32,64,32,95,50,53,52,32,64,32,64,32,64,32,95,52,56,48,-32,64,32,64,32,58,55,57,48,32,64,10,65,32,95,51,48,51,32,58,-55,56,57,32,64,10,65,32,66,32,95,55,56,55,32,64,32,95,52,48,-32,64,32,58,55,56,56,32,64,10,65,32,66,32,89,32,64,32,66,32,-66,32,80,32,95,52,52,32,64,32,64,32,64,32,66,32,67,39,32,83,-39,32,95,53,54,32,64,32,64,32,64,32,95,54,50,32,64,32,64,32,-64,32,58,55,56,55,32,64,10,65,32,66,32,95,48,32,95,53,53,54,-32,64,32,95,55,50,56,32,95,55,52,48,32,64,32,64,32,64,32,66,-32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,32,95,55,-52,49,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,48,32,-95,53,53,54,32,64,32,95,55,50,56,32,95,55,52,50,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,95,49,48,54,-32,95,53,53,54,32,64,32,64,32,95,55,52,52,32,64,32,64,32,64,-32,64,32,67,39,32,83,39,32,67,39,32,83,39,32,95,49,48,54,32,-95,53,53,54,32,64,32,64,32,66,32,95,55,52,54,32,64,32,67,32,-67,32,80,32,95,50,50,48,32,64,32,95,55,54,54,32,64,32,64,32,-95,55,54,57,32,64,32,64,32,95,50,50,48,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,95,49,48,54,32,-95,53,53,54,32,64,32,64,32,95,55,55,49,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,39,32,95,48,32,95,53,53,54,32,64,32,64,-32,64,32,66,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,-55,50,56,32,95,55,52,49,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,39,66,32,66,39,32,66,32,95,49,48,54,32,95,53,53,54,32,-64,32,64,32,95,55,52,52,32,64,32,64,32,64,32,64,32,66,32,66,-32,67,39,32,95,49,48,54,32,95,53,53,54,32,64,32,64,32,95,55,-52,54,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,48,54,32,-95,53,53,54,32,64,32,64,32,95,55,55,49,32,64,32,64,32,95,49,-49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,95,55,55,50,32,95,55,56,53,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,55,56,54,32,64,10,65,32,95,52,52,50,32,67,-32,67,32,80,32,95,55,55,51,32,64,32,95,55,55,52,32,64,32,64,-32,95,55,55,53,32,64,32,64,32,95,50,49,57,32,102,114,111,109,85,-84,70,56,32,34,115,117,99,99,32,84,67,83,111,114,116,34,32,64,32,-64,32,64,32,64,32,95,55,55,57,32,95,55,56,53,32,64,32,64,32,-95,50,50,48,32,64,32,95,50,50,48,32,64,32,95,55,56,48,32,95,-55,56,53,32,64,32,64,32,95,55,56,49,32,95,55,56,53,32,64,32,-64,32,95,55,56,50,32,95,55,56,53,32,64,32,64,32,95,55,56,52,-32,95,55,56,53,32,64,32,64,32,58,55,56,53,32,64,10,65,32,83,-39,32,66,32,64,32,66,39,32,66,39,32,66,32,95,54,48,32,64,32,-95,55,55,54,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,67,-39,66,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,32,-95,55,56,51,32,95,52,52,53,32,64,32,64,32,64,32,95,55,55,56,-32,64,32,64,32,95,55,55,56,32,64,32,64,32,95,55,55,56,32,64,-32,64,32,58,55,56,52,32,64,10,65,32,85,32,75,50,32,75,52,32,-65,32,64,32,64,32,64,32,58,55,56,51,32,64,10,65,32,83,39,32,-66,32,64,32,66,39,32,66,32,95,54,48,32,64,32,95,55,55,54,32,-64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,32,95,-53,52,52,32,95,52,52,53,32,64,32,64,32,64,32,95,55,55,56,32,-64,32,64,32,95,55,55,56,32,64,32,64,32,58,55,56,50,32,64,10,-65,32,83,39,32,66,32,64,32,66,39,32,66,32,95,54,48,32,64,32,-95,55,55,54,32,64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,-66,32,66,32,95,52,52,52,32,95,52,52,53,32,64,32,64,32,64,32,-95,55,55,56,32,64,32,64,32,95,55,55,56,32,64,32,64,32,58,55,-56,49,32,64,10,65,32,83,39,32,66,32,64,32,66,32,95,54,48,32,-64,32,95,55,55,54,32,64,32,64,32,66,32,66,32,95,52,52,49,32,-95,52,52,53,32,64,32,64,32,64,32,95,55,55,56,32,64,32,64,32,-58,55,56,48,32,64,10,65,32,83,39,32,95,54,32,64,32,95,55,55,-54,32,64,32,66,32,95,54,32,95,55,55,55,32,95,49,48,52,32,64,-32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,32,-64,32,64,32,64,32,64,32,64,32,95,55,55,56,32,64,32,64,32,58,-55,55,57,32,64,10,65,32,85,32,75,51,32,90,32,90,32,90,32,75,-32,64,32,64,32,64,32,64,32,64,32,58,55,55,56,32,64,10,65,32,-66,32,67,32,64,32,95,56,49,32,64,32,58,55,55,55,32,64,10,65,-32,85,32,75,50,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,-64,32,64,32,64,32,64,32,58,55,55,54,32,64,10,65,32,75,50,32,-65,32,64,32,58,55,55,53,32,64,10,65,32,75,50,32,75,32,64,32,-58,55,55,52,32,64,10,65,32,75,32,90,32,75,32,64,32,64,32,58,-55,55,51,32,64,10,65,32,85,32,90,32,90,32,90,32,90,32,90,32,-90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,55,-55,50,32,64,10,65,32,66,32,95,50,54,32,95,55,51,48,32,64,32,-64,32,67,32,95,55,51,49,32,95,55,55,48,32,64,32,95,49,50,56,-32,64,32,64,32,64,32,58,55,55,49,32,64,10,65,32,95,55,51,50,-32,75,32,85,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,90,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,55,51,51,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,55,55,48,-32,64,10,65,32,66,32,95,55,53,48,32,64,32,83,39,32,79,32,64,-32,66,32,80,32,95,55,53,50,32,95,55,54,55,32,64,32,64,32,64,-32,67,39,32,79,32,64,32,80,32,95,55,54,55,32,64,32,95,55,54,-56,32,64,32,64,32,75,32,64,32,64,32,64,32,67,39,32,79,32,64,-32,66,32,80,32,95,55,53,50,32,102,114,111,109,85,84,70,56,32,34,-75,105,110,100,34,32,64,32,64,32,64,32,64,32,67,39,32,79,32,64,-32,80,32,95,55,54,55,32,64,32,95,55,54,56,32,64,32,64,32,75,-32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,66,32,95,55,54,-53,32,64,32,66,32,95,52,55,53,32,64,32,95,55,53,50,32,64,32,-64,32,64,32,58,55,54,57,32,64,10,65,32,95,52,55,53,32,95,52,-56,49,32,95,53,49,57,32,64,32,102,114,111,109,85,84,70,56,32,34,-80,114,105,109,105,116,105,118,101,115,46,83,111,114,116,34,32,64,32,64,-32,64,32,58,55,54,56,32,64,10,65,32,102,114,111,109,85,84,70,56,-32,34,80,114,105,109,105,116,105,118,101,115,46,75,105,110,100,34,32,64,-32,58,55,54,55,32,64,10,65,32,66,32,95,55,53,48,32,64,32,83,-39,32,79,32,64,32,66,32,80,32,95,55,53,50,32,95,55,53,51,32,-64,32,64,32,64,32,67,39,32,79,32,64,32,80,32,95,55,53,51,32,-64,32,95,55,53,52,32,64,32,64,32,75,32,64,32,64,32,64,32,83,-39,32,79,32,64,32,66,32,80,32,95,55,53,50,32,102,114,111,109,85,-84,70,56,32,34,84,121,112,101,34,32,64,32,64,32,64,32,64,32,67,-39,32,79,32,64,32,80,32,95,55,53,51,32,64,32,95,55,53,52,32,-64,32,64,32,75,32,64,32,64,32,64,32,83,39,32,79,32,64,32,66,-32,80,32,95,55,53,50,32,95,55,53,53,32,64,32,64,32,64,32,67,-39,32,79,32,64,32,80,32,95,55,53,53,32,64,32,95,55,53,52,32,-64,32,64,32,75,32,64,32,64,32,64,32,83,39,32,79,32,64,32,66,-32,80,32,95,55,53,50,32,102,114,111,109,85,84,70,56,32,34,67,111,-110,115,116,114,97,105,110,116,34,32,64,32,64,32,64,32,64,32,67,39,-32,79,32,64,32,80,32,95,55,53,53,32,64,32,95,55,53,52,32,64,-32,64,32,75,32,64,32,64,32,64,32,83,39,32,79,32,64,32,66,32,-80,32,95,55,53,50,32,95,55,53,54,32,64,32,64,32,64,32,67,39,-32,79,32,64,32,80,32,95,55,53,54,32,64,32,95,55,53,52,32,64,-32,64,32,75,32,64,32,64,32,64,32,83,39,32,79,32,64,32,66,32,-80,32,95,55,53,50,32,102,114,111,109,85,84,70,56,32,34,83,121,109,-98,111,108,34,32,64,32,64,32,64,32,64,32,67,39,32,79,32,64,32,-80,32,95,55,53,54,32,64,32,95,55,53,52,32,64,32,64,32,75,32,-64,32,64,32,64,32,83,39,32,79,32,64,32,66,32,80,32,95,55,53,-50,32,95,55,53,55,32,64,32,64,32,64,32,67,39,32,79,32,64,32,-80,32,95,55,53,55,32,64,32,95,55,53,52,32,64,32,64,32,75,32,-64,32,64,32,64,32,83,39,32,79,32,64,32,66,32,80,32,95,55,53,-50,32,102,114,111,109,85,84,70,56,32,34,78,97,116,34,32,64,32,64,-32,64,32,64,32,67,39,32,79,32,64,32,80,32,95,55,53,55,32,64,-32,95,55,53,52,32,64,32,64,32,75,32,64,32,64,32,64,32,83,39,-32,79,32,64,32,66,32,80,32,95,55,53,50,32,95,55,53,56,32,64,-32,64,32,64,32,67,39,32,79,32,64,32,80,32,95,55,53,56,32,64,-32,95,55,54,52,32,64,32,64,32,75,32,64,32,64,32,64,32,67,39,-32,79,32,64,32,66,32,80,32,95,55,53,50,32,102,114,111,109,85,84,-70,56,32,34,45,62,34,32,64,32,64,32,64,32,64,32,67,39,32,79,-32,64,32,80,32,95,55,53,56,32,64,32,95,55,54,52,32,64,32,64,-32,75,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,55,54,53,32,-64,32,66,32,95,52,55,53,32,64,32,95,55,53,50,32,64,32,64,32,-64,32,58,55,54,54,32,64,10,65,32,80,32,58,55,54,53,32,64,10,-65,32,95,55,54,51,32,95,55,53,52,32,64,32,95,55,54,51,32,95,-55,53,52,32,64,32,95,55,53,52,32,64,32,64,32,58,55,54,52,32,-64,10,65,32,95,55,54,50,32,58,55,54,51,32,64,10,65,32,66,32,-95,55,53,57,32,64,32,95,55,53,57,32,95,55,54,49,32,95,55,53,-49,32,64,32,102,114,111,109,85,84,70,56,32,34,80,114,105,109,105,116,-105,118,101,115,46,45,62,34,32,64,32,64,32,64,32,64,32,58,55,54,-50,32,64,10,65,32,66,32,95,54,32,95,55,54,48,32,64,32,64,32,-95,54,53,49,32,64,32,58,55,54,49,32,64,10,65,32,95,52,55,53,-32,58,55,54,48,32,64,10,65,32,95,52,55,52,32,58,55,53,57,32,-64,10,65,32,102,114,111,109,85,84,70,56,32,34,80,114,105,109,105,116,-105,118,101,115,46,45,62,34,32,64,32,58,55,53,56,32,64,10,65,32,-102,114,111,109,85,84,70,56,32,34,80,114,105,109,105,116,105,118,101,115,-46,78,97,116,34,32,64,32,58,55,53,55,32,64,10,65,32,102,114,111,-109,85,84,70,56,32,34,80,114,105,109,105,116,105,118,101,115,46,83,121,-109,98,111,108,34,32,64,32,58,55,53,54,32,64,10,65,32,102,114,111,-109,85,84,70,56,32,34,80,114,105,109,105,116,105,118,101,115,46,67,111,-110,115,116,114,97,105,110,116,34,32,64,32,58,55,53,53,32,64,10,65,-32,95,52,55,53,32,95,52,56,49,32,95,53,49,57,32,64,32,102,114,-111,109,85,84,70,56,32,34,80,114,105,109,105,116,105,118,101,115,46,75,-105,110,100,34,32,64,32,64,32,64,32,58,55,53,52,32,64,10,65,32,-102,114,111,109,85,84,70,56,32,34,80,114,105,109,105,116,105,118,101,115,-46,84,121,112,101,34,32,64,32,58,55,53,51,32,64,10,65,32,95,54,-53,49,32,95,55,53,49,32,64,32,58,55,53,50,32,64,10,65,32,95,-53,49,56,32,102,114,111,109,85,84,70,56,32,34,98,117,105,108,116,105,-110,34,32,64,32,64,32,35,48,32,64,32,35,48,32,64,32,58,55,53,-49,32,64,10,65,32,67,39,32,95,55,52,55,32,64,32,95,55,52,57,-32,64,32,95,53,56,32,64,32,58,55,53,48,32,64,10,65,32,95,55,-52,56,32,95,56,32,64,32,58,55,52,57,32,64,10,65,32,67,39,32,-95,53,53,32,64,32,66,32,95,54,50,56,32,64,32,95,50,55,54,32,-64,32,64,32,95,49,52,51,32,64,32,58,55,52,56,32,64,10,65,32,-80,32,58,55,52,55,32,64,10,65,32,66,32,95,50,54,32,95,55,51,-48,32,64,32,64,32,67,32,95,55,51,49,32,95,55,52,53,32,64,32,-95,49,50,56,32,64,32,64,32,64,32,58,55,52,54,32,64,10,65,32,-95,55,51,50,32,75,32,85,32,66,32,66,32,90,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,67,32,64,32,64,32,64,32,95,55,51,51,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-58,55,52,53,32,64,10,65,32,66,32,95,50,54,32,95,55,51,48,32,-64,32,64,32,67,32,95,55,51,49,32,95,55,52,51,32,64,32,95,49,-50,56,32,64,32,64,32,64,32,58,55,52,52,32,64,10,65,32,95,55,-51,50,32,75,32,85,32,66,32,66,32,66,32,66,32,90,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,-32,64,32,95,55,51,51,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,55,52,51,32,64,10,65,32,85,-32,75,51,32,90,32,90,32,90,32,90,32,90,32,90,32,90,32,90,32,-75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,58,55,52,50,32,64,10,65,32,85,32,75,32,75,52,32,90,32,-90,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,55,52,49,32,64,10,65,32,85,-32,75,52,32,75,52,32,90,32,90,32,90,32,75,32,64,32,64,32,64,-32,64,32,64,32,64,32,58,55,52,48,32,64,10,65,32,85,32,67,39,-66,32,67,32,67,32,61,61,32,64,32,35,56,32,64,32,64,32,95,49,-49,32,95,53,53,54,32,64,32,95,49,48,55,32,64,32,64,32,64,32,-85,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,55,50,56,-32,95,55,50,57,32,64,32,64,32,64,32,64,32,66,32,67,39,32,95,-49,48,56,32,95,53,53,54,32,64,32,64,32,64,32,67,39,32,67,39,-32,95,55,51,56,32,64,32,64,32,95,53,52,49,32,95,51,48,53,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,55,51,57,32,64,-10,65,32,66,32,66,32,95,50,54,32,95,55,51,48,32,64,32,64,32,-64,32,66,32,66,32,83,32,95,55,51,49,32,95,55,51,52,32,64,32,-95,49,50,56,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,-64,32,95,55,51,53,32,64,32,95,49,50,52,32,95,55,51,55,32,64,-32,95,49,50,56,32,64,32,64,32,64,32,64,32,58,55,51,56,32,64,-10,65,32,95,49,50,53,32,75,32,95,55,51,54,32,64,32,64,32,58,-55,51,55,32,64,10,65,32,85,32,75,50,32,90,32,90,32,90,32,90,-32,90,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,55,51,54,32,-64,10,65,32,95,50,55,54,32,95,56,32,64,32,58,55,51,53,32,64,-10,65,32,95,55,51,50,32,75,32,85,32,66,32,90,32,64,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,-67,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-67,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,95,55,-51,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,55,51,52,32,64,10,65,32,-66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,-66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,-66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,55,51,51,32,64,-10,65,32,85,32,58,55,51,50,32,64,10,65,32,85,32,73,32,64,32,-58,55,51,49,32,64,10,65,32,66,32,95,50,54,32,95,53,53,51,32,-64,32,64,32,66,32,80,32,95,49,48,55,32,64,32,64,32,64,32,58,-55,51,48,32,64,10,65,32,85,32,90,32,90,32,90,32,90,32,90,32,-90,32,90,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,55,-50,57,32,64,10,65,32,66,32,95,50,54,32,95,53,53,51,32,64,32,-64,32,67,32,83,39,32,80,32,64,32,64,32,73,32,64,32,64,32,58,-55,50,56,32,64,10,65,32,95,53,53,49,32,58,55,50,55,32,64,10,-65,32,66,32,85,32,64,32,66,32,83,39,32,67,39,32,67,39,32,67,-39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,95,50,-54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,49,53,-32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,54,32,95,54,48,-32,95,53,51,54,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,95,50,54,32,95,53,52,48,32,64,32,64,32,64,32,64,32,66,-32,66,32,95,53,48,55,32,64,32,64,32,95,55,50,53,32,64,32,64,-32,64,32,64,32,64,32,58,55,50,54,32,64,10,65,32,66,32,66,32,-85,32,64,32,64,32,66,32,83,39,32,83,32,64,32,66,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,54,32,64,32,64,32,64,32,-67,39,32,83,32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,57,32,64,32,64,32,64,32,66,32,67,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,49,48,32,64,32,64,32,67,32,-67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,49,32,64,32,-64,32,85,32,75,32,95,53,56,32,64,32,64,32,64,32,64,32,85,32,-75,50,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,85,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,32,67,-32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,-32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,32,67,32,64,32,-64,32,67,39,32,83,39,32,67,39,32,83,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,-32,83,39,32,66,32,64,32,66,32,83,39,32,66,32,64,32,64,32,66,-32,66,32,83,39,32,83,39,32,95,53,57,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,66,-32,80,32,64,32,64,32,67,39,66,32,66,32,95,50,54,32,64,32,95,-53,52,49,32,95,51,48,53,32,64,32,64,32,64,32,95,53,52,50,32,-64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,95,50,54,-32,64,32,95,53,49,55,32,64,32,64,32,66,32,83,39,32,95,50,54,-32,64,32,95,53,49,54,32,64,32,64,32,66,32,67,39,32,95,53,51,-52,32,64,32,95,53,50,53,32,64,32,64,32,95,54,48,32,95,53,50,-53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,32,67,39,32,67,39,32,83,39,32,67,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,67,39,32,95,-52,52,48,32,64,32,64,32,66,32,66,32,67,39,66,32,80,32,64,32,-64,32,64,32,66,32,83,39,32,66,32,64,32,66,32,95,50,54,32,64,-32,95,53,49,54,32,64,32,64,32,64,32,66,32,67,39,66,32,66,32,-95,53,50,52,32,64,32,95,53,50,53,32,64,32,64,32,64,32,67,39,-66,32,66,32,95,50,54,32,64,32,95,53,49,55,32,64,32,64,32,95,-53,50,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,95,49,53,51,32,64,32,64,32,64,32,67,-39,66,32,66,32,67,39,32,89,32,64,32,64,32,66,32,66,32,66,32,-80,32,75,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,66,32,-64,32,64,32,66,32,66,32,66,32,95,53,57,32,64,32,64,32,64,32,-67,39,66,32,66,39,32,66,32,95,50,54,32,64,32,95,53,52,49,32,-95,51,48,53,32,64,32,64,32,64,32,64,32,95,53,52,51,32,95,51,-48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,-53,52,52,32,95,52,52,53,32,64,32,95,57,48,32,95,49,48,52,32,-64,32,95,49,48,50,32,35,49,32,64,32,64,32,64,32,64,32,95,51,-50,49,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,-32,95,53,50,48,32,102,114,111,109,85,84,70,56,32,34,36,102,34,32,-64,32,64,32,64,32,64,32,66,32,66,32,89,32,66,32,80,32,75,32,-64,32,64,32,67,39,66,32,66,32,95,53,57,32,64,32,66,32,95,53,-50,48,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,-32,34,36,120,34,32,64,32,64,32,64,32,95,49,53,52,32,95,49,56,-56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,95,53,52,52,32,95,52,52,53,32,64,32,95,57,48,32,-95,49,48,52,32,64,32,95,49,48,50,32,35,49,32,64,32,64,32,64,-32,64,32,64,32,67,39,66,32,66,32,95,49,56,49,32,95,49,48,52,-32,64,32,64,32,95,51,50,49,32,64,32,64,32,95,51,50,49,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,89,32,64,32,66,32,66,-32,80,32,75,32,64,32,64,32,64,32,67,39,32,83,39,32,67,32,64,-32,64,32,66,32,66,32,67,39,32,83,39,32,64,32,66,32,67,32,64,-32,67,32,67,32,83,39,32,64,32,90,32,75,32,64,32,64,32,64,32,-90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,90,32,64,32,64,32,64,32,66,39,32,66,32,67,39,32,95,53,-57,32,64,32,64,32,95,53,52,49,32,95,51,48,53,32,64,32,64,32,-64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,55,32,64,32,64,32,67,32,67,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,56,32,64,32,64,32,85,32,-75,50,32,95,53,56,32,64,32,64,32,64,32,64,32,85,32,66,32,90,-32,64,32,67,39,32,67,39,32,79,32,64,32,64,32,66,32,67,32,80,-32,64,32,64,32,66,32,95,50,54,32,95,53,51,48,32,64,32,64,32,-95,53,52,53,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,85,32,75,32,95,53,56,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,66,32,66,32,83,32,64,32,66,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,-64,32,66,32,67,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,52,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,53,32,64,32,64,32,85,32,75,50,32,95,53,56,32,64,-32,64,32,64,32,64,32,85,32,75,50,32,95,53,56,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,67,39,32,67,39,32,-67,39,32,79,32,64,32,64,32,64,32,66,32,83,39,32,66,32,64,32,-80,32,64,32,64,32,67,39,32,83,39,32,66,32,64,32,64,32,66,32,-66,32,95,50,54,32,64,32,64,32,66,32,95,53,52,55,32,64,32,95,-49,50,52,32,95,53,52,57,32,64,32,95,49,50,56,32,64,32,64,32,-64,32,64,32,66,32,95,55,49,57,32,64,32,95,51,48,54,32,95,51,-48,56,32,64,32,64,32,64,32,64,32,64,32,75,32,64,32,64,32,64,-32,64,32,64,32,64,32,83,39,32,67,32,64,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,66,-32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,32,-64,32,64,32,85,32,75,50,32,95,53,56,32,64,32,64,32,64,32,64,-32,64,32,66,32,85,32,64,32,90,32,66,32,90,32,64,32,66,32,85,-32,64,32,90,32,90,32,66,32,90,32,64,32,67,39,32,67,39,32,79,-32,64,32,64,32,67,39,32,67,39,32,80,32,64,32,64,32,95,53,52,-49,32,95,51,48,53,32,64,32,64,32,95,53,51,48,32,95,53,51,49,-32,79,32,35,55,51,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,85,32,64,32,90,32,66,32,90,32,64,32,67,-39,32,83,32,64,32,67,39,32,67,39,32,95,52,52,48,32,64,32,64,-32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,90,-32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,66,32,67,39,66,-32,64,32,66,32,66,32,80,32,64,32,64,32,95,53,52,49,32,95,51,-48,53,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-66,32,64,32,66,32,66,39,32,64,32,66,32,67,32,95,55,50,51,32,-64,32,64,32,95,51,50,49,32,64,32,64,32,64,32,67,39,66,32,66,-32,95,49,53,51,32,64,32,67,32,67,32,95,51,48,49,32,64,32,79,-32,95,52,52,32,64,32,75,32,64,32,64,32,64,32,95,53,56,32,64,-32,64,32,64,32,66,32,95,54,48,32,95,50,52,57,32,64,32,64,32,-95,55,50,52,32,95,49,54,32,64,32,95,54,48,32,95,50,55,57,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,52,-52,49,32,95,52,52,53,32,64,32,35,48,32,64,32,64,32,64,32,73,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,55,50,-53,32,64,10,65,32,80,32,58,55,50,52,32,64,10,65,32,67,39,32,-67,32,64,32,66,32,83,39,32,67,39,32,64,32,83,32,95,54,55,32,-95,55,50,32,64,32,64,32,73,32,64,32,64,32,64,32,83,39,32,83,-32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,95,54,56,32,95,-56,48,32,64,32,64,32,95,55,48,56,32,64,32,64,32,64,32,95,55,-50,49,32,64,32,64,32,95,55,50,50,32,64,32,64,32,64,32,95,50,-50,48,32,64,32,58,55,50,51,32,64,10,65,32,67,39,32,67,39,32,-83,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,-32,64,32,66,32,66,32,66,32,83,39,32,66,32,64,32,66,32,95,50,-54,32,64,32,95,53,49,55,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,67,39,32,83,39,32,66,32,64,32,64,32,66,32,66,32,95,-50,54,32,64,32,64,32,89,32,66,32,67,39,66,32,83,32,64,32,64,-32,83,39,32,83,39,32,83,39,32,67,32,64,32,64,32,64,32,66,32,-66,32,66,32,67,32,83,39,32,64,32,64,32,64,32,64,32,66,32,67,-32,83,39,32,66,32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,-64,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-32,83,39,32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,-66,32,66,32,95,53,50,52,32,64,32,66,32,95,53,50,52,32,95,53,-51,48,32,95,53,51,49,32,102,114,111,109,85,84,70,56,32,34,115,101,-113,34,32,64,32,64,32,64,32,64,32,64,32,95,53,50,53,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-66,32,64,32,66,32,66,32,83,39,32,95,50,54,32,64,32,64,32,64,-32,66,32,66,32,66,32,95,53,49,55,32,64,32,64,32,64,32,67,39,-66,32,66,32,67,39,32,95,54,48,32,64,32,64,32,66,32,67,32,64,-32,67,39,32,67,32,64,32,67,32,95,52,48,32,95,55,50,32,64,32,-64,32,64,32,95,53,50,49,32,64,32,64,32,64,32,64,32,66,32,95,-53,52,52,32,95,52,52,53,32,64,32,35,48,32,64,32,64,32,67,32,-95,56,49,32,95,49,48,52,32,64,32,64,32,35,49,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,67,39,32,95,53,51,52,32,64,32,-95,53,50,53,32,64,32,64,32,95,54,48,32,95,53,50,53,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,53,50,48,32,102,114,111,109,85,-84,70,56,32,34,36,102,34,32,64,32,64,32,64,32,64,32,66,32,89,-32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,66,32,64,32,64,-32,66,32,66,32,90,32,64,32,64,32,66,32,67,39,32,95,53,57,32,-64,32,66,32,95,53,50,48,32,64,32,66,32,95,49,53,51,32,102,114,-111,109,85,84,70,56,32,34,36,120,34,32,64,32,64,32,64,32,95,49,-53,52,32,95,49,56,56,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,95,54,51,48,32,95,52,52,49,32,95,52,-52,53,32,64,32,35,48,32,64,32,64,32,64,32,64,32,58,55,50,50,-32,64,10,65,32,90,32,67,39,32,83,39,32,83,39,32,95,50,54,32,-64,32,95,53,49,55,32,64,32,64,32,64,32,66,32,67,39,32,83,39,-32,95,50,54,32,64,32,64,32,89,32,66,32,67,39,66,32,83,32,64,-32,64,32,83,39,32,83,39,32,83,39,32,67,32,64,32,64,32,64,32,-66,32,66,32,66,32,67,32,83,39,32,64,32,64,32,64,32,64,32,66,-32,67,32,83,39,32,66,32,64,32,64,32,64,32,66,32,66,32,90,32,-64,32,64,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,32,83,39,32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,-67,39,66,32,66,32,95,53,50,52,32,64,32,66,32,95,53,50,52,32,-95,53,51,48,32,95,53,51,49,32,102,114,111,109,85,84,70,56,32,34,-115,101,113,34,32,64,32,64,32,64,32,64,32,64,32,95,53,50,53,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,95,55,50,-48,32,64,32,64,32,67,39,66,32,66,32,79,32,64,32,66,32,95,53,-51,48,32,64,32,95,54,55,51,32,64,32,64,32,64,32,67,39,32,79,-32,64,32,66,32,95,55,50,48,32,64,32,95,54,48,32,95,53,50,53,-32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,66,-32,89,32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,66,32,64,-32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,67,39,32,95,53,-57,32,64,32,66,32,95,53,50,48,32,64,32,66,32,95,49,53,51,32,-102,114,111,109,85,84,70,56,32,34,36,120,34,32,64,32,64,32,64,32,-95,49,53,52,32,95,49,56,56,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,54,51,48,32,95,52,52,49,32,-95,52,52,53,32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,32,-58,55,50,49,32,64,10,65,32,67,39,32,83,39,32,95,50,54,32,64,-32,95,53,49,54,32,64,32,64,32,67,39,32,95,53,51,52,32,64,32,-95,53,50,53,32,64,32,64,32,95,53,50,48,32,102,114,111,109,85,84,-70,56,32,34,36,116,34,32,64,32,64,32,64,32,58,55,50,48,32,64,-10,65,32,66,32,83,32,85,32,95,53,53,48,32,95,51,48,53,32,64,-32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,-32,85,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,67,39,32,-83,32,64,32,67,39,32,67,39,32,67,39,32,64,32,64,32,66,32,66,-32,83,32,64,32,64,32,67,39,32,67,39,32,67,39,32,83,39,32,95,-53,53,32,95,53,49,54,32,64,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,32,67,39,32,67,32,64,32,64,32,67,32,67,39,32,67,39,-32,64,32,66,32,83,39,32,64,32,95,55,49,56,32,64,32,64,32,95,-49,53,51,32,64,32,64,32,95,54,48,32,95,53,50,53,32,64,32,64,-32,64,32,64,32,95,54,48,32,85,32,67,39,66,32,66,32,80,32,64,-32,95,54,48,32,95,54,54,54,32,95,51,48,53,32,64,32,64,32,64,-32,64,32,95,54,55,49,32,64,32,64,32,64,32,64,32,64,32,73,32,-64,32,64,32,64,32,67,39,66,32,66,32,95,50,54,32,64,32,66,32,-95,49,48,53,32,64,32,95,51,50,49,32,64,32,64,32,64,32,95,53,-56,50,32,102,114,111,109,85,84,70,56,32,34,36,113,34,32,64,32,64,-32,64,32,64,32,64,32,66,32,95,50,54,32,95,54,52,56,32,64,32,-64,32,95,53,55,54,32,95,53,50,48,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,55,49,57,32,64,10,65,32,67,-39,66,32,66,32,67,39,32,67,39,32,95,53,53,50,32,64,32,64,32,-64,32,66,32,67,32,64,32,67,39,32,67,39,32,89,32,64,32,64,32,-67,39,32,67,39,66,32,64,32,66,32,66,32,83,39,32,80,32,64,32,-64,32,64,32,67,39,32,67,39,32,64,32,66,32,95,55,49,53,32,95,-51,48,53,32,64,32,64,32,95,55,49,55,32,64,32,64,32,95,52,49,-54,32,64,32,64,32,64,32,66,32,66,32,67,39,66,32,66,32,95,50,-54,32,64,32,66,32,95,53,54,50,32,64,32,95,49,49,32,95,53,53,-54,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,67,39,-32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,95,-53,56,32,64,32,64,32,64,32,64,32,95,53,56,50,32,102,114,111,109,-85,84,70,56,32,34,36,120,34,32,64,32,64,32,64,32,58,55,49,56,-32,64,10,65,32,85,32,67,39,32,67,39,66,32,64,32,66,32,66,32,-95,53,50,52,32,64,32,64,32,67,39,66,32,66,32,95,53,50,52,32,-64,32,66,32,95,53,50,52,32,95,53,51,48,32,95,53,51,49,32,102,-114,111,109,85,84,70,56,32,34,110,111,77,97,116,99,104,34,32,64,32,-64,32,64,32,64,32,64,32,66,32,95,53,51,48,32,64,32,95,55,49,-54,32,64,32,64,32,64,32,64,32,66,32,95,53,51,48,32,64,32,95,-54,55,51,32,64,32,64,32,64,32,64,32,66,32,95,53,51,48,32,64,-32,95,54,55,51,32,64,32,64,32,64,32,58,55,49,55,32,64,10,65,-32,66,32,80,32,35,53,32,64,32,64,32,85,32,64,32,58,55,49,54,-32,64,10,65,32,66,32,89,32,64,32,66,32,66,32,83,39,32,66,32,-64,32,66,32,83,32,64,32,66,32,85,32,64,32,95,49,49,32,95,53,-53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,90,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,90,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,83,32,-64,32,66,32,67,32,83,39,32,64,32,64,32,66,32,66,32,95,50,54,-32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,95,53,-53,32,85,32,65,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,83,39,32,66,32,64,32,66,39,32,85,32,-110,111,77,97,116,99,104,32,102,114,111,109,85,84,70,56,32,34,115,114,-99,47,77,105,99,114,111,72,115,47,68,101,115,117,103,97,114,46,104,115,-34,32,64,32,64,32,35,51,52,52,32,64,32,35,49,48,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,67,39,32,67,39,32,83,39,32,67,39,32,67,39,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,-32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,83,39,32,83,39,32,83,39,32,83,39,32,83,39,32,83,39,32,-83,39,32,67,39,32,67,39,32,83,39,32,83,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,66,32,66,32,66,32,83,39,32,66,32,64,32,66,39,32,66,32,-83,39,32,66,32,64,32,64,32,85,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,-83,39,32,66,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,83,39,32,83,39,32,67,39,32,67,39,32,83,39,32,83,39,32,83,-39,32,83,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,49,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,67,39,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,49,56,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-85,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,83,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,67,39,66,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,67,39,66,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,83,39,32,67,39,32,67,39,-66,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,32,66,32,66,-32,66,39,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,32,66,-32,66,32,66,32,83,39,32,64,32,64,32,64,32,66,32,66,32,66,32,-83,39,32,95,50,54,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,95,53,54,50,32,64,32,64,32,64,32,64,32,67,32,67,39,-32,67,39,66,32,64,32,64,32,85,32,65,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,-66,32,64,32,66,39,32,66,39,32,66,32,67,39,66,32,64,32,66,32,-66,39,32,64,32,66,32,66,32,95,50,54,32,64,32,64,32,66,32,66,-32,95,53,54,50,32,64,32,64,32,66,32,66,32,95,50,54,32,95,49,-49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,67,39,32,95,53,-50,52,32,64,32,95,54,56,53,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,66,32,66,32,-67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,-66,32,66,32,67,32,64,32,64,32,67,39,66,32,67,39,32,67,39,32,-64,32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,67,-39,66,32,64,32,64,32,66,32,66,32,66,32,95,54,48,32,64,32,64,-32,64,32,67,39,66,32,66,39,32,66,32,95,54,32,64,32,66,32,67,-32,67,32,66,32,64,32,83,39,32,67,39,66,32,64,32,85,32,64,32,-66,32,66,32,67,32,66,32,64,32,64,32,64,32,67,39,66,32,66,39,-32,66,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,-56,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,-64,32,66,32,90,32,64,32,67,39,32,67,39,32,80,32,64,32,64,32,-67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,53,53,48,32,64,32,64,32,64,32,64,32,85,-32,64,32,64,32,64,32,64,32,67,39,66,32,95,53,57,32,64,32,85,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,39,32,67,39,32,95,54,56,54,32,64,32,64,32,64,32,66,32,-67,39,32,95,54,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,-66,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,49,56,-32,64,32,64,32,95,52,52,32,64,32,64,32,64,32,64,32,66,32,66,-32,85,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,95,54,57,-50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,66,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,-61,32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,67,39,32,67,39,32,67,39,66,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,83,39,32,67,39,32,-67,39,66,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,32,66,-32,66,32,66,39,32,64,32,64,32,66,32,66,32,66,32,83,39,32,95,-50,54,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,-53,54,50,32,64,32,64,32,64,32,64,32,67,32,67,39,32,67,39,66,-32,64,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,67,39,66,32,66,32,67,39,66,32,64,32,66,-32,66,39,32,64,32,66,32,66,32,67,32,64,32,64,32,67,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,66,32,64,32,-64,32,66,32,66,32,66,32,95,54,48,32,64,32,64,32,64,32,67,39,-32,83,39,32,66,32,64,32,64,32,66,32,66,32,95,54,32,64,32,64,-32,66,32,67,39,32,67,32,64,32,66,32,67,32,66,32,64,32,64,32,-66,32,83,39,32,67,39,66,32,64,32,85,32,64,32,64,32,66,32,66,-32,66,32,67,32,66,32,64,32,64,32,64,32,64,32,66,32,67,39,66,-32,66,39,32,66,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,48,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,85,32,64,32,64,32,64,32,66,32,66,32,67,39,66,32,80,32,-64,32,64,32,64,32,66,32,67,39,32,95,54,32,64,32,64,32,67,32,-95,54,57,51,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,95,53,53,48,32,64,32,64,32,64,32,85,32,64,32,-64,32,64,32,85,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-67,39,32,95,54,56,54,32,64,32,95,54,32,85,32,67,39,66,32,67,-32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,95,52,52,32,64,-32,64,32,85,32,75,32,95,52,51,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,66,32,83,39,-32,67,39,32,67,39,32,67,39,32,64,32,64,32,64,32,66,32,66,32,-66,32,67,39,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,-64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,64,32,64,32,64,-32,66,32,66,32,66,32,83,39,32,95,50,54,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,95,53,54,50,32,64,32,64,32,64,-32,64,32,67,32,67,39,32,67,39,66,32,64,32,64,32,85,32,65,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,32,83,39,32,67,39,32,67,39,32,67,39,32,67,39,32,83,-39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,-32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,67,39,66,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,95,51,49,54,-32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,67,39,-32,83,39,32,83,39,32,95,48,32,95,53,53,54,32,64,32,64,32,66,-32,95,54,57,52,32,64,32,95,54,57,56,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,66,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,83,39,32,95,48,32,95,53,53,54,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,67,39,32,67,39,32,67,39,66,32,64,32,-64,32,67,39,66,32,67,39,32,67,39,32,64,32,64,32,67,39,32,95,-49,53,51,32,64,32,95,54,48,32,95,53,50,53,32,64,32,64,32,64,-32,64,32,64,32,66,32,95,54,48,32,64,32,66,32,85,32,64,32,67,-39,32,67,39,66,32,64,32,66,32,85,32,64,32,95,53,53,48,32,64,-32,64,32,67,39,32,67,39,32,80,32,64,32,64,32,66,32,95,49,53,-51,32,64,32,95,54,57,57,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,95,49,49,32,95,53,53,54,32,-64,32,64,32,64,32,64,32,66,32,66,32,80,32,64,32,64,32,95,55,-48,48,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,-66,32,95,50,54,32,64,32,95,55,48,52,32,64,32,64,32,64,32,67,-39,66,32,95,50,54,32,64,32,95,52,56,48,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,66,32,-95,50,54,32,64,32,66,32,95,53,51,56,32,64,32,66,32,95,55,48,-53,32,95,52,48,32,95,55,48,54,32,64,32,64,32,64,32,66,32,85,-32,64,32,66,32,90,32,64,32,83,39,32,80,32,64,32,95,53,53,48,-32,64,32,66,32,90,32,64,32,95,55,48,52,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,-32,64,32,66,32,66,32,95,54,48,32,64,32,64,32,85,32,64,32,64,-32,85,32,75,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,95,50,54,32,95,49,49,32,95,53,53,54,32,64,32,64,32,64,32,-64,32,64,32,66,32,67,32,64,32,95,55,49,52,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,95,54,56,54,32,64,32,95,54,32,85,32,-83,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,56,32,-64,32,64,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,49,56,-32,64,32,64,32,95,52,51,32,64,32,64,32,85,32,75,50,32,95,52,-52,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,67,32,67,32,-61,61,32,64,32,35,48,32,64,32,64,32,95,52,51,32,64,32,64,32,-85,32,75,32,95,52,52,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,90,32,64,32,-67,39,32,80,32,64,32,95,53,53,48,32,64,32,90,32,89,32,66,32,-83,32,73,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,-32,67,32,61,61,32,64,32,35,49,55,32,64,32,64,32,64,32,64,32,-66,32,85,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,89,32,64,32,66,32,66,32,66,32,-83,32,73,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,-32,67,39,66,32,64,32,85,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,67,39,66,32,66,39,32,66,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,55,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-66,32,64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,66,32,-66,39,32,64,32,66,32,66,39,32,64,32,85,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,67,39,66,32,66,32,67,39,32,80,32,64,-32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,39,32,95,54,32,64,32,64,32,67,32,95,54,57,51,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,55,49,53,32,64,10,65,-32,83,39,32,83,39,32,83,32,64,32,64,32,66,32,67,32,67,39,66,-32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,-32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,64,32,66,32,83,-39,32,66,32,64,32,66,39,32,66,32,67,39,66,32,64,32,66,32,85,-32,64,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,66,-32,83,39,32,66,32,64,32,66,39,32,80,32,64,32,64,32,64,32,67,-39,32,83,39,32,67,39,32,67,39,32,67,39,32,80,32,64,32,64,32,-64,32,64,32,64,32,67,39,66,32,66,32,67,32,64,32,66,32,67,39,-32,67,39,32,64,32,67,39,32,64,32,64,32,66,32,67,32,64,32,67,-32,95,53,50,56,32,64,32,64,32,64,32,64,32,64,32,90,32,75,32,-64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,55,49,51,32,64,32,58,55,49,-52,32,64,10,65,32,83,39,32,83,32,64,32,66,32,83,39,32,83,39,-32,64,32,67,39,32,95,54,56,32,95,56,48,32,64,32,64,32,95,55,-48,55,32,64,32,95,55,48,56,32,64,32,64,32,64,32,95,55,49,49,-32,64,32,64,32,95,55,49,50,32,64,32,58,55,49,51,32,64,10,65,-32,66,32,83,39,32,66,32,64,32,85,32,95,50,50,48,32,64,32,64,-32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,66,32,90,32,64,-32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,-32,66,32,66,32,90,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,80,32,64,32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,-64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,67,39,-66,32,66,39,32,66,39,32,95,53,51,52,32,64,32,64,32,64,32,66,-32,66,32,95,54,48,32,64,32,64,32,66,32,66,32,85,32,64,32,64,-32,66,32,66,32,66,32,66,32,83,39,32,95,53,49,55,32,64,32,85,-32,75,32,64,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,95,50,54,32,95,52,56,48,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,89,-32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,66,32,64,32,66,-32,66,32,80,32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,64,-32,67,39,32,80,32,64,32,67,32,95,51,49,57,32,64,32,95,53,50,-49,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,66,32,-66,32,67,32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,-66,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,83,39,32,67,-39,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-67,32,67,39,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,90,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,-32,83,39,32,66,32,64,32,64,32,64,32,66,32,66,32,66,39,32,64,-32,64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,39,32,-66,32,67,32,64,32,95,52,48,32,95,50,48,50,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,67,39,32,67,39,32,95,53,57,32,64,-32,64,32,67,32,80,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,90,32,64,32,90,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,75,-50,32,95,50,50,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,58,55,49,50,32,64,10,65,32,67,39,32,67,39,32,67,32,-64,32,64,32,67,32,67,39,32,67,39,32,64,32,66,32,67,39,32,64,-32,66,32,67,39,32,64,32,66,39,32,95,53,50,52,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,83,39,32,95,50,54,32,64,32,95,-53,49,54,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,66,-32,64,32,66,32,95,50,54,32,64,32,95,53,49,54,32,64,32,64,32,-64,32,64,32,66,32,67,39,32,67,32,64,32,64,32,83,39,32,67,39,-32,67,32,64,32,64,32,66,32,67,39,32,67,32,64,32,67,39,32,67,-32,64,32,66,32,67,39,32,95,55,48,57,32,64,32,95,53,50,53,32,-64,32,64,32,95,53,50,53,32,64,32,64,32,35,48,32,64,32,64,32,-64,32,95,55,48,55,32,64,32,64,32,66,32,95,54,51,55,32,67,32,-66,32,64,32,66,32,90,32,64,32,66,32,90,32,64,32,67,32,66,32,-64,32,66,32,90,32,64,32,66,32,90,32,64,32,95,54,56,32,95,56,-48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-89,32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,66,32,64,32,-64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,32,67,39,-32,67,39,32,67,39,32,95,53,57,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,32,64,32,64,32,66,32,80,32,64,32,95,55,49,48,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,53,50,48,32,102,114,111,109,85,-84,70,56,32,34,36,110,34,32,64,32,64,32,64,32,64,32,95,53,50,-48,32,102,114,111,109,85,84,70,56,32,34,36,116,116,34,32,64,32,64,-32,64,32,58,55,49,49,32,64,10,65,32,80,32,66,32,90,32,64,32,-66,32,66,32,95,50,54,32,95,51,50,49,32,64,32,64,32,64,32,67,-39,32,95,52,52,51,32,64,32,67,39,32,95,54,32,64,32,67,32,95,-54,55,32,95,50,48,50,32,64,32,64,32,64,32,95,50,52,57,32,64,-32,64,32,64,32,64,32,64,32,75,50,32,95,50,50,48,32,64,32,64,-32,58,55,49,48,32,64,10,65,32,66,32,66,32,89,32,64,32,64,32,-67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,83,32,83,39,32,66,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,-32,66,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,83,39,32,67,39,66,32,64,32,66,32,66,32,83,39,32,83,39,32,-66,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,-32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,66,32,67,39,32,67,39,32,64,32,66,32,-67,39,32,64,32,67,39,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,83,39,32,67,39,32,67,32,64,32,64,32,64,-32,66,32,66,32,67,39,32,67,39,32,67,39,32,64,32,64,32,66,32,-66,32,83,39,32,64,32,64,32,66,32,66,32,67,39,32,64,32,64,32,-66,32,66,32,83,39,32,64,32,64,32,66,32,66,32,83,39,32,64,32,-64,32,67,39,32,67,39,32,95,52,48,32,95,55,50,32,64,32,64,32,-64,32,67,32,95,56,49,32,95,49,48,52,32,64,32,64,32,64,32,35,-49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,67,39,32,67,32,64,32,64,32,64,32,67,39,66,32,66,39,32,-66,32,67,39,32,67,39,32,64,32,64,32,66,32,66,32,67,39,32,64,-32,64,32,66,32,66,32,95,53,54,56,32,64,32,64,32,67,39,66,32,-95,53,54,54,32,95,53,51,48,32,95,53,51,49,32,102,114,111,109,85,-84,70,56,32,34,61,61,34,32,64,32,64,32,64,32,64,32,64,32,66,-32,95,53,51,48,32,64,32,95,54,55,51,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,85,32,64,32,64,32,64,32,64,32,85,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,90,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,90,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-67,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,-39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-83,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,83,39,32,-83,39,32,83,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,-39,32,66,39,32,66,39,32,66,32,83,39,32,95,53,54,56,32,64,32,-64,32,67,39,66,32,95,53,54,54,32,95,53,51,48,32,95,53,51,49,-32,79,32,35,54,48,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,66,32,95,53,51,48,32,64,32,95,54,55,51,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,32,64,32,-64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,67,32,64,32,64,-32,85,32,66,32,80,32,110,111,77,97,116,99,104,32,75,32,64,32,35,-48,32,64,32,35,48,32,64,32,64,32,64,32,66,32,90,32,64,32,66,-32,85,32,64,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,-67,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,-32,67,32,64,32,64,32,67,32,64,32,64,32,85,32,75,32,83,32,85,-32,110,111,77,97,116,99,104,32,75,32,64,32,35,48,32,64,32,35,48,-32,64,32,64,32,64,32,66,32,90,32,64,32,66,32,85,32,64,32,90,-32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,85,32,75,32,80,32,110,111,77,97,116,99,104,-32,75,32,64,32,35,48,32,64,32,35,48,32,64,32,64,32,90,32,85,-32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,95,52,54,53,32,64,32,67,39,32,95,49,55,50,-32,95,49,56,52,32,64,32,64,32,95,51,50,49,32,64,32,35,50,32,-64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,39,32,66,32,95,50,54,32,64,32,95,53,50,-52,32,64,32,64,32,64,32,95,53,49,55,32,64,32,64,32,64,32,58,-55,48,57,32,64,10,65,32,35,53,32,58,55,48,56,32,64,10,65,32,-80,32,95,50,50,48,32,64,32,90,32,85,32,90,32,85,32,90,32,80,-32,90,32,90,32,95,51,50,49,32,64,32,64,32,64,32,75,50,32,95,-50,50,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-58,55,48,55,32,64,10,65,32,95,52,49,32,67,32,67,32,83,39,32,-64,32,90,32,66,32,90,32,64,32,67,32,67,32,67,39,32,64,32,90,-32,66,32,90,32,64,32,95,52,48,32,95,50,48,50,32,64,32,64,32,-64,32,64,32,64,32,75,50,32,95,52,52,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,90,32,64,32,67,39,66,32,85,32,75,51,32,-95,52,52,32,64,32,64,32,64,32,66,32,90,32,64,32,95,52,48,32,-95,50,48,50,32,64,32,64,32,64,32,64,32,64,32,64,32,95,52,53,-32,95,55,48,54,32,64,32,64,32,58,55,48,54,32,64,10,65,32,67,-39,32,83,39,32,67,39,66,32,64,32,64,32,66,32,64,32,73,32,64,-32,58,55,48,53,32,64,10,65,32,66,32,89,32,64,32,66,32,67,39,-32,83,32,64,32,66,32,67,32,66,32,64,32,64,32,83,39,32,83,39,-32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,49,55,32,64,32,64,32,64,32,64,32,66,32,83,-39,32,83,32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,50,48,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,50,48,32,64,32,64,32,64,32,-85,32,73,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,-39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,55,32,64,32,-64,32,64,32,64,32,66,32,85,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,-61,32,64,32,35,49,32,64,32,64,32,64,32,64,32,66,32,85,32,64,-32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,95,55,48,-50,32,64,32,80,32,95,55,48,51,32,64,32,95,54,54,51,32,64,32,-64,32,64,32,64,32,58,55,48,52,32,64,10,65,32,95,49,53,53,32,-95,49,55,49,32,95,55,48,51,32,64,32,64,32,95,54,52,51,32,64,-32,95,49,54,49,32,95,55,48,51,32,64,32,64,32,58,55,48,51,32,-64,10,65,32,75,32,66,32,66,32,95,50,54,32,95,50,49,57,32,64,-32,64,32,64,32,66,32,66,32,95,49,53,51,32,102,114,111,109,85,84,-70,56,32,34,105,109,112,111,115,115,105,98,108,101,58,32,34,32,64,32,-64,32,64,32,64,32,83,39,32,83,39,32,95,49,53,51,32,64,32,64,-32,66,32,66,32,95,49,53,52,32,95,55,48,49,32,64,32,64,32,64,-32,66,32,95,51,48,54,32,64,32,85,32,65,32,64,32,64,32,64,32,-64,32,66,32,66,32,95,49,53,51,32,79,32,35,51,50,32,64,32,75,-32,64,32,64,32,64,32,64,32,66,32,95,49,53,52,32,64,32,85,32,-75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,55,48,50,-32,64,10,65,32,95,49,53,53,32,95,49,55,49,32,95,55,48,49,32,-64,32,64,32,85,32,67,39,66,32,66,39,32,66,32,95,49,53,51,32,-64,32,95,49,53,52,32,95,49,54,50,32,95,49,57,49,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,95,49,53,51,32,79,32,35,52,-52,32,64,32,75,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,-95,49,53,51,32,64,32,95,49,53,52,32,95,49,56,56,32,64,32,64,-32,64,32,66,32,95,49,53,51,32,79,32,35,53,56,32,64,32,75,32,-64,32,64,32,64,32,95,49,53,52,32,95,49,56,56,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,49,54,49,32,95,55,48,49,32,-64,32,64,32,58,55,48,49,32,64,10,65,32,80,32,58,55,48,48,32,-64,10,65,32,67,32,67,32,66,32,64,32,83,39,32,83,32,64,32,66,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,-64,32,64,32,83,39,32,83,32,64,32,66,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,50,48,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,50,48,32,64,-32,64,32,64,32,85,32,75,32,95,53,56,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,52,32,64,32,64,32,64,32,85,32,75,50,32,95,53,56,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,-67,32,67,32,61,61,32,64,32,35,49,32,64,32,64,32,64,32,85,32,-67,39,66,32,66,32,95,49,53,51,32,64,32,95,54,57,57,32,64,32,-64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,95,53,53,48,32,95,51,48,53,32,64,32,64,32,58,54,-57,57,32,64,10,65,32,80,32,66,32,90,32,64,32,66,32,66,32,95,-50,54,32,95,50,55,53,32,95,50,49,57,32,102,114,111,109,85,84,70,-56,32,34,99,111,110,65,114,105,116,121,34,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,32,95,54,57,55,32,95,50,48,50,32,64,32,64,-32,64,32,64,32,64,32,75,50,32,35,49,32,64,32,64,32,58,54,57,-56,32,64,10,65,32,66,32,95,54,57,54,32,64,32,95,52,48,32,64,-32,58,54,57,55,32,64,10,65,32,67,39,32,67,39,32,67,32,64,32,-64,32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,95,54,-57,53,32,64,32,64,32,67,32,67,39,32,95,54,32,64,32,64,32,95,-50,52,57,32,64,32,64,32,64,32,95,53,50,32,64,32,64,32,85,32,-75,32,95,52,57,32,64,32,64,32,64,32,58,54,57,54,32,64,10,65,-32,66,32,89,32,64,32,66,32,66,32,80,32,95,53,50,32,64,32,64,-32,64,32,67,39,32,67,39,32,83,32,64,32,64,32,67,39,32,67,39,-32,64,32,64,32,95,52,57,32,64,32,64,32,64,32,58,54,57,53,32,-64,10,65,32,66,32,95,48,32,95,53,53,54,32,64,32,95,53,53,56,-32,64,32,64,32,83,39,32,83,39,32,95,49,48,54,32,95,53,53,54,-32,64,32,64,32,64,32,66,32,66,32,95,53,53,57,32,64,32,64,32,-95,52,54,52,32,64,32,64,32,66,32,66,32,95,49,49,32,95,53,53,-54,32,64,32,64,32,64,32,95,49,48,53,32,64,32,64,32,64,32,58,-54,57,52,32,64,10,65,32,67,32,83,39,32,67,39,32,64,32,66,32,-83,39,32,64,32,67,32,95,52,48,32,95,50,48,50,32,64,32,64,32,-95,53,50,49,32,64,32,64,32,64,32,95,53,50,55,32,64,32,64,32,-73,32,64,32,58,54,57,51,32,64,10,65,32,75,32,89,32,66,32,67,-32,66,32,64,32,64,32,67,39,32,83,39,32,67,32,64,32,64,32,66,-32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,-64,32,64,32,64,32,64,32,66,32,83,39,32,83,32,64,32,66,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,-64,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,52,32,-64,32,64,32,95,52,52,32,64,32,64,32,64,32,66,32,85,32,64,32,-90,32,67,32,66,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,-32,64,32,35,52,32,64,32,64,32,95,52,52,32,64,32,64,32,64,32,-66,32,85,32,64,32,90,32,95,52,48,32,95,54,57,49,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,49,32,64,-32,64,32,95,52,52,32,64,32,64,32,64,32,64,32,66,32,66,32,85,-32,64,32,64,32,66,32,67,39,66,32,66,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,-83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,66,32,67,32,67,-32,61,61,32,64,32,35,49,32,64,32,64,32,95,52,52,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,83,39,32,67,39,66,32,64,32,66,32,66,32,67,39,66,32,64,32,-64,32,66,32,66,32,95,49,54,56,32,64,32,64,32,64,32,64,32,73,-32,64,32,64,32,64,32,64,32,64,32,85,32,75,32,95,52,52,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,-32,64,32,67,32,66,32,64,32,66,32,67,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,49,32,64,32,64,32,67,39,66,32,67,32,-67,32,61,61,32,64,32,35,49,32,64,32,64,32,95,52,52,32,64,32,-64,32,85,32,75,50,32,95,52,52,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,85,32,64,32,95,52,48,32,95,50,48,50,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,54,57,50,-32,64,10,65,32,95,52,49,32,67,32,66,32,64,32,83,39,32,83,32,-64,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,53,-32,64,32,64,32,64,32,83,39,32,83,32,64,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,55,32,64,32,64,32,64,32,83,-39,32,67,32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,56,32,64,32,64,32,64,32,83,39,32,67,32,64,32,66,32,-67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,57,32,64,32,64,-32,64,32,66,32,85,32,64,32,67,32,66,32,64,32,66,32,67,39,66,-32,67,32,67,32,61,61,32,64,32,35,57,32,64,32,64,32,95,52,52,-32,64,32,64,32,64,32,66,32,85,32,64,32,95,52,48,32,95,54,53,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,-32,67,32,66,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,32,-64,32,35,56,32,64,32,64,32,95,52,52,32,64,32,64,32,64,32,66,-32,85,32,64,32,95,52,48,32,95,54,53,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,67,32,66,32,64,-32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,55,32,64,-32,64,32,95,52,52,32,64,32,64,32,64,32,66,32,85,32,64,32,95,-52,48,32,95,54,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,67,32,64,32,66,32,67,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,54,32,64,32,64,32,64,32,66,32,85,32,64,-32,67,32,66,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,32,-64,32,35,54,32,64,32,64,32,95,52,52,32,64,32,64,32,64,32,66,-32,85,32,64,32,95,52,48,32,95,54,53,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,85,32,64,32,67,32,66,32,64,32,66,-32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,53,32,64,32,64,-32,95,52,52,32,64,32,64,32,64,32,66,32,85,32,64,32,95,52,48,-32,95,54,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,83,32,64,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,50,32,64,32,64,32,64,32,83,39,32,67,32,-64,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,51,-32,64,32,64,32,64,32,83,39,32,67,32,64,32,66,32,67,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,66,-32,85,32,64,32,67,32,66,32,64,32,66,32,67,39,66,32,67,32,67,-32,61,61,32,64,32,35,52,32,64,32,64,32,95,52,52,32,64,32,64,-32,64,32,66,32,85,32,64,32,95,52,48,32,95,49,54,53,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,67,32,-66,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,-51,32,64,32,64,32,95,52,52,32,64,32,64,32,64,32,66,32,85,32,-64,32,95,52,48,32,95,54,56,55,32,95,52,49,49,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,-67,32,66,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,-32,35,50,32,64,32,64,32,95,52,52,32,64,32,64,32,64,32,66,32,-85,32,64,32,95,52,48,32,95,54,57,48,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,83,39,32,67,32,64,32,66,32,67,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,-32,66,32,85,32,64,32,67,32,66,32,64,32,66,32,67,39,66,32,67,-32,67,32,61,61,32,64,32,35,49,32,64,32,64,32,95,52,52,32,64,-32,64,32,64,32,66,32,85,32,64,32,95,52,48,32,95,52,49,49,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,-67,32,66,32,64,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,-32,35,48,32,64,32,64,32,95,52,52,32,64,32,64,32,64,32,66,32,-85,32,64,32,95,52,48,32,95,55,50,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,95,52,53,32,95,54,57,49,-32,64,32,64,32,58,54,57,49,32,64,10,65,32,95,52,49,32,95,54,-56,56,32,64,32,95,54,56,57,32,64,32,58,54,57,48,32,64,10,65,-32,102,47,61,32,58,54,56,57,32,64,10,65,32,102,61,61,32,58,54,-56,56,32,64,10,65,32,83,39,32,95,52,49,32,64,32,66,32,67,32,-66,32,64,32,64,32,66,32,67,39,66,32,66,32,64,32,64,32,83,39,-32,67,39,66,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,66,-32,66,32,66,32,95,49,54,56,32,64,32,64,32,64,32,95,52,48,32,-64,32,64,32,64,32,95,52,48,32,64,32,64,32,64,32,64,32,66,32,-95,52,53,32,64,32,95,54,56,55,32,64,32,64,32,58,54,56,55,32,-64,10,65,32,67,39,32,89,32,64,32,66,32,66,32,83,39,32,80,32,-64,32,67,39,32,80,32,64,32,95,52,49,54,32,64,32,95,53,56,32,-64,32,64,32,64,32,64,32,67,39,66,32,66,32,83,39,32,83,32,64,-32,64,32,67,39,66,32,83,39,32,83,39,32,64,32,64,32,67,39,66,-32,66,39,32,66,32,80,32,64,32,95,52,49,54,32,64,32,64,32,64,-32,95,53,57,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,64,-32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,95,53,56,-32,64,32,58,54,56,54,32,64,10,65,32,67,32,83,32,66,32,64,32,-66,32,83,39,32,83,32,64,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,54,32,64,32,64,32,64,32,67,39,32,83,32,64,-32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,56,32,-64,32,64,32,64,32,83,39,32,83,32,64,32,66,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,49,50,32,64,32,64,32,64,32,83,-39,32,83,32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,50,48,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,50,48,32,64,32,64,32,64,32,-85,32,67,32,83,39,32,95,53,54,51,32,64,32,95,53,54,52,32,95,-51,48,53,32,64,32,64,32,66,32,95,53,50,53,32,64,32,95,53,54,-52,32,95,51,48,53,32,64,32,64,32,64,32,64,32,66,32,83,39,32,-95,53,53,32,95,53,49,54,32,64,32,64,32,66,32,95,50,54,32,95,-53,54,53,32,64,32,64,32,95,54,48,32,95,53,50,53,32,64,32,64,-32,64,32,73,32,64,32,64,32,66,32,89,32,66,32,80,32,75,32,64,-32,64,32,67,39,66,32,66,32,95,53,57,32,64,32,66,32,95,53,50,-48,32,64,32,66,32,95,49,53,51,32,79,32,35,49,50,48,32,64,32,-75,32,64,32,64,32,64,32,95,49,53,52,32,95,49,56,56,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,52,52,32,95,-52,52,53,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,-50,32,35,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,-32,64,32,35,49,50,32,64,32,64,32,64,32,85,32,67,39,32,67,39,-66,32,64,32,67,39,66,32,66,32,95,53,54,56,32,64,32,95,54,56,-53,32,64,32,64,32,95,54,56,53,32,64,32,64,32,95,54,56,53,32,-64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,56,32,64,32,64,32,64,32,66,-32,85,32,64,32,66,32,85,32,64,32,67,39,32,67,32,64,32,66,32,-83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,-32,64,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,49,32,64,32,64,32,64,32,85,32,66,32,66,32,95,50,54,32,-95,54,56,53,32,64,32,64,32,64,32,67,39,32,67,32,64,32,95,53,-57,54,32,64,32,95,52,55,55,32,95,52,55,56,32,95,53,56,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,66,32,95,-50,54,32,95,53,57,57,32,64,32,64,32,95,54,48,32,95,54,56,53,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,55,32,-64,32,64,32,85,32,66,32,95,50,54,32,95,53,49,54,32,95,53,50,-48,32,102,114,111,109,85,84,70,56,32,34,36,102,34,32,64,32,64,32,-64,32,64,32,64,32,66,32,95,50,54,32,95,52,51,56,32,95,53,50,-52,32,64,32,95,50,54,32,95,53,50,53,32,64,32,95,53,50,48,32,-102,114,111,109,85,84,70,56,32,34,36,102,34,32,64,32,64,32,64,32,-64,32,64,32,64,32,95,54,48,32,95,54,56,53,32,64,32,64,32,64,-32,64,32,64,32,64,32,85,32,67,39,66,32,95,54,52,57,32,64,32,-95,54,56,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,66,32,66,32,83,32,64,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,51,32,64,32,64,32,64,32,83,39,32,67,32,64,-32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,52,32,-64,32,64,32,64,32,67,39,32,67,32,64,32,66,32,67,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,53,32,64,32,64,32,64,32,66,32,-85,32,64,32,66,32,95,54,55,50,32,64,32,95,51,48,54,32,95,54,-54,51,32,64,32,64,32,64,32,64,32,64,32,85,32,75,32,83,32,67,-32,66,32,64,32,83,39,32,83,32,64,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,64,32,67,39,32,-67,32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,52,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,67,32,-67,32,61,61,32,64,32,35,52,32,64,32,64,32,64,32,85,32,66,32,-95,53,51,48,32,64,32,66,32,95,54,55,51,32,64,32,95,49,49,49,-32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,95,54,56,52,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,67,32,67,-32,61,61,32,64,32,35,49,32,64,32,64,32,64,32,85,32,95,54,56,-49,32,64,32,64,32,64,32,64,32,64,32,95,53,51,48,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,95,55,49,-57,32,64,32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,67,32,64,32,66,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,-67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,-32,64,32,64,32,64,32,85,32,83,32,67,39,32,83,39,32,64,32,66,-32,64,32,66,32,83,39,32,67,39,66,32,64,32,67,32,67,32,61,61,-32,64,32,35,49,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,66,32,-83,39,32,66,32,64,32,66,32,67,39,66,32,64,32,67,32,67,32,61,-61,32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,-32,64,32,64,32,66,32,83,39,32,66,32,64,32,66,32,67,39,66,32,-64,32,67,32,67,32,61,61,32,64,32,35,56,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,66,32,83,39,32,66,32,64,-32,66,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,-32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,66,32,66,39,-32,64,32,67,32,67,32,95,52,48,32,95,50,48,50,32,64,32,64,32,-95,53,50,48,32,102,114,111,109,85,84,70,56,32,34,68,97,116,97,46,-76,105,115,116,95,84,121,112,101,46,43,43,34,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,54,32,95,54,-56,53,32,64,32,64,32,64,32,64,32,67,39,32,67,32,64,32,95,53,-57,54,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,-32,95,53,50,52,32,64,32,95,54,56,53,32,64,32,64,32,95,54,56,-53,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,95,53,50,53,-32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,53,48,32,95,51,-48,53,32,64,32,64,32,58,54,56,53,32,64,10,65,32,83,39,32,95,-53,50,52,32,64,32,66,32,95,53,50,52,32,95,53,50,53,32,95,53,-50,48,32,102,114,111,109,85,84,70,56,32,34,68,97,116,97,46,82,97,-116,105,111,95,84,121,112,101,46,95,109,107,82,97,116,105,111,110,97,108,-34,32,64,32,64,32,64,32,64,32,64,32,66,32,95,54,56,49,32,64,-32,95,54,56,50,32,64,32,64,32,64,32,66,32,95,54,56,49,32,64,-32,95,54,56,51,32,64,32,64,32,58,54,56,52,32,64,10,65,32,85,-32,65,32,64,32,58,54,56,51,32,64,10,65,32,85,32,75,32,64,32,-58,54,56,50,32,64,10,65,32,83,32,83,32,83,39,32,95,49,54,56,-32,64,32,95,54,56,32,95,52,50,50,32,64,32,95,52,48,50,32,95,-49,56,52,32,64,32,95,54,55,52,32,95,54,55,56,32,64,32,64,32,-64,32,64,32,67,32,95,56,55,32,95,52,50,50,32,64,32,64,32,95,-52,48,50,32,95,49,56,52,32,64,32,95,54,55,57,32,95,54,55,56,-32,64,32,64,32,64,32,64,32,64,32,66,32,95,53,50,52,32,95,53,-50,53,32,95,53,50,48,32,102,114,111,109,85,84,70,56,32,34,68,97,-116,97,46,73,110,116,101,103,101,114,46,95,105,110,116,76,105,115,116,84,-111,73,110,116,101,103,101,114,34,32,64,32,64,32,64,32,64,32,64,32,-66,32,95,53,57,57,32,64,32,66,32,95,54,48,32,95,54,32,95,53,-51,48,32,64,32,95,54,55,51,32,64,32,64,32,64,32,95,54,56,48,-32,64,32,64,32,64,32,64,32,64,32,66,32,95,53,50,52,32,95,53,-50,53,32,95,53,50,48,32,102,114,111,109,85,84,70,56,32,34,68,97,-116,97,46,73,110,116,101,103,101,114,95,84,121,112,101,46,95,105,110,116,-84,111,73,110,116,101,103,101,114,34,32,64,32,64,32,64,32,64,32,64,-32,66,32,95,53,51,48,32,64,32,66,32,95,54,55,51,32,64,32,95,-57,48,32,95,49,48,52,32,64,32,64,32,64,32,64,32,64,32,58,54,-56,49,32,64,10,65,32,85,32,67,32,83,32,64,32,95,53,57,32,95,-56,56,32,95,49,48,52,32,64,32,35,49,32,64,32,64,32,64,32,64,-32,58,54,56,48,32,64,10,65,32,85,32,65,32,64,32,58,54,55,57,-32,64,10,65,32,95,54,55,53,32,95,49,56,49,32,95,49,48,52,32,-64,32,95,54,55,54,32,95,54,55,55,32,95,57,55,32,35,48,32,64,-32,64,32,35,50,32,64,32,64,32,64,32,35,49,32,64,32,64,32,95,-54,55,54,32,95,54,55,55,32,95,57,55,32,35,48,32,64,32,64,32,-35,50,32,64,32,64,32,64,32,58,54,55,56,32,64,10,65,32,117,113,-117,111,116,32,58,54,55,55,32,64,10,65,32,73,32,58,54,55,54,32,-64,10,65,32,80,32,58,54,55,53,32,64,10,65,32,85,32,75,32,64,-32,58,54,55,52,32,64,10,65,32,66,32,80,32,35,48,32,64,32,64,-32,85,32,64,32,58,54,55,51,32,64,10,65,32,67,39,32,67,39,32,-83,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,66,32,67,39,-32,64,32,95,55,49,56,32,64,32,64,32,66,32,66,32,95,53,57,51,-32,64,32,64,32,95,54,52,49,32,64,32,64,32,64,32,67,39,32,79,-32,64,32,95,54,56,53,32,64,32,75,32,64,32,64,32,64,32,95,54,-48,32,85,32,67,39,66,32,66,32,80,32,64,32,67,39,32,79,32,64,-32,95,54,54,54,32,95,51,48,53,32,64,32,64,32,75,32,64,32,64,-32,64,32,95,54,55,49,32,64,32,64,32,64,32,64,32,58,54,55,50,-32,64,10,65,32,85,32,66,32,67,39,32,95,54,32,64,32,95,54,52,-57,32,64,32,64,32,95,54,55,48,32,64,32,64,32,58,54,55,49,32,-64,10,65,32,67,32,83,32,64,32,66,32,67,32,66,32,64,32,64,32,-66,32,83,39,32,83,39,32,83,32,64,32,64,32,67,39,32,67,32,64,-32,66,32,67,39,32,67,39,32,64,32,83,39,32,64,32,64,32,67,39,-32,67,39,66,32,64,32,67,32,66,32,64,32,95,54,56,53,32,64,32,-64,32,90,32,75,32,64,32,64,32,64,32,64,32,90,32,75,32,64,32,-64,32,64,32,64,32,66,32,66,32,67,39,32,67,32,64,32,67,39,32,-67,39,32,83,32,64,32,64,32,66,32,66,32,67,39,32,83,32,64,32,-67,32,95,53,50,56,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,95,50,54,32,95,54,56,53,32,64,32,64,32,64,32,64,32,66,32,-67,32,64,32,67,39,32,95,54,54,56,32,64,32,95,52,55,53,32,64,-32,64,32,64,32,64,32,64,32,66,32,95,54,54,57,32,64,32,95,53,-50,54,32,64,32,64,32,64,32,64,32,64,32,67,32,95,54,55,48,32,-64,32,64,32,64,32,64,32,64,32,58,54,55,48,32,64,10,65,32,95,-54,32,95,52,56,48,32,64,32,95,53,56,50,32,102,114,111,109,85,84,-70,56,32,34,36,118,34,32,64,32,64,32,64,32,58,54,54,57,32,64,-10,65,32,66,32,89,32,64,32,66,32,66,32,67,32,83,32,64,32,64,-32,64,32,67,39,32,83,39,32,83,39,32,67,39,32,83,32,64,32,64,-32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,39,32,67,32,64,-32,64,32,66,32,66,32,67,32,83,39,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,67,32,95,54,52,49,32,64,32,64,32,64,32,64,-32,64,32,66,32,67,39,32,67,39,32,67,39,32,79,32,64,32,64,32,-64,32,66,32,66,32,67,32,80,32,64,32,64,32,64,32,67,39,32,67,-39,32,95,53,55,56,32,64,32,64,32,67,39,32,67,39,32,79,32,64,-32,64,32,67,32,80,32,64,32,64,32,75,32,64,32,64,32,95,53,56,-32,64,32,64,32,64,32,64,32,67,39,32,79,32,64,32,66,32,80,32,-95,52,55,53,32,95,53,50,49,32,64,32,64,32,64,32,95,54,52,50,-32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,66,32,-66,32,66,32,67,32,66,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,83,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,-35,48,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-39,32,67,32,64,32,67,32,95,54,54,55,32,102,114,111,109,85,84,70,-56,32,34,68,97,116,97,46,66,111,111,108,46,111,116,104,101,114,119,105,-115,101,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,95,53,57,-53,32,64,32,64,32,64,32,64,32,67,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,67,32,95,53,55,53,32,64,32,64,32,64,-32,64,32,67,32,64,32,64,32,64,32,64,32,58,54,54,56,32,64,10,-65,32,66,32,85,32,64,32,90,32,95,52,48,32,95,54,53,32,64,32,-64,32,64,32,58,54,54,55,32,64,10,65,32,66,32,89,32,64,32,66,-32,67,39,32,67,32,64,32,66,32,83,32,66,32,64,32,64,32,83,39,-32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,66,32,66,32,66,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,56,32,64,32,-64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,83,32,64,-32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,49,55,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,49,56,32,64,32,64,32,64,-32,64,32,83,39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,48,32,64,32,64,-32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,-61,61,32,64,32,35,50,48,32,64,32,64,32,64,32,64,32,66,32,85,-32,64,32,75,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,56,32,64,32,64,-32,64,32,64,32,66,32,85,32,64,32,90,32,75,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,67,39,66,32,95,-54,53,48,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,83,-39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,49,52,32,64,32,64,32,64,32,64,32,66,32,-67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,-52,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,66,32,83,39,32,67,39,66,32,64,32,67,-32,67,32,61,61,32,64,32,35,56,32,64,32,64,32,64,32,64,32,66,-32,66,32,85,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,-32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,-48,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,67,39,66,32,-95,50,54,32,64,32,95,53,53,32,66,32,95,52,55,52,32,64,32,95,-52,55,52,32,95,53,55,52,32,64,32,64,32,64,32,95,53,56,48,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,66,-32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,-52,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,66,32,-64,32,64,32,66,32,66,32,83,32,64,32,64,32,66,32,66,32,67,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,55,32,64,32,64,32,64,-32,64,32,66,32,66,32,85,32,64,32,64,32,67,39,66,32,66,39,32,-95,50,54,32,64,32,64,32,67,39,32,83,39,32,95,52,51,56,32,95,-52,55,52,32,64,32,64,32,64,32,67,39,66,32,66,32,95,54,53,51,-32,64,32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,95,-51,50,49,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,-61,32,64,32,35,52,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,85,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,66,32,83,39,32,66,32,64,32,66,32,67,39,66,32,64,32,67,32,-67,32,61,61,32,64,32,35,53,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,67,39,66,32,-66,32,83,32,64,32,67,32,67,39,32,95,56,55,32,95,56,48,32,64,-32,64,32,95,51,50,49,32,64,32,35,50,32,64,32,64,32,64,32,64,-32,64,32,67,39,66,32,66,32,64,32,66,32,66,32,95,52,55,55,32,-64,32,64,32,66,32,66,32,95,52,55,56,32,64,32,64,32,66,32,95,-54,48,32,64,32,67,39,32,95,54,32,64,32,95,54,54,52,32,64,32,-95,54,54,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,-39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,83,39,32,67,39,66,-32,64,32,66,32,95,52,55,52,32,64,32,64,32,73,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,75,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,53,53,48,32,64,32,64,32,58,-54,54,54,32,64,10,65,32,66,32,80,32,35,52,32,64,32,64,32,85,-32,64,32,58,54,54,53,32,64,10,65,32,66,32,66,32,80,32,35,52,-32,64,32,64,32,64,32,80,32,64,32,58,54,54,52,32,64,10,65,32,-95,51,48,55,32,85,32,83,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,49,49,32,64,32,64,32,83,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,49,54,32,64,32,64,32,83,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,49,57,32,64,32,64,32,67,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,48,32,64,-32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,-50,49,32,64,32,64,32,85,32,83,32,67,32,67,39,32,64,32,95,51,-48,54,32,95,54,54,51,32,64,32,64,32,64,32,90,32,90,32,95,51,-48,54,32,95,54,53,52,32,95,54,53,53,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,85,32,95,51,48,54,32,95,54,53,54,-32,64,32,64,32,64,32,64,32,64,32,85,32,75,32,95,50,49,57,32,-102,114,111,109,85,84,70,56,32,34,103,101,116,83,76,111,99,32,69,85,-86,97,114,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,55,32,64,-32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,-49,56,32,64,32,64,32,85,32,90,32,95,51,48,54,32,95,54,54,51,-32,64,32,64,32,64,32,64,32,64,32,85,32,90,32,95,51,48,54,32,-95,51,48,56,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,66,-32,95,51,48,54,32,95,51,48,56,32,64,32,64,32,95,52,56,48,32,-64,32,64,32,64,32,64,32,64,32,64,32,83,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,49,51,32,64,32,64,32,67,32,83,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,49,52,32,64,32,64,32,-67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,53,32,-64,32,64,32,85,32,90,32,95,51,48,54,32,95,54,54,51,32,64,32,-64,32,64,32,64,32,64,32,85,32,95,51,48,54,32,95,54,54,51,32,-64,32,64,32,64,32,64,32,64,32,85,32,90,32,95,51,48,54,32,95,-54,54,51,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,67,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,49,50,32,64,32,64,32,-85,32,90,32,90,32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,-64,32,64,32,64,32,64,32,85,32,90,32,95,51,48,54,32,95,51,48,-56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,32,-83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,53,32,64,32,64,-32,83,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,56,32,-64,32,64,32,67,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,57,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,49,48,32,64,32,64,32,85,32,90,32,95,51,48,54,32,-95,54,54,51,32,64,32,64,32,64,32,64,32,64,32,85,32,67,32,67,-32,67,39,32,64,32,95,51,48,54,32,95,54,53,52,32,95,54,53,56,-32,64,32,64,32,64,32,64,32,95,51,48,54,32,95,51,48,56,32,64,-32,64,32,64,32,64,32,64,32,64,32,85,32,95,51,48,54,32,95,54,-53,57,32,64,32,64,32,64,32,64,32,64,32,67,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,54,32,64,32,64,32,67,32,67,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,55,32,64,32,64,32,85,-32,95,51,48,54,32,95,54,53,52,32,95,54,54,51,32,64,32,64,32,-64,32,64,32,64,32,85,32,90,32,95,51,48,54,32,95,54,53,52,32,-95,54,53,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,-32,90,32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,83,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,50,32,64,32,64,32,67,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,51,32,64,32,64,32,67,32,67,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,85,32,75,32,-64,32,64,32,64,32,85,32,95,51,48,54,32,95,54,53,52,32,95,54,-54,50,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,90,32,95,-51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,-64,32,64,32,85,32,90,32,95,51,48,54,32,95,54,54,51,32,64,32,-64,32,64,32,64,32,64,32,85,32,95,51,48,54,32,95,51,48,56,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,54,54,51,-32,64,10,65,32,95,51,48,55,32,85,32,67,32,67,32,67,39,32,64,-32,95,51,48,54,32,95,54,54,49,32,64,32,64,32,64,32,90,32,95,-51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,64,32,64,32,58,-54,54,50,32,64,10,65,32,95,51,48,55,32,85,32,90,32,95,51,48,-54,32,95,54,53,52,32,95,54,54,48,32,64,32,64,32,64,32,64,32,-64,32,58,54,54,49,32,64,10,65,32,95,51,48,55,32,85,32,83,32,-67,32,67,39,32,64,32,95,51,48,54,32,95,54,54,51,32,64,32,64,-32,64,32,90,32,90,32,95,51,48,54,32,95,54,53,52,32,95,54,53,-56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,54,54,48,-32,64,10,65,32,95,51,48,55,32,85,32,83,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,67,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,67,32,-67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,53,32,64,32,64,-32,85,32,90,32,90,32,95,51,48,54,32,95,54,54,51,32,64,32,64,-32,64,32,64,32,64,32,64,32,85,32,90,32,95,51,48,54,32,95,54,-54,51,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,90,32,95,-51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,-64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,50,32,64,32,64,32,85,32,95,51,48,54,32,95,54,54,51,32,64,-32,64,32,64,32,64,32,85,32,90,32,95,51,48,54,32,95,54,54,51,-32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,95,51,48,54,32,-95,54,53,52,32,95,54,54,51,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,58,54,53,57,32,64,10,65,32,95,51,48,55,32,67,32,-80,32,90,32,95,51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,-95,51,48,54,32,95,54,54,51,32,64,32,64,32,64,32,95,51,48,54,-32,95,54,53,52,32,95,54,53,55,32,64,32,64,32,64,32,64,32,58,-54,53,56,32,64,10,65,32,95,51,48,55,32,67,32,80,32,90,32,95,-51,48,54,32,95,51,48,56,32,64,32,64,32,64,32,90,32,95,51,48,-54,32,95,54,54,51,32,64,32,64,32,64,32,64,32,90,32,95,51,48,-54,32,95,51,48,56,32,64,32,64,32,64,32,64,32,58,54,53,55,32,-64,10,65,32,95,51,48,55,32,80,32,75,32,90,32,95,51,48,54,32,-95,51,48,56,32,64,32,64,32,64,32,64,32,90,32,95,51,48,54,32,-95,51,48,56,32,64,32,64,32,64,32,64,32,58,54,53,54,32,64,10,-65,32,95,51,48,55,32,85,32,90,32,95,51,48,54,32,95,51,48,56,-32,64,32,64,32,64,32,64,32,58,54,53,53,32,64,10,65,32,66,32,-95,51,48,55,32,64,32,66,32,80,32,95,53,49,57,32,64,32,64,32,-66,32,90,32,64,32,95,51,48,54,32,64,32,64,32,64,32,58,54,53,-52,32,64,10,65,32,66,32,83,39,32,66,32,95,50,54,32,95,53,54,-57,32,64,32,64,32,64,32,67,39,32,67,32,64,32,67,39,32,83,39,-32,95,53,55,48,32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,-64,32,67,32,80,32,64,32,64,32,75,32,64,32,64,32,73,32,64,32,-64,32,95,53,56,32,64,32,64,32,64,32,95,54,53,50,32,64,32,58,-54,53,51,32,64,10,65,32,67,39,66,32,95,54,53,49,32,64,32,67,-39,32,95,51,49,57,32,64,32,67,32,95,56,49,32,95,49,48,52,32,-64,32,64,32,35,49,32,64,32,64,32,35,52,52,32,64,32,64,32,58,-54,53,50,32,64,10,65,32,95,52,56,49,32,58,54,53,49,32,64,10,-65,32,66,32,66,32,80,32,35,49,55,32,64,32,64,32,64,32,80,32,-64,32,58,54,53,48,32,64,10,65,32,83,32,83,32,64,32,66,32,90,-32,64,32,66,32,90,32,64,32,83,39,32,67,32,64,32,66,32,67,32,-67,39,32,83,39,32,64,32,66,32,89,32,64,32,66,32,66,32,66,32,-89,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,39,32,80,32,-64,32,64,32,64,32,66,32,66,32,83,39,32,67,32,64,32,66,32,67,-32,83,39,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,-67,39,32,67,39,32,95,50,54,32,64,32,64,32,95,53,50,57,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,-83,39,32,83,32,64,32,64,32,66,32,66,32,67,32,83,32,64,32,64,-32,64,32,66,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,66,32,64,32,66,32,66,32,67,32,64,32,64,32,-66,32,66,32,67,39,32,67,39,32,64,32,67,39,32,64,32,64,32,64,-32,66,32,66,32,67,39,32,67,39,32,95,53,51,54,32,64,32,64,32,-80,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,83,32,64,-32,64,32,64,32,66,32,66,32,83,32,67,39,32,83,39,32,64,32,95,-54,51,32,95,50,48,50,32,64,32,64,32,95,53,50,51,32,64,32,64,-32,64,32,64,32,66,32,67,39,32,67,39,32,95,50,54,32,64,32,64,-32,95,53,50,57,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,-39,32,95,50,54,32,64,32,64,32,95,53,51,50,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,67,39,32,67,32,64,32,64,32,66,32,-66,32,67,39,32,83,32,64,32,67,39,32,95,54,48,50,32,64,32,80,-32,110,111,77,97,116,99,104,32,75,32,64,32,35,48,32,64,32,35,48,-32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,67,32,67,-39,32,64,32,80,32,110,111,77,97,116,99,104,32,75,32,64,32,35,48,-32,64,32,35,48,32,64,32,64,32,65,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,95,53,56,50,32,102,114,111,-109,85,84,70,56,32,34,36,109,34,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,95,54,52,48,32,95,54,56,32,95,50,48,54,32,64,-32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,54,48,32,83,-32,73,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,67,32,-64,32,64,32,80,32,64,32,64,32,95,53,50,51,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,95,53,52,48,32,64,32,64,32,-66,32,66,32,95,50,54,32,95,50,57,52,32,64,32,64,32,64,32,67,-39,32,95,52,52,48,32,95,54,52,55,32,64,32,64,32,95,53,56,50,-32,102,114,111,109,85,84,70,56,32,34,36,112,34,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,48,55,32,95,54,-52,56,32,64,32,64,32,64,32,64,32,64,32,58,54,52,57,32,64,10,-65,32,67,32,95,53,56,56,32,64,32,95,53,56,32,64,32,58,54,52,-56,32,64,10,65,32,67,39,32,67,32,64,32,66,32,80,32,67,39,32,-67,39,32,79,32,64,32,64,32,83,39,32,66,32,64,32,80,32,64,32,-66,32,95,55,49,57,32,64,32,95,51,48,54,32,95,51,48,56,32,64,-32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,83,39,32,66,32,-64,32,66,32,67,39,32,95,53,57,32,64,32,64,32,67,39,66,32,80,-32,64,32,95,54,56,53,32,64,32,64,32,64,32,67,39,32,83,39,32,-89,32,64,32,64,32,66,32,66,32,66,32,80,32,75,32,64,32,64,32,-64,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,66,32,66,32,-66,32,95,53,57,32,64,32,64,32,64,32,66,32,66,32,83,32,80,32,-64,32,64,32,64,32,66,32,66,32,66,32,95,54,56,53,32,64,32,64,-32,64,32,67,39,66,32,66,39,32,66,32,95,54,52,49,32,64,32,95,-52,55,53,32,64,32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,-64,32,67,39,66,32,80,32,64,32,66,32,95,50,54,32,95,54,52,50,-32,64,32,64,32,95,52,55,53,32,64,32,64,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,54,52,54,32,95,-51,48,53,32,64,32,64,32,64,32,64,32,64,32,75,50,32,95,53,56,-32,64,32,64,32,58,54,52,55,32,64,10,65,32,66,32,89,32,64,32,-67,39,32,67,39,32,67,32,64,32,64,32,67,39,32,67,39,32,83,32,-64,32,64,32,66,32,66,32,67,39,32,67,39,32,64,32,66,32,64,32,-64,32,64,32,67,39,32,83,39,32,83,39,32,83,39,32,83,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,49,51,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,83,39,32,67,39,32,83,39,32,83,32,64,32,64,-32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,49,55,32,64,32,64,32,64,32,64,32,64,32,83,39,32,-66,32,64,32,66,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,56,32,64,32,64,-32,64,32,64,32,66,32,83,39,32,83,32,64,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,50,48,32,64,32,64,32,64,32,-67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,50,-48,32,64,32,64,32,64,32,85,32,75,32,95,53,56,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,-32,67,32,61,61,32,64,32,35,49,56,32,64,32,64,32,64,32,64,32,-66,32,85,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,85,32,64,32,64,32,67,32,67,39,66,32,64,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,83,39,32,67,39,32,67,32,64,-32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,49,52,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,-66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,53,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,66,-32,64,32,67,32,67,32,61,61,32,64,32,35,49,53,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,90,32,-64,32,66,32,66,32,95,53,48,55,32,64,32,64,32,66,32,67,39,32,-67,32,64,32,67,39,32,80,32,64,32,75,32,64,32,67,39,32,79,32,-64,32,95,52,54,49,32,64,32,75,32,64,32,64,32,64,32,64,32,95,-53,53,48,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,-75,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,-64,32,90,32,64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,-32,66,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,-32,67,39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,55,32,64,32,64,32,64,32,-64,32,83,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,56,32,64,32,64,32,64,-32,64,32,66,32,83,39,32,67,39,66,32,64,32,67,32,67,32,61,61,-32,64,32,35,56,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,67,39,32,67,-39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,64,-32,64,32,64,32,66,32,85,32,64,32,95,53,48,55,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,95,53,48,55,-32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,67,32,-67,32,61,61,32,64,32,35,52,32,64,32,64,32,64,32,85,32,75,50,-32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,83,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,-66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,-32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,67,39,32,67,32,-64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,50,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,50,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,66,32,64,32,66,-32,95,49,53,51,32,64,32,64,32,64,32,66,32,66,32,95,53,48,55,-32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,67,32,67,39,66,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,85,-32,64,32,83,39,32,67,39,66,32,64,32,66,32,95,49,53,51,32,64,-32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,66,32,85,32,64,-32,82,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,95,50,54,32,95,50,49,57,32,64,32,64,32,66,32,95,49,-53,51,32,102,114,111,109,85,84,70,56,32,34,112,97,116,86,97,114,115,-32,34,32,64,32,64,32,64,32,95,54,52,51,32,64,32,64,32,64,32,-64,32,67,32,83,39,32,83,39,32,64,32,83,39,32,95,53,54,32,64,-32,95,54,52,52,32,64,32,95,54,52,53,32,64,32,64,32,95,53,57,-32,64,32,64,32,73,32,64,32,64,32,64,32,58,54,52,54,32,64,10,-65,32,85,32,75,32,67,32,67,32,95,52,48,32,95,54,53,32,64,32,-79,32,35,57,53,32,64,32,75,32,64,32,64,32,64,32,95,52,52,32,-64,32,64,32,95,52,51,32,64,32,64,32,64,32,58,54,52,53,32,64,-10,65,32,85,32,75,32,83,39,32,83,39,32,95,53,54,32,64,32,95,-52,56,52,32,64,32,64,32,66,32,83,39,32,95,53,54,32,64,32,67,-32,95,52,48,32,95,49,54,53,32,64,32,64,32,35,53,56,32,64,32,-64,32,64,32,66,32,67,39,32,95,53,54,32,64,32,67,32,95,52,48,-32,95,49,54,53,32,64,32,64,32,35,52,52,32,64,32,64,32,64,32,-83,39,32,95,53,54,32,64,32,67,32,95,52,48,32,95,54,53,32,64,-32,64,32,102,114,111,109,85,84,70,56,32,34,91,93,34,32,64,32,64,-32,64,32,67,32,95,52,48,32,95,54,53,32,64,32,64,32,102,114,111,-109,85,84,70,56,32,34,40,41,34,32,64,32,64,32,64,32,64,32,64,-32,64,32,95,52,56,48,32,64,32,64,32,64,32,58,54,52,52,32,64,-10,65,32,95,54,32,95,51,53,51,32,64,32,95,52,57,49,32,64,32,-58,54,52,51,32,64,10,65,32,67,39,32,95,53,55,56,32,64,32,67,-39,32,79,32,64,32,80,32,95,53,56,32,64,32,64,32,75,32,64,32,-64,32,95,53,56,32,64,32,58,54,52,50,32,64,10,65,32,66,32,66,-32,80,32,35,53,32,64,32,64,32,64,32,80,32,64,32,58,54,52,49,-32,64,10,65,32,66,32,66,32,95,54,48,32,80,32,85,32,90,32,90,-32,95,54,48,51,32,64,32,64,32,64,32,64,32,66,32,95,54,48,52,-32,64,32,89,32,66,32,80,32,75,32,64,32,64,32,66,32,67,32,66,-32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,32,90,-32,64,32,64,32,66,32,67,32,95,53,57,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,54,51,-57,32,64,32,58,54,52,48,32,64,10,65,32,66,32,83,32,85,32,95,-53,56,32,64,32,64,32,64,32,66,32,90,32,64,32,66,32,90,32,64,-32,66,32,66,32,83,39,32,67,32,67,39,32,83,39,32,95,54,48,32,-64,32,64,32,66,32,66,32,83,32,73,32,64,32,64,32,64,32,83,39,-32,67,39,66,32,64,32,66,32,66,32,67,39,32,80,32,64,32,64,32,-64,32,83,39,32,67,39,32,83,32,64,32,64,32,66,32,67,39,32,83,-32,64,32,66,32,83,32,95,54,50,32,95,52,48,32,95,55,50,32,64,-32,64,32,64,32,64,32,95,54,48,55,32,64,32,64,32,64,32,66,32,-95,54,48,51,32,64,32,64,32,64,32,66,32,66,32,95,54,48,52,32,-64,32,64,32,67,32,67,39,32,79,32,64,32,64,32,75,32,64,32,64,-32,64,32,64,32,64,32,66,32,90,32,64,32,66,32,90,32,64,32,66,-32,66,32,95,54,48,52,32,64,32,64,32,67,39,32,67,32,64,32,66,-32,89,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,67,-39,66,32,66,39,32,66,32,67,39,66,32,64,32,66,32,95,53,57,32,-64,32,64,32,64,32,64,32,95,53,53,32,64,32,64,32,64,32,64,32,-95,53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,54,-51,53,32,64,32,64,32,64,32,85,32,75,32,64,32,64,32,85,32,65,-32,64,32,64,32,64,32,64,32,95,54,51,56,32,64,32,64,32,64,32,-64,32,58,54,51,57,32,64,10,65,32,83,39,32,83,32,64,32,67,39,-32,67,39,32,83,39,32,80,32,64,32,64,32,64,32,66,32,66,32,66,-32,95,54,50,57,32,64,32,64,32,64,32,67,39,32,67,39,32,83,39,-32,89,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,80,32,75,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,-32,66,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,39,32,64,32,64,32,66,32,66,32,66,32,-67,39,32,67,39,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,67,39,66,32,80,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,95,54,51,54,32,64,32,64,32,64,32,67,39,66,-32,66,32,67,39,32,67,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,89,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,89,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,83,39,32,66,32,64,32,66,32,-83,32,64,32,95,49,52,57,32,95,56,48,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,66,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,83,32,64,-32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,32,67,39,-32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,64,32,83,-39,32,83,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,67,-39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,66,39,32,64,32,-66,32,67,32,64,32,64,32,64,32,64,32,67,32,67,39,32,64,32,67,-32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,35,49,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,83,39,32,-67,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,-32,66,39,32,64,32,66,32,66,32,67,32,64,32,64,32,67,32,64,32,-64,32,64,32,67,32,66,32,64,32,67,32,95,56,49,32,95,49,48,52,-32,64,32,64,32,35,49,32,64,32,64,32,64,32,64,32,95,52,57,32,-64,32,64,32,64,32,64,32,66,32,95,54,48,55,32,64,32,66,32,95,-54,50,57,32,64,32,89,32,66,32,80,32,75,32,64,32,64,32,66,32,-67,32,66,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,32,66,32,90,32,-64,32,64,32,64,32,66,32,67,39,32,67,39,32,95,53,57,32,64,32,-64,32,80,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,95,49,56,-49,32,95,49,48,52,32,64,32,64,32,67,39,32,67,39,32,95,49,55,-50,32,95,49,56,52,32,64,32,64,32,64,32,67,32,95,56,49,32,95,-49,48,52,32,64,32,64,32,64,32,95,57,48,32,95,49,48,52,32,64,-32,95,49,48,50,32,35,50,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,95,53,50,32,64,32,64,32,64,32,35,48,32,64,32,64,32,-64,32,67,39,32,95,56,49,32,95,49,48,52,32,64,32,64,32,95,51,-50,49,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,-66,32,95,54,48,55,32,64,32,95,54,50,57,32,64,32,64,32,64,32,-66,32,66,32,95,54,51,48,32,95,52,52,49,32,95,52,52,53,32,64,-32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,48,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,54,51,55,32,64,-32,66,32,67,32,66,32,64,32,64,32,66,32,90,32,64,32,66,32,66,-32,90,32,64,32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,90,-32,64,32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,54,51,56,32,64,10,65,32,66,32,89,32,64,32,-66,32,66,32,80,32,95,53,56,32,64,32,64,32,64,32,67,39,66,32,-66,32,83,39,32,67,32,64,32,64,32,66,32,95,53,51,55,32,64,32,-64,32,64,32,83,39,32,66,32,64,32,66,39,32,67,39,32,95,49,53,-51,32,64,32,64,32,64,32,67,39,66,32,95,53,57,32,64,32,64,32,-64,32,64,32,64,32,58,54,51,55,32,64,10,65,32,66,32,89,32,64,-32,66,32,66,32,80,32,95,53,56,32,64,32,64,32,64,32,67,39,32,-83,39,32,67,32,64,32,64,32,67,39,32,83,39,32,64,32,64,32,66,-32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,58,54,51,-54,32,64,10,65,32,83,32,95,54,49,57,32,64,32,66,32,95,52,49,-54,32,64,32,66,32,95,54,50,55,32,64,32,95,54,51,52,32,64,32,-64,32,64,32,58,54,51,53,32,64,10,65,32,83,39,32,95,54,51,49,-32,64,32,95,54,50,53,32,64,32,95,54,51,51,32,64,32,58,54,51,-52,32,64,10,65,32,66,32,89,32,66,32,80,32,75,32,64,32,64,32,-66,32,67,32,66,32,64,32,64,32,66,32,67,39,32,67,39,32,95,53,-57,32,64,32,64,32,67,32,80,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,95,54,51,50,32,64,32,58,54,51,51,32,64,10,65,32,-83,39,32,89,32,64,32,66,32,66,32,80,32,75,32,64,32,64,32,64,-32,66,32,67,39,32,83,39,32,67,39,32,89,32,64,32,64,32,64,32,-67,39,66,32,66,32,67,39,66,32,64,32,66,32,80,32,64,32,64,32,-64,32,66,32,67,39,66,32,64,32,66,32,66,32,95,53,57,32,64,32,-64,32,80,32,64,32,64,32,64,32,64,32,64,32,95,54,48,55,32,64,-32,64,32,64,32,95,54,50,53,32,64,32,58,54,51,50,32,64,10,65,-32,66,32,95,53,53,32,85,32,67,39,66,32,95,54,49,52,32,95,49,-53,51,32,64,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,-32,64,32,64,32,66,32,95,54,50,57,32,64,32,67,32,95,54,51,48,-32,64,32,95,51,49,56,32,95,53,56,32,64,32,64,32,64,32,64,32,-58,54,51,49,32,64,10,65,32,95,52,52,48,32,80,32,64,32,58,54,-51,48,32,64,10,65,32,95,53,53,32,95,54,50,56,32,95,54,49,53,-32,64,32,64,32,95,54,49,55,32,64,32,58,54,50,57,32,64,10,65,-32,85,32,58,54,50,56,32,64,10,65,32,67,39,32,95,54,50,49,32,-64,32,95,54,50,54,32,64,32,95,53,56,32,64,32,58,54,50,55,32,-64,10,65,32,83,32,95,54,49,57,32,64,32,95,54,50,53,32,64,32,-58,54,50,54,32,64,10,65,32,95,54,50,52,32,58,54,50,53,32,64,-10,65,32,95,54,32,95,54,48,32,95,50,52,57,32,64,32,64,32,95,-54,50,51,32,64,32,58,54,50,52,32,64,10,65,32,67,32,67,39,66,-32,80,32,95,53,56,32,64,32,67,39,32,67,39,32,79,32,64,32,64,-32,80,32,64,32,75,32,64,32,64,32,64,32,83,39,32,67,39,32,67,-39,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-95,54,50,50,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,67,-39,66,32,64,32,64,32,66,32,66,32,66,32,95,54,50,50,32,64,32,-64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,32,95,54,50,-50,32,64,32,64,32,67,39,66,32,66,32,95,54,48,32,64,32,85,32,-95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,48,32,64,-32,64,32,64,32,64,32,64,32,95,54,50,51,32,64,32,64,32,64,32,-67,39,66,32,66,32,95,54,48,32,64,32,85,32,35,49,32,64,32,64,-32,64,32,95,54,50,51,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,32,95,54,48,32,64,32,85,32,35,50,32,64,32,64,32,64,32,95,-54,50,51,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,95,54,-48,32,64,32,85,32,35,51,32,64,32,64,32,64,32,95,54,50,51,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,66,32,80,32,-64,32,64,32,67,39,32,95,49,56,49,32,95,49,48,52,32,64,32,64,-32,67,32,95,50,49,55,32,95,49,48,52,32,64,32,64,32,95,57,48,-32,95,49,48,52,32,64,32,95,49,48,50,32,35,52,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,54,50,51,32,64,10,65,32,66,-32,89,32,64,32,83,39,32,66,32,64,32,83,32,64,32,66,32,66,32,-90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,83,39,32,66,-32,64,32,66,32,83,32,64,32,85,32,64,32,64,32,66,32,66,32,90,-32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,67,32,67,39,32,-67,39,32,64,32,66,32,67,39,32,64,32,83,32,64,32,64,32,66,32,-66,32,66,32,83,32,66,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,66,32,-83,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,39,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,83,32,66,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,39,66,32,66,39,32,66,39,32,66,32,67,39,32,67,39,32,67,-39,32,67,32,64,32,64,32,64,32,64,32,66,32,67,39,66,32,66,39,-32,66,32,67,32,64,32,95,56,55,32,95,56,48,32,64,32,64,32,64,-32,64,32,64,32,67,39,66,32,95,53,57,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,67,39,66,32,95,53,57,32,64,32,64,32,67,-32,95,54,50,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,110,111,77,97,116,99,104,32,102,114,111,109,85,84,-70,56,32,34,46,47,108,105,98,47,68,97,116,97,47,73,110,116,77,97,-112,46,104,115,34,32,64,32,64,32,35,54,53,32,64,32,35,49,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,54,50,-50,32,64,10,65,32,66,32,95,50,54,32,95,53,53,32,95,54,32,64,-32,95,49,54,32,64,32,64,32,64,32,95,54,48,32,95,54,50,48,32,-64,32,64,32,58,54,50,49,32,64,10,65,32,85,32,66,32,67,39,32,-95,54,32,64,32,95,54,50,49,32,64,32,64,32,95,53,57,32,64,32,-64,32,58,54,50,48,32,64,10,65,32,66,32,66,32,95,50,54,32,95,-50,55,57,32,64,32,64,32,64,32,67,39,32,89,32,64,32,66,32,66,-32,66,32,89,32,64,32,64,32,64,32,66,32,66,32,83,39,32,66,32,-64,32,66,32,80,32,64,32,67,32,80,32,64,32,95,53,56,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,64,32,64,32,-64,32,66,32,66,32,83,39,32,83,39,32,83,39,32,64,32,64,32,67,-32,95,54,48,56,32,64,32,64,32,64,32,64,32,66,32,83,39,32,66,-32,64,32,66,32,83,32,64,32,66,32,67,39,32,67,39,32,64,32,66,-32,83,39,32,83,39,32,80,32,64,32,85,32,75,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,53,57,32,-64,32,64,32,67,39,66,32,95,54,48,57,32,64,32,85,32,65,32,64,-32,64,32,64,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,64,-32,67,32,67,39,32,64,32,85,32,75,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,67,32,67,39,32,67,39,32,64,32,83,39,32,64,-32,67,32,95,54,49,54,32,64,32,64,32,64,32,64,32,95,54,48,55,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,54,49,56,32,-64,32,64,32,58,54,49,57,32,64,10,65,32,95,54,49,48,32,95,54,-49,55,32,64,32,58,54,49,56,32,64,10,65,32,95,54,49,51,32,58,-54,49,55,32,64,10,65,32,66,32,66,32,95,54,49,48,32,64,32,64,-32,67,32,95,54,49,53,32,64,32,95,49,48,55,32,64,32,64,32,58,-54,49,54,32,64,10,65,32,95,54,49,52,32,95,56,32,64,32,58,54,-49,53,32,64,10,65,32,66,32,67,39,32,89,32,64,32,64,32,66,32,-66,32,66,32,66,32,89,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,66,32,66,32,83,39,32,67,39,32,67,32,64,32,64,-32,64,32,64,32,66,32,83,39,32,83,39,32,66,32,64,32,64,32,66,-32,66,32,80,32,64,32,64,32,67,32,95,54,49,49,32,64,32,64,32,-64,32,64,32,66,32,66,32,83,39,32,67,39,32,67,32,64,32,64,32,-67,39,66,32,66,32,83,39,32,83,39,32,64,32,64,32,95,52,48,32,-95,55,50,32,64,32,64,32,64,32,67,39,66,32,66,39,32,95,50,54,-32,64,32,64,32,67,39,32,67,39,32,95,50,54,32,64,32,64,32,95,-54,49,53,32,64,32,95,54,49,50,32,95,54,49,51,32,64,32,95,54,-49,51,32,64,32,95,54,49,51,32,64,32,95,54,49,51,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,66,32,95,54,49,-49,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,-67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,83,39,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,67,-32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,-83,39,32,83,39,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,95,52,-48,32,95,55,50,32,64,32,64,32,35,48,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,83,39,32,83,-39,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,66,32,83,39,32,83,39,32,64,32,67,32,95,52,48,32,95,55,-50,32,64,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,83,39,32,83,39,32,83,39,32,83,39,32,67,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,-67,39,32,83,39,32,64,32,67,32,95,52,48,32,95,55,50,32,64,32,-64,32,35,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,-39,32,64,32,64,32,95,54,49,50,32,64,32,64,32,64,32,67,32,64,-32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,66,32,66,32,-67,39,32,64,32,64,32,95,54,49,50,32,64,32,64,32,64,32,67,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,64,32,66,32,67,39,66,32,66,32,67,39,32,64,32,95,-54,49,50,32,64,32,64,32,64,32,67,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,66,32,67,39,-32,95,54,49,50,32,64,32,64,32,64,32,67,32,64,32,64,32,64,32,-64,32,64,32,64,32,85,32,75,32,64,32,64,32,64,32,85,32,65,32,-64,32,64,32,64,32,64,32,67,32,95,54,48,53,32,64,32,35,52,32,-64,32,64,32,64,32,64,32,64,32,58,54,49,52,32,64,10,65,32,90,-32,75,32,64,32,58,54,49,51,32,64,10,65,32,66,32,66,32,66,32,-90,32,64,32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,-64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,66,32,-67,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,58,54,49,50,-32,64,10,65,32,66,32,90,32,64,32,66,32,66,32,90,32,64,32,64,-32,80,32,64,32,64,32,58,54,49,49,32,64,10,65,32,73,32,58,54,-49,48,32,64,10,65,32,80,32,58,54,48,57,32,64,10,65,32,67,39,-32,67,32,64,32,67,39,32,67,32,64,32,95,54,48,54,32,64,32,95,-52,52,32,64,32,64,32,75,32,95,52,51,32,64,32,64,32,58,54,48,-56,32,64,10,65,32,67,39,32,67,32,64,32,67,39,32,67,32,64,32,-67,32,95,54,48,54,32,64,32,64,32,95,50,49,57,32,102,114,111,109,-85,84,70,56,32,34,68,97,116,97,46,73,110,116,77,97,112,46,33,34,-32,64,32,64,32,64,32,64,32,73,32,64,32,58,54,48,55,32,64,10,-65,32,83,39,32,67,32,64,32,66,32,80,32,95,53,50,32,64,32,64,-32,67,39,32,67,39,66,32,64,32,67,39,32,67,32,64,32,95,52,48,-32,95,55,50,32,64,32,64,32,95,53,50,32,64,32,64,32,95,52,57,-32,64,32,64,32,64,32,66,32,67,39,32,67,39,32,67,39,32,67,32,-64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,-32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,83,39,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,-64,32,64,32,66,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,-32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,95,-52,48,32,95,55,50,32,64,32,64,32,35,48,32,64,32,64,32,64,32,-64,32,64,32,66,32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,-66,32,83,39,32,83,39,32,64,32,67,32,95,52,48,32,95,55,50,32,-64,32,64,32,35,49,32,64,32,64,32,64,32,64,32,66,32,67,39,32,-67,32,64,32,66,32,67,39,32,83,39,32,64,32,67,32,95,52,48,32,-95,55,50,32,64,32,64,32,35,50,32,64,32,64,32,64,32,67,32,95,-54,48,54,32,64,32,64,32,64,32,64,32,67,32,95,54,48,54,32,64,-32,64,32,64,32,64,32,64,32,67,32,95,54,48,54,32,64,32,64,32,-64,32,64,32,64,32,67,32,95,54,48,54,32,64,32,64,32,64,32,64,-32,85,32,75,32,64,32,64,32,64,32,85,32,65,32,64,32,64,32,64,-32,64,32,67,32,95,54,48,53,32,64,32,35,52,32,64,32,64,32,64,-32,58,54,48,54,32,64,10,65,32,83,39,32,83,32,64,32,83,39,32,-83,39,32,67,32,64,32,64,32,67,39,32,67,39,32,83,32,64,32,64,-32,67,39,66,32,66,32,83,39,32,83,39,32,64,32,64,32,67,39,66,-32,66,32,95,53,54,32,64,32,67,32,95,50,48,53,32,95,56,48,32,-64,32,64,32,35,48,32,64,32,64,32,64,32,67,32,95,52,48,32,95,-55,50,32,64,32,64,32,35,48,32,64,32,64,32,64,32,64,32,66,32,-66,32,67,39,32,80,32,64,32,67,32,95,56,49,32,95,49,48,52,32,-64,32,64,32,35,49,32,64,32,64,32,64,32,64,32,67,32,95,49,56,-49,32,95,49,48,52,32,64,32,64,32,64,32,64,32,64,32,67,32,80,-32,64,32,64,32,64,32,95,49,55,50,32,95,49,56,52,32,64,32,64,-32,64,32,95,49,55,55,32,95,49,56,52,32,64,32,64,32,58,54,48,-53,32,64,10,65,32,90,32,85,32,64,32,58,54,48,52,32,64,10,65,-32,66,32,90,32,64,32,85,32,64,32,58,54,48,51,32,64,10,65,32,-67,39,66,32,66,32,67,32,64,32,67,39,32,67,39,32,83,32,64,32,-64,32,83,39,32,67,39,32,67,39,66,32,64,32,64,32,67,39,66,32,-66,32,67,39,32,83,39,32,95,50,54,32,64,32,64,32,64,32,67,39,-66,32,66,39,32,95,53,51,50,32,64,32,64,32,66,32,67,32,95,50,-54,32,64,32,64,32,66,32,95,53,54,53,32,64,32,85,32,65,32,64,-32,64,32,64,32,64,32,64,32,64,32,85,32,64,32,64,32,66,32,66,-32,95,50,54,32,95,53,53,32,95,54,32,64,32,95,49,54,32,64,32,-64,32,64,32,64,32,67,39,32,83,32,64,32,67,39,32,67,39,32,95,-52,52,48,32,64,32,64,32,66,32,66,32,66,32,67,32,95,53,50,57,-32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,32,64,32,66,32,-67,32,95,54,48,49,32,64,32,64,32,95,51,50,49,32,64,32,64,32,-64,32,95,53,50,53,32,64,32,64,32,64,32,95,52,52,49,32,95,52,-52,53,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,-32,35,48,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,-64,32,64,32,85,32,75,32,64,32,64,32,64,32,64,32,95,51,49,53,-32,64,32,58,54,48,50,32,64,10,65,32,67,39,66,32,66,32,67,32,-64,32,66,32,67,39,66,32,95,53,50,52,32,64,32,64,32,67,39,32,-83,39,32,95,53,53,32,95,53,49,54,32,64,32,64,32,64,32,66,32,-66,32,95,53,50,53,32,64,32,64,32,67,32,95,54,48,48,32,64,32,-64,32,64,32,73,32,64,32,64,32,64,32,64,32,66,32,89,32,66,32,-80,32,75,32,64,32,64,32,67,39,66,32,66,32,95,53,57,32,64,32,-66,32,95,53,50,48,32,64,32,66,32,95,49,53,51,32,79,32,35,49,-50,48,32,64,32,75,32,64,32,64,32,64,32,95,49,53,52,32,95,49,-56,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,-53,52,52,32,95,52,52,53,32,64,32,95,57,48,32,95,49,48,52,32,-64,32,95,49,48,50,32,35,49,32,64,32,64,32,64,32,64,32,64,32,-58,54,48,49,32,64,10,65,32,67,39,32,67,32,64,32,66,32,83,32,-67,32,95,56,55,32,95,56,48,32,64,32,64,32,35,48,32,64,32,64,-32,64,32,67,32,89,32,66,32,66,32,80,32,95,50,49,57,32,102,114,-111,109,85,84,70,56,32,34,33,33,58,32,101,109,112,116,121,34,32,64,-32,64,32,64,32,64,32,64,32,66,32,83,39,32,67,39,32,64,32,67,-32,95,52,48,32,95,55,50,32,64,32,64,32,35,48,32,64,32,64,32,-64,32,67,32,66,32,64,32,67,32,95,56,49,32,95,49,48,52,32,64,-32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,33,33,58,-32,60,48,34,32,64,32,64,32,64,32,58,54,48,48,32,64,10,65,32,-95,53,53,32,95,53,54,54,32,95,53,57,55,32,64,32,64,32,95,53,-57,56,32,64,32,58,53,57,57,32,64,10,65,32,95,53,51,48,32,95,-53,51,49,32,79,32,35,55,53,32,64,32,75,32,64,32,64,32,64,32,-58,53,57,56,32,64,10,65,32,95,53,51,48,32,95,53,51,49,32,79,-32,35,55,57,32,64,32,75,32,64,32,64,32,64,32,58,53,57,55,32,-64,10,65,32,66,32,89,32,64,32,83,39,32,66,32,64,32,66,32,83,-32,64,32,66,32,67,32,83,39,32,64,32,64,32,66,32,95,52,55,52,-32,64,32,95,52,55,52,32,95,53,55,52,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,83,39,32,67,39,32,83,39,32,67,39,32,83,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,67,39,32,83,-39,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-67,32,83,39,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,66,-32,66,32,83,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,83,-39,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-66,32,67,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,66,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,67,39,32,83,-39,32,95,53,55,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-39,32,79,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,67,39,66,32,95,53,55,54,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,67,39,66,32,66,39,32,66,39,-32,66,39,32,66,32,79,32,64,32,95,53,55,57,32,79,32,95,53,56,-48,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,83,39,32,83,39,32,79,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,66,-32,64,32,64,32,66,32,66,32,95,53,55,57,32,64,32,64,32,67,39,-32,67,39,32,79,32,64,32,64,32,66,32,95,52,55,52,32,64,32,95,-52,55,52,32,95,53,55,52,32,64,32,64,32,64,32,75,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,39,32,64,-32,67,32,95,52,55,52,32,64,32,64,32,64,32,64,32,67,39,32,67,-39,32,79,32,64,32,64,32,83,39,32,66,32,64,32,66,32,95,53,55,-57,32,64,32,67,39,32,79,32,64,32,95,52,55,52,32,95,52,55,52,-32,95,53,55,52,32,64,32,95,52,55,53,32,95,53,50,49,32,64,32,-64,32,64,32,64,32,75,32,64,32,64,32,64,32,67,32,95,52,55,52,-32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,75,-32,64,32,64,32,64,32,67,32,95,52,55,52,32,64,32,64,32,64,32,-95,52,55,53,32,64,32,64,32,64,32,66,32,95,50,54,32,95,52,56,-48,32,64,32,64,32,95,53,56,50,32,102,114,111,109,85,84,70,56,32,-34,36,104,34,32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,54,-32,95,52,55,53,32,64,32,64,32,66,32,95,50,54,32,95,52,56,48,-32,64,32,64,32,95,53,56,50,32,102,114,111,109,85,84,70,56,32,34,-36,118,115,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,95,53,57,51,32,64,32,64,32,64,32,66,32,-66,32,66,32,95,52,55,55,32,64,32,64,32,64,32,66,32,67,39,32,-95,53,57,52,32,64,32,64,32,66,32,66,32,95,52,55,57,32,64,32,-64,32,67,39,66,32,79,32,64,32,67,32,79,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,-39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-32,95,53,57,53,32,64,32,64,32,64,32,64,32,67,32,64,32,64,32,-73,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,95,53,55,53,-32,64,32,64,32,64,32,64,32,67,32,64,32,64,32,64,32,64,32,58,-53,57,54,32,64,10,65,32,66,32,66,32,66,32,80,32,35,49,50,32,-64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,-64,32,64,32,58,53,57,53,32,64,10,65,32,66,32,66,32,80,32,35,-49,32,64,32,64,32,64,32,80,32,64,32,58,53,57,52,32,64,10,65,-32,67,32,95,53,57,50,32,64,32,95,53,56,32,64,32,58,53,57,51,-32,64,10,65,32,85,32,83,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,49,49,32,64,32,64,32,83,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,49,54,32,64,32,64,32,83,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,49,57,32,64,32,64,32,67,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,48,32,64,-32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,-50,49,32,64,32,64,32,85,32,67,39,66,32,66,32,95,54,32,64,32,-66,32,95,49,53,51,32,64,32,95,54,48,32,85,32,75,32,64,32,64,-32,64,32,64,32,64,32,95,53,57,50,32,64,32,64,32,64,32,64,32,-85,32,66,32,95,53,57,32,64,32,95,53,54,52,32,95,51,48,53,32,-64,32,64,32,64,32,64,32,64,32,64,32,85,32,75,32,95,49,54,32,-64,32,64,32,64,32,64,32,64,32,67,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,49,55,32,64,32,64,32,67,32,67,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,49,56,32,64,32,64,32,85,32,-67,39,66,32,66,32,95,54,32,64,32,95,53,57,50,32,64,32,64,32,-95,53,57,50,32,64,32,64,32,64,32,64,32,85,32,67,39,66,32,66,-32,95,54,32,64,32,95,53,57,32,64,32,64,32,95,53,57,50,32,64,-32,64,32,64,32,64,32,64,32,85,32,75,32,95,49,54,32,64,32,64,-32,64,32,64,32,64,32,64,32,83,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,49,51,32,64,32,64,32,67,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,49,52,32,64,32,64,32,67,32,67,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,53,32,64,32,64,-32,85,32,67,39,66,32,66,32,95,54,32,64,32,95,53,57,50,32,64,-32,64,32,95,53,56,51,32,67,32,80,32,75,32,95,53,57,50,32,64,-32,64,32,66,32,95,53,57,32,64,32,95,52,54,49,32,64,32,64,32,-64,32,95,53,53,48,32,95,51,48,53,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,85,32,95,53,57,50,32,64,32,64,32,64,32,64,-32,85,32,90,32,95,53,57,50,32,64,32,64,32,64,32,64,32,64,32,-67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,50,32,-64,32,64,32,85,32,67,39,66,32,66,39,32,66,32,95,54,32,64,32,-95,53,57,50,32,64,32,64,32,64,32,67,39,66,32,66,32,95,54,32,-64,32,95,53,57,50,32,64,32,64,32,95,53,57,50,32,64,32,64,32,-64,32,64,32,64,32,85,32,67,39,66,32,66,32,95,54,32,64,32,95,-53,57,32,64,32,64,32,95,53,57,50,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,83,32,83,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,53,32,64,32,64,32,83,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,56,32,64,32,64,32,67,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,57,32,64,32,64,32,67,32,67,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,49,48,32,64,32,64,32,85,-32,66,32,67,39,32,95,54,32,64,32,95,53,57,32,64,32,64,32,95,-53,57,50,32,64,32,64,32,64,32,64,32,85,32,67,39,66,32,66,32,-95,54,32,64,32,95,51,56,52,32,95,49,54,32,64,32,95,53,57,32,-64,32,64,32,64,32,95,53,56,51,32,95,53,56,57,32,64,32,64,32,-64,32,64,32,64,32,64,32,85,32,83,32,73,32,64,32,67,39,32,67,-39,66,32,64,32,66,32,67,32,67,32,61,61,32,64,32,35,48,32,64,-32,64,32,64,32,95,53,57,48,32,64,32,64,32,85,32,95,53,56,51,-32,95,53,57,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,54,-32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,55,32,64,32,64,32,85,32,95,53,56,51,32,95,53,57,50,32,-64,32,64,32,64,32,64,32,85,32,67,39,66,32,66,32,95,54,32,64,-32,95,53,56,51,32,95,53,56,56,32,64,32,64,32,64,32,95,53,57,-50,32,64,32,64,32,64,32,64,32,64,32,85,32,67,39,66,32,66,32,-95,54,32,64,32,95,53,57,50,32,64,32,64,32,95,53,56,51,32,95,-53,57,49,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,32,-83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,32,64,32,64,-32,67,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,51,32,-64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,52,32,64,32,64,32,85,32,75,50,32,95,49,54,32,64,32,64,32,-64,32,64,32,85,32,95,53,56,51,32,95,53,56,55,32,64,32,64,32,-64,32,64,32,64,32,85,32,67,39,66,32,66,32,95,54,32,64,32,95,-53,57,50,32,64,32,64,32,95,53,56,51,32,85,32,67,39,66,32,66,-32,95,54,32,64,32,95,53,57,32,64,32,64,32,95,53,57,50,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,67,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,85,32,-67,39,66,32,66,32,95,54,32,64,32,95,53,57,50,32,64,32,64,32,-95,53,57,50,32,64,32,64,32,64,32,64,32,85,32,95,53,57,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,53,57,50,32,64,10,65,32,-85,32,67,39,66,32,66,32,95,54,32,64,32,95,53,56,52,32,64,32,-64,32,95,53,56,54,32,64,32,64,32,58,53,57,49,32,64,10,65,32,-85,32,83,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,51,-32,64,32,64,32,67,32,83,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,52,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,53,32,64,32,64,32,85,32,67,39,66,32,66,39,32,-66,32,95,54,32,64,32,95,53,57,50,32,64,32,64,32,64,32,67,39,-66,32,66,32,95,54,32,64,32,95,53,57,50,32,64,32,64,32,95,53,-57,50,32,64,32,64,32,64,32,64,32,64,32,85,32,67,39,66,32,66,-32,95,54,32,64,32,95,53,57,50,32,64,32,64,32,95,53,57,50,32,-64,32,64,32,64,32,64,32,64,32,85,32,67,39,66,32,66,32,95,54,-32,64,32,95,53,57,50,32,64,32,64,32,95,53,57,50,32,64,32,64,-32,64,32,64,32,64,32,67,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,49,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,50,32,64,32,64,32,85,32,95,53,57,50,32,-64,32,64,32,64,32,85,32,67,39,66,32,66,32,95,54,32,64,32,95,-53,57,50,32,64,32,64,32,95,53,56,51,32,95,53,56,57,32,64,32,-64,32,64,32,64,32,64,32,64,32,85,32,95,53,56,51,32,95,53,57,-50,32,64,32,64,32,64,32,64,32,64,32,58,53,57,48,32,64,10,65,-32,67,32,80,32,67,39,66,32,66,32,95,54,32,64,32,95,53,56,52,-32,64,32,64,32,95,53,57,50,32,64,32,64,32,95,53,57,50,32,64,-32,64,32,95,53,56,51,32,95,53,56,56,32,64,32,64,32,58,53,56,-57,32,64,10,65,32,67,32,80,32,67,39,66,32,66,32,95,54,32,64,-32,95,53,57,32,64,32,64,32,95,53,56,51,32,95,53,56,55,32,64,-32,64,32,64,32,67,39,66,32,66,32,95,54,32,64,32,95,53,56,52,-32,64,32,64,32,95,53,57,50,32,64,32,64,32,64,32,90,32,95,53,-57,32,64,32,64,32,58,53,56,56,32,64,10,65,32,85,32,67,39,66,-32,66,32,95,54,32,64,32,95,53,56,51,32,95,53,56,52,32,64,32,-64,32,64,32,95,53,56,54,32,64,32,64,32,58,53,56,55,32,64,10,-65,32,85,32,67,39,66,32,66,32,95,54,32,64,32,95,53,56,51,32,-95,53,56,53,32,64,32,64,32,64,32,95,53,56,51,32,95,53,56,56,-32,64,32,64,32,64,32,58,53,56,54,32,64,10,65,32,85,32,67,39,-66,32,66,32,95,54,32,64,32,95,53,56,51,32,95,53,56,57,32,64,-32,64,32,64,32,95,53,57,50,32,64,32,64,32,58,53,56,53,32,64,-10,65,32,95,53,57,50,32,58,53,56,52,32,64,10,65,32,66,32,89,-32,64,32,66,32,66,32,80,32,95,49,54,32,64,32,64,32,64,32,66,-32,67,39,66,32,64,32,66,32,95,54,32,64,32,64,32,64,32,64,32,-58,53,56,51,32,64,10,65,32,66,32,95,53,56,49,32,95,52,48,32,-95,50,48,50,32,64,32,64,32,64,32,67,39,32,89,32,64,32,66,32,-66,32,80,32,75,32,64,32,64,32,64,32,66,32,67,39,66,32,64,32,-66,32,66,32,95,53,57,32,64,32,64,32,66,32,66,32,95,53,50,48,-32,64,32,64,32,67,39,66,32,95,49,53,51,32,64,32,95,49,53,52,-32,95,49,56,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-95,52,52,49,32,95,52,52,53,32,64,32,35,49,32,64,32,64,32,64,-32,58,53,56,50,32,64,10,65,32,66,32,95,52,51,56,32,64,32,66,-32,95,49,51,49,32,64,32,95,53,50,50,32,64,32,64,32,58,53,56,-49,32,64,10,65,32,95,50,54,32,95,53,54,57,32,64,32,95,53,55,-48,32,79,32,80,32,95,53,55,50,32,64,32,95,57,48,32,95,49,48,-52,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,64,32,-79,32,80,32,95,53,55,51,32,64,32,95,57,48,32,95,49,48,52,32,-64,32,95,49,48,50,32,35,50,32,64,32,64,32,64,32,64,32,75,32,-64,32,64,32,64,32,95,53,55,50,32,64,32,95,53,56,32,64,32,64,-32,58,53,56,48,32,64,10,65,32,67,39,66,32,95,53,55,55,32,64,-32,67,39,32,95,53,55,56,32,64,32,67,39,32,79,32,64,32,80,32,-95,53,56,32,64,32,64,32,75,32,64,32,64,32,95,53,56,32,64,32,-64,32,58,53,55,57,32,64,10,65,32,80,32,58,53,55,56,32,64,10,-65,32,80,32,58,53,55,55,32,64,10,65,32,66,32,66,32,90,32,64,-32,64,32,66,32,66,32,90,32,64,32,64,32,80,32,64,32,64,32,58,-53,55,54,32,64,10,65,32,66,32,66,32,80,32,35,54,32,64,32,64,-32,64,32,80,32,64,32,58,53,55,53,32,64,10,65,32,95,50,54,32,-95,53,54,57,32,64,32,95,53,55,48,32,79,32,80,32,95,53,55,50,-32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,-48,32,64,32,64,32,64,32,64,32,79,32,80,32,95,53,55,51,32,64,-32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,50,32,-64,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,95,53,55,51,-32,64,32,95,53,56,32,64,32,64,32,58,53,55,52,32,64,10,65,32,-95,50,54,32,95,53,50,48,32,64,32,95,49,53,51,32,95,53,55,49,-32,64,32,79,32,35,53,56,32,64,32,75,32,64,32,64,32,64,32,58,-53,55,51,32,64,10,65,32,95,50,54,32,95,53,50,48,32,64,32,95,-49,53,51,32,95,53,55,49,32,64,32,102,114,111,109,85,84,70,56,32,-34,91,93,34,32,64,32,64,32,64,32,58,53,55,50,32,64,10,65,32,-102,114,111,109,85,84,70,56,32,34,68,97,116,97,46,76,105,115,116,95,-84,121,112,101,46,34,32,64,32,58,53,55,49,32,64,10,65,32,66,32,-66,32,66,32,90,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,-64,32,80,32,64,32,64,32,58,53,55,48,32,64,10,65,32,66,32,80,-32,35,50,48,32,64,32,64,32,85,32,64,32,58,53,54,57,32,64,10,-65,32,95,53,54,55,32,58,53,54,56,32,64,10,65,32,66,32,67,32,-64,32,95,53,54,54,32,64,32,58,53,54,55,32,64,10,65,32,66,32,-66,32,95,53,50,52,32,64,32,64,32,95,53,50,52,32,64,32,58,53,-54,54,32,64,10,65,32,95,54,32,95,53,49,54,32,95,53,50,48,32,-102,114,111,109,85,84,70,56,32,34,36,102,34,32,64,32,64,32,64,32,-64,32,95,52,51,56,32,95,53,50,52,32,64,32,95,53,50,53,32,95,-53,50,48,32,102,114,111,109,85,84,70,56,32,34,36,102,34,32,64,32,-64,32,64,32,64,32,64,32,58,53,54,53,32,64,10,65,32,75,32,80,-32,75,32,75,32,64,32,64,32,75,32,64,32,64,32,58,53,54,52,32,-64,10,65,32,67,32,67,32,95,50,49,51,32,64,32,95,53,50,32,64,-32,64,32,67,39,66,32,67,32,95,52,48,32,95,49,54,53,32,64,32,-35,52,52,32,64,32,64,32,95,53,50,32,64,32,64,32,66,32,95,52,-57,32,64,32,67,39,32,95,49,56,49,32,95,49,48,52,32,64,32,64,-32,95,51,50,49,32,64,32,35,50,32,64,32,64,32,64,32,64,32,58,-53,54,51,32,64,10,65,32,67,39,66,32,95,48,32,95,53,53,54,32,-64,32,64,32,83,39,32,83,32,64,32,66,32,83,32,95,53,53,55,32,-64,32,64,32,66,32,66,32,95,48,32,95,53,53,54,32,64,32,95,53,-54,49,32,64,32,64,32,64,32,67,39,66,32,66,32,83,39,32,95,48,-32,95,53,53,54,32,64,32,64,32,64,32,67,32,66,32,64,32,95,53,-50,53,32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,54,32,95,-49,49,32,95,53,53,54,32,64,32,64,32,64,32,64,32,64,32,67,32,-95,53,50,56,32,64,32,64,32,64,32,64,32,64,32,64,32,73,32,64,-32,64,32,58,53,54,50,32,64,10,65,32,95,48,32,95,53,53,54,32,-64,32,95,53,53,56,32,64,32,83,39,32,95,49,48,54,32,95,53,53,-54,32,64,32,64,32,66,32,95,53,53,57,32,64,32,95,53,54,48,32,-64,32,64,32,66,32,95,49,49,32,95,53,53,54,32,64,32,64,32,95,-52,56,48,32,64,32,64,32,64,32,58,53,54,49,32,64,10,65,32,80,-32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,116,97,105,108,-34,32,64,32,64,32,64,32,65,32,64,32,58,53,54,48,32,64,10,65,-32,66,32,95,50,54,32,95,53,53,51,32,64,32,64,32,90,32,80,32,-95,49,48,55,32,64,32,64,32,64,32,58,53,53,57,32,64,10,65,32,-95,50,54,32,95,53,53,51,32,64,32,83,32,80,32,64,32,73,32,64,-32,64,32,58,53,53,56,32,64,10,65,32,67,32,67,32,80,32,75,32,-95,52,51,32,64,32,64,32,75,50,32,95,52,52,32,64,32,64,32,64,-32,75,50,32,95,52,52,32,64,32,64,32,64,32,75,32,95,52,51,32,-64,32,64,32,58,53,53,55,32,64,10,65,32,95,49,32,95,53,53,53,-32,64,32,66,32,66,32,95,50,54,32,95,53,53,51,32,64,32,64,32,-64,32,67,39,66,32,66,32,67,32,64,32,95,53,53,49,32,64,32,64,-32,66,32,95,53,53,49,32,64,32,64,32,64,32,64,32,95,49,57,55,-32,95,53,53,53,32,64,32,64,32,95,49,52,53,32,95,53,53,53,32,-64,32,64,32,58,53,53,54,32,64,10,65,32,95,50,32,95,53,53,52,-32,64,32,66,32,95,50,54,32,95,53,53,51,32,64,32,64,32,80,32,-64,32,64,32,95,49,50,32,95,53,53,54,32,64,32,64,32,66,32,66,-32,95,50,54,32,95,53,53,51,32,64,32,64,32,64,32,67,39,66,32,-66,32,67,32,64,32,95,53,53,49,32,64,32,64,32,90,32,95,53,53,-49,32,64,32,64,32,64,32,64,32,95,49,57,32,95,53,53,53,32,64,-32,64,32,95,50,48,32,95,53,53,53,32,64,32,64,32,58,53,53,53,-32,64,10,65,32,95,51,32,66,32,66,32,95,50,54,32,95,53,53,51,-32,64,32,64,32,64,32,66,32,67,39,32,67,32,64,32,95,53,53,49,-32,64,32,64,32,66,32,80,32,64,32,64,32,64,32,64,32,95,57,32,-95,53,53,52,32,64,32,64,32,58,53,53,52,32,64,10,65,32,85,32,-58,53,53,51,32,64,10,65,32,66,32,95,54,32,95,50,52,57,32,64,-32,64,32,95,53,53,49,32,64,32,58,53,53,50,32,64,10,65,32,85,-32,73,32,64,32,58,53,53,49,32,64,10,65,32,75,32,95,50,49,57,-32,102,114,111,109,85,84,70,56,32,34,105,109,112,111,115,115,105,98,108,-101,34,32,64,32,64,32,64,32,58,53,53,48,32,64,10,65,32,95,49,-50,53,32,75,32,95,53,52,56,32,64,32,64,32,58,53,52,57,32,64,-10,65,32,85,32,75,50,32,75,52,32,65,32,64,32,64,32,64,32,58,-53,52,56,32,64,10,65,32,67,39,66,32,83,32,64,32,66,32,89,32,-64,32,66,32,67,39,32,83,32,64,32,67,39,32,67,39,32,83,32,64,-32,64,32,66,32,67,39,32,67,32,64,32,67,32,67,32,83,39,32,64,-32,75,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,67,-39,66,32,95,53,49,54,32,64,32,64,32,64,32,75,32,64,32,64,32,-64,32,66,32,95,53,50,52,32,64,32,66,32,95,53,51,48,32,64,32,-66,32,95,53,52,54,32,64,32,95,50,49,51,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,53,52,55,32,64,10,65,32,66,32,80,32,35,-57,32,64,32,64,32,85,32,64,32,58,53,52,54,32,64,10,65,32,66,-32,80,32,35,56,32,64,32,64,32,85,32,64,32,58,53,52,53,32,64,-10,65,32,85,32,75,50,32,75,52,32,75,32,64,32,64,32,64,32,58,-53,52,52,32,64,10,65,32,75,32,67,39,66,32,95,53,51,53,32,64,-32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,36,115,-117,112,101,114,34,32,64,32,64,32,64,32,95,49,53,52,32,95,49,56,-56,32,64,32,64,32,64,32,64,32,58,53,52,51,32,64,10,65,32,67,-32,95,53,51,53,32,64,32,102,114,111,109,85,84,70,56,32,34,36,67,-34,32,64,32,64,32,58,53,52,50,32,64,10,65,32,75,32,67,32,66,-32,64,32,90,32,67,32,66,32,64,32,66,32,67,39,66,32,95,52,56,-49,32,64,32,64,32,67,39,66,32,95,49,53,51,32,64,32,95,49,53,-51,32,79,32,35,52,54,32,64,32,75,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,58,53,52,49,32,64,10,65,32,67,32,67,-39,66,32,83,39,32,95,53,51,57,32,95,52,48,32,95,50,48,50,32,-64,32,64,32,64,32,66,32,95,50,54,32,95,54,54,32,67,32,95,54,-55,32,95,50,48,50,32,64,32,64,32,95,53,50,49,32,64,32,64,32,-64,32,64,32,95,54,48,32,95,50,52,57,32,64,32,64,32,64,32,73,-32,64,32,64,32,66,32,90,32,64,32,83,32,80,32,64,32,67,39,66,-32,80,32,64,32,90,32,90,32,83,39,32,95,50,54,32,64,32,66,32,-95,51,48,51,32,95,51,48,53,32,64,32,64,32,95,51,48,54,32,95,-51,48,56,32,64,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,-109,85,84,70,56,32,34,100,117,112,108,105,99,97,116,101,32,100,101,102,-105,110,105,116,105,111,110,32,34,32,64,32,64,32,64,32,95,50,53,52,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,-50,49,57,32,102,114,111,109,85,84,70,56,32,34,99,104,101,99,107,68,-117,112,34,32,64,32,64,32,64,32,58,53,52,48,32,64,10,65,32,66,-32,95,54,32,95,54,54,32,95,54,32,67,32,95,49,52,57,32,95,56,-48,32,64,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,-50,32,35,49,32,64,32,64,32,64,32,64,32,95,51,50,49,32,64,32,-64,32,64,32,64,32,95,53,51,56,32,64,32,58,53,51,57,32,64,10,-65,32,66,32,89,32,64,32,66,32,66,32,80,32,95,53,56,32,64,32,-64,32,64,32,67,39,66,32,66,32,83,39,32,67,32,64,32,64,32,66,-32,95,53,51,55,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,66,32,66,32,95,53,57,32,64,32,64,32,95,53,57,32,64,32,64,-32,64,32,64,32,64,32,58,53,51,56,32,64,10,65,32,83,39,32,83,-39,32,80,32,64,32,64,32,95,54,54,32,64,32,66,32,95,54,54,32,-64,32,95,54,32,95,49,50,51,32,64,32,64,32,64,32,58,53,51,55,-32,64,10,65,32,83,32,73,32,64,32,83,39,32,67,39,32,67,32,64,-32,64,32,83,39,32,66,32,64,32,66,32,83,32,64,32,83,39,32,80,-32,64,32,75,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,66,-32,66,32,90,32,64,32,64,32,83,39,32,67,39,32,67,39,32,67,32,-64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,67,32,-64,32,83,39,32,80,32,64,32,75,32,64,32,90,32,75,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,-32,90,32,64,32,64,32,67,39,32,83,39,32,67,32,64,32,64,32,67,-39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,66,32,64,32,66,32,66,32,67,39,32,67,39,32,67,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,-32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,-32,67,39,32,83,39,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,83,39,32,67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,-32,67,39,32,83,39,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,66,32,66,32,83,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,-32,66,39,32,66,39,32,66,39,32,66,39,32,66,32,83,39,32,83,39,-32,64,32,64,32,66,32,66,39,32,64,32,67,32,67,32,95,49,52,57,-32,95,56,48,32,64,32,64,32,35,48,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,-66,39,32,66,39,32,66,39,32,66,39,32,66,39,32,80,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,66,32,66,32,83,39,32,95,50,54,32,64,32,95,53,49,55,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,32,-64,32,66,32,67,39,32,83,39,32,64,32,66,32,67,39,32,64,32,66,-32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,32,64,32,-66,32,67,39,32,64,32,95,53,51,50,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,67,39,66,32,-66,32,95,53,49,55,32,64,32,85,32,65,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,67,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,-67,39,32,89,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,83,-39,32,66,32,64,32,66,39,32,66,32,67,39,32,83,39,32,83,32,64,-32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,83,32,64,-32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,67,39,32,67,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,67,32,67,-39,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,66,32,83,39,-32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,67,39,32,67,39,-32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,67,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,67,39,32,83,39,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,67,39,66,32,67,39,32,64,32,-67,32,95,53,57,32,64,32,64,32,64,32,64,32,90,32,75,32,64,32,-64,32,64,32,90,32,75,32,64,32,64,32,64,32,75,32,64,32,64,32,-64,32,67,39,66,32,66,32,67,39,66,32,64,32,66,32,66,39,32,64,-32,66,32,95,50,54,32,64,32,64,32,64,32,64,32,83,39,32,67,39,-66,32,64,32,66,32,66,32,95,53,50,52,32,64,32,64,32,85,32,95,-53,56,32,64,32,64,32,64,32,85,32,95,53,56,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,66,32,64,32,66,-32,66,39,32,64,32,66,32,95,50,54,32,64,32,64,32,64,32,64,32,-66,32,67,39,66,32,66,32,95,50,54,32,64,32,95,53,49,54,32,64,-32,64,32,64,32,85,32,95,53,56,32,64,32,64,32,64,32,64,32,64,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,83,39,32,83,32,64,32,67,32,67,39,32,67,39,32,-64,32,83,39,32,64,32,67,39,32,83,32,64,32,67,32,67,39,32,83,-39,32,64,32,85,32,95,53,50,53,32,64,32,64,32,90,32,75,32,64,-32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,75,32,64,32,64,-32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,32,83,39,32,67,39,32,67,39,32,83,39,-32,83,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-32,67,39,32,67,39,32,67,39,32,67,39,32,67,39,32,83,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,39,32,67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,-32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,83,39,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,-32,83,39,32,67,39,32,83,39,32,67,39,32,67,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,-32,64,32,67,39,66,32,66,39,32,66,39,32,66,32,67,39,32,95,49,-54,56,32,64,32,64,32,67,32,95,52,48,32,95,50,48,50,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,95,52,48,32,95,-50,52,53,32,95,50,48,50,32,64,32,64,32,64,32,64,32,95,49,48,-53,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,32,95,50,54,32,64,32,64,32,64,32,67,39,66,32,66,32,64,-32,95,52,54,52,32,64,32,64,32,64,32,64,32,64,32,90,32,75,32,-64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,75,32,64,32,-64,32,73,32,64,32,64,32,64,32,64,32,95,53,56,32,64,32,64,32,-64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,85,32,-75,32,64,32,64,32,64,32,64,32,67,32,95,52,54,53,32,64,32,64,-32,64,32,66,32,67,32,64,32,67,39,32,67,39,32,89,32,64,32,64,-32,66,32,66,32,67,39,32,83,39,32,83,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,83,32,64,32,64,32,64,32,83,39,32,67,39,32,-67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,67,32,67,32,67,-39,32,64,32,75,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,-83,39,32,83,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,-67,39,32,83,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,-39,32,67,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,-39,32,83,39,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,-32,64,32,64,32,64,32,67,39,66,32,67,39,32,64,32,67,32,95,53,-57,32,64,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,-90,32,75,32,64,32,64,32,64,32,75,32,64,32,64,32,83,39,32,67,-39,66,32,64,32,66,32,66,32,67,32,83,39,32,83,39,32,64,32,95,-52,48,32,95,55,50,32,64,32,95,57,48,32,95,49,48,52,32,64,32,-95,49,48,50,32,35,48,32,64,32,64,32,64,32,64,32,83,39,32,67,-32,64,32,66,32,83,32,95,52,48,32,95,55,50,32,64,32,95,57,48,-32,95,49,48,52,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,-64,32,64,32,64,32,95,53,51,51,32,95,56,48,32,64,32,64,32,64,-32,73,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,85,32,95,-53,56,32,64,32,64,32,64,32,85,32,95,53,56,32,64,32,64,32,64,-32,64,32,64,32,90,32,85,32,95,53,56,32,64,32,64,32,64,32,64,-32,75,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,83,32,-64,32,67,32,67,39,32,67,39,32,64,32,83,39,32,64,32,67,39,32,-83,32,64,32,67,32,67,39,32,83,39,32,64,32,85,32,75,32,35,48,-32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,90,32,75,-32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,90,32,75,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,32,-64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,-32,64,32,67,39,32,67,39,32,67,39,32,80,32,64,32,64,32,64,32,-67,39,66,32,66,39,32,66,32,67,32,64,32,67,39,32,67,32,64,32,-67,32,95,52,48,32,95,50,48,50,32,64,32,64,32,64,32,35,48,32,-64,32,64,32,64,32,64,32,66,32,66,32,95,51,50,49,32,64,32,64,-32,66,32,66,32,95,52,52,51,32,95,49,54,32,64,32,64,32,64,32,-67,32,95,52,52,48,32,95,52,48,32,95,50,48,50,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,75,50,32,35,48,32,64,32,64,32,-64,32,75,50,32,35,48,32,64,32,64,32,64,32,75,32,35,48,32,64,-32,64,32,64,32,64,32,64,32,95,53,56,32,64,32,64,32,64,32,64,-32,64,32,85,32,65,32,64,32,64,32,64,32,85,32,75,32,64,32,64,-32,64,32,64,32,89,32,67,39,32,83,32,64,32,67,39,32,67,39,32,-83,32,64,32,64,32,66,32,67,39,32,67,32,64,32,67,32,67,32,83,-39,32,64,32,75,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,32,83,39,32,80,32,64,32,85,32,75,32,64,-32,64,32,64,32,67,39,66,32,95,53,57,32,64,32,85,32,65,32,64,-32,64,32,64,32,64,32,64,32,64,32,75,32,64,32,64,32,67,32,80,-32,64,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-32,95,53,51,52,32,64,32,64,32,95,54,48,32,95,53,50,53,32,64,-32,64,32,64,32,64,32,95,53,50,53,32,64,32,64,32,67,32,95,53,-51,53,32,64,32,79,32,35,54,52,32,64,32,75,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,75,-32,64,32,64,32,58,53,51,54,32,64,10,65,32,67,32,66,32,64,32,-66,32,67,39,66,32,95,52,56,49,32,64,32,64,32,67,32,95,49,53,-51,32,64,32,64,32,64,32,58,53,51,53,32,64,10,65,32,95,52,51,-56,32,95,53,50,52,32,64,32,58,53,51,52,32,64,10,65,32,85,32,-75,50,32,75,52,32,65,32,64,32,64,32,64,32,58,53,51,51,32,64,-10,65,32,83,39,32,66,32,64,32,95,53,50,57,32,64,32,66,32,66,-32,95,53,50,52,32,95,53,51,48,32,95,53,51,49,32,79,32,35,56,-57,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,-49,54,32,64,32,64,32,58,53,51,50,32,64,10,65,32,66,32,80,32,-35,55,32,64,32,64,32,85,32,64,32,58,53,51,49,32,64,10,65,32,-90,32,90,32,90,32,85,32,64,32,64,32,64,32,58,53,51,48,32,64,-10,65,32,95,53,50,56,32,58,53,50,57,32,64,10,65,32,67,32,83,-39,32,67,39,32,64,32,66,32,83,39,32,64,32,67,32,95,52,48,32,-95,50,48,50,32,64,32,64,32,95,53,50,49,32,64,32,64,32,64,32,-83,39,32,83,39,32,83,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,83,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,83,32,-64,32,64,32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,-66,32,67,32,83,39,32,64,32,64,32,64,32,66,32,67,39,32,67,32,-64,32,64,32,66,32,67,32,64,32,95,52,48,32,95,50,48,50,32,64,-32,64,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,90,-32,75,32,64,32,64,32,64,32,75,32,64,32,64,32,83,39,32,66,32,-64,32,66,32,83,32,64,32,67,32,67,39,32,83,39,32,64,32,66,32,-95,54,54,32,64,32,67,32,95,52,48,32,95,50,48,50,32,64,32,64,-32,64,32,64,32,95,53,50,51,32,64,32,64,32,73,32,64,32,64,32,-64,32,66,32,66,32,90,32,64,32,64,32,83,39,32,83,39,32,83,39,-32,80,32,64,32,64,32,64,32,95,53,50,55,32,64,32,66,32,66,32,-90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,67,39,-32,95,53,50,52,32,64,32,64,32,95,53,49,54,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,58,53,50,-56,32,64,10,65,32,66,32,66,32,89,32,64,32,64,32,67,39,32,67,-39,32,67,39,32,83,32,64,32,64,32,64,32,83,39,32,83,39,32,83,-39,32,83,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,-32,66,32,67,32,64,32,64,32,66,32,66,32,83,32,73,32,64,32,64,-32,64,32,66,32,67,39,32,67,32,64,32,64,32,66,32,67,32,64,32,-67,32,95,52,48,32,95,50,48,50,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,95,53,50,52,-32,64,32,64,32,73,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,83,-39,32,67,39,32,64,32,64,32,95,52,48,32,95,50,48,50,32,64,32,-64,32,64,32,64,32,66,32,83,39,32,83,39,32,83,32,64,32,64,32,-67,39,66,32,66,32,83,39,32,83,39,32,64,32,64,32,66,32,67,32,-95,54,51,32,95,50,48,50,32,64,32,64,32,64,32,95,53,50,51,32,-64,32,64,32,64,32,67,39,66,32,95,53,49,54,32,64,32,64,32,64,-32,64,32,66,32,66,32,67,39,32,67,39,32,83,39,32,83,32,95,53,-49,54,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,32,-64,32,64,32,67,39,32,67,39,32,64,32,95,53,50,55,32,64,32,95,-53,50,53,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-95,52,56,48,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,-89,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,80,32,75,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,-39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,64,-32,64,32,64,32,64,32,66,32,67,39,66,32,66,32,83,39,32,83,39,-32,83,32,64,32,64,32,64,32,66,39,32,66,32,67,39,32,95,49,50,-51,32,64,32,64,32,66,32,67,32,95,54,51,32,95,50,48,50,32,64,-32,64,32,64,32,95,53,50,54,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,67,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,-32,66,39,32,66,32,67,39,32,95,49,50,51,32,64,32,64,32,66,32,-67,32,95,54,51,32,95,50,48,50,32,64,32,64,32,64,32,95,53,50,-54,32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,83,39,-32,83,32,64,32,64,32,64,32,66,39,32,66,32,67,32,64,32,67,32,-95,54,55,32,95,50,48,50,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,95,53,50,48,32,64,32,66,32,95,49,53,51,32,79,32,35,-57,55,32,64,32,75,32,64,32,64,32,64,32,95,49,53,52,32,95,49,-56,56,32,64,32,64,32,64,32,64,32,64,32,64,32,95,52,52,49,32,-95,52,52,53,32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,75,32,64,32,64,32,58,53,50,55,32,64,-10,65,32,67,32,67,32,80,32,67,32,79,32,64,32,75,32,64,32,64,-32,67,39,66,32,66,32,95,49,53,51,32,64,32,95,53,50,54,32,64,-32,64,32,95,53,50,54,32,64,32,64,32,64,32,67,39,66,32,95,53,-57,32,64,32,95,53,50,54,32,64,32,64,32,64,32,75,32,95,53,56,-32,64,32,64,32,58,53,50,54,32,64,10,65,32,66,32,90,32,64,32,-66,32,90,32,64,32,66,32,90,32,64,32,85,32,64,32,64,32,64,32,-58,53,50,53,32,64,10,65,32,66,32,90,32,64,32,66,32,66,32,90,-32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,80,32,64,32,64,-32,64,32,58,53,50,52,32,64,10,65,32,67,32,67,32,80,32,67,32,-79,32,64,32,75,32,64,32,64,32,67,39,66,32,66,32,95,49,53,51,-32,64,32,95,53,50,51,32,64,32,64,32,95,53,50,51,32,64,32,64,-32,64,32,67,39,66,32,95,53,50,50,32,95,52,48,32,95,50,48,50,-32,64,32,64,32,64,32,95,53,50,51,32,64,32,64,32,64,32,75,32,-95,53,56,32,64,32,64,32,58,53,50,51,32,64,10,65,32,66,32,66,-32,95,54,54,32,64,32,64,32,66,32,95,54,32,95,49,50,51,32,64,-32,64,32,64,32,58,53,50,50,32,64,10,65,32,95,53,50,48,32,79,-32,35,57,53,32,64,32,75,32,64,32,64,32,58,53,50,49,32,64,10,-65,32,95,52,56,49,32,95,53,49,57,32,64,32,58,53,50,48,32,64,-10,65,32,95,53,49,56,32,75,32,64,32,35,48,32,64,32,35,48,32,-64,32,58,53,49,57,32,64,10,65,32,83,39,32,66,32,64,32,66,39,-32,115,101,113,32,64,32,64,32,66,32,83,39,32,66,32,64,32,115,101,-113,32,64,32,64,32,66,32,66,32,83,32,115,101,113,32,64,32,64,32,-64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,64,32,-64,32,58,53,49,56,32,64,10,65,32,67,32,95,53,53,32,95,53,49,-54,32,64,32,64,32,58,53,49,55,32,64,10,65,32,66,32,90,32,64,-32,66,32,90,32,64,32,66,32,66,32,90,32,64,32,64,32,80,32,64,-32,64,32,64,32,58,53,49,54,32,64,10,65,32,66,32,66,32,66,32,-66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,-67,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,-67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,64,32,-64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,-64,32,64,32,64,32,64,32,58,53,49,53,32,64,10,65,32,83,39,32,-95,53,53,32,64,32,95,49,56,49,32,64,32,67,32,95,57,48,32,64,-32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,58,53,49,52,32,-64,10,65,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,58,53,-49,51,32,64,10,65,32,95,54,32,95,53,48,56,32,64,32,95,54,48,-32,95,53,49,49,32,64,32,64,32,58,53,49,50,32,64,10,65,32,85,-32,67,39,66,32,66,32,95,49,53,51,32,64,32,95,50,53,52,32,64,-32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,-32,61,32,34,32,64,32,64,32,64,32,95,49,53,52,32,95,53,49,48,-32,64,32,64,32,64,32,64,32,58,53,49,49,32,64,10,65,32,95,49,-53,53,32,95,49,55,49,32,95,53,49,48,32,64,32,64,32,95,54,32,-95,51,53,51,32,64,32,95,53,48,57,32,64,32,64,32,95,49,54,49,-32,95,53,49,48,32,64,32,64,32,58,53,49,48,32,64,10,65,32,67,-32,67,32,80,32,95,51,54,57,32,64,32,66,32,66,32,95,50,54,32,-95,51,54,53,32,64,32,64,32,64,32,67,39,66,32,66,32,95,51,54,-50,32,64,32,95,53,48,57,32,64,32,64,32,95,53,48,57,32,64,32,-64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,51,54,53,32,64,-32,64,32,64,32,67,39,66,32,66,32,95,51,54,50,32,64,32,67,39,-32,95,51,54,52,32,64,32,66,32,95,51,54,52,32,95,51,54,51,32,-79,32,35,57,50,32,64,32,75,32,64,32,64,32,64,32,64,32,95,51,-54,57,32,64,32,64,32,95,51,54,51,32,79,32,35,52,54,32,64,32,-75,32,64,32,64,32,64,32,64,32,64,32,95,53,48,57,32,64,32,64,-32,64,32,64,32,66,32,95,51,54,51,32,64,32,95,52,55,50,32,64,-32,64,32,58,53,48,57,32,64,10,65,32,95,53,48,55,32,67,32,95,-49,53,51,32,64,32,79,32,35,49,48,32,64,32,75,32,64,32,64,32,-64,32,58,53,48,56,32,64,10,65,32,66,32,89,32,64,32,66,32,66,-32,80,32,95,53,56,32,64,32,64,32,64,32,66,32,67,39,66,32,64,-32,66,32,95,49,53,51,32,64,32,64,32,64,32,64,32,58,53,48,55,-32,64,10,65,32,85,32,75,50,32,75,52,32,65,32,64,32,64,32,64,-32,58,53,48,54,32,64,10,65,32,95,53,48,52,32,58,53,48,53,32,-64,10,65,32,114,110,102,32,35,48,32,64,32,58,53,48,52,32,64,10,-65,32,95,54,32,95,51,53,51,32,64,32,95,53,48,50,32,64,32,58,-53,48,51,32,64,10,65,32,66,32,95,51,53,57,32,64,32,95,54,48,-32,83,32,83,32,66,32,64,32,83,39,32,83,39,32,83,32,64,32,64,-32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,-54,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,39,66,32,64,-32,67,32,67,32,61,61,32,64,32,35,54,32,64,32,64,32,64,32,64,-32,66,32,85,32,64,32,90,32,95,53,48,49,32,64,32,64,32,64,32,-64,32,64,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,-61,32,64,32,35,52,32,64,32,64,32,64,32,64,32,66,32,85,32,64,-32,90,32,90,32,95,53,48,49,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,95,51,57,51,32,64,32,95,53,48,49,32,64,-32,95,51,54,51,32,75,32,64,32,64,32,64,32,64,32,64,32,58,53,-48,50,32,64,10,65,32,85,32,83,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,54,32,64,32,64,32,83,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,57,32,64,32,64,32,67,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,49,48,32,64,32,64,32,67,-32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,49,32,64,-32,64,32,85,32,66,32,95,51,54,50,32,95,51,54,51,32,102,114,111,-109,85,84,70,56,32,34,100,101,102,97,117,108,116,34,32,64,32,64,32,-64,32,64,32,66,32,95,51,54,53,32,64,32,66,32,95,51,54,55,32,-64,32,66,32,95,51,54,56,32,95,51,54,51,32,102,114,111,109,85,84,-70,56,32,34,44,32,34,32,64,32,64,32,64,32,64,32,95,54,48,32,-95,52,57,50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,85,32,66,32,95,51,57,52,32,64,32,66,32,95,51,54,50,32,95,-51,54,51,32,102,114,111,109,85,84,70,56,32,34,105,110,115,116,97,110,-99,101,34,32,64,32,64,32,64,32,64,32,95,52,57,50,32,64,32,64,-32,64,32,64,32,64,32,64,32,85,32,66,32,66,32,66,32,95,51,57,-52,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,-32,95,51,54,50,32,64,32,64,32,67,39,66,32,66,32,95,51,54,50,-32,64,32,66,32,95,51,54,50,32,95,51,54,51,32,102,114,111,109,85,-84,70,56,32,34,99,108,97,115,115,34,32,64,32,64,32,64,32,64,32,-95,52,57,51,32,64,32,64,32,64,32,95,52,57,52,32,64,32,64,32,-64,32,95,52,57,53,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,55,32,64,32,-64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,56,-32,64,32,64,32,85,32,67,32,66,32,64,32,66,32,67,39,32,67,39,-32,95,51,54,50,32,64,32,64,32,67,39,66,32,66,32,95,51,54,50,-32,64,32,66,32,95,51,54,51,32,64,32,66,32,95,49,53,51,32,102,-114,111,109,85,84,70,56,32,34,105,110,102,105,120,34,32,64,32,64,32,-64,32,67,32,80,32,79,32,35,49,48,56,32,64,32,75,32,64,32,64,-32,79,32,35,49,49,52,32,64,32,75,32,64,32,64,32,64,32,75,32,-64,32,64,32,64,32,64,32,64,32,66,32,95,51,54,51,32,64,32,95,-49,53,52,32,95,49,56,56,32,64,32,64,32,64,32,64,32,64,32,66,-32,95,51,54,55,32,64,32,66,32,95,51,54,56,32,95,51,54,51,32,-102,114,111,109,85,84,70,56,32,34,44,32,34,32,64,32,64,32,64,32,-64,32,95,54,48,32,95,51,54,57,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,85,32,67,39,32,67,39,66,32,64,32,66,32,-66,32,95,51,54,50,32,64,32,64,32,67,39,32,67,39,32,95,51,54,-50,32,64,32,64,32,67,39,66,32,66,32,95,51,54,50,32,64,32,66,-32,95,51,54,51,32,64,32,66,32,95,49,53,51,32,102,114,111,109,85,-84,70,56,32,34,102,111,114,101,105,103,110,32,105,109,112,111,114,116,32,-99,99,97,108,108,32,34,32,64,32,64,32,64,32,95,49,53,52,32,95,-49,54,50,32,95,49,57,49,32,64,32,64,32,64,32,64,32,64,32,64,-32,95,51,54,57,32,64,32,64,32,95,51,54,51,32,102,114,111,109,85,-84,70,56,32,34,58,58,34,32,64,32,64,32,64,32,64,32,64,32,95,-52,57,50,32,64,32,64,32,64,32,64,32,64,32,85,32,85,32,67,39,-32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,95,51,-54,52,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,-66,32,95,51,54,52,32,64,32,64,32,67,39,66,32,66,32,95,51,54,-50,32,64,32,66,32,95,51,54,50,32,95,51,54,51,32,102,114,111,109,-85,84,70,56,32,34,105,109,112,111,114,116,34,32,64,32,64,32,64,32,-64,32,80,32,95,51,53,56,32,64,32,95,51,54,51,32,102,114,111,109,-85,84,70,56,32,34,113,117,97,108,105,102,105,101,100,34,32,64,32,64,-32,64,32,64,32,64,32,64,32,95,51,54,57,32,64,32,64,32,64,32,-66,32,95,51,54,51,32,64,32,95,51,56,52,32,75,32,64,32,95,54,-32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,32,97,115,32,-34,32,64,32,64,32,64,32,95,50,49,51,32,64,32,64,32,64,32,64,-32,64,32,64,32,80,32,95,51,53,56,32,64,32,85,32,67,39,66,32,-66,32,95,51,54,52,32,64,32,66,32,95,51,54,51,32,64,32,80,32,-75,32,64,32,102,114,111,109,85,84,70,56,32,34,32,104,105,100,105,110,-103,34,32,64,32,64,32,64,32,64,32,64,32,66,32,95,51,54,53,32,-64,32,66,32,95,50,54,32,95,51,54,55,32,64,32,64,32,66,32,95,-51,54,56,32,95,51,54,51,32,79,32,35,52,52,32,64,32,75,32,64,-32,64,32,64,32,64,32,95,54,48,32,95,52,57,54,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,83,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,51,32,64,32,64,32,67,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,52,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,53,32,64,32,64,32,85,32,67,39,66,32,66,-32,95,51,54,50,32,64,32,67,39,32,95,51,54,50,32,64,32,66,32,-95,51,54,50,32,95,51,54,51,32,102,114,111,109,85,84,70,56,32,34,-116,121,112,101,34,32,64,32,64,32,64,32,64,32,95,51,54,57,32,64,-32,64,32,95,51,54,51,32,102,114,111,109,85,84,70,56,32,34,58,58,-34,32,64,32,64,32,64,32,64,32,64,32,95,51,55,48,32,64,32,64,-32,64,32,64,32,85,32,67,39,66,32,66,32,95,51,54,50,32,64,32,-67,39,32,95,51,54,50,32,64,32,66,32,95,51,54,55,32,64,32,66,-32,95,51,54,56,32,95,51,54,51,32,79,32,35,52,52,32,64,32,75,-32,64,32,64,32,64,32,64,32,95,54,48,32,95,51,54,57,32,64,32,-64,32,64,32,64,32,95,51,54,51,32,102,114,111,109,85,84,70,56,32,-34,58,58,34,32,64,32,64,32,64,32,64,32,64,32,95,52,57,50,32,-64,32,64,32,64,32,64,32,64,32,85,32,67,39,32,95,52,55,51,32,-64,32,95,51,54,57,32,64,32,95,51,54,51,32,79,32,35,54,49,32,-64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,-83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,-32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,32,-64,32,64,32,85,32,67,39,66,32,66,32,95,51,54,50,32,64,32,67,-39,32,95,51,54,50,32,64,32,66,32,95,51,54,50,32,95,51,54,51,-32,102,114,111,109,85,84,70,56,32,34,116,121,112,101,34,32,64,32,64,-32,64,32,64,32,95,52,57,52,32,64,32,64,32,95,51,54,51,32,79,-32,35,54,49,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,95,-52,57,50,32,64,32,64,32,64,32,64,32,85,32,67,39,32,67,39,66,-32,64,32,66,32,66,32,95,51,54,50,32,64,32,64,32,67,39,66,32,-66,32,95,51,54,50,32,64,32,67,39,32,95,51,54,50,32,64,32,66,-32,95,51,54,50,32,95,51,54,51,32,102,114,111,109,85,84,70,56,32,-34,110,101,119,116,121,112,101,34,32,64,32,64,32,64,32,64,32,95,52,-57,52,32,64,32,64,32,95,51,54,51,32,79,32,35,54,49,32,64,32,-75,32,64,32,64,32,64,32,64,32,64,32,95,52,57,57,32,64,32,64,-32,64,32,95,53,48,48,32,64,32,64,32,64,32,64,32,64,32,85,32,-83,39,32,83,32,64,32,66,32,67,32,83,39,32,64,32,64,32,67,39,-66,32,66,32,95,51,54,50,32,64,32,66,32,95,51,54,50,32,95,51,-54,51,32,102,114,111,109,85,84,70,56,32,34,100,97,116,97,34,32,64,-32,64,32,64,32,64,32,95,52,57,52,32,64,32,64,32,64,32,95,53,-48,48,32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,-32,66,32,90,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,-66,32,95,51,54,50,32,64,32,64,32,67,39,66,32,66,32,95,51,54,-50,32,64,32,67,39,32,95,51,54,50,32,64,32,66,32,95,51,54,50,-32,95,51,54,51,32,102,114,111,109,85,84,70,56,32,34,100,97,116,97,-34,32,64,32,64,32,64,32,64,32,95,52,57,52,32,64,32,64,32,95,-51,54,51,32,79,32,35,54,49,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,66,32,95,51,54,55,32,64,32,66,32,95,51,54,56,32,-95,51,54,51,32,102,114,111,109,85,84,70,56,32,34,32,124,34,32,64,-32,64,32,64,32,64,32,95,54,48,32,95,52,57,57,32,64,32,64,32,-64,32,64,32,64,32,64,32,95,53,48,48,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,53,48,49,32,64,10,65,32,-83,32,85,32,95,51,53,56,32,64,32,64,32,90,32,90,32,66,32,95,-51,54,50,32,95,51,54,51,32,102,114,111,109,85,84,70,56,32,34,100,-101,114,105,118,105,110,103,34,32,64,32,64,32,64,32,64,32,66,32,95,-51,54,53,32,64,32,66,32,95,50,54,32,95,51,54,55,32,64,32,64,-32,66,32,95,51,54,56,32,95,51,54,51,32,79,32,35,52,52,32,64,-32,75,32,64,32,64,32,64,32,64,32,95,54,48,32,95,52,57,49,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,53,48,48,-32,64,10,65,32,85,32,67,39,32,67,39,32,67,39,66,32,64,32,64,-32,66,32,66,32,66,32,95,51,54,50,32,64,32,64,32,64,32,67,39,-32,67,39,66,32,64,32,66,32,66,32,95,51,54,50,32,64,32,64,32,-67,39,66,32,66,32,95,51,54,50,32,64,32,95,51,55,50,32,64,32,-64,32,95,52,57,51,32,64,32,64,32,64,32,95,51,54,57,32,64,32,-64,32,64,32,80,32,66,32,95,51,54,55,32,64,32,95,54,48,32,95,-52,57,55,32,64,32,64,32,64,32,66,32,95,52,57,56,32,64,32,66,-32,95,50,54,32,95,51,54,55,32,64,32,64,32,95,54,48,32,85,32,-67,39,32,67,39,32,95,51,54,52,32,64,32,64,32,67,39,66,32,66,-32,95,51,54,50,32,64,32,67,39,32,95,51,54,50,32,64,32,95,51,-54,57,32,64,32,95,51,54,51,32,102,114,111,109,85,84,70,56,32,34,-58,58,34,32,64,32,64,32,64,32,64,32,64,32,95,52,57,55,32,64,-32,64,32,95,51,54,51,32,79,32,35,52,52,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,52,-57,57,32,64,10,65,32,67,39,32,95,51,54,52,32,64,32,95,51,54,-52,32,95,51,54,51,32,79,32,35,49,50,51,32,64,32,75,32,64,32,-64,32,64,32,64,32,95,51,54,51,32,79,32,35,49,50,53,32,64,32,-75,32,64,32,64,32,64,32,58,52,57,56,32,64,10,65,32,85,32,67,-32,67,32,83,39,32,64,32,95,52,57,50,32,64,32,64,32,66,32,95,-51,54,52,32,95,51,54,51,32,79,32,35,51,51,32,64,32,75,32,64,-32,64,32,64,32,64,32,95,52,57,50,32,64,32,64,32,64,32,58,52,-57,55,32,64,10,65,32,67,32,80,32,67,39,32,95,51,54,52,32,64,-32,95,51,54,57,32,64,32,95,51,54,51,32,102,114,111,109,85,84,70,-56,32,34,40,46,46,41,34,32,64,32,64,32,64,32,64,32,95,51,54,-57,32,64,32,64,32,95,51,54,57,32,64,32,58,52,57,54,32,64,10,-65,32,83,32,85,32,95,51,53,56,32,64,32,64,32,90,32,90,32,66,-32,95,51,54,50,32,95,51,54,51,32,79,32,35,49,50,52,32,64,32,-75,32,64,32,64,32,64,32,64,32,66,32,95,51,54,55,32,64,32,66,-32,95,51,54,56,32,95,51,54,51,32,79,32,35,52,52,32,64,32,75,-32,64,32,64,32,64,32,64,32,95,54,48,32,85,32,67,39,66,32,66,-32,95,51,54,50,32,64,32,67,39,32,95,51,54,50,32,64,32,66,32,-95,51,54,55,32,64,32,95,54,48,32,95,51,54,57,32,64,32,64,32,-64,32,95,51,54,51,32,79,32,35,52,53,32,64,32,75,32,64,32,64,-32,64,32,64,32,64,32,66,32,95,51,54,55,32,64,32,95,54,48,32,-95,51,54,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,58,52,57,53,32,64,10,65,32,85,32,66,32,-66,32,95,51,54,55,32,64,32,64,32,67,39,66,32,66,32,95,53,57,-32,64,32,95,51,54,57,32,64,32,64,32,95,54,48,32,95,51,55,49,-32,64,32,64,32,64,32,64,32,58,52,57,52,32,64,10,65,32,83,32,-85,32,95,51,53,56,32,64,32,64,32,90,32,90,32,67,39,32,95,51,-54,50,32,64,32,66,32,95,52,57,50,32,64,32,95,52,55,57,32,64,-32,64,32,95,51,54,51,32,102,114,111,109,85,84,70,56,32,34,61,62,-34,32,64,32,64,32,64,32,64,32,64,32,64,32,58,52,57,51,32,64,-10,65,32,95,52,57,49,32,58,52,57,50,32,64,10,65,32,83,32,73,-32,64,32,66,32,83,32,83,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,49,49,32,64,32,64,32,83,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,49,54,32,64,32,64,32,83,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,49,57,32,64,32,64,32,67,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,48,32,64,32,64,-32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,49,-32,64,32,64,32,85,32,67,39,66,32,66,32,95,51,54,50,32,64,32,-95,51,55,50,32,64,32,64,32,95,52,57,50,32,64,32,64,32,64,32,-64,32,85,32,95,51,55,51,32,64,32,64,32,64,32,64,32,85,32,66,-32,95,51,54,51,32,64,32,66,32,95,49,53,51,32,79,32,35,57,55,-32,64,32,75,32,64,32,64,32,64,32,95,49,53,52,32,95,49,56,56,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,49,55,32,64,32,64,32,67,-32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,56,32,64,-32,64,32,85,32,66,32,66,32,95,50,54,32,95,51,54,53,32,64,32,-64,32,64,32,67,39,66,32,66,32,95,51,54,50,32,64,32,67,39,32,-95,51,54,50,32,64,32,95,52,57,49,32,64,32,95,51,54,51,32,102,-114,111,109,85,84,70,56,32,34,45,62,34,32,64,32,64,32,64,32,64,-32,64,32,95,52,57,49,32,64,32,64,32,64,32,64,32,64,32,85,32,-67,39,66,32,66,32,95,51,54,52,32,64,32,67,39,32,95,51,54,52,-32,64,32,95,51,54,57,32,64,32,95,51,54,51,32,79,32,35,54,52,-32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,95,52,57,49,32,-64,32,64,32,64,32,64,32,64,32,85,32,66,32,95,50,54,32,95,51,-54,53,32,64,32,64,32,66,32,95,50,54,32,95,51,55,52,32,64,32,-64,32,95,54,48,32,66,32,95,51,54,52,32,95,51,54,51,32,79,32,-35,52,54,32,64,32,75,32,64,32,64,32,64,32,64,32,95,51,54,57,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,49,51,32,64,-32,64,32,67,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,-49,52,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,49,53,32,64,32,64,32,85,32,67,39,32,67,39,32,95,-51,54,50,32,64,32,64,32,67,39,66,32,66,32,95,51,54,50,32,64,-32,67,39,32,95,51,54,52,32,64,32,95,52,57,49,32,64,32,95,51,-54,51,32,79,32,35,49,50,51,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,66,32,95,51,54,55,32,64,32,66,32,95,51,54,56,32,-95,51,54,51,32,79,32,35,52,52,32,64,32,75,32,64,32,64,32,64,-32,64,32,95,54,48,32,95,51,55,53,32,64,32,64,32,64,32,64,32,-64,32,95,51,54,51,32,79,32,35,49,50,53,32,64,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,85,32,66,32,95,51,54,50,32,95,-51,54,51,32,79,32,35,52,53,32,64,32,75,32,64,32,64,32,64,32,-64,32,95,52,57,49,32,64,32,64,32,64,32,64,32,64,32,85,32,66,-32,66,32,95,50,54,32,95,51,54,53,32,64,32,64,32,64,32,67,39,-66,32,66,32,95,51,54,50,32,64,32,67,39,32,95,51,54,50,32,64,-32,95,52,57,49,32,64,32,95,51,54,51,32,102,114,111,109,85,84,70,-56,32,34,58,58,34,32,64,32,64,32,64,32,64,32,64,32,95,52,57,-50,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,67,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,49,50,32,64,32,64,32,85,32,-66,32,66,32,66,32,95,50,54,32,95,51,54,53,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,95,51,56,49,32,64,32,64,32,64,32,-67,39,66,32,66,39,32,66,32,79,32,64,32,66,32,95,51,54,50,32,-95,51,54,51,32,102,114,111,109,85,84,70,56,32,34,105,102,34,32,64,-32,64,32,64,32,64,32,95,52,57,49,32,64,32,64,32,64,32,64,32,-67,39,66,32,66,32,79,32,64,32,66,32,95,51,54,50,32,95,51,54,-51,32,102,114,111,109,85,84,70,56,32,34,116,104,101,110,34,32,64,32,-64,32,64,32,64,32,95,52,57,49,32,64,32,64,32,64,32,67,39,32,-79,32,64,32,66,32,95,51,54,50,32,95,51,54,51,32,102,114,111,109,-85,84,70,56,32,34,101,108,115,101,34,32,64,32,64,32,64,32,64,32,-95,52,57,49,32,64,32,64,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,85,32,66,32,66,32,95,50,54,32,95,51,54,-53,32,64,32,64,32,64,32,67,39,66,32,66,32,95,51,54,50,32,64,-32,95,51,54,57,32,64,32,64,32,95,52,57,49,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,83,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,53,32,64,32,64,32,83,32,-83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,56,32,64,32,64,-32,67,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,57,32,-64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,49,48,32,64,32,64,32,85,32,66,32,66,32,95,50,54,32,95,51,-54,53,32,64,32,64,32,64,32,67,39,66,32,66,32,95,51,54,50,32,-64,32,95,52,57,49,32,64,32,64,32,95,51,54,57,32,64,32,64,32,-64,32,64,32,64,32,85,32,67,39,66,32,66,32,95,51,56,51,32,64,-32,95,51,56,52,32,95,51,54,51,32,102,114,111,109,85,84,70,56,32,-34,100,111,34,32,64,32,64,32,64,32,67,39,32,95,51,54,52,32,64,-32,95,51,54,57,32,64,32,95,51,54,51,32,102,114,111,109,85,84,70,-56,32,34,46,100,111,34,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,95,51,56,53,32,35,50,32,64,32,64,32,66,32,95,51,53,57,-32,64,32,95,54,48,32,95,51,56,57,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,85,32,95,51,57,50,32,64,32,64,32,64,-32,64,32,67,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,-54,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,55,32,64,32,64,32,85,32,66,32,95,50,54,32,95,51,54,-53,32,64,32,64,32,66,32,95,50,54,32,95,51,54,55,32,64,32,64,-32,66,32,95,51,54,56,32,95,51,54,51,32,79,32,35,52,52,32,64,-32,75,32,64,32,64,32,64,32,64,32,95,54,48,32,95,52,57,49,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,67,39,66,32,-66,32,95,51,56,51,32,64,32,66,32,95,51,56,51,32,95,51,54,51,-32,102,114,111,109,85,84,70,56,32,34,108,101,116,34,32,64,32,64,32,-64,32,64,32,66,32,95,51,56,53,32,35,50,32,64,32,64,32,66,32,-95,51,53,57,32,64,32,95,54,48,32,95,51,56,56,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,95,51,54,50,32,95,51,54,51,32,-102,114,111,109,85,84,70,56,32,34,105,110,34,32,64,32,64,32,64,32,-64,32,95,52,57,49,32,64,32,64,32,64,32,64,32,64,32,64,32,85,-32,67,39,66,32,66,32,95,51,56,51,32,64,32,67,39,32,95,51,54,-50,32,64,32,66,32,95,51,54,50,32,95,51,54,51,32,102,114,111,109,-85,84,70,56,32,34,99,97,115,101,34,32,64,32,64,32,64,32,64,32,-95,52,57,49,32,64,32,64,32,95,51,54,51,32,102,114,111,109,85,84,-70,56,32,34,111,102,34,32,64,32,64,32,64,32,64,32,64,32,66,32,-95,51,56,53,32,35,50,32,64,32,64,32,66,32,95,51,53,57,32,64,-32,95,54,48,32,95,51,57,56,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,83,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,50,32,64,32,64,32,67,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,67,32,-67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,-32,85,32,75,32,66,32,95,51,54,51,32,64,32,95,52,55,50,32,64,-32,64,32,64,32,64,32,64,32,85,32,66,32,95,50,54,32,95,51,54,-53,32,64,32,64,32,66,32,95,51,54,52,32,95,51,54,51,32,79,32,-35,57,50,32,64,32,75,32,64,32,64,32,64,32,64,32,95,52,55,51,-32,95,51,53,56,32,64,32,95,51,54,51,32,102,114,111,109,85,84,70,-56,32,34,45,62,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,85,32,66,32,66,32,95,52,57,49,32,64,32,64,32,-95,52,51,56,32,66,32,85,32,64,32,66,32,66,32,95,52,55,52,32,-64,32,64,32,67,39,32,95,52,55,52,32,64,32,95,52,55,53,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,32,64,32,66,32,67,39,32,83,39,32,64,32,67,32,60,32,-64,32,35,49,32,64,32,64,32,64,32,66,32,85,32,64,32,90,32,90,-32,95,52,56,56,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,-64,32,85,32,83,32,67,39,32,83,32,64,32,66,32,83,39,32,95,52,-55,54,32,64,32,95,52,56,48,32,64,32,64,32,66,32,66,32,95,51,-54,51,32,64,32,64,32,66,32,67,32,83,32,95,52,57,48,32,95,49,-54,53,32,64,32,102,114,111,109,85,84,70,56,32,34,105,110,115,116,36,-34,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,95,50,49,51,-32,64,32,64,32,64,32,64,32,66,32,95,51,54,53,32,64,32,95,51,-54,51,32,64,32,64,32,64,32,66,32,95,50,49,51,32,64,32,95,52,-56,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,-52,57,49,32,64,10,65,32,66,32,95,52,56,57,32,64,32,95,52,48,-32,64,32,58,52,57,48,32,64,10,65,32,66,32,89,32,64,32,66,32,-66,32,67,39,66,32,85,32,95,52,51,32,64,32,64,32,64,32,64,32,-66,32,66,32,67,39,66,32,66,39,32,85,32,95,52,52,32,64,32,64,-32,64,32,64,32,64,32,66,32,67,39,66,32,64,32,66,32,66,32,67,-39,66,32,64,32,64,32,66,32,66,32,95,49,54,56,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,52,56,57,32,64,10,65,32,83,-39,32,83,32,64,32,66,32,67,32,66,32,64,32,64,32,83,39,32,83,-39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,49,32,-64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,67,39,32,95,-52,56,56,32,64,32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,67,39,32,67,39,32,83,32,64,32,64,32,83,39,32,-66,32,64,32,66,32,83,39,32,83,32,64,32,64,32,66,32,66,32,67,-39,32,83,32,64,32,95,52,55,54,32,64,32,64,32,64,32,67,39,66,-32,83,32,64,32,66,32,83,39,32,66,32,64,32,80,32,64,32,64,32,-67,39,66,32,66,32,67,39,32,67,39,32,80,32,64,32,64,32,64,32,-66,32,66,32,66,32,95,50,54,32,95,51,54,53,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,51,54,50,-32,64,32,64,32,66,32,67,39,32,95,51,54,50,32,64,32,95,52,57,-49,32,64,32,64,32,95,51,54,51,32,64,32,64,32,64,32,95,52,57,-49,32,64,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,83,39,32,-83,32,64,32,64,32,66,32,66,32,67,39,32,83,32,64,32,95,52,55,-54,32,64,32,64,32,64,32,67,39,66,32,83,32,64,32,67,39,66,32,-66,32,67,39,32,80,32,64,32,64,32,66,32,66,32,95,50,54,32,95,-51,54,53,32,64,32,64,32,64,32,66,32,67,39,32,95,51,54,50,32,-64,32,95,52,57,49,32,64,32,64,32,95,51,54,51,32,64,32,64,32,-64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-83,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,-32,66,32,67,32,67,32,95,52,48,32,95,49,54,53,32,64,32,64,32,-35,52,52,32,64,32,64,32,64,32,64,32,64,32,66,32,67,32,64,32,-66,32,67,39,32,83,32,64,32,67,32,95,52,48,32,95,54,53,32,64,-32,64,32,102,114,111,109,85,84,70,56,32,34,91,93,34,32,64,32,64,-32,64,32,64,32,83,39,32,67,32,64,32,67,39,32,95,52,48,32,95,-55,50,32,64,32,64,32,95,51,50,49,32,64,32,35,49,32,64,32,64,-32,66,32,95,52,57,49,32,64,32,66,32,95,52,55,55,32,64,32,95,-52,55,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-95,52,57,49,32,64,32,95,52,55,57,32,64,32,64,32,64,32,64,32,-64,32,95,52,56,48,32,64,32,64,32,66,32,95,50,49,51,32,64,32,-95,52,56,55,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,95,50,54,32,95,51,54,53,32,64,32,64,32,64,32,66,32,66,32,-95,51,54,55,32,64,32,64,32,66,32,66,32,95,54,48,32,95,52,57,-49,32,64,32,64,32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,-64,32,64,32,58,52,56,56,32,64,10,65,32,85,32,67,39,66,32,95,-52,56,49,32,64,32,95,52,56,54,32,95,51,48,53,32,64,32,64,32,-64,32,58,52,56,55,32,64,10,65,32,75,32,89,32,66,32,83,32,85,-32,75,32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,-32,83,39,32,67,32,64,32,67,32,95,52,56,53,32,64,32,64,32,64,-32,67,39,32,83,32,64,32,66,32,67,32,64,32,66,32,83,32,95,52,-48,32,95,54,53,32,64,32,75,32,64,32,64,32,64,32,66,32,80,32,-95,50,50,48,32,64,32,64,32,67,39,66,32,67,32,95,52,48,32,95,-49,54,53,32,64,32,35,52,54,32,64,32,64,32,95,50,50,48,32,64,-32,64,32,64,32,64,32,64,32,64,32,95,52,50,55,32,67,32,95,54,-55,32,95,49,54,53,32,64,32,64,32,35,52,54,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,52,56,54,32,64,10,65,32,-83,39,32,95,53,54,32,64,32,95,52,56,51,32,64,32,83,39,32,95,-53,54,32,64,32,95,52,56,52,32,64,32,83,39,32,95,53,54,32,64,-32,95,49,56,57,32,64,32,67,32,95,52,48,32,95,49,54,53,32,64,-32,64,32,35,51,57,32,64,32,64,32,64,32,64,32,58,52,56,53,32,-64,10,65,32,83,39,32,95,49,54,56,32,64,32,95,49,54,57,32,35,-54,53,32,64,32,64,32,67,32,95,49,54,57,32,64,32,35,57,48,32,-64,32,64,32,58,52,56,52,32,64,10,65,32,83,39,32,95,53,54,32,-64,32,95,52,56,50,32,64,32,67,32,95,52,48,32,95,49,54,53,32,-64,32,64,32,35,57,53,32,64,32,64,32,58,52,56,51,32,64,10,65,-32,83,39,32,95,49,54,56,32,64,32,95,49,54,57,32,35,57,55,32,-64,32,64,32,67,32,95,49,54,57,32,64,32,35,49,50,50,32,64,32,-64,32,58,52,56,50,32,64,10,65,32,83,39,32,66,32,64,32,115,101,-113,32,64,32,80,32,64,32,58,52,56,49,32,64,10,65,32,80,32,95,-50,49,57,32,102,114,111,109,85,84,70,56,32,34,104,101,97,100,34,32,-64,32,64,32,64,32,75,32,64,32,58,52,56,48,32,64,10,65,32,66,-32,80,32,35,55,32,64,32,64,32,85,32,64,32,58,52,55,57,32,64,-10,65,32,66,32,80,32,35,48,32,64,32,64,32,85,32,64,32,58,52,-55,56,32,64,10,65,32,66,32,80,32,35,56,32,64,32,64,32,85,32,-64,32,58,52,55,55,32,64,10,65,32,67,32,95,54,51,32,95,49,54,-53,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,64,92,57,50,-38,61,43,45,58,60,62,46,33,35,36,37,94,38,42,47,124,126,63,92,-50,50,54,38,92,49,51,54,38,92,49,56,51,38,92,50,50,54,38,92,-49,51,53,38,92,49,52,54,38,92,50,50,54,38,92,49,51,52,38,92,-49,52,54,38,92,50,50,54,38,92,49,51,52,38,92,49,52,52,38,92,-50,50,54,38,92,49,51,54,38,92,49,50,56,38,34,32,64,32,64,32,-58,52,55,54,32,64,10,65,32,66,32,80,32,35,48,32,64,32,64,32,-85,32,64,32,58,52,55,53,32,64,10,65,32,66,32,66,32,80,32,35,-49,32,64,32,64,32,64,32,80,32,64,32,58,52,55,52,32,64,10,65,-32,66,32,66,32,95,54,32,95,51,53,57,32,64,32,64,32,64,32,66,-32,66,32,95,54,48,32,64,32,64,32,66,32,66,32,85,32,64,32,64,-32,66,32,66,32,66,32,66,32,95,51,56,49,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,32,67,39,66,32,64,32,66,32,66,32,79,32,-64,32,64,32,67,39,66,32,95,51,54,50,32,64,32,66,32,95,51,54,-55,32,64,32,95,54,48,32,95,51,56,54,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,32,79,32,64,32,64,32,95,51,57,-55,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,58,52,-55,51,32,64,10,65,32,85,32,83,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,53,32,64,32,64,32,83,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,55,32,64,32,64,32,67,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,56,32,64,32,64,32,67,32,-67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,57,32,64,32,64,-32,85,32,95,53,57,32,35,51,51,32,64,32,64,32,64,32,64,32,85,-32,95,53,57,32,35,57,52,32,64,32,64,32,64,32,64,32,64,32,85,-32,73,32,64,32,64,32,64,32,64,32,67,32,67,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,54,32,64,32,64,32,85,32,95,49,53,52,-32,95,49,54,50,32,95,49,57,49,32,64,32,64,32,64,32,64,32,64,-32,85,32,95,49,53,52,32,95,49,54,50,32,95,49,57,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,83,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,50,32,64,32,64,32,67,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,67,32,-67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,-32,85,32,95,49,53,52,32,95,49,57,49,32,64,32,64,32,64,32,64,-32,85,32,66,32,95,53,57,32,35,51,55,32,64,32,64,32,95,49,53,-52,32,95,52,48,48,32,95,52,54,57,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,85,32,66,32,95,53,57,32,35,51,56,32,64,32,-64,32,95,49,53,52,32,95,52,55,49,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,49,32,64,32,64,32,85,32,66,32,95,53,57,32,35,51,53,32,64,-32,64,32,66,32,95,53,57,32,35,51,53,32,64,32,64,32,95,49,53,-52,32,95,52,54,57,32,64,32,64,32,64,32,64,32,64,32,64,32,85,-32,66,32,95,53,57,32,35,51,53,32,64,32,64,32,95,49,53,52,32,-95,49,56,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,-52,55,50,32,64,10,65,32,95,49,53,53,32,95,49,55,49,32,95,52,-55,49,32,64,32,64,32,95,52,55,48,32,64,32,95,49,54,49,32,95,-52,55,49,32,64,32,64,32,58,52,55,49,32,64,10,65,32,102,115,104,-111,119,32,58,52,55,48,32,64,10,65,32,95,49,53,53,32,95,52,48,-55,32,80,32,95,52,50,50,32,64,32,95,52,54,56,32,64,32,64,32,-64,32,95,49,53,56,32,95,52,54,57,32,64,32,64,32,95,49,54,49,-32,95,52,54,57,32,64,32,64,32,58,52,54,57,32,64,10,65,32,95,-49,55,51,32,80,32,95,52,49,49,32,64,32,95,52,53,50,32,64,32,-64,32,95,52,53,51,32,95,52,54,56,32,64,32,64,32,95,52,53,52,-32,95,52,54,56,32,64,32,64,32,95,49,55,53,32,95,52,54,56,32,-64,32,64,32,95,49,55,54,32,95,52,54,56,32,64,32,64,32,95,52,-54,55,32,64,32,95,49,56,51,32,95,52,54,56,32,64,32,64,32,73,-32,64,32,58,52,54,56,32,64,10,65,32,66,32,83,32,73,32,64,32,-64,32,66,32,90,32,64,32,66,32,66,32,80,32,95,50,49,57,32,102,-114,111,109,85,84,70,56,32,34,73,110,116,101,103,101,114,58,32,100,105,-118,105,115,105,111,110,32,98,121,32,48,34,32,64,32,64,32,64,32,64,-32,64,32,66,32,90,32,64,32,66,32,90,32,64,32,67,32,66,32,64,-32,66,32,66,32,83,32,85,32,80,32,95,57,49,32,95,57,51,32,64,-32,95,53,56,32,64,32,64,32,95,57,49,32,95,57,51,32,64,32,95,-53,56,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,90,-32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,67,39,66,32,66,-32,64,32,67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,-67,39,32,83,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,-64,32,83,39,32,67,39,32,83,39,32,83,39,32,67,39,66,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,95,52,53,54,-32,67,32,95,52,48,32,95,55,50,32,64,32,64,32,35,48,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,-66,32,64,32,95,52,53,55,32,64,32,64,32,95,52,54,50,32,64,32,-64,32,64,32,66,32,66,32,67,39,32,83,32,64,32,66,32,67,39,32,-95,52,54,51,32,64,32,85,32,65,32,64,32,64,32,64,32,95,52,54,-49,32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,-32,66,39,32,64,32,66,32,66,39,32,64,32,95,52,53,55,32,64,32,-64,32,64,32,66,32,67,39,66,32,80,32,64,32,64,32,66,32,95,49,-53,51,32,64,32,85,32,75,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,39,32,95,52,54,53,32,64,32,95,51,50,49,32,64,32,-64,32,64,32,95,52,54,54,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,52,54,55,32,64,10,65,32,-80,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,105,110,105,-116,58,32,91,93,34,32,64,32,64,32,64,32,66,32,83,32,85,32,95,-53,56,32,64,32,64,32,64,32,66,32,90,32,64,32,66,32,90,32,64,-32,67,39,66,32,95,53,57,32,64,32,95,52,54,54,32,64,32,64,32,-64,32,64,32,64,32,58,52,54,54,32,64,10,65,32,83,39,32,83,39,-32,80,32,64,32,64,32,95,49,48,53,32,64,32,95,52,54,52,32,64,-32,58,52,54,53,32,64,10,65,32,67,32,83,39,32,83,39,32,64,32,-67,32,95,54,56,32,95,56,48,32,64,32,64,32,35,48,32,64,32,64,-32,66,32,80,32,95,53,56,32,64,32,64,32,90,32,66,32,95,52,54,-52,32,64,32,67,32,95,56,49,32,95,49,48,52,32,64,32,64,32,35,-49,32,64,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,58,52,-54,52,32,64,10,65,32,67,39,32,67,32,64,32,66,32,67,32,67,39,-32,89,32,64,32,66,32,66,32,83,39,32,67,32,64,32,66,32,67,32,-83,39,32,64,32,64,32,66,32,67,32,80,32,64,32,64,32,67,32,79,-32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,66,32,-66,32,66,32,67,32,64,32,64,32,64,32,83,39,32,67,39,66,32,64,-32,66,32,66,32,67,39,32,83,32,64,32,64,32,64,32,66,32,67,32,-67,39,32,64,32,64,32,67,32,95,49,55,55,32,95,49,56,52,32,64,-32,64,32,64,32,64,32,64,32,66,32,67,39,32,95,53,57,32,64,32,-64,32,67,32,95,49,55,50,32,95,49,56,52,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,95,49,56,49,32,95,49,48,52,32,-64,32,64,32,67,32,95,50,49,55,32,95,49,48,52,32,64,32,64,32,-95,49,48,48,32,64,32,64,32,64,32,64,32,64,32,95,52,50,51,32,-64,32,64,32,64,32,95,52,49,54,32,64,32,64,32,95,53,56,32,64,-32,58,52,54,51,32,64,10,65,32,66,32,67,32,83,39,32,67,32,64,-32,66,32,67,39,32,67,32,64,32,83,39,32,83,39,32,66,32,64,32,-64,32,66,32,83,39,32,83,32,64,32,66,32,83,39,32,83,32,64,32,-66,32,83,32,67,32,95,52,49,56,32,64,32,95,52,52,57,32,64,32,-64,32,64,32,67,39,66,32,66,32,80,32,64,32,95,52,53,56,32,64,-32,64,32,95,52,53,56,32,64,32,64,32,64,32,64,32,66,32,67,39,-66,32,66,32,80,32,64,32,66,32,95,52,53,56,32,64,32,67,32,95,-52,51,53,32,64,32,95,52,53,49,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,95,52,53,56,32,64,32,64,32,67,32,95,52,51,51,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,-95,52,51,53,32,64,32,64,32,67,32,95,52,52,55,32,64,32,64,32,-64,32,64,32,67,39,32,83,39,32,67,32,64,32,64,32,83,39,32,67,-39,32,83,39,32,89,32,64,32,64,32,64,32,66,32,83,39,32,66,32,-64,32,66,39,32,66,32,83,39,32,67,32,64,32,64,32,66,32,67,32,-64,32,67,39,32,95,52,50,49,32,64,32,95,52,52,56,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,32,83,-32,64,32,64,32,67,39,32,67,32,64,32,66,32,67,39,32,67,39,32,-64,32,83,39,32,64,32,64,32,67,39,32,67,39,32,67,39,32,95,52,-53,57,32,64,32,64,32,64,32,66,32,83,39,32,66,32,64,32,95,52,-51,51,32,64,32,64,32,66,32,67,39,66,32,95,52,51,51,32,64,32,-64,32,67,32,95,52,53,57,32,64,32,64,32,64,32,64,32,95,52,54,-48,32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,39,32,95,52,51,53,32,64,32,64,32,67,32,95,52,52,55,-32,64,32,64,32,64,32,64,32,64,32,95,52,53,57,32,64,32,64,32,-67,32,95,52,51,51,32,64,32,95,52,53,49,32,64,32,64,32,64,32,-64,32,64,32,66,32,95,50,54,32,95,57,49,32,95,57,51,32,64,32,-64,32,64,32,83,39,32,95,49,53,51,32,64,32,67,39,32,95,51,49,-57,32,64,32,67,39,32,95,56,49,32,95,49,48,52,32,64,32,64,32,-95,51,50,49,32,64,32,35,49,32,64,32,64,32,35,48,32,64,32,64,-32,67,39,32,79,32,64,32,95,52,54,49,32,64,32,75,32,64,32,64,-32,64,32,64,32,64,32,95,57,49,32,95,57,51,32,64,32,64,32,64,-32,64,32,95,57,49,32,95,57,51,32,64,32,64,32,58,52,54,50,32,-64,10,65,32,80,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,-34,108,97,115,116,58,32,91,93,34,32,64,32,64,32,64,32,67,39,32,-83,32,64,32,85,32,64,32,90,32,90,32,95,52,54,49,32,64,32,64,-32,64,32,64,32,58,52,54,49,32,64,10,65,32,95,57,49,32,95,57,-51,32,64,32,79,32,35,50,32,64,32,75,32,64,32,64,32,58,52,54,-48,32,64,10,65,32,67,39,32,67,32,64,32,95,52,54,55,32,64,32,-75,32,64,32,58,52,53,57,32,64,10,65,32,85,32,65,32,64,32,58,-52,53,56,32,64,10,65,32,66,32,66,32,85,32,64,32,64,32,83,39,-32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,80,32,-64,32,64,32,64,32,66,32,66,32,95,52,50,57,32,64,32,64,32,95,-52,51,54,32,64,32,64,32,64,32,95,52,50,57,32,64,32,64,32,58,-52,53,55,32,64,10,65,32,66,32,95,54,32,95,52,53,53,32,64,32,-64,32,95,54,48,32,64,32,58,52,53,54,32,64,10,65,32,95,53,53,-32,95,49,54,56,32,64,32,95,52,51,32,64,32,58,52,53,53,32,64,-10,65,32,67,39,32,67,39,32,67,32,64,32,64,32,95,49,56,50,32,-64,32,65,32,64,32,58,52,53,52,32,64,10,65,32,67,39,32,67,39,-32,67,32,64,32,64,32,95,49,56,50,32,64,32,75,32,64,32,58,52,-53,51,32,64,10,65,32,95,56,50,32,95,52,51,51,32,64,32,95,52,-51,53,32,64,32,95,52,52,55,32,64,32,95,52,51,52,32,64,32,95,-52,52,56,32,64,32,67,32,67,32,67,32,67,32,95,56,57,32,95,52,-50,50,32,64,32,64,32,95,52,52,57,32,64,32,64,32,95,52,53,48,-32,64,32,64,32,95,52,52,57,32,64,32,64,32,95,52,53,49,32,64,-32,64,32,73,32,64,32,58,52,53,50,32,64,10,65,32,95,57,49,32,-95,57,51,32,64,32,79,32,35,49,32,64,32,75,32,64,32,64,32,58,-52,53,49,32,64,10,65,32,95,57,49,32,95,57,50,32,64,32,79,32,-35,49,32,64,32,75,32,64,32,64,32,58,52,53,48,32,64,10,65,32,-95,57,49,32,95,57,51,32,64,32,95,53,56,32,64,32,58,52,52,57,-32,64,10,65,32,85,32,75,32,95,57,49,32,95,57,51,32,64,32,64,-32,64,32,58,52,52,56,32,64,10,65,32,83,32,66,32,64,32,66,32,-90,32,64,32,66,32,66,32,80,32,95,57,49,32,95,57,51,32,64,32,-95,53,56,32,64,32,64,32,64,32,64,32,66,32,90,32,64,32,66,32,-90,32,64,32,66,32,83,32,73,32,64,32,64,32,66,32,90,32,64,32,-66,32,66,32,80,32,95,57,49,32,95,57,51,32,64,32,95,53,56,32,-64,32,64,32,64,32,64,32,66,32,90,32,64,32,66,32,90,32,64,32,-67,32,66,32,64,32,83,39,32,83,39,32,83,32,64,32,64,32,66,32,-66,32,67,32,83,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,66,32,66,32,67,39,32,80,32,64,32,64,32,64,32,67,39,66,32,-66,32,64,32,67,39,66,32,66,32,67,39,66,32,64,32,66,32,66,32,-95,57,49,32,64,32,64,32,95,52,51,54,32,64,32,64,32,64,32,67,-32,95,52,51,55,32,95,52,50,51,32,64,32,64,32,64,32,64,32,64,-32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,67,39,66,32,66,-32,64,32,83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,-66,32,66,32,66,32,67,32,83,32,64,32,64,32,64,32,64,32,67,39,-32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,67,39,-32,80,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,66,-32,64,32,66,32,66,32,95,57,49,32,64,32,64,32,95,52,51,54,32,-64,32,64,32,64,32,95,52,51,55,32,95,52,50,51,32,64,32,64,32,-64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,32,67,39,66,32,64,32,66,32,66,32,95,57,49,32,64,32,64,32,-95,52,51,54,32,64,32,64,32,64,32,95,52,52,54,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,52,52,55,32,64,10,65,32,66,32,66,32,95,-52,51,57,32,95,52,50,54,32,64,32,64,32,64,32,66,32,66,32,95,-52,52,48,32,95,49,53,51,32,64,32,95,54,48,32,67,32,95,51,49,-57,32,64,32,35,48,32,64,32,64,32,95,52,52,49,32,95,52,52,53,-32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,32,66,32,95,54,-48,32,64,32,95,52,51,55,32,95,52,50,51,32,64,32,64,32,64,32,-64,32,58,52,52,54,32,64,10,65,32,95,52,52,50,32,67,32,95,49,-56,49,32,95,49,48,52,32,64,32,64,32,95,57,48,32,95,49,48,52,-32,64,32,95,49,48,50,32,35,49,32,64,32,64,32,64,32,64,32,67,-32,95,56,49,32,95,49,48,52,32,64,32,64,32,95,57,48,32,95,49,-48,52,32,64,32,95,49,48,50,32,35,49,32,64,32,64,32,64,32,64,-32,73,32,64,32,73,32,64,32,83,32,95,53,57,32,64,32,66,32,95,-52,52,49,32,95,52,52,53,32,64,32,64,32,67,32,95,49,56,49,32,-95,49,48,52,32,64,32,64,32,35,49,32,64,32,64,32,64,32,64,32,-83,39,32,67,39,32,89,32,64,32,64,32,66,32,66,32,66,32,83,32,-95,53,57,32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,66,32,-64,32,64,32,64,32,66,32,66,32,67,32,95,49,56,49,32,95,49,48,-52,32,64,32,64,32,64,32,64,32,67,32,95,56,49,32,95,49,48,52,-32,64,32,64,32,64,32,64,32,64,32,64,32,73,32,64,32,64,32,66,-32,67,39,32,95,52,52,51,32,64,32,67,32,95,54,56,32,95,56,48,-32,64,32,64,32,64,32,64,32,95,52,52,49,32,95,52,52,53,32,64,-32,64,32,64,32,83,39,32,83,32,64,32,83,39,32,83,39,32,83,39,-32,64,32,64,32,67,32,95,49,52,57,32,95,56,48,32,64,32,64,32,-64,32,66,32,66,32,67,39,32,95,52,52,51,32,64,32,67,32,95,50,-48,53,32,95,56,48,32,64,32,64,32,64,32,64,32,64,32,95,52,52,-52,32,95,52,52,53,32,64,32,64,32,64,32,64,32,66,32,66,32,67,-39,32,95,52,52,51,32,64,32,67,32,95,54,56,32,95,56,48,32,64,-32,64,32,64,32,64,32,64,32,95,52,52,52,32,95,52,52,53,32,64,-32,64,32,64,32,64,32,58,52,52,53,32,64,10,65,32,85,32,75,32,-75,52,32,90,32,75,32,64,32,64,32,64,32,64,32,58,52,52,52,32,-64,10,65,32,66,32,89,32,64,32,66,32,66,32,80,32,95,53,56,32,-64,32,64,32,64,32,67,39,66,32,66,32,83,39,32,66,32,64,32,64,-32,82,32,95,53,56,32,64,32,64,32,64,32,67,39,66,32,95,53,57,-32,64,32,64,32,64,32,64,32,58,52,52,51,32,64,10,65,32,66,32,-66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,-67,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-67,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,52,52,50,32,64,10,65,-32,85,32,75,52,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,-58,52,52,49,32,64,10,65,32,66,32,89,32,64,32,66,32,66,32,67,-39,66,32,85,32,95,53,56,32,64,32,64,32,64,32,64,32,66,32,66,-32,67,39,66,32,66,39,32,85,32,95,53,56,32,64,32,64,32,64,32,-64,32,64,32,66,32,67,39,66,32,64,32,66,32,66,32,67,39,66,32,-64,32,64,32,66,32,66,32,95,53,57,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,52,52,48,32,64,10,65,32,66,32,80,32,95,-50,49,57,32,102,114,111,109,85,84,70,56,32,34,102,111,108,100,108,49,-34,32,64,32,64,32,64,32,64,32,95,52,51,56,32,64,32,58,52,51,-57,32,64,10,65,32,66,32,89,32,64,32,66,32,66,32,83,32,80,32,-64,32,64,32,64,32,67,39,66,32,66,32,64,32,64,32,64,32,58,52,-51,56,32,64,10,65,32,83,39,32,67,39,66,32,64,32,66,32,85,32,-64,32,67,32,83,32,67,32,95,52,48,32,95,55,50,32,64,32,64,32,-35,48,32,64,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,-32,95,53,56,32,64,32,64,32,64,32,66,32,83,39,32,66,32,64,32,-66,32,67,39,32,83,39,32,95,53,57,32,64,32,67,32,95,49,55,55,-32,95,49,56,52,32,64,32,64,32,95,49,48,48,32,64,32,64,32,64,-32,64,32,67,39,32,67,32,64,32,67,39,32,95,52,51,55,32,64,32,-67,32,95,49,55,50,32,95,49,56,52,32,64,32,64,32,95,49,48,48,-32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,95,-49,56,49,32,95,49,48,52,32,64,32,64,32,64,32,67,32,95,50,49,-55,32,95,49,48,52,32,64,32,64,32,64,32,64,32,64,32,58,52,51,-55,32,64,10,65,32,67,39,32,67,32,64,32,67,39,32,67,32,64,32,-95,52,48,32,95,52,48,56,32,64,32,64,32,95,57,50,32,64,32,64,-32,95,57,51,32,64,32,58,52,51,54,32,64,10,65,32,67,39,66,32,-95,52,51,51,32,64,32,95,52,51,52,32,64,32,58,52,51,53,32,64,-10,65,32,83,32,73,32,64,32,67,39,66,32,66,32,83,32,64,32,85,-32,64,32,64,32,66,32,90,32,64,32,66,32,90,32,64,32,67,32,67,-32,83,39,32,64,32,95,57,49,32,95,57,50,32,64,32,64,32,64,32,-95,57,49,32,95,57,51,32,64,32,64,32,64,32,64,32,64,32,64,32,-58,52,51,52,32,64,10,65,32,67,32,67,39,32,67,39,32,64,32,66,-32,64,32,83,39,32,83,39,32,67,32,64,32,64,32,66,32,66,32,67,-32,83,39,32,64,32,64,32,64,32,67,39,66,32,66,32,64,32,66,32,-83,39,32,67,32,64,32,66,32,67,32,83,39,32,64,32,64,32,66,32,-66,32,95,57,49,32,95,57,51,32,64,32,64,32,64,32,95,52,50,54,-32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,83,32,64,32,64,-32,66,32,83,39,32,83,32,64,32,95,52,49,55,32,64,32,64,32,67,-39,66,32,66,39,32,95,52,51,32,64,32,64,32,66,32,66,32,95,52,-50,57,32,95,57,51,32,64,32,64,32,64,32,95,52,51,50,32,64,32,-64,32,64,32,64,32,66,32,66,32,95,52,50,57,32,95,57,50,32,64,-32,64,32,64,32,67,32,95,52,51,50,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,66,32,66,32,64,32,67,39,32,83,39,32,-67,32,64,32,64,32,66,32,66,32,67,32,83,39,32,64,32,64,32,64,-32,67,39,32,83,39,32,83,32,64,32,64,32,66,32,83,39,32,83,32,-64,32,67,32,95,52,49,55,32,64,32,64,32,64,32,67,39,66,32,66,-39,32,95,52,51,32,64,32,64,32,66,32,66,32,95,52,50,57,32,95,-57,51,32,64,32,64,32,64,32,67,32,95,52,51,50,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,95,52,50,57,32,95,57,50,32,64,-32,64,32,64,32,95,52,51,50,32,64,32,64,32,64,32,64,32,66,32,-66,32,95,57,49,32,95,57,50,32,64,32,64,32,64,32,95,52,50,54,-32,64,32,64,32,64,32,64,32,64,32,64,32,110,111,77,97,116,99,104,-32,102,114,111,109,85,84,70,56,32,34,46,47,108,105,98,47,68,97,116,-97,47,73,110,116,101,103,101,114,46,104,115,34,32,64,32,64,32,35,49,-50,55,32,64,32,35,49,32,64,32,64,32,58,52,51,51,32,64,10,65,-32,95,52,51,49,32,95,52,50,51,32,64,32,58,52,51,50,32,64,10,-65,32,83,39,32,67,32,64,32,66,32,83,32,83,39,32,64,32,64,32,-67,32,67,39,32,83,39,32,64,32,66,32,67,39,32,64,32,66,32,83,-32,64,32,95,52,48,32,95,55,50,32,64,32,95,57,48,32,95,49,48,-52,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,32,67,39,32,67,39,32,64,32,83,39,32,64,32,67,-39,66,32,85,32,95,53,56,32,64,32,64,32,90,32,75,32,64,32,64,-32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,80,32,95,-50,50,48,32,64,32,75,50,32,110,111,77,97,116,99,104,32,102,114,111,-109,85,84,70,56,32,34,46,47,108,105,98,47,68,97,116,97,47,73,110,-116,101,103,101,114,46,104,115,34,32,64,32,64,32,35,49,54,51,32,64,-32,35,54,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,-32,64,32,66,32,67,39,32,83,39,32,64,32,83,39,32,64,32,64,32,-66,32,66,32,67,39,32,83,39,32,95,53,57,32,64,32,85,32,65,32,-64,32,64,32,64,32,67,39,32,67,32,64,32,67,39,32,95,52,51,49,-32,64,32,85,32,75,32,64,32,64,32,64,32,95,53,56,32,64,32,64,-32,64,32,64,32,67,39,32,67,32,64,32,95,52,51,48,32,64,32,95,-52,50,51,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,66,32,-66,32,67,39,32,83,39,32,95,53,57,32,64,32,85,32,65,32,64,32,-64,32,64,32,64,32,66,32,67,32,64,32,67,39,32,95,52,51,49,32,-64,32,85,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-95,52,51,48,32,64,32,64,32,64,32,58,52,51,49,32,64,10,65,32,-66,32,66,32,66,32,83,32,83,32,67,32,95,56,55,32,95,56,48,32,-64,32,64,32,35,48,32,64,32,64,32,83,39,32,80,32,64,32,67,32,-95,49,55,50,32,95,49,56,52,32,64,32,64,32,95,49,48,48,32,64,-32,64,32,67,32,95,49,55,55,32,95,49,56,52,32,64,32,64,32,95,-49,48,48,32,64,32,64,32,64,32,64,32,83,39,32,80,32,64,32,67,-39,32,95,56,49,32,95,49,48,52,32,64,32,64,32,67,32,95,49,55,-50,32,95,49,56,52,32,64,32,64,32,95,49,48,48,32,64,32,64,32,-35,49,32,64,32,64,32,67,39,32,95,49,56,49,32,95,49,48,52,32,-64,32,64,32,67,32,95,49,55,55,32,95,49,56,52,32,64,32,64,32,-95,49,48,48,32,64,32,64,32,95,49,48,48,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,32,95,49,56,49,32,95,49,48,-52,32,64,32,64,32,64,32,95,56,49,32,95,49,48,52,32,64,32,64,-32,64,32,58,52,51,48,32,64,10,65,32,67,39,66,32,66,32,83,32,-85,32,95,57,49,32,95,57,51,32,64,32,95,53,56,32,64,32,64,32,-64,32,64,32,66,32,90,32,64,32,66,32,90,32,64,32,95,57,49,32,-64,32,64,32,64,32,64,32,95,52,50,56,32,64,32,58,52,50,57,32,-64,10,65,32,95,54,32,95,52,49,54,32,64,32,95,54,32,95,52,50,-55,32,67,32,95,52,48,32,95,55,50,32,64,32,64,32,35,48,32,64,-32,64,32,64,32,95,52,49,54,32,64,32,64,32,58,52,50,56,32,64,-10,65,32,66,32,89,32,64,32,66,32,66,32,80,32,95,53,56,32,64,-32,64,32,64,32,66,32,67,32,64,32,67,32,83,39,32,83,39,32,64,-32,64,32,95,53,57,32,64,32,64,32,64,32,64,32,58,52,50,55,32,-64,10,65,32,95,52,50,53,32,95,52,50,51,32,64,32,58,52,50,54,-32,64,10,65,32,83,39,32,67,32,64,32,66,32,67,32,83,39,32,64,-32,64,32,83,39,32,80,32,64,32,67,32,83,32,67,32,95,52,48,32,-95,55,50,32,64,32,64,32,95,52,50,51,32,64,32,64,32,67,32,79,-32,64,32,75,32,64,32,64,32,64,32,95,53,56,32,64,32,64,32,66,-32,66,32,67,39,32,83,39,32,95,53,57,32,64,32,85,32,65,32,64,-32,64,32,64,32,67,32,67,39,32,95,52,50,53,32,64,32,85,32,75,-32,64,32,64,32,95,53,56,32,64,32,64,32,64,32,64,32,64,32,67,-32,95,52,50,52,32,64,32,95,52,50,51,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,67,32,64,32,66,32,67,39,32,83,39,32,64,32,-83,39,32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,95,53,57,-32,64,32,85,32,65,32,64,32,64,32,64,32,67,39,32,67,32,64,32,-67,39,32,95,52,50,53,32,64,32,85,32,75,32,64,32,64,32,64,32,-95,53,56,32,64,32,64,32,64,32,64,32,67,39,32,67,32,64,32,95,-52,50,52,32,64,32,95,52,50,51,32,64,32,64,32,64,32,64,32,66,-32,66,32,67,39,66,32,66,32,67,39,32,83,39,32,95,53,57,32,64,-32,85,32,65,32,64,32,64,32,64,32,64,32,66,32,67,32,64,32,67,-39,32,95,52,50,53,32,64,32,85,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,95,52,50,52,32,64,32,64,32,64,32,58,52,-50,53,32,64,10,65,32,66,32,66,32,66,32,83,39,32,80,32,64,32,-67,32,95,49,55,50,32,95,49,56,52,32,64,32,64,32,95,49,48,48,-32,64,32,64,32,67,32,95,49,55,55,32,95,49,56,52,32,64,32,64,-32,95,49,48,48,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-95,49,56,49,32,95,49,48,52,32,64,32,64,32,64,32,95,49,56,49,-32,95,49,48,52,32,64,32,64,32,64,32,58,52,50,52,32,64,10,65,-32,35,48,32,58,52,50,51,32,64,10,65,32,95,54,57,32,95,52,49,-49,32,64,32,95,52,49,53,32,95,52,50,50,32,64,32,64,32,95,52,-49,56,32,64,32,95,52,49,57,32,64,32,95,52,50,48,32,64,32,95,-52,50,49,32,64,32,95,55,56,32,95,52,50,50,32,64,32,64,32,95,-55,57,32,95,52,50,50,32,64,32,64,32,58,52,50,50,32,64,10,65,-32,66,32,66,32,95,49,50,51,32,64,32,64,32,95,52,49,56,32,64,-32,58,52,50,49,32,64,10,65,32,67,32,95,52,49,56,32,64,32,58,-52,50,48,32,64,10,65,32,66,32,66,32,95,49,50,51,32,64,32,64,-32,67,32,95,52,49,56,32,64,32,64,32,58,52,49,57,32,64,10,65,-32,67,32,66,32,64,32,83,39,32,67,32,64,32,66,32,67,32,83,39,-32,64,32,64,32,67,32,66,32,64,32,67,39,32,67,32,64,32,66,32,-67,32,67,39,32,64,32,64,32,95,52,49,55,32,64,32,64,32,95,52,-52,32,64,32,64,32,64,32,64,32,67,32,66,32,64,32,66,32,67,39,-66,32,85,32,95,52,51,32,64,32,64,32,64,32,67,32,95,52,49,55,-32,64,32,64,32,64,32,64,32,64,32,58,52,49,56,32,64,10,65,32,-67,39,32,83,32,64,32,83,39,32,67,39,32,67,32,64,32,64,32,66,-32,66,32,83,39,32,83,39,32,95,53,54,32,64,32,64,32,67,32,95,-56,55,32,95,56,48,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,67,39,32,67,39,32,95,49,54,56,32,64,32,64,32,67,32,95,52,-48,32,95,55,50,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,32,89,32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,67,32,-67,39,32,83,39,32,64,32,83,39,32,64,32,67,39,66,32,85,32,95,-52,52,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,66,39,32,64,32,64,32,66,-32,83,39,32,66,32,64,32,66,32,83,39,32,66,32,64,32,64,32,66,-32,66,32,95,53,54,32,64,32,64,32,95,56,55,32,95,56,48,32,64,-32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,66,32,64,-32,66,32,66,32,95,49,54,56,32,64,32,64,32,95,52,48,32,95,55,-50,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,50,-49,57,32,102,114,111,109,85,84,70,56,32,34,108,116,87,46,99,109,112,-34,32,64,32,64,32,64,32,64,32,64,32,95,52,49,54,32,64,32,64,-32,95,52,49,54,32,64,32,64,32,64,32,64,32,95,51,50,49,32,64,-32,64,32,95,51,50,49,32,64,32,58,52,49,55,32,64,10,65,32,89,-32,66,32,83,32,80,32,64,32,64,32,67,39,66,32,66,32,64,32,67,-32,95,53,57,32,64,32,64,32,64,32,64,32,95,53,56,32,64,32,58,-52,49,54,32,64,10,65,32,67,39,32,67,39,32,67,32,64,32,64,32,-83,39,32,83,39,32,83,32,64,32,64,32,66,32,95,52,48,32,64,32,-95,52,49,50,32,64,32,64,32,67,39,32,67,39,32,67,32,64,32,64,-32,67,39,32,67,39,32,67,32,64,32,64,32,95,54,56,32,64,32,95,-52,49,51,32,64,32,64,32,95,52,49,52,32,64,32,64,32,64,32,95,-50,53,56,32,64,32,58,52,49,53,32,64,10,65,32,90,32,75,32,64,-32,58,52,49,52,32,64,10,65,32,75,32,65,32,64,32,58,52,49,51,-32,64,10,65,32,85,32,90,32,90,32,90,32,90,32,90,32,90,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,52,49,50,32,-64,10,65,32,95,52,49,32,95,52,48,57,32,64,32,95,52,49,48,32,-64,32,58,52,49,49,32,64,10,65,32,66,32,66,32,95,49,50,51,32,-64,32,64,32,95,52,48,57,32,64,32,58,52,49,48,32,64,10,65,32,-67,32,66,32,64,32,67,39,66,32,66,32,64,32,67,39,66,32,66,32,-67,39,66,32,64,32,66,32,66,32,95,49,54,56,32,64,32,64,32,95,-52,48,32,95,52,48,56,32,64,32,64,32,64,32,64,32,95,52,48,32,-95,50,52,53,32,95,55,50,32,64,32,64,32,64,32,64,32,64,32,58,-52,48,57,32,64,10,65,32,95,52,49,32,67,32,67,32,83,39,32,64,-32,80,32,95,52,51,32,64,32,95,52,52,32,64,32,64,32,64,32,80,-32,95,52,52,32,64,32,95,52,51,32,64,32,64,32,64,32,95,52,53,-32,95,52,48,56,32,64,32,64,32,58,52,48,56,32,64,10,65,32,83,-39,32,95,52,48,49,32,64,32,83,39,32,80,32,64,32,85,32,75,32,-64,32,64,32,85,32,65,32,64,32,64,32,64,32,66,32,95,52,48,54,-32,64,32,83,39,32,80,32,64,32,85,32,75,32,64,32,64,32,85,32,-65,32,64,32,64,32,64,32,64,32,58,52,48,55,32,64,10,65,32,67,-32,83,39,32,95,52,48,52,32,64,32,83,39,32,80,32,64,32,85,32,-75,32,64,32,64,32,85,32,65,32,64,32,64,32,64,32,67,39,32,95,-57,48,32,64,32,66,32,85,32,65,32,64,32,64,32,66,32,95,49,55,-57,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,95,49,48,50,-32,35,49,48,32,64,32,64,32,64,32,64,32,95,52,48,53,32,64,32,-58,52,48,54,32,64,10,65,32,83,32,83,32,67,32,95,56,55,32,95,-56,48,32,64,32,64,32,35,49,48,32,64,32,64,32,66,32,95,51,49,-49,32,64,32,95,49,56,49,32,95,49,48,52,32,64,32,95,56,49,32,-95,49,48,52,32,64,32,95,49,49,49,32,35,54,53,32,64,32,64,32,-35,49,48,32,64,32,64,32,64,32,64,32,64,32,66,32,95,51,49,49,-32,64,32,95,49,56,49,32,95,49,48,52,32,64,32,95,49,49,49,32,-35,52,56,32,64,32,64,32,64,32,64,32,58,52,48,53,32,64,10,65,-32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,32,67,32,64,-32,64,32,67,39,32,67,32,64,32,83,39,32,83,39,32,67,39,32,64,-32,64,32,66,32,66,32,67,39,32,64,32,64,32,83,39,32,67,32,64,-32,66,32,95,54,56,32,64,32,85,32,75,32,64,32,64,32,64,32,67,-39,32,95,57,48,32,64,32,66,32,85,32,65,32,64,32,64,32,66,32,-95,49,55,57,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,95,-49,48,50,32,35,49,32,64,32,64,32,64,32,64,32,64,32,83,39,32,-66,32,64,32,66,32,83,32,64,32,67,39,32,83,39,32,83,39,32,64,-32,64,32,83,39,32,67,32,64,32,66,32,95,56,55,32,64,32,85,32,-75,32,64,32,64,32,64,32,67,39,32,95,57,48,32,64,32,66,32,85,-32,65,32,64,32,64,32,66,32,95,49,55,57,32,64,32,85,32,65,32,-64,32,64,32,64,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,-64,32,64,32,85,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,-32,83,39,32,66,32,64,32,64,32,67,39,32,67,32,64,32,83,32,83,-39,32,67,39,32,64,32,66,32,95,56,55,32,64,32,85,32,75,32,64,-32,64,32,64,32,66,32,95,56,56,32,64,32,66,32,85,32,65,32,64,-32,64,32,66,32,95,49,55,57,32,64,32,85,32,65,32,64,32,64,32,-64,32,64,32,64,32,64,32,67,39,32,95,57,48,32,64,32,66,32,85,-32,65,32,64,32,64,32,66,32,95,49,55,57,32,64,32,85,32,65,32,-64,32,64,32,64,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,-64,32,64,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,78,-117,109,101,114,105,99,46,115,104,111,119,73,110,116,65,116,66,97,115,101,-58,32,110,101,103,97,116,105,118,101,32,97,114,103,117,109,101,110,116,34,-32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,-83,39,32,95,54,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-85,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,-95,56,56,32,64,32,66,32,85,32,65,32,64,32,64,32,66,32,95,49,-55,57,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,32,64,32,66,32,95,49,55,50,32,64,32,85,32,65,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,-64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,32,95,56,-56,32,64,32,66,32,85,32,65,32,64,32,64,32,66,32,95,49,55,57,-32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,32,64,32,66,32,95,49,55,55,32,64,32,85,32,65,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,50,-49,57,32,102,114,111,109,85,84,70,56,32,34,78,117,109,101,114,105,99,-46,115,104,111,119,73,110,116,65,116,66,97,115,101,58,32,117,110,115,117,-112,112,111,114,116,101,100,32,98,97,115,101,34,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,89,32,64,32,64,32,64,32,83,39,-32,83,39,32,66,32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,-67,39,32,83,32,95,51,51,53,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,32,83,-39,32,83,39,32,66,32,64,32,64,32,66,32,66,32,83,39,32,83,39,-32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,64,32,64,32,-64,32,66,32,67,32,64,32,66,32,95,56,55,32,64,32,85,32,75,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,66,39,32,-64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,-66,32,67,32,64,32,66,32,95,49,55,50,32,64,32,85,32,65,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,32,95,53,57,32,64,32,64,-32,64,32,64,32,67,32,95,53,57,32,64,32,64,32,64,32,64,32,66,-32,66,32,67,32,66,32,64,32,64,32,64,32,83,39,32,66,32,64,32,-66,39,32,66,32,95,52,48,51,32,64,32,67,39,32,80,32,64,32,85,-32,65,32,64,32,64,32,95,49,48,52,32,64,32,64,32,64,32,64,32,-66,32,67,32,64,32,66,32,95,49,55,55,32,64,32,85,32,65,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,52,48,52,32,-64,10,65,32,83,39,32,66,32,64,32,66,32,95,57,48,32,64,32,85,-32,65,32,64,32,64,32,64,32,66,32,95,52,48,50,32,64,32,85,32,-75,32,64,32,64,32,64,32,58,52,48,51,32,64,10,65,32,85,32,75,-50,32,75,52,32,65,32,64,32,64,32,64,32,58,52,48,50,32,64,10,-65,32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,66,32,83,32,-64,32,64,32,66,32,83,39,32,83,39,32,64,32,64,32,83,39,32,67,-32,64,32,66,32,95,56,55,32,64,32,85,32,75,32,64,32,64,32,64,-32,67,39,32,95,57,48,32,64,32,66,32,85,32,65,32,64,32,64,32,-66,32,95,49,55,57,32,64,32,85,32,65,32,64,32,64,32,64,32,64,-32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,64,32,64,32,64,-32,83,39,32,83,39,32,67,32,64,32,64,32,66,32,66,32,67,39,32,-83,39,32,64,32,66,32,83,39,32,64,32,67,32,95,49,52,57,32,95,-56,48,32,64,32,64,32,35,54,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,95,53,57,32,35,52,53,32,64,32,64,32,-64,32,64,32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,95,56,-56,32,64,32,66,32,85,32,65,32,64,32,64,32,66,32,95,49,55,57,-32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,95,53,57,32,35,52,48,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,53,57,-32,35,52,53,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-32,67,39,66,32,64,32,64,32,66,32,67,32,66,32,64,32,64,32,66,-32,95,56,56,32,64,32,66,32,85,32,65,32,64,32,64,32,66,32,95,-49,55,57,32,64,32,85,32,65,32,64,32,64,32,64,32,64,32,64,32,-64,32,95,53,57,32,35,52,49,32,64,32,64,32,64,32,64,32,64,32,-64,32,58,52,48,49,32,64,10,65,32,83,32,83,39,32,95,49,53,53,-32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,67,39,66,32,66,-39,32,66,32,95,50,54,32,64,32,66,32,95,51,57,57,32,64,32,67,-32,95,49,52,57,32,95,56,48,32,64,32,64,32,35,55,32,64,32,64,-32,64,32,64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,-66,32,95,54,32,64,32,64,32,67,32,95,49,53,55,32,64,32,35,56,-32,64,32,64,32,64,32,66,32,66,32,95,54,32,95,49,54,55,32,102,-114,111,109,85,84,70,56,32,34,32,37,32,34,32,64,32,64,32,64,32,-64,32,64,32,67,32,95,49,53,55,32,64,32,35,56,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,95,49,53,56,32,64,32,95,52,48,-48,32,64,32,64,32,64,32,66,32,95,49,54,49,32,64,32,95,52,48,-48,32,64,32,64,32,58,52,48,48,32,64,10,65,32,67,32,83,32,64,-32,66,32,66,32,95,53,57,32,35,52,48,32,64,32,64,32,64,32,67,-32,66,32,64,32,95,53,57,32,35,52,49,32,64,32,64,32,64,32,64,-32,58,51,57,57,32,64,10,65,32,85,32,67,39,66,32,66,32,95,51,-54,52,32,64,32,95,51,56,54,32,64,32,64,32,95,51,57,55,32,95,-51,54,51,32,102,114,111,109,85,84,70,56,32,34,45,62,34,32,64,32,-64,32,64,32,64,32,64,32,58,51,57,56,32,64,10,65,32,66,32,85,-32,64,32,66,32,66,32,95,51,57,52,32,64,32,64,32,95,51,57,54,-32,64,32,64,32,58,51,57,55,32,64,10,65,32,83,39,32,83,32,64,-32,66,32,67,32,83,32,64,32,64,32,66,32,66,32,67,32,66,32,64,-32,64,32,64,32,67,39,32,83,39,32,67,39,32,67,32,64,32,64,32,-64,32,66,32,66,32,66,32,67,32,67,39,32,64,32,64,32,64,32,64,-32,67,39,66,32,66,32,67,32,64,32,66,32,67,32,67,39,32,64,32,-64,32,67,39,66,32,66,32,95,51,54,50,32,64,32,95,51,54,50,32,-95,51,54,51,32,75,32,64,32,64,32,64,32,64,32,95,52,57,49,32,-64,32,64,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,-90,32,75,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,95,51,-53,57,32,64,32,64,32,66,32,95,54,48,32,64,32,95,51,57,53,32,-64,32,64,32,64,32,58,51,57,54,32,64,10,65,32,66,32,85,32,64,-32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,51,54,50,32,64,-32,64,32,67,39,32,95,51,54,50,32,64,32,66,32,95,51,54,50,32,-95,51,54,51,32,102,114,111,109,85,84,70,56,32,34,32,124,34,32,64,-32,64,32,64,32,64,32,66,32,95,51,54,55,32,64,32,66,32,95,51,-54,56,32,95,51,54,51,32,79,32,35,52,52,32,64,32,75,32,64,32,-64,32,64,32,64,32,95,54,48,32,95,51,56,57,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,95,52,57,49,32,64,32,64,32,58,51,-57,53,32,64,10,65,32,83,39,32,83,32,64,32,85,32,64,32,66,32,-90,32,64,32,66,32,90,32,64,32,67,39,66,32,66,32,95,51,57,51,-32,64,32,67,32,95,51,54,50,32,64,32,95,51,54,51,32,102,114,111,-109,85,84,70,56,32,34,119,104,101,114,101,34,32,64,32,64,32,64,32,-64,32,64,32,66,32,95,51,56,53,32,35,50,32,64,32,64,32,66,32,-95,51,53,57,32,64,32,95,54,48,32,95,51,56,56,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,51,57,52,32,64,10,65,32,67,-32,95,51,56,50,32,64,32,95,52,51,32,64,32,58,51,57,51,32,64,-10,65,32,85,32,83,32,83,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,51,32,64,32,64,32,67,32,83,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,52,32,64,32,64,32,67,32,67,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,53,32,64,32,64,32,85,32,66,32,66,32,-66,32,95,50,54,32,95,51,57,48,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,66,32,64,32,66,32,66,32,95,51,54,52,32,64,32,64,-32,67,39,32,67,39,32,95,51,54,52,32,64,32,64,32,67,39,66,32,-66,32,95,51,54,52,32,64,32,67,39,32,95,51,54,52,32,64,32,95,-52,57,49,32,64,32,95,51,54,51,32,79,32,35,52,52,32,64,32,75,-32,64,32,64,32,64,32,64,32,64,32,95,52,57,49,32,64,32,64,32,-95,51,54,51,32,102,114,111,109,85,84,70,56,32,34,46,46,34,32,64,-32,64,32,64,32,64,32,64,32,95,52,57,49,32,64,32,64,32,64,32,-64,32,64,32,85,32,66,32,66,32,95,50,54,32,95,51,57,48,32,64,-32,64,32,64,32,67,39,32,67,39,32,95,51,54,52,32,64,32,64,32,-67,39,66,32,66,32,95,51,54,52,32,64,32,67,39,32,95,51,54,52,-32,64,32,95,52,57,49,32,64,32,95,51,54,51,32,79,32,35,52,52,-32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,95,52,57,49,32,-64,32,64,32,95,51,54,51,32,102,114,111,109,85,84,70,56,32,34,46,-46,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,-32,66,32,66,32,95,50,54,32,95,51,57,48,32,64,32,64,32,64,32,-67,39,66,32,66,32,95,51,54,52,32,64,32,67,39,32,95,51,54,52,-32,64,32,95,52,57,49,32,64,32,95,51,54,51,32,102,114,111,109,85,-84,70,56,32,34,46,46,34,32,64,32,64,32,64,32,64,32,64,32,95,-52,57,49,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,83,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,67,-32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,32,64,32,-64,32,85,32,66,32,95,50,54,32,95,51,57,48,32,64,32,64,32,67,-39,32,95,51,54,52,32,64,32,95,52,57,49,32,64,32,95,51,54,51,-32,102,114,111,109,85,84,70,56,32,34,46,46,34,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,85,32,66,32,66,32,95,50,54,32,95,-51,57,48,32,64,32,64,32,64,32,67,39,66,32,66,32,95,51,54,50,-32,64,32,67,39,32,95,51,54,50,32,64,32,95,52,57,49,32,64,32,-95,51,54,51,32,79,32,35,49,50,52,32,64,32,75,32,64,32,64,32,-64,32,64,32,64,32,66,32,95,51,54,55,32,64,32,66,32,95,51,54,-56,32,95,51,54,51,32,79,32,35,52,52,32,64,32,75,32,64,32,64,-32,64,32,64,32,95,54,48,32,95,51,56,57,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,85,32,95,51,57,49,32,95,-52,57,49,32,64,32,64,32,64,32,64,32,64,32,58,51,57,50,32,64,-10,65,32,66,32,66,32,95,50,54,32,95,51,57,48,32,64,32,64,32,-64,32,66,32,66,32,95,50,54,32,95,51,54,55,32,64,32,64,32,64,-32,66,32,66,32,95,51,54,56,32,95,51,54,51,32,79,32,35,52,52,-32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,95,54,48,32,64,-32,64,32,64,32,58,51,57,49,32,64,10,65,32,67,39,32,95,51,54,-52,32,64,32,95,51,54,52,32,95,51,54,51,32,79,32,35,57,49,32,-64,32,75,32,64,32,64,32,64,32,64,32,95,51,54,51,32,79,32,35,-57,51,32,64,32,75,32,64,32,64,32,64,32,58,51,57,48,32,64,10,-65,32,67,32,80,32,67,39,66,32,66,32,95,51,54,50,32,64,32,67,-39,32,95,51,54,50,32,64,32,95,51,56,54,32,64,32,95,51,54,51,-32,102,114,111,109,85,84,70,56,32,34,60,45,34,32,64,32,64,32,64,-32,64,32,64,32,95,52,57,49,32,64,32,64,32,95,52,57,49,32,64,-32,64,32,66,32,95,51,56,51,32,95,51,54,51,32,102,114,111,109,85,-84,70,56,32,34,108,101,116,34,32,64,32,64,32,64,32,64,32,66,32,-95,51,56,53,32,35,50,32,64,32,64,32,66,32,95,51,53,57,32,64,-32,95,54,48,32,95,51,56,56,32,64,32,64,32,64,32,64,32,64,32,-58,51,56,57,32,64,10,65,32,67,32,80,32,66,32,66,32,95,53,48,-49,32,64,32,64,32,95,51,56,55,32,64,32,64,32,67,39,66,32,66,-32,95,51,54,50,32,64,32,67,39,32,95,51,54,50,32,64,32,95,51,-56,54,32,64,32,95,51,54,51,32,79,32,35,54,49,32,64,32,75,32,-64,32,64,32,64,32,64,32,64,32,95,52,57,49,32,64,32,64,32,64,-32,67,39,66,32,66,32,95,51,54,50,32,64,32,67,39,32,95,51,54,-50,32,64,32,95,51,54,57,32,64,32,95,51,54,51,32,102,114,111,109,-85,84,70,56,32,34,58,58,34,32,64,32,64,32,64,32,64,32,64,32,-95,52,57,50,32,64,32,64,32,58,51,56,56,32,64,10,65,32,66,32,-66,32,80,32,35,51,32,64,32,64,32,64,32,80,32,64,32,58,51,56,-55,32,64,10,65,32,95,52,57,49,32,58,51,56,54,32,64,10,65,32,-67,39,66,32,95,51,51,56,32,64,32,95,51,52,54,32,64,32,58,51,-56,53,32,64,10,65,32,80,32,58,51,56,52,32,64,10,65,32,67,32,-95,51,56,50,32,64,32,95,52,52,32,64,32,58,51,56,51,32,64,10,-65,32,66,32,66,32,83,32,73,32,64,32,64,32,64,32,83,39,32,67,-39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,-32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,64,32,64,-32,64,32,83,39,32,66,32,64,32,66,32,64,32,67,39,32,67,39,32,-83,39,32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,-32,95,51,53,54,32,64,32,64,32,85,32,64,32,64,32,64,32,64,32,-85,32,64,32,64,32,58,51,56,50,32,64,10,65,32,95,51,56,48,32,-95,52,51,32,64,32,58,51,56,49,32,64,10,65,32,66,32,80,32,95,-51,53,56,32,64,32,64,32,67,32,67,39,32,67,39,32,64,32,95,51,-55,57,32,64,32,95,51,52,54,32,64,32,64,32,35,48,32,64,32,64,-32,58,51,56,48,32,64,10,65,32,66,32,89,32,64,32,67,39,32,67,-39,32,67,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,83,-39,32,67,39,32,64,32,67,32,95,51,51,53,32,64,32,95,52,52,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,66,32,66,32,-64,32,64,32,64,32,66,32,83,39,32,83,39,32,83,39,32,83,32,64,-32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,83,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,54,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,55,32,64,32,64,32,85,32,75,51,32,95,50,49,57,32,-102,114,111,109,85,84,70,56,32,34,115,101,112,49,32,65,98,111,118,101,-34,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,75,51,32,95,-50,49,57,32,102,114,111,109,85,84,70,56,32,34,115,101,112,49,32,66,-101,115,105,100,101,34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,67,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,53,32,64,32,64,32,85,32,95,51,-50,51,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,85,32,64,32,64,32,64,32,67,39,32,83,39,32,83,39,32,67,39,-66,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,51,51,55,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,67,-32,64,32,64,32,64,32,67,39,66,32,66,32,67,32,64,32,67,32,67,-32,95,51,52,48,32,64,32,95,52,52,32,64,32,64,32,64,32,64,32,-66,32,95,51,52,54,32,64,32,95,51,53,57,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,67,39,32,83,39,-32,83,39,32,83,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,83,39,32,83,-39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,-32,66,32,83,39,32,66,32,64,32,95,51,50,56,32,64,32,64,32,64,-32,64,32,66,32,66,32,67,39,32,67,32,64,32,64,32,64,32,67,39,-66,32,66,39,32,67,32,64,32,64,32,95,56,49,32,95,49,48,52,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,85,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,66,-32,64,32,95,51,51,48,32,64,32,64,32,64,32,64,32,66,32,66,32,-67,39,32,67,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,32,-67,32,64,32,95,51,55,56,32,64,32,64,32,64,32,67,39,66,32,95,-56,49,32,95,49,48,52,32,64,32,64,32,95,51,50,49,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,83,39,32,83,39,-32,67,32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,49,32,64,32,64,32,64,32,64,32,66,32,66,32,-85,32,64,32,64,32,66,32,66,32,66,32,95,51,51,50,32,64,32,64,-32,64,32,67,39,66,32,66,32,67,32,64,32,67,32,67,32,95,51,52,-48,32,64,32,95,52,52,32,64,32,64,32,64,32,64,32,66,32,95,51,-52,54,32,64,32,95,51,53,57,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,-67,39,66,32,95,51,51,56,32,64,32,64,32,95,51,56,48,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,50,50,48,32,64,-32,64,32,58,51,55,57,32,64,10,65,32,66,32,89,32,64,32,83,39,-32,67,39,32,83,32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,-64,32,66,32,83,39,32,64,32,66,32,64,32,64,32,64,32,64,32,66,-32,67,39,32,83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,51,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,-61,32,64,32,35,51,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,90,32,64,-32,64,32,66,32,66,32,67,32,64,32,64,32,67,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,67,39,66,32,66,32,83,39,32,95,51,55,54,32,64,32,64,32,-66,32,66,32,95,51,55,55,32,64,32,64,32,83,39,32,66,32,64,32,-95,51,52,52,32,64,32,66,32,66,32,95,51,52,54,32,64,32,64,32,-67,32,67,32,83,39,32,64,32,95,51,55,52,32,64,32,64,32,95,51,-54,55,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,95,-51,51,57,32,95,52,52,32,64,32,64,32,66,32,95,51,52,54,32,64,-32,95,51,53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,95,51,55,57,32,64,32,64,32,58,51,55,56,32,64,10,65,32,-85,32,83,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,52,-32,64,32,64,32,83,32,83,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,54,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,55,32,64,32,64,32,85,32,75,51,32,95,50,49,57,-32,102,114,111,109,85,84,70,56,32,34,111,110,101,76,105,110,101,114,32,-65,98,111,118,101,34,32,64,32,64,32,64,32,64,32,64,32,64,32,85,-32,75,51,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,111,-110,101,76,105,110,101,114,32,66,101,115,105,100,101,34,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,53,32,64,32,64,32,85,32,95,51,50,51,32,-64,32,64,32,64,32,85,32,90,32,95,51,55,55,32,64,32,64,32,64,-32,64,32,64,32,64,32,83,32,83,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,50,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,51,32,64,32,64,32,85,32,67,39,66,32,95,-51,50,56,32,64,32,95,51,55,55,32,64,32,64,32,64,32,64,32,85,-32,67,39,66,32,95,51,51,48,32,64,32,95,51,55,55,32,64,32,64,-32,64,32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,-32,64,32,35,49,32,64,32,64,32,85,32,75,32,95,51,50,51,32,64,-32,64,32,64,32,64,32,85,32,95,51,51,51,32,64,32,64,32,64,32,-64,32,64,32,58,51,55,55,32,64,10,65,32,83,32,66,32,64,32,67,-39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,67,32,67,-32,61,61,32,64,32,35,48,32,64,32,64,32,64,32,64,32,95,51,51,-55,32,64,32,64,32,85,32,95,51,51,51,32,64,32,64,32,64,32,58,-51,55,54,32,64,10,65,32,67,32,80,32,67,39,66,32,66,32,95,51,-54,50,32,64,32,67,39,32,95,51,54,50,32,64,32,66,32,95,51,55,-52,32,64,32,66,32,95,51,54,56,32,95,51,54,51,32,79,32,35,52,-54,32,64,32,75,32,64,32,64,32,64,32,64,32,95,54,48,32,95,51,-54,57,32,64,32,64,32,64,32,64,32,95,51,54,51,32,79,32,35,54,-49,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,95,52,57,49,-32,64,32,64,32,66,32,95,51,55,52,32,64,32,66,32,95,51,54,56,-32,95,51,54,51,32,79,32,35,52,54,32,64,32,75,32,64,32,64,32,-64,32,64,32,95,54,48,32,95,51,54,57,32,64,32,64,32,64,32,64,-32,64,32,95,51,54,51,32,102,114,111,109,85,84,70,56,32,34,46,46,-34,32,64,32,64,32,64,32,58,51,55,53,32,64,10,65,32,95,54,32,-95,50,55,57,32,64,32,95,54,32,95,51,54,54,32,64,32,95,53,53,-32,67,32,95,51,54,48,32,64,32,95,52,52,32,64,32,64,32,95,51,-53,56,32,64,32,64,32,64,32,58,51,55,52,32,64,10,65,32,80,32,-75,32,90,32,95,51,54,57,32,64,32,64,32,64,32,90,32,95,51,54,-57,32,64,32,64,32,58,51,55,51,32,64,10,65,32,67,39,32,95,51,-54,50,32,64,32,66,32,95,51,54,50,32,95,51,54,51,32,102,114,111,-109,85,84,70,56,32,34,102,111,114,97,108,108,34,32,64,32,64,32,64,-32,64,32,66,32,95,51,54,55,32,64,32,95,54,48,32,95,51,55,49,-32,64,32,64,32,64,32,64,32,95,51,54,51,32,79,32,35,52,54,32,-64,32,75,32,64,32,64,32,64,32,58,51,55,50,32,64,10,65,32,85,-32,66,32,66,32,95,50,54,32,95,51,54,53,32,64,32,64,32,64,32,-67,39,66,32,66,32,95,51,54,52,32,64,32,67,39,32,95,51,54,52,-32,64,32,95,51,54,57,32,64,32,95,51,54,51,32,102,114,111,109,85,-84,70,56,32,34,58,58,34,32,64,32,64,32,64,32,64,32,64,32,95,-51,55,48,32,64,32,64,32,64,32,58,51,55,49,32,64,10,65,32,95,-52,57,50,32,58,51,55,48,32,64,10,65,32,85,32,75,32,95,51,54,-51,32,64,32,64,32,58,51,54,57,32,64,10,65,32,66,32,80,32,95,-53,56,32,64,32,64,32,66,32,89,32,64,32,66,32,66,32,83,39,32,-80,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,64,32,-66,32,67,39,66,32,64,32,66,32,66,39,32,64,32,66,32,66,32,95,-53,57,32,64,32,64,32,67,32,95,51,54,52,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,58,51,54,56,32,64,10,65,32,95,54,32,-95,50,55,57,32,64,32,95,54,32,95,51,54,54,32,64,32,95,53,53,-32,67,32,95,51,54,48,32,64,32,95,52,51,32,64,32,64,32,95,51,-53,56,32,64,32,64,32,64,32,58,51,54,55,32,64,10,65,32,83,32,-73,32,64,32,67,39,32,67,39,66,32,64,32,66,32,67,32,67,32,61,-61,32,64,32,35,54,32,64,32,64,32,64,32,80,32,95,51,53,52,32,-64,32,64,32,64,32,85,32,67,39,32,67,39,66,32,64,32,66,32,95,-51,53,53,32,95,51,54,48,32,64,32,64,32,66,32,95,50,55,57,32,-64,32,95,51,54,54,32,64,32,64,32,64,32,95,51,54,54,32,64,32,-64,32,64,32,64,32,58,51,54,54,32,64,10,65,32,67,39,32,95,51,-54,52,32,64,32,95,51,54,52,32,95,51,54,51,32,79,32,35,52,48,-32,64,32,75,32,64,32,64,32,64,32,64,32,95,51,54,51,32,79,32,-35,52,49,32,64,32,75,32,64,32,64,32,64,32,58,51,54,53,32,64,-10,65,32,67,32,95,51,54,49,32,64,32,95,52,52,32,64,32,58,51,-54,52,32,64,10,65,32,67,32,95,51,50,57,32,64,32,95,51,51,51,-32,64,32,58,51,54,51,32,64,10,65,32,67,32,95,51,54,49,32,64,-32,95,52,51,32,64,32,58,51,54,50,32,64,10,65,32,66,32,66,32,-83,32,73,32,64,32,64,32,64,32,83,39,32,67,39,32,67,39,32,67,-39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,67,32,61,-61,32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,32,83,39,32,-66,32,64,32,66,32,64,32,67,39,32,67,39,32,83,39,32,67,39,66,-32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,67,32,61,61,32,-64,32,35,48,32,64,32,64,32,64,32,64,32,64,32,95,51,54,48,32,-64,32,64,32,85,32,64,32,64,32,64,32,64,32,85,32,64,32,64,32,-58,51,54,49,32,64,10,65,32,66,32,66,32,66,32,80,32,35,54,32,-64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,-64,32,64,32,58,51,54,48,32,64,10,65,32,95,54,32,95,50,55,57,-32,64,32,95,54,32,95,51,53,55,32,64,32,95,53,53,32,67,32,95,-51,53,54,32,64,32,95,52,52,32,64,32,64,32,95,51,53,56,32,64,-32,64,32,64,32,58,51,53,57,32,64,10,65,32,95,51,51,51,32,58,-51,53,56,32,64,10,65,32,83,32,73,32,64,32,67,39,32,67,39,66,-32,64,32,66,32,67,32,67,32,61,61,32,64,32,35,55,32,64,32,64,-32,64,32,80,32,95,51,53,52,32,64,32,64,32,64,32,85,32,67,39,-32,67,39,66,32,64,32,66,32,95,51,53,53,32,95,51,53,54,32,64,-32,64,32,66,32,95,50,55,57,32,64,32,95,51,53,55,32,64,32,64,-32,64,32,95,51,53,55,32,64,32,64,32,64,32,64,32,58,51,53,55,-32,64,10,65,32,66,32,66,32,66,32,80,32,35,55,32,64,32,64,32,-64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,32,-58,51,53,54,32,64,10,65,32,66,32,83,39,32,66,32,64,32,66,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,83,39,32,67,39,66,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,67,32,-61,61,32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,66,32,80,32,95,51,53,52,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,83,-39,32,66,32,64,32,66,32,67,39,66,32,64,32,85,32,64,32,64,32,-64,32,64,32,64,32,64,32,85,32,64,32,64,32,58,51,53,53,32,64,-10,65,32,65,32,58,51,53,52,32,64,10,65,32,95,51,53,48,32,95,-51,53,50,32,64,32,58,51,53,51,32,64,10,65,32,95,51,53,49,32,-35,49,48,48,32,64,32,80,32,95,57,48,32,95,49,48,52,32,64,32,-95,49,48,50,32,35,51,32,64,32,64,32,64,32,95,57,48,32,95,49,-48,52,32,64,32,95,49,48,50,32,35,50,32,64,32,64,32,64,32,64,-32,58,51,53,50,32,64,10,65,32,80,32,58,51,53,49,32,64,10,65,-32,67,32,83,39,32,95,51,52,55,32,64,32,95,51,52,56,32,64,32,-95,51,52,57,32,64,32,64,32,75,32,64,32,58,51,53,48,32,64,10,-65,32,85,32,65,32,64,32,58,51,52,57,32,64,10,65,32,85,32,75,-32,64,32,58,51,52,56,32,64,10,65,32,66,32,67,39,66,32,66,32,-64,32,64,32,83,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,-66,32,66,39,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,-66,32,83,32,64,32,64,32,66,32,67,32,64,32,95,51,50,50,32,64,-32,64,32,64,32,67,39,66,32,66,32,67,32,64,32,95,51,51,52,32,-64,32,64,32,95,51,52,54,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,95,49,55,50,32,95,49,56,52,32,64,32,64,32,64,32,95,50,-49,55,32,95,49,48,52,32,64,32,64,32,64,32,64,32,58,51,52,55,-32,64,10,65,32,83,32,73,32,64,32,66,32,83,32,67,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,55,32,64,32,64,32,85,32,67,39,-32,67,39,66,32,64,32,95,51,52,49,32,64,32,95,51,52,54,32,64,-32,64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,67,32,-67,32,61,61,32,64,32,35,54,32,64,32,64,32,64,32,85,32,67,39,-32,67,39,66,32,64,32,95,51,52,53,32,64,32,95,51,52,54,32,64,-32,64,32,64,32,64,32,64,32,58,51,52,54,32,64,10,65,32,83,39,-32,66,32,64,32,66,32,64,32,67,39,32,83,39,32,83,39,32,83,32,-64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,66,32,66,32,-66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,54,32,64,-32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,67,32,-64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,55,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,90,32,64,-32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,32,90,32,64,-32,64,32,66,32,95,51,52,53,32,64,32,95,51,52,54,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,-32,64,32,64,32,67,39,32,83,39,32,83,39,32,66,32,64,32,64,32,-64,32,66,32,66,32,66,32,83,39,32,66,32,64,32,64,32,64,32,64,-32,66,32,83,39,32,66,32,64,32,66,32,67,32,64,32,67,32,95,52,-48,32,95,51,52,50,32,64,32,64,32,64,32,64,32,64,32,66,32,95,-51,52,53,32,64,32,95,51,52,54,32,64,32,64,32,64,32,64,32,66,-32,66,32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,51,52,51,-32,64,32,64,32,95,51,52,53,32,64,32,64,32,64,32,64,32,66,32,-67,32,64,32,67,32,95,51,52,53,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,67,32,67,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,53,32,64,32,64,32,85,32,95,51,50,51,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,-32,83,39,32,83,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,-32,95,51,51,55,32,64,32,64,32,64,32,66,32,67,32,64,32,67,32,-95,51,52,53,32,64,32,64,32,64,32,64,32,66,32,67,32,64,32,67,-32,95,51,52,53,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,83,39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,50,32,64,32,64,32,64,-32,64,32,83,39,32,83,39,32,67,32,64,32,64,32,66,32,66,32,67,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,32,66,32,67,39,-66,32,66,32,95,51,52,51,32,64,32,95,51,50,56,32,64,32,64,32,-64,32,64,32,66,32,67,32,64,32,67,32,95,51,52,53,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,66,-32,66,32,67,39,66,32,95,51,50,57,32,64,32,64,32,64,32,66,32,-66,32,83,32,73,32,64,32,64,32,64,32,83,39,32,83,39,32,67,39,-32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,67,-32,61,61,32,64,32,35,48,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,32,64,32,67,32,95,51,52,53,32,64,32,64,32,64,32,64,32,-66,32,66,32,85,32,64,32,64,32,95,51,52,52,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,67,32,64,-32,64,32,66,32,66,32,67,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,49,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,-64,32,66,32,66,32,66,32,95,51,52,51,32,95,51,51,50,32,64,32,-64,32,64,32,64,32,66,32,67,32,64,32,67,32,95,51,52,53,32,64,-32,64,32,64,32,64,32,64,32,64,32,85,32,64,32,64,32,64,32,64,-32,58,51,52,53,32,64,10,65,32,66,32,89,32,64,32,66,32,67,39,-32,83,32,64,32,66,32,67,32,66,32,64,32,64,32,67,39,32,83,39,-32,83,32,64,32,64,32,66,32,66,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,51,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,51,32,64,-32,64,32,64,32,64,32,66,32,85,32,64,32,75,32,64,32,64,32,64,-32,64,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,48,32,64,32,64,32,64,32,85,32,95,51,51,51,32,64,32,64,-32,64,32,64,32,64,32,64,32,67,32,83,32,64,32,95,51,51,48,32,-79,32,35,51,50,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,-58,51,52,52,32,64,10,65,32,83,32,95,51,50,48,32,64,32,58,51,-52,51,32,64,10,65,32,95,52,49,32,67,32,67,32,83,39,32,64,32,-95,49,50,51,32,64,32,64,32,73,32,64,32,64,32,95,52,53,32,95,-51,52,50,32,64,32,64,32,58,51,52,50,32,64,10,65,32,83,39,32,-66,32,64,32,66,32,64,32,66,32,83,39,32,83,39,32,83,32,64,32,-64,32,66,32,66,32,67,39,32,83,39,32,64,32,67,32,60,32,64,32,-35,55,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,-32,66,32,66,32,67,39,32,67,39,66,32,64,32,95,51,52,49,32,64,-32,64,32,64,32,66,32,67,32,64,32,67,32,95,51,52,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,-32,67,39,66,32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,67,-32,61,61,32,64,32,35,54,32,64,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,66,32,64,32,67,39,32,67,32,64,32,95,51,52,48,32,-64,32,35,48,32,64,32,64,32,95,51,52,54,32,64,32,64,32,64,32,-66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,90,32,-64,32,64,32,66,32,66,32,90,32,64,32,64,32,66,32,66,32,90,32,-64,32,64,32,67,39,32,67,39,66,32,64,32,67,39,32,67,32,64,32,-66,32,95,51,52,48,32,64,32,95,51,52,54,32,64,32,64,32,35,48,-32,64,32,64,32,95,51,52,54,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,51,52,49,32,64,10,65,32,67,39,32,67,39,-32,67,32,64,32,64,32,66,32,66,32,83,39,32,67,39,32,64,32,67,-32,95,51,51,53,32,64,32,95,52,52,32,64,32,64,32,64,32,64,32,-67,39,66,32,66,39,32,66,32,64,32,64,32,83,39,32,83,39,32,83,-39,32,83,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,83,32,83,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,54,32,64,32,64,32,67,32,67,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,55,32,64,32,64,32,85,32,75,51,32,-95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,97,98,111,118,101,-78,101,115,116,32,65,98,111,118,101,34,32,64,32,64,32,64,32,64,32,-64,32,64,32,85,32,75,51,32,95,50,49,57,32,102,114,111,109,85,84,-70,56,32,34,97,98,111,118,101,78,101,115,116,32,66,101,115,105,100,101,-34,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,67,32,67,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,53,32,64,32,64,32,85,32,95,51,50,51,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,-64,32,64,32,83,39,32,83,39,32,83,39,32,67,39,66,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,95,51,51,55,32,64,32,64,32,-64,32,64,32,66,32,66,32,67,32,64,32,64,32,66,32,67,32,64,32,-67,32,95,51,52,48,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,67,32,64,32,64,32,66,32,67,32,64,32,67,32,95,51,52,48,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,83,39,-32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,66,32,66,32,66,-32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,32,64,32,-64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,67,32,64,-32,64,32,64,32,66,32,66,32,66,32,67,39,32,83,39,32,64,32,67,-32,60,32,64,32,35,51,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,-32,66,32,64,32,95,51,50,56,32,64,32,64,32,64,32,64,32,66,32,-66,32,67,39,32,67,32,64,32,64,32,64,32,67,39,66,32,66,39,32,-66,32,67,32,64,32,67,32,95,51,52,48,32,64,32,64,32,64,32,64,-32,95,56,49,32,95,49,48,52,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,67,39,-66,32,66,32,67,39,32,83,32,64,32,64,32,66,32,66,32,67,39,32,-67,39,32,64,32,66,39,32,95,51,50,57,32,64,32,64,32,64,32,64,-32,66,32,66,32,83,32,66,32,64,32,64,32,64,32,83,39,32,83,39,-32,67,39,32,83,39,32,67,39,66,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,67,32,67,32,61,61,32,64,32,35,48,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,32,64,32,-64,32,67,32,95,51,52,48,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,66,32,67,32,64,32,95,51,51,-57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,-95,56,49,32,95,49,48,52,32,64,32,64,32,95,51,50,49,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,83,39,32,67,-32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,66,32,-66,32,95,51,51,50,32,64,32,64,32,64,32,64,32,66,32,66,32,67,-32,64,32,64,32,66,32,67,32,64,32,67,32,95,51,52,48,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,64,32,-64,32,95,51,51,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,95,50,50,48,32,64,32,58,51,52,48,32,64,10,65,32,66,32,89,-32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,66,32,66,32,83,-39,32,67,39,32,64,32,67,32,95,51,51,53,32,64,32,95,52,52,32,-64,32,64,32,64,32,64,32,66,32,67,39,32,83,39,32,83,32,64,32,-64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,67,39,32,67,-39,32,83,39,32,83,32,64,32,64,32,64,32,66,32,66,32,66,32,83,-39,32,83,39,32,64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,67,39,32,67,39,66,32,64,32,67,-32,67,32,61,61,32,64,32,35,51,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,85,32,64,32,64,32,67,39,66,32,66,32,64,32,95,-49,56,49,32,95,49,48,52,32,64,32,64,32,64,32,64,32,64,32,64,-32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,-48,32,64,32,64,32,64,32,85,32,95,51,51,51,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,83,32,64,32,67,39,32,83,39,32,-83,39,32,64,32,64,32,67,39,66,32,66,32,95,49,54,56,32,64,32,-95,49,50,51,32,64,32,64,32,67,32,95,49,52,57,32,95,56,48,32,-64,32,64,32,35,48,32,64,32,64,32,64,32,66,32,66,32,95,51,51,-50,32,64,32,64,32,95,51,51,56,32,64,32,64,32,64,32,66,32,95,-51,51,48,32,64,32,67,32,95,51,49,57,32,64,32,35,51,50,32,64,-32,64,32,64,32,64,32,64,32,64,32,95,50,50,48,32,64,32,64,32,-58,51,51,57,32,64,10,65,32,83,39,32,83,32,64,32,67,32,83,39,-32,67,39,32,64,32,66,32,67,39,32,64,32,67,32,95,51,51,53,32,-64,32,95,52,52,32,64,32,64,32,64,32,66,32,67,32,66,32,64,32,-64,32,67,39,32,83,39,32,83,32,64,32,64,32,66,32,66,32,83,39,-32,83,39,32,64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,64,-32,64,32,66,32,83,39,32,83,32,64,32,66,32,83,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,53,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,53,32,64,32,-64,32,64,32,85,32,95,51,50,51,32,64,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,-32,35,51,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,-66,32,95,51,51,56,32,64,32,64,32,95,49,56,49,32,95,49,48,52,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,-66,32,64,32,67,32,67,32,61,61,32,64,32,35,48,32,64,32,64,32,-64,32,85,32,95,51,51,51,32,64,32,64,32,64,32,64,32,64,32,64,-32,95,50,50,48,32,64,32,64,32,67,32,83,39,32,83,39,32,64,32,-95,52,48,32,95,55,50,32,64,32,95,57,48,32,95,49,48,52,32,64,-32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,64,32,95,51,50,-56,32,64,32,64,32,73,32,64,32,64,32,58,51,51,56,32,64,10,65,-32,95,51,51,54,32,58,51,51,55,32,64,10,65,32,66,32,66,32,80,-32,35,52,32,64,32,64,32,64,32,80,32,64,32,58,51,51,54,32,64,-10,65,32,95,51,50,48,32,58,51,51,53,32,64,10,65,32,67,32,67,-39,32,89,32,64,32,67,32,67,39,32,83,39,32,64,32,66,32,67,32,-64,32,83,39,32,83,39,32,83,39,32,80,32,64,32,64,32,64,32,66,-32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,64,32,67,39,32,-83,39,32,66,32,64,32,64,32,66,32,66,32,83,39,32,83,32,64,32,-64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,51,32,64,32,64,32,64,32,64,32,64,32,67,39,32,-83,39,32,83,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,-83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,67,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,53,32,64,32,64,32,67,39,66,32,-67,32,67,32,61,61,32,64,32,35,53,32,64,32,64,32,95,50,49,57,-32,102,114,111,109,85,84,70,56,32,34,98,101,115,116,32,103,101,116,34,-32,64,32,64,32,64,32,64,32,85,32,95,51,50,51,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,-64,32,64,32,67,39,32,83,39,32,83,39,32,67,39,66,32,64,32,64,-32,64,32,66,32,83,39,32,66,32,64,32,64,32,67,32,95,51,50,54,-32,64,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,66,-32,66,32,85,32,64,32,64,32,66,32,66,32,83,39,32,66,32,64,32,-95,51,50,56,32,64,32,64,32,64,32,67,39,66,32,66,32,64,32,95,-56,49,32,95,49,48,52,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,67,32,64,32,64,32,64,-32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,49,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,83,-39,32,67,32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,64,32,-67,32,60,32,64,32,35,50,32,64,32,64,32,64,32,64,32,66,32,66,-32,85,32,64,32,64,32,66,32,66,32,83,39,32,66,32,64,32,95,51,-51,48,32,64,32,64,32,64,32,67,32,67,39,66,32,64,32,95,51,50,-49,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,66,32,66,32,95,51,51,50,32,64,32,64,32,64,32,64,-32,64,32,64,32,85,32,95,51,51,51,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,-64,32,64,32,67,39,66,32,66,32,83,39,32,83,39,32,83,39,32,83,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,83,39,32,83,39,32,83,39,32,67,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,52,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,53,32,64,32,64,32,67,39,66,32,-67,32,67,32,61,61,32,64,32,35,53,32,64,32,64,32,95,50,49,57,-32,102,114,111,109,85,84,70,56,32,34,98,101,115,116,32,103,101,116,49,-34,32,64,32,64,32,64,32,64,32,85,32,95,51,50,51,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,85,32,64,32,64,32,64,32,64,32,67,39,32,83,39,32,83,39,32,-83,39,32,67,39,66,32,64,32,64,32,64,32,64,32,66,32,83,39,32,-83,39,32,66,32,64,32,64,32,64,32,67,32,95,51,50,53,32,64,32,-64,32,64,32,73,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,85,32,64,32,64,32,64,32,66,32,90,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,67,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,83,39,32,83,-39,32,64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,67,39,32,83,39,32,83,39,32,67,32,64,32,-64,32,64,32,66,32,66,32,66,32,67,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,50,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,66,32,83,39,32,-66,32,64,32,95,51,51,48,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,39,32,64,32,67,39,66,32,95,49,56,49,32,-95,49,48,52,32,64,32,64,32,95,51,50,49,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,95,51,51,50,32,64,32,64,32,64,-32,64,32,67,39,66,32,66,32,64,32,95,56,49,32,95,49,48,52,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,95,51,51,51,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,85,32,65,32,64,-32,64,32,64,32,85,32,75,32,64,32,64,32,64,32,75,32,64,32,64,-32,58,51,51,52,32,64,10,65,32,80,32,35,48,32,64,32,73,32,64,-32,58,51,51,51,32,64,10,65,32,95,51,51,49,32,58,51,51,50,32,-64,10,65,32,66,32,80,32,35,49,32,64,32,64,32,85,32,64,32,58,-51,51,49,32,64,10,65,32,95,51,50,57,32,58,51,51,48,32,64,10,-65,32,66,32,66,32,80,32,35,50,32,64,32,64,32,64,32,80,32,64,-32,58,51,50,57,32,64,10,65,32,95,51,50,55,32,58,51,50,56,32,-64,10,65,32,66,32,66,32,80,32,35,51,32,64,32,64,32,64,32,80,-32,64,32,58,51,50,55,32,64,10,65,32,67,39,32,67,32,64,32,95,-51,50,53,32,64,32,35,48,32,64,32,58,51,50,54,32,64,10,65,32,-67,39,32,67,39,32,67,39,32,83,39,32,67,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,95,51,50,52,32,64,32,64,32,64,32,66,-32,66,32,95,56,49,32,95,49,48,52,32,64,32,64,32,64,32,83,39,-32,67,32,64,32,67,39,32,83,32,64,32,95,56,55,32,95,56,48,32,-64,32,64,32,73,32,64,32,64,32,73,32,64,32,64,32,64,32,64,32,-73,32,64,32,58,51,50,53,32,64,10,65,32,67,32,83,39,32,67,39,-32,64,32,67,32,95,56,55,32,95,56,48,32,64,32,64,32,35,48,32,-64,32,64,32,67,39,32,67,32,64,32,66,32,67,32,66,32,64,32,64,-32,67,39,32,67,39,32,83,32,64,32,64,32,66,32,66,32,83,39,32,-83,39,32,64,32,67,32,60,32,64,32,35,50,32,64,32,64,32,64,32,-64,32,66,32,83,39,32,83,32,64,32,66,32,83,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,53,32,64,32,64,32,64,32,67,39,32,67,-39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,53,32,64,32,64,-32,64,32,85,32,95,52,52,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,39,32,67,39,66,32,64,32,67,32,67,32,61,61,32,64,32,35,-50,32,64,32,64,32,64,32,64,32,66,32,85,32,64,32,66,32,66,32,-95,51,50,52,32,64,32,64,32,67,39,66,32,95,56,49,32,95,49,48,-52,32,64,32,64,32,95,51,50,49,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,67,32,67,39,32,83,39,32,64,32,67,32,60,32,64,-32,35,49,32,64,32,64,32,85,32,75,32,95,52,51,32,64,32,64,32,-64,32,64,32,85,32,95,52,51,32,64,32,64,32,64,32,64,32,64,32,-95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,102,105,116,115,34,-32,64,32,64,32,64,32,64,32,64,32,95,52,52,32,64,32,58,51,50,-52,32,64,10,65,32,80,32,35,53,32,64,32,73,32,64,32,58,51,50,-51,32,64,10,65,32,75,50,32,67,32,67,39,32,89,32,64,32,67,39,-32,83,32,64,32,67,39,32,83,39,32,67,32,64,32,64,32,83,39,32,-67,39,32,83,39,32,83,39,32,67,32,64,32,64,32,64,32,64,32,67,-39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,80,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,-32,64,32,64,32,66,32,67,39,32,83,39,32,83,39,32,83,32,64,32,-64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,32,-60,32,64,32,35,50,32,64,32,64,32,64,32,64,32,64,32,66,32,67,-39,32,83,39,32,67,32,64,32,64,32,66,32,66,32,83,39,32,83,39,-32,64,32,67,32,60,32,64,32,35,51,32,64,32,64,32,64,32,64,32,-66,32,66,32,67,39,66,32,67,32,67,32,61,61,32,64,32,35,51,32,-64,32,64,32,95,50,49,57,32,102,114,111,109,85,84,70,56,32,34,100,-105,115,112,108,97,121,32,108,97,121,34,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,85,32,64,32,64,32,67,39,66,32,66,32,-64,32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,85,32,64,32,64,32,85,32,75,32,-75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,-32,67,39,32,67,32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,-64,32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,64,32,66,-32,66,32,85,32,64,32,64,32,66,32,66,32,95,49,53,51,32,79,32,-35,49,48,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,85,32,64,32,64,32,64,32,64,32,64,32,66,32,83,39,-32,66,32,64,32,66,39,32,66,32,95,49,53,51,32,64,32,67,32,95,-51,49,57,32,64,32,35,51,50,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,83,39,32,66,32,64,32,95,49,53,51,32,64,32,64,32,-64,32,67,39,66,32,66,32,64,32,67,39,66,32,95,49,56,49,32,95,-49,48,52,32,64,32,64,32,95,51,50,49,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,64,32,66,32,66,32,67,39,32,83,39,32,83,32,64,32,64,32,66,-32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,50,32,-64,32,64,32,64,32,64,32,83,39,32,83,39,32,67,32,64,32,64,32,-66,32,66,32,83,39,32,83,39,32,64,32,67,32,60,32,64,32,35,51,-32,64,32,64,32,64,32,64,32,66,32,66,32,67,39,66,32,67,32,67,-32,61,61,32,64,32,35,51,32,64,32,64,32,95,50,49,57,32,102,114,-111,109,85,84,70,56,32,34,100,105,115,112,108,97,121,32,108,97,121,50,-34,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,90,32,64,32,64,32,64,32,64,32,66,32,66,32,85,32,-64,32,64,32,66,32,66,32,83,39,32,66,32,64,32,95,49,53,51,32,-64,32,64,32,64,32,67,39,66,32,66,32,64,32,67,39,66,32,95,49,-56,49,32,95,49,48,52,32,64,32,64,32,95,51,50,49,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,-67,39,32,67,32,64,32,64,32,66,32,66,32,67,39,32,83,39,32,64,-32,67,32,60,32,64,32,35,49,32,64,32,64,32,64,32,64,32,66,32,-66,32,85,32,64,32,64,32,66,32,66,32,95,49,53,51,32,79,32,35,-49,48,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,85,32,64,32,64,32,64,32,64,32,64,32,85,32,75,32,65,-32,64,32,64,32,64,32,64,32,85,32,90,32,75,32,64,32,64,32,64,-32,64,32,90,32,75,32,64,32,64,32,64,32,35,48,32,64,32,64,32,-58,51,50,50,32,64,10,65,32,89,32,66,32,83,32,80,32,64,32,64,-32,66,32,90,32,64,32,67,39,66,32,66,32,67,39,32,83,32,95,51,-50,48,32,64,32,64,32,64,32,67,32,64,32,64,32,67,32,95,49,56,-49,32,95,49,48,52,32,64,32,64,32,35,49,32,64,32,64,32,64,32,-64,32,64,32,35,48,32,64,32,58,51,50,49,32,64,10,65,32,115,101,-113,32,58,51,50,48,32,64,10,65,32,67,39,66,32,95,49,48,53,32,-64,32,95,51,49,56,32,64,32,58,51,49,57,32,64,10,65,32,66,32,-89,32,64,32,95,53,57,32,64,32,58,51,49,56,32,64,10,65,32,66,-32,85,32,64,32,66,32,90,32,64,32,66,32,90,32,64,32,66,32,90,-32,64,32,66,32,90,32,64,32,66,32,90,32,64,32,66,32,90,32,64,-32,66,32,66,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,-32,34,84,109,111,100,117,108,101,32,34,32,64,32,64,32,64,32,64,32,-64,32,66,32,67,39,66,32,66,32,95,49,53,51,32,64,32,95,50,53,-52,32,64,32,64,32,64,32,66,32,66,32,95,49,53,51,32,79,32,35,-49,48,32,64,32,75,32,64,32,64,32,64,32,64,32,67,32,67,39,32,-95,49,53,51,32,64,32,64,32,79,32,35,49,48,32,64,32,75,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,58,51,49,55,32,64,10,65,32,66,32,66,32,89,32,64,32,-64,32,83,39,32,66,32,64,32,66,39,32,66,32,80,32,64,32,67,32,-95,49,49,32,64,32,95,53,56,32,64,32,64,32,64,32,64,32,83,39,-32,67,39,66,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,66,-39,32,95,48,32,64,32,64,32,64,32,83,39,32,67,39,32,67,39,66,-32,64,32,64,32,66,39,32,95,48,32,64,32,64,32,67,39,66,32,66,-39,32,95,49,49,32,64,32,64,32,95,53,57,32,64,32,64,32,64,32,-64,32,64,32,58,51,49,54,32,64,10,65,32,83,39,32,80,32,64,32,-95,54,48,32,95,50,52,57,32,64,32,64,32,95,54,48,32,95,50,55,-57,32,64,32,64,32,58,51,49,53,32,64,10,65,32,67,39,32,95,48,-32,95,50,51,32,64,32,64,32,67,32,95,49,51,51,32,64,32,95,49,-51,52,32,64,32,64,32,80,32,95,49,49,32,95,50,51,32,64,32,95,-53,50,32,64,32,64,32,83,39,32,95,48,32,95,50,51,32,64,32,64,-32,95,50,52,52,32,64,32,67,39,66,32,66,32,95,49,48,54,32,95,-50,51,32,64,32,64,32,95,49,51,56,32,64,32,64,32,66,32,95,49,-49,32,95,50,51,32,64,32,64,32,95,52,57,32,64,32,64,32,64,32,-64,32,64,32,58,51,49,52,32,64,10,65,32,83,39,32,83,39,32,95,-48,32,95,50,51,32,64,32,64,32,64,32,95,50,49,52,32,64,32,67,-39,32,67,39,32,80,32,64,32,64,32,66,32,83,39,32,95,50,54,32,-64,32,66,32,95,51,48,51,32,95,51,48,53,32,64,32,64,32,95,51,-48,54,32,95,51,48,56,32,64,32,64,32,64,32,64,32,66,32,66,32,-95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,70,105,108,101,32,-110,111,116,32,102,111,117,110,100,58,32,34,32,64,32,64,32,64,32,64,-32,66,32,67,39,32,95,49,53,51,32,64,32,95,49,53,52,32,95,50,-53,53,32,64,32,64,32,64,32,66,32,95,49,53,51,32,102,114,111,109,-85,84,70,56,32,34,92,49,48,38,112,97,116,104,61,34,32,64,32,64,-32,64,32,66,32,95,49,53,52,32,95,49,54,50,32,95,49,54,50,32,-95,49,57,49,32,64,32,64,32,64,32,64,32,95,49,50,52,32,95,50,-49,50,32,64,32,95,49,50,56,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,85,32,66,32,67,39,32,95,48,32,95,50,51,32,64,32,-64,32,95,51,49,50,32,64,32,64,32,66,32,66,32,95,49,49,32,95,-50,51,32,64,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,64,-32,58,51,49,51,32,64,10,65,32,83,39,32,95,48,32,95,50,51,32,-64,32,64,32,95,51,48,57,32,64,32,83,39,32,67,32,64,32,66,32,-83,32,67,32,95,52,48,32,95,55,50,32,64,32,64,32,95,56,56,32,-95,49,48,52,32,64,32,35,49,32,64,32,64,32,64,32,64,32,67,39,-66,32,66,32,95,48,32,95,50,51,32,64,32,64,32,66,32,95,51,49,-48,32,64,32,95,51,49,50,32,64,32,64,32,64,32,66,32,66,32,95,-49,49,32,95,50,51,32,64,32,64,32,64,32,66,32,95,53,57,32,64,-32,95,51,49,49,32,64,32,64,32,64,32,64,32,64,32,67,39,32,95,-49,48,54,32,95,50,51,32,64,32,64,32,95,49,51,56,32,64,32,95,-49,49,32,95,50,51,32,64,32,75,32,64,32,64,32,64,32,64,32,58,-51,49,50,32,64,10,65,32,95,49,56,53,32,58,51,49,49,32,64,10,-65,32,66,32,95,53,32,64,32,95,50,55,32,64,32,58,51,49,48,32,-64,10,65,32,94,103,101,116,98,32,58,51,48,57,32,64,10,65,32,95,-51,48,55,32,85,32,75,32,64,32,64,32,58,51,48,56,32,64,10,65,-32,85,32,58,51,48,55,32,64,10,65,32,85,32,73,32,64,32,58,51,-48,54,32,64,10,65,32,95,51,48,52,32,58,51,48,53,32,64,10,65,-32,73,32,58,51,48,52,32,64,10,65,32,75,32,66,32,66,32,95,50,-54,32,95,50,49,57,32,64,32,64,32,64,32,67,39,66,32,66,32,95,-49,53,51,32,64,32,95,51,48,50,32,64,32,64,32,95,49,53,51,32,-102,114,111,109,85,84,70,56,32,34,58,32,34,32,64,32,64,32,64,32,-64,32,64,32,58,51,48,51,32,64,10,65,32,85,32,67,32,83,39,32,-67,39,32,64,32,66,32,67,39,32,64,32,95,51,48,49,32,64,32,64,-32,67,39,66,32,66,39,32,66,32,95,49,53,51,32,64,32,95,49,53,-52,32,95,49,54,50,32,95,49,57,49,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,-34,58,32,34,32,64,32,64,32,64,32,64,32,67,32,83,39,32,67,39,-32,64,32,67,32,95,52,48,32,95,55,50,32,64,32,64,32,35,48,32,-64,32,64,32,67,32,83,39,32,67,39,32,64,32,67,32,95,52,48,32,-95,55,50,32,64,32,64,32,95,56,56,32,95,49,48,52,32,64,32,95,-57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,32,64,32,-64,32,64,32,64,32,64,32,66,32,66,32,95,49,53,51,32,102,114,111,-109,85,84,70,56,32,34,108,105,110,101,32,34,32,64,32,64,32,64,32,-64,32,67,39,66,32,66,32,95,49,53,51,32,64,32,95,49,53,52,32,-95,49,56,56,32,64,32,64,32,64,32,66,32,95,49,53,51,32,102,114,-111,109,85,84,70,56,32,34,44,32,99,111,108,32,34,32,64,32,64,32,-64,32,95,49,53,52,32,95,49,56,56,32,64,32,64,32,64,32,64,32,-64,32,64,32,102,114,111,109,85,84,70,56,32,34,101,110,100,45,111,102,-45,102,105,108,101,34,32,64,32,64,32,64,32,64,32,102,114,111,109,85,-84,70,56,32,34,110,111,32,108,111,99,97,116,105,111,110,34,32,64,32,-64,32,64,32,64,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,-110,111,32,108,111,99,97,116,105,111,110,34,32,64,32,64,32,64,32,58,-51,48,50,32,64,10,65,32,80,32,95,52,51,32,64,32,75,50,32,95,-52,52,32,64,32,64,32,58,51,48,49,32,64,10,65,32,95,50,57,57,-32,58,51,48,48,32,64,10,65,32,94,103,101,116,84,105,109,101,77,105,-108,108,105,32,58,50,57,57,32,64,10,65,32,66,32,85,32,64,32,90,-32,95,49,52,49,32,64,32,64,32,58,50,57,56,32,64,10,65,32,95,-50,57,54,32,79,32,35,51,50,32,64,32,75,32,64,32,64,32,58,50,-57,55,32,64,10,65,32,66,32,66,32,95,50,57,52,32,64,32,64,32,-95,50,57,53,32,64,32,58,50,57,54,32,64,10,65,32,66,32,80,32,-95,53,56,32,64,32,64,32,66,32,67,39,66,32,95,53,57,32,64,32,-64,32,66,32,89,32,64,32,66,32,66,32,80,32,95,53,56,32,64,32,-64,32,64,32,67,39,66,32,66,39,32,66,39,32,95,53,57,32,64,32,-64,32,64,32,67,39,66,32,95,53,57,32,64,32,64,32,64,32,64,32,-64,32,64,32,58,50,57,53,32,64,10,65,32,95,53,53,32,95,49,53,-51,32,64,32,95,53,56,32,64,32,58,50,57,52,32,64,10,65,32,85,-32,75,32,64,32,58,50,57,51,32,64,10,65,32,67,39,32,95,50,56,-57,32,64,32,95,55,32,95,49,48,32,64,32,95,50,57,48,32,64,32,-64,32,95,54,32,95,49,49,32,95,50,51,32,64,32,64,32,95,50,57,-49,32,64,32,64,32,58,50,57,50,32,64,10,65,32,66,32,90,32,64,-32,85,32,64,32,58,50,57,49,32,64,10,65,32,90,32,85,32,64,32,-58,50,57,48,32,64,10,65,32,67,39,66,32,95,50,56,55,32,64,32,-67,32,95,54,32,64,32,95,50,56,56,32,64,32,64,32,58,50,56,57,-32,64,10,65,32,73,32,58,50,56,56,32,64,10,65,32,73,79,46,99,-97,116,99,104,32,58,50,56,55,32,64,10,65,32,102,114,111,109,85,84,-70,56,32,34,73,110,116,101,114,97,99,116,105,118,101,34,32,64,32,58,-50,56,54,32,64,10,65,32,67,39,66,32,66,32,95,48,32,95,50,51,-32,64,32,64,32,67,32,95,50,56,51,32,64,32,95,50,56,52,32,64,-32,64,32,64,32,67,39,32,83,39,32,95,49,48,54,32,95,50,51,32,-64,32,64,32,64,32,67,32,95,49,49,51,32,64,32,64,32,95,49,51,-56,32,64,32,64,32,58,50,56,53,32,64,10,65,32,75,32,90,32,75,-32,64,32,64,32,58,50,56,52,32,64,10,65,32,83,39,32,67,39,32,-95,48,32,95,50,51,32,64,32,64,32,64,32,95,49,51,51,32,64,32,-67,39,32,80,32,64,32,66,32,95,50,49,57,32,64,32,95,49,53,51,-32,102,114,111,109,85,84,70,56,32,34,111,112,101,110,70,105,108,101,58,-32,99,97,110,110,111,116,32,111,112,101,110,32,34,32,64,32,64,32,64,-32,64,32,95,49,49,32,95,50,51,32,64,32,64,32,64,32,58,50,56,-51,32,64,10,65,32,67,32,83,39,32,95,49,50,51,32,64,32,95,49,-50,52,32,95,49,50,55,32,64,32,95,49,50,56,32,64,32,64,32,66,-32,95,48,32,95,50,51,32,64,32,95,49,51,57,32,95,49,52,48,32,-64,32,64,32,64,32,66,32,80,32,95,49,49,32,95,50,51,32,64,32,-95,49,52,52,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,-95,49,48,54,32,95,50,51,32,64,32,64,32,67,39,32,95,50,54,32,-64,32,66,32,95,49,52,54,32,95,50,49,32,64,32,64,32,83,39,32,-95,53,54,32,64,32,95,49,50,52,32,95,49,52,56,32,64,32,95,49,-50,56,32,64,32,64,32,67,32,95,49,53,50,32,64,32,35,48,32,64,-32,64,32,64,32,64,32,95,50,54,32,95,49,50,50,32,64,32,95,49,-53,51,32,102,114,111,109,85,84,70,56,32,34,76,111,97,100,105,110,103,-32,115,97,118,101,100,32,99,97,99,104,101,32,34,32,64,32,64,32,95,-49,53,52,32,95,49,54,50,32,95,49,57,49,32,64,32,64,32,95,49,-52,48,32,64,32,64,32,64,32,64,32,64,32,64,32,95,50,56,49,32,-64,32,64,32,64,32,64,32,64,32,95,49,49,32,95,50,51,32,64,32,-95,49,52,52,32,64,32,64,32,58,50,56,50,32,64,10,65,32,83,39,-32,83,32,64,32,67,39,32,83,39,32,67,39,32,95,49,57,51,32,64,-32,64,32,64,32,67,39,66,32,66,32,67,39,32,95,49,48,56,32,95,-50,48,48,32,64,32,64,32,64,32,66,32,66,32,66,32,95,48,32,95,-50,48,48,32,64,32,95,50,48,49,32,64,32,64,32,64,32,64,32,66,-32,66,32,83,39,32,67,32,64,32,67,32,67,39,32,67,39,32,64,32,-95,50,48,55,32,64,32,95,50,48,56,32,64,32,64,32,95,49,49,32,-95,50,48,48,32,64,32,95,49,48,55,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,-90,32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,67,39,66,32,-66,32,83,39,32,66,32,64,32,64,32,66,32,66,32,95,48,32,95,50,-48,48,32,64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,50,48,-57,32,64,32,64,32,64,32,95,50,49,52,32,64,32,64,32,64,32,64,-32,83,39,32,83,39,32,66,32,64,32,64,32,66,32,80,32,64,32,64,-32,66,32,66,32,66,32,85,32,64,32,64,32,64,32,66,32,66,32,90,-32,64,32,64,32,66,32,66,32,66,32,83,39,32,95,48,32,95,50,48,-48,32,64,32,64,32,66,32,95,50,54,32,95,50,48,57,32,64,32,64,-32,95,50,52,52,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,67,39,66,32,66,32,95,49,48,54,32,95,50,48,48,32,64,32,-64,32,66,32,95,50,54,32,95,50,48,57,32,64,32,64,32,95,49,51,-56,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,67,39,32,67,-39,32,95,50,54,32,64,32,64,32,66,32,66,32,95,49,52,54,32,95,-49,57,54,32,64,32,64,32,64,32,67,32,95,54,55,32,95,50,52,56,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,-50,53,49,32,64,32,95,50,48,56,32,64,32,64,32,64,32,73,32,64,-32,64,32,66,32,66,32,89,32,64,32,64,32,66,32,66,32,66,32,83,-39,32,95,48,32,95,50,48,48,32,64,32,64,32,66,32,95,50,54,32,-95,50,53,50,32,64,32,64,32,66,32,95,54,32,95,50,53,51,32,64,-32,64,32,67,39,32,95,54,32,64,32,95,50,48,55,32,64,32,95,50,-48,56,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,67,39,32,95,50,54,32,64,32,95,49,52,54,32,95,-49,57,54,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,39,32,66,32,83,39,32,95,49,48,54,32,95,50,48,48,32,64,32,-64,32,64,32,67,39,66,32,66,32,95,50,54,32,64,32,66,32,95,49,-52,54,32,95,49,57,54,32,64,32,64,32,67,32,95,49,53,50,32,64,-32,35,48,32,64,32,64,32,64,32,64,32,66,32,95,50,54,32,95,50,-48,57,32,64,32,64,32,66,32,95,50,54,32,95,49,50,50,32,64,32,-64,32,66,32,95,49,53,51,32,102,114,111,109,85,84,70,56,32,34,105,-110,118,97,108,105,100,97,116,101,32,99,97,99,104,101,100,32,34,32,64,-32,64,32,64,32,95,49,53,52,32,95,50,53,53,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,83,39,32,95,49,-48,54,32,95,50,48,48,32,64,32,64,32,66,32,95,50,53,54,32,64,-32,95,50,55,52,32,64,32,64,32,64,32,64,32,66,32,67,39,66,32,-66,32,95,50,54,32,64,32,95,49,48,56,32,95,50,48,48,32,64,32,-64,32,64,32,64,32,66,32,66,32,95,50,54,32,95,50,55,53,32,95,-53,56,32,64,32,64,32,64,32,64,32,66,32,67,32,95,50,48,55,32,-64,32,64,32,66,32,95,50,55,55,32,64,32,66,32,89,32,66,32,80,-32,75,32,64,32,64,32,66,32,67,32,66,32,64,32,64,32,66,32,66,-32,66,32,90,32,64,32,64,32,64,32,66,32,67,39,32,67,39,32,95,-53,57,32,64,32,64,32,66,32,80,32,64,32,95,50,55,56,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,95,50,56,48,-32,64,32,95,50,48,56,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,50,56,49,32,64,10,65,-32,95,54,32,95,54,48,32,95,50,55,57,32,64,32,64,32,95,50,53,-48,32,64,32,58,50,56,48,32,64,10,65,32,85,32,65,32,64,32,58,-50,55,57,32,64,10,65,32,85,32,90,32,90,32,90,32,90,32,90,32,-90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,50,-55,56,32,64,10,65,32,95,53,53,32,67,32,66,32,64,32,67,39,32,-95,53,53,32,64,32,66,32,67,32,95,50,55,54,32,95,49,53,51,32,-64,32,64,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,-64,32,64,32,95,49,52,51,32,64,32,58,50,55,55,32,64,10,65,32,-66,32,66,32,66,32,89,32,64,32,64,32,64,32,66,32,83,39,32,83,-39,32,83,39,32,67,32,64,32,64,32,64,32,67,39,32,67,39,66,32,-64,32,66,32,66,32,80,32,64,32,64,32,95,50,54,51,32,64,32,64,-32,67,39,66,32,66,32,64,32,67,39,32,67,32,64,32,95,50,54,48,-32,95,49,52,50,32,64,32,35,49,32,64,32,64,32,95,49,52,50,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,90,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,83,39,32,-83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,66,32,83,39,32,66,32,64,32,66,32,67,39,32,83,-39,32,67,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,32,83,-39,32,83,39,32,64,32,64,32,66,32,66,32,83,39,32,64,32,64,32,-95,56,57,32,95,50,48,54,32,64,32,64,32,64,32,64,32,64,32,66,-32,95,50,55,48,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,32,67,39,66,32,64,32,67,32,95,50,54,52,32,64,32,64,32,64,-32,64,32,64,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,95,-50,55,48,32,64,32,64,32,64,32,64,32,64,32,58,50,55,54,32,64,-10,65,32,67,32,80,32,64,32,73,32,64,32,58,50,55,53,32,64,10,-65,32,66,32,85,32,64,32,66,32,67,39,66,32,95,49,52,49,32,64,-32,64,32,95,50,55,51,32,64,32,64,32,58,50,55,52,32,64,10,65,-32,66,32,89,32,64,32,83,39,32,66,32,64,32,66,32,67,32,64,32,-66,32,83,32,85,32,95,49,52,50,32,64,32,64,32,64,32,66,32,66,-32,90,32,64,32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,66,-32,67,32,64,32,67,39,32,67,39,32,95,52,48,32,95,50,53,55,32,-64,32,64,32,64,32,95,56,57,32,95,50,48,54,32,64,32,64,32,95,-50,53,56,32,64,32,64,32,64,32,95,49,52,50,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,90,32,64,32,64,32,67,39,32,83,39,-32,83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,83,39,32,67,32,64,32,64,32,64,32,67,-39,66,32,66,39,32,66,32,83,39,32,67,39,32,64,32,64,32,66,32,-66,32,83,39,32,64,32,64,32,95,56,57,32,95,50,48,54,32,64,32,-64,32,64,32,64,32,64,32,66,32,95,50,55,48,32,64,32,64,32,64,-32,83,39,32,83,32,64,32,67,39,32,67,32,64,32,67,32,67,39,32,-83,39,32,64,32,64,32,90,32,75,32,64,32,64,32,64,32,90,32,90,-32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,83,-39,32,83,32,64,32,67,39,32,67,32,64,32,67,39,32,67,39,32,83,-39,32,64,32,64,32,85,32,64,32,90,32,75,32,64,32,64,32,64,32,-90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,-64,32,83,39,32,83,32,64,32,83,32,67,39,32,83,39,32,64,32,66,-32,95,49,52,57,32,95,56,48,32,64,32,64,32,95,50,53,57,32,64,-32,64,32,95,50,53,57,32,64,32,64,32,67,39,66,32,67,39,32,83,-32,64,32,67,32,67,39,32,83,39,32,64,32,95,50,54,52,32,64,32,-85,32,90,32,75,32,64,32,64,32,64,32,64,32,85,32,75,32,75,32,-64,32,64,32,64,32,64,32,85,32,75,32,65,32,64,32,64,32,64,32,-64,32,95,50,55,49,32,64,32,64,32,64,32,66,32,67,32,67,32,83,-32,83,39,32,95,50,54,52,32,64,32,85,32,75,32,65,32,64,32,64,-32,64,32,85,32,90,32,75,32,64,32,64,32,64,32,64,32,85,32,75,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,95,50,55,50,32,-64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-66,32,64,32,64,32,95,50,55,48,32,64,32,64,32,64,32,64,32,64,-32,58,50,55,51,32,64,10,65,32,67,32,80,32,95,50,50,48,32,64,-32,67,39,32,67,39,32,67,32,64,32,64,32,80,32,64,32,95,49,52,-50,32,64,32,64,32,64,32,90,32,83,39,32,83,39,32,83,39,32,83,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,32,64,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,32,83,39,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,85,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,32,64,32,64,32,80,32,64,32,64,32,64,-32,90,32,75,32,64,32,64,32,64,32,90,32,90,32,90,32,90,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-32,95,50,55,50,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,-67,39,32,67,39,66,32,64,32,66,32,66,32,67,32,64,32,64,32,80,-32,64,32,64,32,64,32,64,32,64,32,95,50,55,48,32,64,32,64,32,-64,32,64,32,64,32,58,50,55,50,32,64,10,65,32,67,32,80,32,95,-50,50,48,32,64,32,67,39,32,67,39,32,67,32,64,32,64,32,80,32,-64,32,95,49,52,50,32,64,32,64,32,64,32,90,32,83,39,32,83,39,-32,83,39,32,83,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,-32,67,32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,-32,83,39,32,64,32,64,32,64,32,64,32,67,39,66,32,66,39,32,66,-32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,80,32,64,32,64,-32,64,32,90,32,75,32,64,32,64,32,64,32,90,32,90,32,90,32,90,-32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,66,-39,32,66,39,32,95,50,55,49,32,64,32,64,32,64,32,66,32,66,32,-66,32,67,39,32,67,39,66,32,64,32,66,32,66,32,67,32,64,32,64,-32,80,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,-32,64,32,66,32,67,32,64,32,67,32,95,50,55,48,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,50,55,49,32,64,10,65,-32,66,32,66,32,66,32,89,32,64,32,64,32,64,32,83,39,32,83,39,-32,83,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,83,39,32,-66,32,64,32,66,39,32,66,39,32,66,32,83,32,64,32,67,39,32,67,-39,32,95,54,56,32,95,56,48,32,64,32,64,32,64,32,67,39,66,32,-66,32,95,49,56,49,32,95,49,48,52,32,64,32,64,32,95,50,53,57,-32,64,32,64,32,95,50,53,57,32,64,32,64,32,35,49,32,64,32,64,-32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,66,32,64,32,-64,32,64,32,66,32,66,32,66,32,83,32,64,32,64,32,64,32,67,39,-32,67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,-67,39,66,32,66,39,32,66,39,32,67,32,64,32,64,32,64,32,66,32,-66,32,67,39,32,67,32,64,32,64,32,64,32,66,32,67,39,32,67,32,-64,32,64,32,67,39,32,67,39,32,95,50,55,48,32,64,32,64,32,67,-39,32,67,32,64,32,95,50,54,48,32,95,49,52,50,32,64,32,35,49,-32,64,32,64,32,95,49,52,50,32,64,32,64,32,64,32,64,32,64,32,-64,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,83,32,64,32,67,-39,32,67,39,32,83,32,64,32,64,32,66,32,82,32,64,32,67,39,66,-32,66,32,64,32,67,39,32,67,32,64,32,95,50,54,48,32,95,49,52,-50,32,64,32,35,49,32,64,32,64,32,95,49,52,50,32,64,32,64,32,-64,32,64,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,-32,83,32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,-32,83,32,64,32,66,32,67,39,32,95,49,52,57,32,95,56,48,32,64,-32,64,32,95,50,53,57,32,64,32,64,32,67,39,32,95,49,56,49,32,-95,49,48,52,32,64,32,64,32,66,32,95,50,49,55,32,95,49,48,52,-32,64,32,95,50,54,49,32,64,32,64,32,95,50,53,57,32,64,32,64,-32,95,50,54,50,32,64,32,64,32,64,32,64,32,64,32,83,39,32,83,-39,32,83,39,32,83,32,64,32,64,32,64,32,83,39,32,66,32,64,32,-66,39,32,67,39,32,83,39,32,64,32,66,32,95,49,52,57,32,95,56,-48,32,64,32,64,32,95,50,53,57,32,64,32,64,32,67,39,32,95,49,-56,49,32,95,49,48,52,32,64,32,64,32,66,32,95,50,49,55,32,95,-49,48,52,32,64,32,95,50,54,49,32,64,32,64,32,95,50,53,57,32,-64,32,64,32,95,50,54,50,32,64,32,64,32,64,32,64,32,95,50,54,-52,32,64,32,64,32,83,39,32,66,32,64,32,66,39,32,66,39,32,80,-32,95,50,50,48,32,64,32,75,50,32,95,50,50,48,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,-83,39,32,83,39,32,83,39,32,83,39,32,67,39,32,67,32,64,32,64,-32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,39,32,67,32,-64,32,66,32,67,39,32,95,56,55,32,95,56,48,32,64,32,64,32,95,-50,53,57,32,64,32,64,32,66,32,95,50,49,55,32,95,49,48,52,32,-64,32,95,50,54,53,32,64,32,64,32,95,50,53,57,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,50,54,54,32,64,32,64,32,95,-50,54,55,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,66,32,83,32,80,32,95,50,50,48,32,64,32,75,50,32,-95,50,50,48,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,66,32,90,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,90,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,90,32,64,32,64,32,64,32,64,32,83,39,32,83,39,32,83,39,32,-83,39,32,67,39,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,67,32,67,39,32,67,39,32,64,32,66,32,95,56,-55,32,95,56,48,32,64,32,64,32,95,50,53,57,32,64,32,64,32,66,-32,95,50,49,55,32,95,49,48,52,32,64,32,95,50,54,53,32,64,32,-64,32,95,50,53,57,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,95,50,54,56,32,64,32,64,32,95,50,54,57,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,95,50,54,52,32,-64,32,64,32,58,50,55,48,32,64,10,65,32,66,32,66,32,66,32,67,-32,80,32,95,50,50,48,32,64,32,75,50,32,95,50,50,48,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,95,50,54,52,32,64,32,64,-32,64,32,64,32,95,50,54,52,32,64,32,64,32,64,32,58,50,54,57,-32,64,10,65,32,66,32,66,32,66,32,67,32,80,32,95,50,50,48,32,-64,32,75,50,32,95,50,50,48,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,83,39,32,83,-39,32,83,39,32,67,32,64,32,64,32,64,32,66,32,66,32,66,32,67,-39,32,83,39,32,64,32,66,32,83,39,32,64,32,66,32,83,39,32,64,-32,85,32,95,50,50,48,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,66,32,66,32,-66,39,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,32,66,32,-66,32,66,32,67,39,32,67,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,95,50,54,52,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,32,64,32,64,32,95,50,54,52,32,64,32,95,49,52,50,32,64,32,-64,32,64,32,64,32,64,32,64,32,95,50,54,52,32,95,49,52,50,32,-64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,-90,32,64,32,64,32,64,32,64,32,64,32,64,32,67,39,32,67,39,32,-67,39,66,32,64,32,64,32,66,32,66,32,66,39,32,64,32,64,32,66,-32,66,32,66,39,32,64,32,64,32,66,32,66,32,66,32,67,39,32,67,-39,32,67,39,66,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,95,50,54,52,32,64,32,64,32,64,32,64,32,95,50,54,-52,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,-64,32,66,32,67,32,64,32,67,32,95,50,54,52,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,50,54,56,32,64,10,65,32,-67,39,66,32,66,39,32,66,39,32,80,32,95,50,50,48,32,64,32,75,-50,32,95,50,50,48,32,64,32,64,32,64,32,64,32,64,32,66,32,66,-32,66,32,90,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,-67,39,32,67,39,66,32,64,32,64,32,95,50,54,52,32,64,32,64,32,-64,32,64,32,66,32,66,32,67,32,64,32,64,32,66,32,67,32,64,32,-67,32,95,50,54,52,32,64,32,64,32,64,32,64,32,64,32,64,32,58,-50,54,55,32,64,10,65,32,67,39,66,32,66,39,32,66,39,32,80,32,-95,50,50,48,32,64,32,75,50,32,95,50,50,48,32,64,32,64,32,64,-32,64,32,64,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,83,-39,32,83,39,32,83,39,32,83,39,32,83,39,32,83,39,32,67,32,64,-32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,-32,66,32,80,32,95,50,50,48,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,67,39,32,67,39,32,67,39,32,67,-39,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,95,50,-54,52,32,64,32,64,32,64,32,67,39,32,67,39,32,67,32,64,32,64,-32,95,50,54,52,32,64,32,95,49,52,50,32,64,32,64,32,64,32,64,-32,64,32,64,32,95,50,54,52,32,95,49,52,50,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,66,32,66,32,90,32,64,32,64,-32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,67,39,32,67,39,-32,67,39,32,67,39,32,67,39,32,67,39,66,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,95,50,54,52,32,64,32,64,-32,64,32,64,32,95,50,54,52,32,64,32,64,32,64,32,64,32,64,32,-66,32,66,32,67,32,64,32,64,32,66,32,67,32,64,32,67,32,95,50,-54,52,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,-50,54,54,32,64,10,65,32,35,50,32,58,50,54,53,32,64,10,65,32,-83,39,32,83,39,32,83,39,32,83,32,64,32,64,32,64,32,67,39,32,-67,39,32,67,39,32,67,39,32,83,32,64,32,64,32,64,32,64,32,67,-32,67,39,32,67,39,32,64,32,66,32,67,39,32,64,32,66,32,67,39,-32,64,32,83,39,32,64,32,64,32,64,32,67,39,32,67,39,32,67,32,-64,32,64,32,67,39,32,67,39,32,67,39,32,83,39,32,64,32,64,32,-64,32,66,32,66,32,85,32,64,32,64,32,95,50,54,51,32,64,32,64,-32,90,32,75,32,64,32,64,32,64,32,90,32,90,32,90,32,90,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,90,32,75,32,64,-32,64,32,64,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,-32,64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,83,32,64,32,-64,32,64,32,66,32,66,32,67,32,64,32,64,32,83,39,32,67,39,32,-64,32,95,50,54,48,32,64,32,67,39,66,32,66,32,95,49,56,49,32,-95,49,48,52,32,64,32,64,32,67,39,32,95,49,56,49,32,95,49,48,-52,32,64,32,64,32,95,50,53,57,32,64,32,35,49,32,64,32,64,32,-64,32,95,50,53,57,32,64,32,64,32,64,32,64,32,73,32,64,32,64,-32,58,50,54,52,32,64,10,65,32,66,32,90,32,64,32,66,32,66,32,-90,32,64,32,64,32,80,32,64,32,64,32,58,50,54,51,32,64,10,65,-32,35,48,32,58,50,54,50,32,64,10,65,32,35,51,32,58,50,54,49,-32,64,10,65,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,90,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,66,32,67,32,64,-32,64,32,80,32,64,32,64,32,64,32,64,32,64,32,58,50,54,48,32,-64,10,65,32,67,32,80,32,35,48,32,64,32,75,50,32,35,49,32,64,-32,64,32,64,32,75,32,90,32,90,32,75,32,64,32,64,32,64,32,64,-32,58,50,53,57,32,64,10,65,32,75,32,75,32,64,32,58,50,53,56,-32,64,10,65,32,95,52,49,32,67,39,32,83,32,64,32,67,32,67,32,-83,39,32,64,32,67,32,80,32,95,52,51,32,64,32,95,52,52,32,64,-32,64,32,95,52,52,32,64,32,64,32,64,32,67,32,80,32,95,52,52,-32,64,32,95,52,51,32,64,32,64,32,95,52,52,32,64,32,64,32,64,-32,67,32,80,32,95,52,52,32,64,32,95,52,52,32,64,32,64,32,95,-52,51,32,64,32,64,32,64,32,95,52,53,32,95,50,53,55,32,64,32,-64,32,58,50,53,55,32,64,10,65,32,66,32,95,50,54,32,95,49,57,-52,32,64,32,64,32,66,32,66,32,95,49,49,32,95,50,51,32,64,32,-64,32,64,32,66,32,80,32,95,49,48,55,32,64,32,64,32,64,32,64,-32,58,50,53,54,32,64,10,65,32,95,49,53,53,32,95,49,55,49,32,-95,50,53,53,32,64,32,64,32,95,50,53,52,32,64,32,95,49,54,49,-32,95,50,53,53,32,64,32,64,32,58,50,53,53,32,64,10,65,32,85,-32,65,32,64,32,58,50,53,52,32,64,10,65,32,80,32,95,52,52,32,-64,32,75,32,95,52,51,32,64,32,64,32,58,50,53,51,32,64,10,65,-32,66,32,95,50,54,32,95,49,57,52,32,64,32,64,32,66,32,66,32,-95,49,49,32,95,50,51,32,64,32,64,32,64,32,67,32,83,39,32,80,-32,64,32,64,32,73,32,64,32,64,32,64,32,58,50,53,50,32,64,10,-65,32,95,54,32,95,54,48,32,95,50,52,57,32,64,32,64,32,95,50,-53,48,32,64,32,58,50,53,49,32,64,10,65,32,67,32,89,32,66,32,-67,39,32,83,32,64,32,67,32,83,32,64,32,67,39,32,67,39,32,95,-53,57,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,66,32,66,-32,90,32,64,32,64,32,83,39,32,66,32,64,32,66,32,67,39,66,32,-64,32,66,32,66,39,32,64,32,66,39,32,64,32,64,32,64,32,66,32,-66,32,67,39,32,67,39,66,32,64,32,66,32,66,32,95,53,57,32,64,-32,64,32,80,32,64,32,64,32,64,32,64,32,67,32,64,32,64,32,64,-32,64,32,64,32,64,32,95,53,56,32,64,32,58,50,53,48,32,64,10,-65,32,85,32,75,32,64,32,58,50,52,57,32,64,10,65,32,95,52,49,-32,95,52,48,32,95,50,52,53,32,95,50,52,55,32,64,32,64,32,64,-32,95,52,53,32,95,50,52,56,32,64,32,64,32,58,50,52,56,32,64,-10,65,32,95,52,49,32,95,57,53,32,64,32,95,50,52,54,32,64,32,-58,50,52,55,32,64,10,65,32,47,61,32,58,50,52,54,32,64,10,65,-32,83,39,32,95,52,49,32,64,32,66,32,67,32,67,32,83,39,32,64,-32,80,32,95,52,51,32,64,32,75,50,32,95,52,52,32,64,32,64,32,-64,32,64,32,64,32,66,32,67,39,66,32,66,39,32,85,32,95,52,52,-32,64,32,64,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,-66,32,67,39,66,32,64,32,64,32,66,32,66,32,66,32,95,49,54,56,-32,64,32,64,32,64,32,95,52,48,32,64,32,64,32,64,32,66,32,95,-52,48,32,64,32,95,50,52,53,32,64,32,64,32,64,32,64,32,64,32,-66,32,95,52,53,32,64,32,95,50,52,53,32,64,32,64,32,58,50,52,-53,32,64,10,65,32,66,32,95,50,54,32,95,50,52,50,32,64,32,64,-32,95,50,52,51,32,64,32,58,50,52,52,32,64,10,65,32,94,109,100,-53,66,70,73,76,69,32,58,50,52,51,32,64,10,65,32,66,32,95,48,-32,95,50,51,32,64,32,95,50,50,49,32,95,50,51,54,32,64,32,95,-50,51,56,32,64,32,64,32,64,32,67,32,83,39,32,95,49,48,54,32,-95,50,51,32,64,32,64,32,64,32,83,39,32,95,48,32,95,50,51,32,-64,32,64,32,95,50,52,48,32,95,50,51,54,32,64,32,95,50,51,56,-32,64,32,64,32,67,39,66,32,66,32,95,49,48,54,32,95,50,51,32,-64,32,64,32,95,51,55,32,64,32,64,32,66,32,95,49,49,32,95,50,-51,32,64,32,64,32,95,50,52,49,32,64,32,64,32,64,32,64,32,64,-32,58,50,52,50,32,64,10,65,32,73,32,58,50,52,49,32,64,10,65,-32,67,39,32,67,32,64,32,66,32,83,39,32,67,39,32,64,32,67,32,-95,54,56,32,95,56,48,32,64,32,64,32,35,48,32,64,32,64,32,64,-32,67,39,32,67,39,32,67,32,64,32,64,32,67,39,66,32,66,32,67,-39,32,89,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,32,64,-32,64,32,64,32,66,32,66,32,66,32,83,39,32,83,39,32,64,32,67,-32,95,56,55,32,95,56,48,32,64,32,64,32,95,57,48,32,95,49,48,-52,32,64,32,95,49,48,50,32,35,48,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,32,83,-39,32,66,32,64,32,64,32,64,32,66,32,66,32,66,32,95,48,32,95,-50,51,32,64,32,64,32,64,32,64,32,95,50,51,57,32,64,32,64,32,-64,32,67,39,32,67,39,66,32,64,32,66,32,66,39,32,64,32,67,32,-66,32,64,32,67,32,95,56,49,32,95,49,48,52,32,64,32,64,32,35,-49,32,64,32,64,32,64,32,64,32,67,32,95,53,57,32,64,32,64,32,-64,32,64,32,64,32,95,49,49,32,95,50,51,32,64,32,64,32,64,32,-64,32,67,32,95,56,49,32,95,49,48,52,32,64,32,64,32,35,49,32,-64,32,64,32,64,32,95,53,56,32,64,32,64,32,64,32,95,49,49,32,-95,50,51,32,64,32,95,53,56,32,64,32,64,32,58,50,52,48,32,64,-10,65,32,85,32,75,50,32,90,32,90,32,90,32,90,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,58,50,51,57,32,64,10,65,32,95,-49,55,50,32,95,49,56,52,32,64,32,95,50,49,55,32,95,49,48,52,-32,64,32,95,50,51,55,32,64,32,35,56,32,64,32,64,32,95,57,56,-32,64,32,58,50,51,56,32,64,10,65,32,35,49,54,32,58,50,51,55,-32,64,10,65,32,95,50,50,50,32,75,32,95,50,50,51,32,64,32,64,-32,75,32,95,50,50,51,32,64,32,64,32,95,50,50,53,32,95,50,51,-54,32,64,32,64,32,95,50,50,55,32,95,50,51,54,32,64,32,64,32,-95,50,51,49,32,95,50,51,54,32,64,32,64,32,95,50,51,51,32,95,-50,51,54,32,64,32,64,32,95,50,51,52,32,64,32,95,50,51,53,32,-64,32,58,50,51,54,32,64,10,65,32,94,112,111,107,101,87,111,114,100,-32,58,50,51,53,32,64,10,65,32,94,112,101,101,107,87,111,114,100,32,-58,50,51,52,32,64,10,65,32,67,39,66,32,66,39,32,95,50,51,50,-32,64,32,64,32,95,50,51,48,32,64,32,58,50,51,51,32,64,10,65,-32,85,32,75,50,32,75,52,32,65,32,64,32,64,32,64,32,58,50,51,-50,32,64,10,65,32,67,39,66,32,66,39,32,95,50,50,56,32,64,32,-64,32,95,50,51,48,32,64,32,58,50,51,49,32,64,10,65,32,95,50,-50,57,32,58,50,51,48,32,64,10,65,32,112,43,32,58,50,50,57,32,-64,10,65,32,85,32,75,50,32,75,52,32,75,32,64,32,64,32,64,32,-58,50,50,56,32,64,10,65,32,67,39,32,67,32,64,32,83,39,32,67,-39,32,67,39,32,64,32,64,32,66,32,66,32,83,39,32,64,32,64,32,-95,50,50,54,32,64,32,64,32,66,32,67,39,66,32,95,56,53,32,64,-32,64,32,95,50,49,56,32,64,32,64,32,64,32,73,32,64,32,58,50,-50,55,32,64,10,65,32,85,32,75,32,75,52,32,90,32,75,32,64,32,-64,32,64,32,64,32,58,50,50,54,32,64,10,65,32,83,39,32,67,39,-66,32,64,32,95,50,50,52,32,64,32,66,32,67,32,95,56,53,32,64,-32,64,32,67,32,95,50,49,56,32,64,32,95,50,50,48,32,64,32,64,-32,64,32,58,50,50,53,32,64,10,65,32,85,32,75,52,32,90,32,90,-32,75,32,64,32,64,32,64,32,64,32,58,50,50,52,32,64,10,65,32,-95,49,48,49,32,95,57,56,32,64,32,35,56,32,64,32,58,50,50,51,-32,64,10,65,32,66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,-32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,66,32,67,-32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,64,32,64,32,58,-50,50,50,32,64,10,65,32,66,32,66,32,95,50,49,54,32,64,32,64,-32,66,32,67,32,95,50,49,55,32,95,49,48,52,32,64,32,64,32,64,-32,67,32,95,50,49,56,32,64,32,95,50,50,48,32,64,32,64,32,64,-32,58,50,50,49,32,64,10,65,32,95,50,49,57,32,102,114,111,109,85,-84,70,56,32,34,117,110,100,101,102,105,110,101,100,34,32,64,32,64,32,-58,50,50,48,32,64,10,65,32,95,57,57,32,58,50,49,57,32,64,10,-65,32,85,32,90,32,90,32,90,32,90,32,90,32,90,32,75,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,50,49,56,32,64,10,65,-32,85,32,75,50,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,-64,32,64,32,58,50,49,55,32,64,10,65,32,95,50,49,53,32,58,50,-49,54,32,64,10,65,32,94,109,97,108,108,111,99,32,58,50,49,53,32,-64,10,65,32,67,39,66,32,66,32,95,50,49,48,32,64,32,95,49,50,-52,32,95,50,49,50,32,64,32,95,49,50,56,32,64,32,64,32,64,32,-67,39,32,95,49,53,51,32,64,32,66,32,95,54,48,32,67,32,83,32,-67,32,95,52,48,32,95,49,54,53,32,64,32,64,32,35,52,54,32,64,-32,64,32,73,32,64,32,64,32,35,52,55,32,64,32,64,32,64,32,95,-50,49,51,32,64,32,64,32,102,114,111,109,85,84,70,56,32,34,46,104,-115,34,32,64,32,64,32,64,32,58,50,49,52,32,64,10,65,32,85,32,-65,32,64,32,58,50,49,51,32,64,10,65,32,95,49,50,53,32,75,32,-95,50,49,49,32,64,32,64,32,58,50,49,50,32,64,10,65,32,85,32,-75,50,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,50,49,49,32,64,10,65,32,67,39,66,32,85,32,-95,49,49,32,95,50,51,32,64,32,95,53,50,32,64,32,64,32,64,32,-83,39,32,66,32,64,32,66,32,67,39,32,83,39,32,95,48,32,95,50,-51,32,64,32,64,32,67,32,95,49,51,51,32,64,32,95,49,51,52,32,-64,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,32,66,32,66,-32,80,32,64,32,64,32,67,32,95,50,49,48,32,64,32,64,32,64,32,-66,32,66,32,95,49,49,32,95,50,51,32,64,32,64,32,64,32,66,32,-66,32,95,52,57,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,-64,32,66,32,67,32,95,49,53,51,32,64,32,64,32,95,49,53,51,32,-79,32,35,52,55,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,-58,50,49,48,32,64,10,65,32,66,32,95,50,54,32,95,49,57,52,32,-64,32,64,32,67,39,66,32,95,48,32,95,50,51,32,64,32,64,32,66,-32,66,32,95,49,49,32,95,50,51,32,64,32,64,32,64,32,67,32,80,-32,64,32,64,32,64,32,64,32,58,50,48,57,32,64,10,65,32,85,32,-65,32,64,32,58,50,48,56,32,64,10,65,32,66,32,89,32,64,32,83,-39,32,66,32,64,32,66,32,67,32,64,32,66,32,80,32,95,53,50,32,-64,32,64,32,67,39,32,67,32,64,32,67,39,32,67,39,32,67,39,32,-64,32,64,32,67,39,32,67,32,64,32,95,56,57,32,95,50,48,54,32,-64,32,64,32,95,53,50,32,64,32,64,32,95,52,57,32,64,32,64,32,-95,53,50,32,64,32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,-64,32,67,39,32,83,39,32,67,39,32,67,39,32,67,39,66,32,64,32,-64,32,64,32,64,32,67,39,32,67,39,32,67,39,32,67,39,66,32,64,-32,64,32,64,32,66,39,32,66,32,67,32,64,32,95,56,57,32,95,50,-48,54,32,64,32,64,32,64,32,64,32,95,52,57,32,64,32,64,32,73,-32,64,32,64,32,64,32,64,32,58,50,48,55,32,64,10,65,32,95,54,-57,32,95,50,48,50,32,64,32,67,32,66,32,64,32,90,32,67,32,66,-32,64,32,90,32,95,56,57,32,95,50,48,52,32,64,32,64,32,64,32,-64,32,64,32,64,32,67,32,66,32,64,32,90,32,67,32,66,32,64,32,-90,32,95,56,55,32,95,50,48,52,32,64,32,64,32,64,32,64,32,64,-32,64,32,67,32,66,32,64,32,90,32,67,32,66,32,64,32,90,32,95,-54,56,32,95,50,48,52,32,64,32,64,32,64,32,64,32,64,32,64,32,-67,32,66,32,64,32,90,32,67,32,66,32,64,32,90,32,95,49,52,57,-32,95,50,48,52,32,64,32,64,32,64,32,64,32,64,32,64,32,67,32,-66,32,64,32,90,32,67,32,66,32,64,32,90,32,95,50,48,53,32,95,-50,48,52,32,64,32,64,32,64,32,64,32,64,32,64,32,95,55,56,32,-95,50,48,54,32,64,32,64,32,95,55,57,32,95,50,48,54,32,64,32,-64,32,58,50,48,54,32,64,10,65,32,85,32,75,32,75,52,32,90,32,-75,32,64,32,64,32,64,32,64,32,58,50,48,53,32,64,10,65,32,95,-54,57,32,95,54,53,32,64,32,95,50,48,51,32,64,32,67,39,32,67,-32,64,32,67,39,32,67,32,64,32,67,39,32,67,32,64,32,95,50,48,-51,32,64,32,95,52,51,32,64,32,64,32,95,52,52,32,64,32,64,32,-95,52,52,32,64,32,64,32,67,39,32,67,32,64,32,67,39,32,67,32,-64,32,67,39,32,67,32,64,32,95,50,48,51,32,64,32,95,52,51,32,-64,32,64,32,95,52,51,32,64,32,64,32,95,52,52,32,64,32,64,32,-67,39,32,67,32,64,32,67,39,32,67,32,64,32,67,39,32,67,32,64,-32,95,50,48,51,32,64,32,95,52,52,32,64,32,64,32,95,52,52,32,-64,32,64,32,95,52,51,32,64,32,64,32,67,39,32,67,32,64,32,67,-39,32,67,32,64,32,67,39,32,67,32,64,32,95,50,48,51,32,64,32,-95,52,52,32,64,32,64,32,95,52,51,32,64,32,64,32,95,52,51,32,-64,32,64,32,95,55,56,32,95,50,48,52,32,64,32,64,32,95,55,57,-32,95,50,48,52,32,64,32,64,32,58,50,48,52,32,64,10,65,32,115,-99,109,112,32,58,50,48,51,32,64,10,65,32,95,52,49,32,67,32,66,-32,64,32,90,32,67,32,66,32,64,32,90,32,95,52,48,32,95,54,53,-32,64,32,64,32,64,32,64,32,64,32,64,32,95,52,53,32,95,50,48,-50,32,64,32,64,32,58,50,48,50,32,64,10,65,32,95,50,54,32,95,-49,57,52,32,64,32,66,32,95,49,49,32,95,50,51,32,64,32,64,32,-83,32,80,32,64,32,73,32,64,32,64,32,64,32,58,50,48,49,32,64,-10,65,32,95,49,32,95,49,57,54,32,64,32,66,32,66,32,95,50,54,-32,95,49,57,52,32,64,32,64,32,64,32,67,39,66,32,66,32,67,39,-32,95,48,32,95,50,51,32,64,32,64,32,64,32,95,49,57,50,32,64,-32,64,32,66,32,85,32,64,32,66,32,95,49,57,50,32,64,32,64,32,-64,32,64,32,64,32,95,49,57,55,32,95,49,57,54,32,64,32,64,32,-95,49,57,57,32,95,50,48,48,32,64,32,64,32,58,50,48,48,32,64,-10,65,32,66,32,95,49,52,53,32,64,32,95,49,57,56,32,64,32,58,-49,57,57,32,64,10,65,32,85,32,90,32,90,32,75,32,64,32,64,32,-64,32,58,49,57,56,32,64,10,65,32,85,32,75,51,32,90,32,75,32,-64,32,64,32,64,32,58,49,57,55,32,64,10,65,32,95,50,32,95,49,-57,53,32,64,32,66,32,95,50,54,32,95,49,57,52,32,64,32,64,32,-66,32,66,32,95,49,49,32,95,50,51,32,64,32,64,32,64,32,80,32,-64,32,64,32,64,32,95,49,50,32,95,50,48,48,32,64,32,64,32,66,-32,66,32,95,50,54,32,95,49,57,52,32,64,32,64,32,64,32,67,39,-66,32,66,32,67,39,32,95,48,32,95,50,51,32,64,32,64,32,64,32,-95,49,57,50,32,64,32,64,32,66,32,85,32,64,32,90,32,95,49,57,-50,32,64,32,64,32,64,32,64,32,64,32,95,49,57,32,95,49,57,54,-32,64,32,64,32,95,50,48,32,95,49,57,54,32,64,32,64,32,58,49,-57,54,32,64,10,65,32,95,51,32,66,32,66,32,95,50,54,32,95,49,-57,52,32,64,32,64,32,64,32,66,32,67,39,32,67,39,32,95,48,32,-95,50,51,32,64,32,64,32,64,32,95,49,57,50,32,64,32,64,32,66,-32,85,32,64,32,66,32,66,32,66,32,95,49,49,32,95,50,51,32,64,-32,64,32,64,32,64,32,66,32,80,32,64,32,64,32,64,32,64,32,64,-32,64,32,95,57,32,95,49,57,53,32,64,32,64,32,58,49,57,53,32,-64,10,65,32,85,32,58,49,57,52,32,64,10,65,32,67,39,32,67,39,-32,95,48,32,95,50,51,32,64,32,64,32,64,32,95,49,57,50,32,64,-32,85,32,75,32,95,49,49,32,95,50,51,32,64,32,64,32,64,32,64,-32,58,49,57,51,32,64,10,65,32,85,32,73,32,64,32,58,49,57,50,-32,64,10,65,32,95,49,53,53,32,75,32,67,32,83,32,95,52,48,32,-95,49,54,53,32,64,32,35,51,57,32,64,32,64,32,66,32,95,54,32,-95,49,54,54,32,35,51,57,32,64,32,64,32,64,32,67,39,32,95,54,-32,64,32,66,32,95,49,54,55,32,64,32,67,32,95,49,57,48,32,64,-32,75,32,64,32,64,32,64,32,95,49,54,54,32,35,51,57,32,64,32,-64,32,64,32,64,32,64,32,95,49,54,55,32,102,114,111,109,85,84,70,-56,32,34,39,92,57,50,38,39,39,34,32,64,32,64,32,64,32,64,32,-64,32,95,49,53,56,32,95,49,57,49,32,64,32,64,32,66,32,95,54,-32,95,49,54,54,32,35,51,52,32,64,32,64,32,64,32,89,32,66,32,-80,32,95,49,54,54,32,35,51,52,32,64,32,64,32,64,32,83,39,32,-67,32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,95,52,48,32,-95,49,54,53,32,64,32,64,32,35,51,52,32,64,32,64,32,64,32,67,-39,32,83,39,32,95,54,32,64,32,64,32,66,32,66,32,95,49,54,55,-32,64,32,64,32,95,49,57,48,32,64,32,64,32,64,32,64,32,66,32,-95,54,32,95,49,54,55,32,102,114,111,109,85,84,70,56,32,34,92,57,-50,38,92,51,52,38,34,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,49,57,49,32,64,10,65,32,67,39,32,67,39,-32,89,32,64,32,64,32,83,39,32,67,39,66,32,64,32,66,32,66,32,-80,32,64,32,64,32,83,32,83,39,32,67,39,32,64,32,95,49,55,48,-32,64,32,66,32,66,32,95,49,53,51,32,79,32,35,57,50,32,64,32,-75,32,64,32,64,32,64,32,64,32,67,39,66,32,66,32,95,49,53,51,-32,64,32,66,32,95,49,53,52,32,95,49,56,56,32,64,32,64,32,95,-49,49,49,32,64,32,64,32,64,32,67,32,67,32,80,32,95,52,52,32,-64,32,90,32,95,49,56,57,32,64,32,64,32,64,32,75,32,64,32,64,-32,102,114,111,109,85,84,70,56,32,34,92,57,50,38,38,34,32,64,32,-64,32,64,32,64,32,64,32,64,32,67,32,79,32,64,32,75,32,64,32,-64,32,64,32,64,32,66,32,66,32,67,32,66,32,64,32,64,32,64,32,-66,39,32,66,32,67,32,64,32,67,32,95,52,48,32,95,49,54,53,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,79,32,80,32,35,55,-32,64,32,102,114,111,109,85,84,70,56,32,34,92,57,50,38,97,34,32,-64,32,64,32,64,32,79,32,80,32,35,56,32,64,32,102,114,111,109,85,-84,70,56,32,34,92,57,50,38,98,34,32,64,32,64,32,64,32,79,32,-80,32,35,49,50,32,64,32,102,114,111,109,85,84,70,56,32,34,92,57,-50,38,102,34,32,64,32,64,32,64,32,79,32,80,32,35,49,48,32,64,-32,102,114,111,109,85,84,70,56,32,34,92,57,50,38,110,34,32,64,32,-64,32,64,32,79,32,80,32,35,49,51,32,64,32,102,114,111,109,85,84,-70,56,32,34,92,57,50,38,114,34,32,64,32,64,32,64,32,79,32,80,-32,35,57,32,64,32,102,114,111,109,85,84,70,56,32,34,92,57,50,38,-116,34,32,64,32,64,32,64,32,79,32,80,32,35,49,49,32,64,32,102,-114,111,109,85,84,70,56,32,34,92,57,50,38,118,34,32,64,32,64,32,-64,32,79,32,80,32,35,57,50,32,64,32,102,114,111,109,85,84,70,56,-32,34,92,57,50,38,92,57,50,38,34,32,64,32,64,32,64,32,75,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,-57,48,32,64,10,65,32,83,39,32,95,49,54,56,32,64,32,95,49,54,-57,32,35,52,56,32,64,32,64,32,67,32,95,49,54,57,32,64,32,35,-53,55,32,64,32,64,32,58,49,56,57,32,64,10,65,32,95,49,53,53,-32,95,49,55,49,32,95,49,56,56,32,64,32,64,32,95,49,56,55,32,-64,32,95,49,54,49,32,95,49,56,56,32,64,32,64,32,58,49,56,56,-32,64,10,65,32,83,32,83,32,67,32,95,56,55,32,95,56,48,32,64,-32,64,32,35,48,32,64,32,64,32,66,32,95,49,56,54,32,64,32,95,-56,56,32,95,49,48,52,32,64,32,64,32,64,32,64,32,66,32,95,53,-57,32,35,52,53,32,64,32,64,32,95,49,56,54,32,64,32,64,32,58,-49,56,55,32,64,10,65,32,83,32,67,32,83,39,32,83,39,32,64,32,-67,32,95,49,52,57,32,95,56,48,32,64,32,64,32,95,56,56,32,95,-49,48,52,32,64,32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,-50,32,35,49,48,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,-66,32,95,49,53,51,32,64,32,66,32,95,49,56,54,32,64,32,67,32,-95,49,55,50,32,95,49,56,52,32,64,32,64,32,35,49,48,32,64,32,-64,32,64,32,64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,-64,32,67,32,79,32,64,32,75,32,64,32,64,32,64,32,66,32,95,49,-56,53,32,64,32,66,32,95,56,49,32,95,49,48,52,32,64,32,95,49,-49,48,32,35,52,56,32,64,32,64,32,64,32,67,32,95,49,55,55,32,-95,49,56,52,32,64,32,64,32,35,49,48,32,64,32,64,32,64,32,64,-32,58,49,56,54,32,64,10,65,32,99,104,114,32,58,49,56,53,32,64,-10,65,32,95,49,55,51,32,80,32,95,55,50,32,64,32,95,49,48,52,-32,64,32,64,32,95,49,48,49,32,64,32,95,57,52,32,64,32,95,49,-55,53,32,95,49,56,52,32,64,32,64,32,95,49,55,54,32,95,49,56,-52,32,64,32,64,32,95,49,55,56,32,95,49,56,52,32,64,32,64,32,-95,49,56,51,32,95,49,56,52,32,64,32,64,32,95,49,48,50,32,64,-32,58,49,56,52,32,64,10,65,32,83,39,32,66,32,64,32,66,32,83,-32,64,32,67,39,32,67,39,32,83,32,64,32,64,32,83,39,32,83,39,-32,83,39,32,83,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,66,32,66,32,67,32,64,32,64,32,83,39,32,66,32,64,32,83,39,-32,67,39,32,64,32,66,32,95,52,48,32,64,32,66,32,85,32,75,32,-64,32,64,32,95,49,55,57,32,64,32,64,32,64,32,66,32,95,49,56,-48,32,64,32,66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,-32,64,32,64,32,64,32,83,39,32,66,32,64,32,66,32,95,56,56,32,-64,32,66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,-32,64,32,66,32,95,49,56,48,32,64,32,66,32,85,32,65,32,64,32,-64,32,95,49,55,57,32,64,32,64,32,64,32,64,32,64,32,64,32,83,-32,73,32,64,32,90,32,75,32,64,32,64,32,64,32,64,32,83,39,32,-66,32,64,32,66,32,67,39,66,32,64,32,66,32,66,32,80,32,64,32,-64,32,83,32,67,39,32,67,39,32,64,32,66,32,95,56,49,32,64,32,-66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,64,-32,85,32,75,32,64,32,64,32,64,32,67,39,32,95,57,48,32,64,32,-66,32,85,32,65,32,64,32,64,32,95,49,55,57,32,64,32,64,32,95,-49,48,50,32,35,49,32,64,32,64,32,64,32,64,32,64,32,64,32,66,-32,67,32,64,32,66,32,95,49,56,49,32,64,32,66,32,85,32,65,32,-64,32,64,32,95,49,55,57,32,64,32,64,32,64,32,64,32,64,32,64,-32,85,32,65,32,64,32,64,32,64,32,64,32,95,49,56,50,32,64,32,-58,49,56,51,32,64,10,65,32,85,32,75,32,75,52,32,90,32,75,32,-64,32,64,32,64,32,64,32,58,49,56,50,32,64,10,65,32,85,32,90,-32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,-32,64,32,58,49,56,49,32,64,10,65,32,85,32,75,32,75,52,32,75,-32,64,32,64,32,64,32,58,49,56,48,32,64,10,65,32,85,32,90,32,-90,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,-64,32,64,32,64,32,58,49,55,57,32,64,10,65,32,83,39,32,83,39,-32,83,39,32,80,32,64,32,64,32,64,32,95,49,55,50,32,64,32,95,-49,55,55,32,64,32,58,49,55,56,32,64,10,65,32,85,32,75,50,32,-90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,-64,32,58,49,55,55,32,64,10,65,32,67,39,32,67,39,32,67,32,64,-32,64,32,95,49,55,52,32,64,32,65,32,64,32,58,49,55,54,32,64,-10,65,32,67,39,32,67,39,32,67,32,64,32,64,32,95,49,55,52,32,-64,32,75,32,64,32,58,49,55,53,32,64,10,65,32,85,32,75,50,32,-75,52,32,75,32,64,32,64,32,64,32,58,49,55,52,32,64,10,65,32,-66,32,66,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,66,32,-66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,66,32,66,32,-66,32,67,32,64,32,64,32,64,32,66,32,66,32,67,32,64,32,64,32,-80,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,55,51,32,64,-10,65,32,85,32,75,32,90,32,90,32,90,32,90,32,90,32,75,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,55,50,32,64,10,-65,32,90,32,66,32,66,32,95,49,53,51,32,64,32,64,32,95,49,53,-52,32,64,32,64,32,58,49,55,49,32,64,10,65,32,83,39,32,95,49,-54,56,32,64,32,95,49,54,57,32,35,51,50,32,64,32,64,32,67,32,-95,49,54,57,32,64,32,35,49,50,54,32,64,32,64,32,58,49,55,48,-32,64,10,65,32,60,61,32,58,49,54,57,32,64,10,65,32,85,32,95,-52,52,32,64,32,58,49,54,56,32,64,10,65,32,95,49,53,51,32,58,-49,54,55,32,64,10,65,32,95,53,57,32,58,49,54,54,32,64,10,65,-32,95,52,49,32,95,49,54,51,32,64,32,95,49,54,52,32,64,32,58,-49,54,53,32,64,10,65,32,47,61,32,58,49,54,52,32,64,10,65,32,-61,61,32,58,49,54,51,32,64,10,65,32,83,32,83,39,32,95,49,53,-53,32,64,32,90,32,95,49,53,54,32,64,32,64,32,66,32,95,49,53,-56,32,64,32,95,49,54,50,32,64,32,64,32,64,32,66,32,95,49,54,-49,32,64,32,95,49,54,50,32,64,32,64,32,58,49,54,50,32,64,10,-65,32,66,32,95,49,53,57,32,64,32,95,49,54,48,32,64,32,58,49,-54,49,32,64,10,65,32,67,32,95,49,53,55,32,64,32,35,48,32,64,-32,58,49,54,48,32,64,10,65,32,66,32,67,32,67,32,83,39,32,64,-32,66,32,95,53,57,32,35,57,49,32,64,32,64,32,95,53,57,32,35,-57,51,32,64,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,-32,95,53,57,32,35,57,49,32,64,32,64,32,64,32,64,32,64,32,83,-39,32,66,32,64,32,67,39,66,32,64,32,66,32,66,32,89,32,64,32,-64,32,66,32,67,39,66,32,66,32,80,32,64,32,95,53,57,32,35,57,-51,32,64,32,64,32,64,32,64,32,66,32,66,32,66,32,66,32,95,53,-57,32,35,52,52,32,64,32,64,32,64,32,64,32,64,32,67,39,66,32,-64,32,64,32,64,32,64,32,64,32,64,32,58,49,53,57,32,64,10,65,-32,67,39,32,67,32,64,32,67,32,95,49,53,55,32,64,32,35,48,32,-64,32,64,32,75,32,64,32,58,49,53,56,32,64,10,65,32,85,32,90,-32,75,32,64,32,64,32,58,49,53,55,32,64,10,65,32,85,32,75,32,-65,32,64,32,64,32,58,49,53,54,32,64,10,65,32,66,32,66,32,67,-32,64,32,64,32,80,32,64,32,58,49,53,53,32,64,10,65,32,85,32,-75,32,75,32,64,32,64,32,58,49,53,52,32,64,10,65,32,67,39,32,-89,32,64,32,67,39,66,32,80,32,64,32,67,39,66,32,95,53,57,32,-64,32,64,32,64,32,58,49,53,51,32,64,10,65,32,66,32,95,49,52,-57,32,95,56,48,32,64,32,64,32,95,49,50,52,32,95,49,53,49,32,-64,32,95,49,50,56,32,64,32,64,32,58,49,53,50,32,64,10,65,32,-95,49,50,53,32,75,32,95,49,53,48,32,64,32,64,32,58,49,53,49,-32,64,10,65,32,85,32,90,32,90,32,90,32,90,32,90,32,90,32,75,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,53,48,32,-64,10,65,32,85,32,75,52,32,90,32,90,32,75,32,64,32,64,32,64,-32,64,32,58,49,52,57,32,64,10,65,32,95,49,50,53,32,75,32,95,-49,52,55,32,64,32,64,32,58,49,52,56,32,64,10,65,32,85,32,75,-52,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,58,49,52,55,-32,64,10,65,32,66,32,85,32,64,32,67,32,95,49,52,53,32,64,32,-95,49,48,55,32,64,32,64,32,58,49,52,54,32,64,10,65,32,85,32,-75,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,-58,49,52,53,32,64,10,65,32,95,49,52,49,32,95,53,56,32,64,32,-95,49,52,51,32,64,32,58,49,52,52,32,64,10,65,32,95,49,52,50,-32,58,49,52,51,32,64,10,65,32,90,32,75,32,64,32,58,49,52,50,-32,64,10,65,32,80,32,58,49,52,49,32,64,10,65,32,102,114,111,109,-85,84,70,56,32,34,46,109,104,115,99,97,99,104,101,34,32,64,32,58,-49,52,48,32,64,10,65,32,67,39,32,95,48,32,95,50,51,32,64,32,-64,32,67,32,95,49,51,51,32,64,32,95,49,51,52,32,64,32,64,32,-80,32,95,49,49,32,95,50,51,32,64,32,95,53,50,32,64,32,64,32,-83,39,32,95,48,32,95,50,51,32,64,32,64,32,95,49,51,54,32,64,-32,67,39,66,32,66,32,95,49,48,54,32,95,50,51,32,64,32,64,32,-95,49,51,56,32,64,32,64,32,66,32,95,49,49,32,95,50,51,32,64,-32,64,32,95,52,57,32,64,32,64,32,64,32,64,32,64,32,58,49,51,-57,32,64,10,65,32,95,49,51,55,32,58,49,51,56,32,64,10,65,32,-94,99,108,111,115,101,98,32,58,49,51,55,32,64,10,65,32,95,49,51,-53,32,58,49,51,54,32,64,10,65,32,73,79,46,100,101,115,101,114,105,-97,108,105,122,101,32,58,49,51,53,32,64,10,65,32,90,32,90,32,75,-32,64,32,64,32,58,49,51,52,32,64,10,65,32,67,39,32,67,39,32,-95,48,32,95,50,51,32,64,32,64,32,64,32,95,49,51,48,32,64,32,-80,32,95,49,49,32,95,50,51,32,64,32,95,53,50,32,64,32,64,32,-67,39,32,95,48,32,95,50,51,32,64,32,64,32,66,32,95,49,51,50,-32,95,50,51,32,64,32,95,49,49,55,32,64,32,64,32,95,49,49,56,-32,64,32,64,32,66,32,95,49,49,32,95,50,51,32,64,32,64,32,66,-32,95,52,57,32,64,32,95,49,49,53,32,64,32,64,32,64,32,64,32,-64,32,58,49,51,51,32,64,10,65,32,66,32,95,49,51,49,32,64,32,-95,48,32,64,32,58,49,51,50,32,64,10,65,32,67,32,58,49,51,49,-32,64,10,65,32,67,39,32,67,39,32,95,48,32,95,50,51,32,64,32,-64,32,64,32,67,39,66,32,66,32,95,50,54,32,64,32,95,51,56,32,-64,32,64,32,67,39,66,32,66,32,95,50,54,32,64,32,66,32,95,51,-56,32,64,32,67,32,67,32,80,32,79,32,35,49,49,52,32,64,32,75,-32,64,32,64,32,79,32,35,49,49,57,32,64,32,75,32,64,32,64,32,-64,32,79,32,35,57,55,32,64,32,75,32,64,32,64,32,64,32,102,114,-111,109,85,84,70,56,32,34,119,43,34,32,64,32,64,32,64,32,64,32,-64,32,95,49,50,57,32,64,32,64,32,64,32,67,32,83,32,67,32,95,-52,48,32,95,52,54,32,64,32,64,32,95,52,56,32,64,32,64,32,66,-32,95,49,49,32,95,50,51,32,64,32,64,32,95,52,57,32,64,32,64,-32,64,32,95,49,49,32,95,50,51,32,64,32,95,53,50,32,64,32,64,-32,64,32,58,49,51,48,32,64,10,65,32,94,102,111,112,101,110,32,58,-49,50,57,32,64,10,65,32,73,32,58,49,50,56,32,64,10,65,32,95,-49,50,53,32,75,32,95,49,50,54,32,64,32,64,32,58,49,50,55,32,-64,10,65,32,85,32,75,32,75,52,32,90,32,75,32,64,32,64,32,64,-32,64,32,58,49,50,54,32,64,10,65,32,85,32,58,49,50,53,32,64,-10,65,32,85,32,73,32,64,32,58,49,50,52,32,64,10,65,32,80,32,-95,52,51,32,64,32,95,52,52,32,64,32,58,49,50,51,32,64,10,65,-32,95,49,49,52,32,95,49,50,49,32,64,32,58,49,50,50,32,64,10,-65,32,95,49,49,57,32,95,49,50,48,32,64,32,58,49,50,49,32,64,-10,65,32,73,79,46,115,116,100,111,117,116,32,58,49,50,48,32,64,10,-65,32,95,54,32,95,49,49,53,32,64,32,95,54,32,95,50,55,32,64,-32,95,49,49,54,32,95,50,51,32,64,32,95,49,49,55,32,64,32,95,-49,49,56,32,64,32,64,32,64,32,58,49,49,57,32,64,10,65,32,94,-97,100,100,95,70,73,76,69,32,58,49,49,56,32,64,10,65,32,94,97,-100,100,95,117,116,102,56,32,58,49,49,55,32,64,10,65,32,66,32,67,-32,64,32,66,32,67,39,32,64,32,95,48,32,64,32,64,32,58,49,49,-54,32,64,10,65,32,73,32,58,49,49,53,32,64,10,65,32,83,39,32,-67,39,32,95,49,48,54,32,95,50,51,32,64,32,64,32,64,32,95,49,-49,51,32,64,32,67,32,95,49,49,50,32,64,32,35,49,48,32,64,32,-64,32,58,49,49,52,32,64,10,65,32,66,32,95,49,48,56,32,95,50,-51,32,64,32,64,32,95,49,49,50,32,64,32,58,49,49,51,32,64,10,-65,32,67,39,32,95,49,48,57,32,64,32,95,49,49,49,32,64,32,58,-49,49,50,32,64,10,65,32,95,49,49,48,32,58,49,49,49,32,64,10,-65,32,111,114,100,32,58,49,49,48,32,64,10,65,32,94,112,117,116,98,-32,58,49,48,57,32,64,10,65,32,66,32,66,32,89,32,64,32,64,32,-83,39,32,66,32,64,32,66,39,32,66,32,80,32,64,32,67,32,95,49,-49,32,64,32,95,49,48,55,32,64,32,64,32,64,32,64,32,67,39,32,-67,39,66,32,64,32,66,32,66,32,67,39,66,32,64,32,64,32,66,39,-32,95,48,32,64,32,64,32,64,32,90,32,64,32,64,32,64,32,58,49,-48,56,32,64,10,65,32,73,32,58,49,48,55,32,64,10,65,32,85,32,-75,50,32,75,32,64,32,64,32,58,49,48,54,32,64,10,65,32,67,32,-83,39,32,67,39,32,64,32,67,32,95,54,56,32,95,56,48,32,64,32,-64,32,35,48,32,64,32,64,32,66,32,80,32,95,53,56,32,64,32,64,-32,66,32,67,39,66,32,95,53,57,32,64,32,64,32,66,32,95,49,48,-53,32,64,32,67,32,95,56,49,32,95,49,48,52,32,64,32,64,32,35,-49,32,64,32,64,32,64,32,64,32,64,32,64,32,95,53,56,32,64,32,-58,49,48,53,32,64,10,65,32,95,56,50,32,95,56,51,32,64,32,95,-56,52,32,64,32,95,56,53,32,64,32,95,56,54,32,64,32,83,32,83,-32,67,32,95,56,55,32,95,56,48,32,64,32,64,32,35,48,32,64,32,-64,32,73,32,64,32,64,32,95,56,56,32,95,49,48,52,32,64,32,64,-32,64,32,67,32,67,32,67,32,67,32,95,56,57,32,95,56,48,32,64,-32,64,32,35,48,32,64,32,64,32,95,56,56,32,95,49,48,52,32,64,-32,95,57,48,32,95,49,48,52,32,64,32,95,49,48,50,32,35,49,32,-64,32,64,32,64,32,64,32,64,32,35,48,32,64,32,64,32,35,49,32,-64,32,64,32,95,49,48,51,32,64,32,58,49,48,52,32,64,10,65,32,-85,32,67,39,66,32,66,32,95,56,53,32,64,32,80,32,35,49,32,64,-32,95,56,52,32,35,48,32,64,32,35,49,32,64,32,64,32,64,32,64,-32,80,32,35,48,32,64,32,83,32,80,32,64,32,83,39,32,83,39,32,-80,32,64,32,64,32,67,39,66,32,95,56,51,32,64,32,95,56,53,32,-95,49,48,48,32,64,32,64,32,64,32,66,32,66,32,90,32,64,32,64,-32,67,39,66,32,66,39,32,95,56,51,32,64,32,64,32,66,32,66,32,-95,56,53,32,95,49,48,48,32,64,32,64,32,64,32,67,39,66,32,95,-56,51,32,64,32,95,56,53,32,95,49,48,48,32,64,32,64,32,64,32,-64,32,64,32,64,32,64,32,64,32,64,32,64,32,58,49,48,51,32,64,-10,65,32,83,32,67,39,32,67,32,64,32,83,32,83,39,32,67,39,32,-64,32,66,32,83,39,32,64,32,67,32,95,55,55,32,64,32,35,48,32,-64,32,64,32,64,32,67,39,32,67,32,64,32,67,39,32,83,39,32,67,-39,32,64,32,64,32,95,55,48,32,64,32,66,32,66,32,95,52,51,32,-110,111,77,97,116,99,104,32,102,114,111,109,85,84,70,56,32,34,46,47,-108,105,98,47,68,97,116,97,47,73,110,116,101,103,101,114,95,84,121,112,-101,46,104,115,34,32,64,32,64,32,35,50,55,32,64,32,35,49,32,64,-32,64,32,64,32,64,32,66,32,66,32,95,57,49,32,95,57,50,32,64,-32,64,32,64,32,85,32,64,32,64,32,64,32,64,32,95,57,49,32,95,-57,50,32,64,32,79,32,35,48,32,64,32,79,32,35,48,32,64,32,79,-32,35,50,32,64,32,75,32,64,32,64,32,64,32,64,32,64,32,64,32,-64,32,66,32,66,32,95,57,49,32,95,57,51,32,64,32,64,32,64,32,-85,32,64,32,64,32,64,32,89,32,67,39,32,67,32,64,32,66,32,83,-32,67,32,95,55,48,32,64,32,35,48,32,64,32,64,32,64,32,66,32,-83,39,32,95,53,57,32,64,32,67,32,95,57,52,32,64,32,95,49,48,-48,32,64,32,64,32,64,32,67,32,66,32,64,32,67,32,95,49,48,49,-32,64,32,95,49,48,48,32,64,32,64,32,64,32,64,32,64,32,95,53,-56,32,64,32,64,32,64,32,64,32,95,56,52,32,35,48,32,64,32,64,-32,58,49,48,50,32,64,10,65,32,113,117,111,116,32,58,49,48,49,32,-64,10,65,32,95,55,48,32,95,57,56,32,64,32,35,54,52,32,64,32,-95,55,48,32,95,57,56,32,64,32,35,51,50,32,64,32,95,57,57,32,-102,114,111,109,85,84,70,56,32,34,73,110,116,101,103,101,114,58,32,117,-110,115,117,112,112,111,114,116,101,100,32,119,111,114,100,32,115,105,122,101,-34,32,64,32,64,32,64,32,35,51,50,55,54,56,32,64,32,64,32,35,-50,49,52,55,52,56,51,54,52,56,32,64,32,58,49,48,48,32,64,10,-65,32,101,114,114,111,114,32,58,57,57,32,64,10,65,32,89,32,67,39,-32,67,32,64,32,66,32,83,39,32,83,39,32,64,32,67,32,95,57,53,-32,64,32,35,48,32,64,32,64,32,64,32,67,39,32,67,39,66,32,64,-32,67,32,66,32,64,32,67,32,95,57,54,32,64,32,35,49,32,64,32,-64,32,64,32,67,32,95,56,51,32,64,32,35,49,32,64,32,64,32,64,-32,64,32,73,32,64,32,64,32,95,57,55,32,35,48,32,64,32,64,32,-35,48,32,64,32,58,57,56,32,64,10,65,32,105,110,118,32,58,57,55,-32,64,10,65,32,115,104,114,32,58,57,54,32,64,10,65,32,61,61,32,-58,57,53,32,64,10,65,32,114,101,109,32,58,57,52,32,64,10,65,32,-75,32,58,57,51,32,64,10,65,32,65,32,58,57,50,32,64,10,65,32,-80,32,58,57,49,32,64,10,65,32,85,32,75,32,75,52,32,65,32,64,-32,64,32,64,32,58,57,48,32,64,10,65,32,85,32,75,32,90,32,90,-32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,58,56,57,32,64,10,65,32,85,32,75,51,32,90,32,90,32,-75,32,64,32,64,32,64,32,64,32,58,56,56,32,64,10,65,32,85,32,-75,50,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,-32,64,32,64,32,58,56,55,32,64,10,65,32,110,101,103,32,58,56,54,-32,64,10,65,32,42,32,58,56,53,32,64,10,65,32,45,32,58,56,52,-32,64,10,65,32,43,32,58,56,51,32,64,10,65,32,66,32,66,32,66,-32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,-32,64,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,66,32,67,-32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,64,32,58,56,50,-32,64,10,65,32,85,32,75,32,90,32,90,32,90,32,90,32,75,32,64,-32,64,32,64,32,64,32,64,32,64,32,58,56,49,32,64,10,65,32,95,-54,57,32,95,55,50,32,64,32,95,55,51,32,64,32,95,55,52,32,64,-32,95,55,53,32,64,32,95,55,54,32,64,32,95,55,55,32,64,32,95,-55,56,32,95,56,48,32,64,32,64,32,95,55,57,32,95,56,48,32,64,-32,64,32,58,56,48,32,64,10,65,32,67,39,32,83,39,32,67,32,64,-32,64,32,67,39,32,67,39,32,83,32,64,32,64,32,95,54,56,32,64,-32,73,32,64,32,64,32,73,32,64,32,58,55,57,32,64,10,65,32,67,-39,32,67,39,32,83,32,64,32,64,32,67,39,32,83,39,32,67,32,64,-32,64,32,95,54,56,32,64,32,73,32,64,32,64,32,73,32,64,32,58,-55,56,32,64,10,65,32,62,61,32,58,55,55,32,64,10,65,32,62,32,-58,55,54,32,64,10,65,32,60,61,32,58,55,53,32,64,10,65,32,60,-32,58,55,52,32,64,10,65,32,105,99,109,112,32,58,55,51,32,64,10,-65,32,95,52,49,32,95,55,48,32,64,32,95,55,49,32,64,32,58,55,-50,32,64,10,65,32,47,61,32,58,55,49,32,64,10,65,32,61,61,32,-58,55,48,32,64,10,65,32,66,32,66,32,66,32,66,32,66,32,66,32,-66,32,67,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,66,32,-66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,-64,32,64,32,64,32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,-64,32,64,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,-66,32,67,32,64,32,64,32,80,32,64,32,64,32,64,32,64,32,64,32,-64,32,58,54,57,32,64,10,65,32,85,32,75,51,32,90,32,90,32,90,-32,75,32,64,32,64,32,64,32,64,32,64,32,58,54,56,32,64,10,65,-32,85,32,65,32,64,32,58,54,55,32,64,10,65,32,66,32,89,32,64,-32,66,32,66,32,80,32,95,53,56,32,64,32,64,32,64,32,67,39,32,-83,39,32,83,32,64,32,64,32,67,39,32,83,39,32,64,32,64,32,67,-39,66,32,95,53,57,32,64,32,64,32,64,32,64,32,58,54,54,32,64,-10,65,32,95,52,49,32,95,54,52,32,64,32,95,52,53,32,95,54,53,-32,64,32,64,32,58,54,53,32,64,10,65,32,115,101,113,117,97,108,32,-58,54,52,32,64,10,65,32,66,32,95,54,50,32,64,32,95,52,48,32,-64,32,58,54,51,32,64,10,65,32,66,32,95,54,49,32,64,32,58,54,-50,32,64,10,65,32,66,32,95,54,32,95,53,55,32,64,32,64,32,95,-54,48,32,64,32,58,54,49,32,64,10,65,32,66,32,89,32,64,32,66,-32,66,32,80,32,95,53,56,32,64,32,64,32,64,32,66,32,67,39,66,-32,64,32,66,32,95,53,57,32,64,32,64,32,64,32,64,32,58,54,48,-32,64,10,65,32,79,32,58,53,57,32,64,10,65,32,75,32,58,53,56,-32,64,10,65,32,95,53,53,32,95,53,54,32,64,32,95,52,52,32,64,-32,58,53,55,32,64,10,65,32,82,32,95,52,51,32,64,32,58,53,54,-32,64,10,65,32,66,32,66,32,89,32,64,32,64,32,66,32,67,39,66,-32,80,32,64,32,64,32,67,39,66,32,64,32,64,32,58,53,53,32,64,-10,65,32,95,53,51,32,102,114,111,109,85,84,70,56,32,34,77,72,83,-68,73,82,34,32,64,32,64,32,58,53,52,32,64,10,65,32,67,39,32,-95,48,32,95,50,51,32,64,32,64,32,67,32,95,51,56,32,64,32,95,-51,57,32,64,32,64,32,67,32,83,32,67,32,95,52,48,32,95,52,54,-32,64,32,64,32,95,52,56,32,64,32,64,32,66,32,95,49,56,32,95,-49,48,32,64,32,95,52,57,32,64,32,64,32,95,53,49,32,64,32,64,-32,64,32,95,49,49,32,95,50,51,32,64,32,95,53,50,32,64,32,64,-32,64,32,58,53,51,32,64,10,65,32,75,32,58,53,50,32,64,10,65,-32,95,53,48,32,58,53,49,32,64,10,65,32,112,101,101,107,67,65,83,-116,114,105,110,103,32,58,53,48,32,64,10,65,32,90,32,85,32,64,32,-58,52,57,32,64,10,65,32,95,52,55,32,58,52,56,32,64,10,65,32,-112,110,117,108,108,32,58,52,55,32,64,10,65,32,95,52,49,32,95,52,-50,32,64,32,95,52,53,32,95,52,54,32,64,32,64,32,58,52,54,32,-64,10,65,32,67,39,32,67,39,32,67,32,64,32,64,32,67,39,32,67,-39,32,67,32,64,32,64,32,95,52,48,32,64,32,95,52,51,32,64,32,-64,32,95,52,52,32,64,32,58,52,53,32,64,10,65,32,75,32,58,52,-52,32,64,10,65,32,65,32,58,52,51,32,64,10,65,32,112,61,61,32,-58,52,50,32,64,10,65,32,80,32,58,52,49,32,64,10,65,32,85,32,-75,32,64,32,58,52,48,32,64,10,65,32,94,103,101,116,101,110,118,32,-58,51,57,32,64,10,65,32,67,39,66,32,66,32,95,52,32,64,32,95,-51,53,32,64,32,64,32,67,32,83,39,32,95,52,32,64,32,64,32,67,-39,66,32,66,32,95,50,50,32,64,32,95,51,55,32,64,32,64,32,95,-53,32,64,32,64,32,64,32,58,51,56,32,64,10,65,32,95,51,54,32,-58,51,55,32,64,10,65,32,94,102,114,101,101,32,58,51,54,32,64,10,-65,32,67,39,32,95,52,32,64,32,95,51,52,32,64,32,85,32,90,32,-95,53,32,64,32,64,32,64,32,58,51,53,32,64,10,65,32,110,101,119,-67,65,83,116,114,105,110,103,76,101,110,32,58,51,52,32,64,10,65,32,-95,50,53,32,95,51,50,32,64,32,58,51,51,32,64,10,65,32,95,50,-54,32,95,50,55,32,64,32,95,48,32,95,50,51,32,64,32,95,50,56,-32,64,32,95,51,49,32,64,32,64,32,58,51,50,32,64,10,65,32,67,-39,32,95,52,32,64,32,95,50,57,32,35,49,32,64,32,64,32,66,32,-95,53,32,64,32,95,51,48,32,64,32,64,32,58,51,49,32,64,10,65,-32,73,32,58,51,48,32,64,10,65,32,65,46,97,108,108,111,99,32,58,-50,57,32,64,10,65,32,73,79,46,103,101,116,65,114,103,115,32,58,50,-56,32,64,10,65,32,73,79,46,112,101,114,102,111,114,109,73,79,32,58,-50,55,32,64,10,65,32,73,32,58,50,54,32,64,10,65,32,67,32,95,-50,52,32,64,32,35,48,32,64,32,58,50,53,32,64,10,65,32,65,46,-114,101,97,100,32,58,50,52,32,64,10,65,32,95,49,32,95,50,49,32,-64,32,95,52,32,64,32,95,50,50,32,64,32,95,53,32,64,32,58,50,-51,32,64,10,65,32,73,79,46,62,62,32,58,50,50,32,64,10,65,32,-95,50,32,95,49,48,32,64,32,95,53,32,64,32,95,49,50,32,95,50,-51,32,64,32,64,32,95,49,55,32,95,50,49,32,64,32,64,32,95,49,-57,32,95,50,49,32,64,32,64,32,95,50,48,32,95,50,49,32,64,32,-64,32,58,50,49,32,64,10,65,32,83,39,32,66,32,64,32,66,39,32,-95,49,51,32,64,32,64,32,66,32,95,49,56,32,64,32,95,49,53,32,-64,32,64,32,58,50,48,32,64,10,65,32,83,39,32,66,32,64,32,95,-49,51,32,64,32,67,39,32,95,49,56,32,64,32,95,49,53,32,64,32,-95,56,32,64,32,64,32,58,49,57,32,64,10,65,32,95,55,32,58,49,-56,32,64,10,65,32,83,39,32,66,32,64,32,95,49,51,32,64,32,67,-39,32,95,49,52,32,64,32,95,49,53,32,64,32,95,49,54,32,64,32,-64,32,58,49,55,32,64,10,65,32,73,32,58,49,54,32,64,10,65,32,-85,32,90,32,90,32,90,32,90,32,75,32,64,32,64,32,64,32,64,32,-64,32,58,49,53,32,64,10,65,32,85,32,65,32,64,32,58,49,52,32,-64,10,65,32,85,32,75,50,32,90,32,90,32,75,32,64,32,64,32,64,-32,64,32,58,49,51,32,64,10,65,32,83,39,32,67,39,66,32,64,32,-95,48,32,64,32,83,39,32,67,39,66,32,64,32,95,48,32,64,32,66,-39,32,95,49,49,32,64,32,64,32,64,32,58,49,50,32,64,10,65,32,-85,32,75,50,32,65,32,64,32,64,32,58,49,49,32,64,10,65,32,95,-51,32,66,32,67,32,95,52,32,64,32,64,32,66,32,95,53,32,64,32,-64,32,64,32,95,57,32,95,49,48,32,64,32,64,32,58,49,48,32,64,-10,65,32,67,39,32,95,54,32,64,32,95,55,32,64,32,95,56,32,64,-32,58,57,32,64,10,65,32,75,32,58,56,32,64,10,65,32,85,32,75,-32,64,32,58,55,32,64,10,65,32,66,32,58,54,32,64,10,65,32,73,-79,46,114,101,116,117,114,110,32,58,53,32,64,10,65,32,73,79,46,62,-62,61,32,58,52,32,64,10,65,32,80,32,58,51,32,64,10,65,32,66,-32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,64,-32,66,32,66,32,66,32,66,32,67,32,64,32,64,32,64,32,64,32,66,-32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,66,32,67,32,64,-32,64,32,80,32,64,32,64,32,64,32,64,32,58,50,32,64,10,65,32,-66,32,66,32,66,32,67,32,64,32,64,32,64,32,66,32,66,32,67,32,-64,32,64,32,80,32,64,32,64,32,58,49,32,64,10,65,32,85,32,75,-32,90,32,75,32,64,32,64,32,64,32,58,48,32,64,10,95,49,53,56,-55,32,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,-32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,64,32,125,-};-unsigned char *combexpr = data;-int combexprlen = 297820;+122,2,118,55,46,2,48,10,49,2,54,55,55,2,10,65,32,2,95,48,+32,2,95,50,51,2,32,64,32,2,95,51,48,32,5,2,66,32,95,224,+16,0,2,49,56,32,2,95,49,48,96,26,2,49,32,95,2,51,50,32,+2,95,51,52,32,13,2,79,32,35,2,52,54,32,2,64,32,75,32,3,+128,1,2,95,53,55,160,9,2,67,32,83,2,39,32,67,2,39,32,64,+64,4,2,95,52,51,32,26,2,57,32,95,2,54,49,32,160,40,2,49,+48,48,2,32,35,49,96,11,2,79,32,102,2,114,111,109,2,85,84,70,+2,56,32,34,2,45,45,118,2,101,114,115,2,105,111,110,2,34,32,64,+224,89,2,2,66,32,66,2,32,83,32,32,81,2,66,32,64,64,153,2,+50,54,32,96,7,2,49,48,52,32,8,2,85,32,75,2,32,65,32,192,+131,64,123,32,115,32,44,128,25,192,67,2,95,49,53,2,57,51,32,96,+31,96,153,2,80,32,64,96,11,64,70,2,54,54,49,64,33,2,54,51,+54,32,91,2,56,56,32,224,144,1,2,99,111,109,2,109,97,110,2,100,+45,108,2,105,110,101,128,147,2,35,48,32,160,4,128,1,2,75,50,32,+32,51,96,68,2,50,32,64,224,1,2,2,85,32,90,225,26,2,160,150,+32,38,2,55,51,32,64,141,2,54,55,52,64,7,2,55,53,32,224,34,+1,64,216,2,95,49,50,96,140,2,49,51,50,225,107,2,224,145,1,2,+77,105,99,2,114,111,72,2,115,44,32,161,41,2,32,34,32,192,224,64,+45,32,87,64,81,224,62,16,2,44,32,99,2,111,109,98,2,105,110,97,+2,116,111,114,2,32,102,105,2,108,101,32,224,71,9,2,54,53,57,224,+201,4,2,64,32,58,32,86,33,115,34,38,224,73,1,2,48,46,57,2,+46,55,46,2,48,34,32,128,30,32,117,32,30,32,228,224,1,4,2,83,+32,95,33,119,2,49,32,35,98,62,2,52,55,32,129,206,2,79,32,79,+226,60,6,33,27,2,79,32,64,32,49,96,185,224,177,3,2,47,108,105,+2,98,34,32,161,108,224,145,0,224,31,1,2,111,117,116,2,46,99,111,+2,109,98,34,192,191,160,101,224,7,24,161,122,128,15,64,194,33,41,32,+194,2,66,32,89,32,15,226,108,0,32,8,194,42,96,2,96,11,64,17,+225,186,1,130,234,64,5,226,175,2,96,57,98,133,98,254,130,97,225,144,+10,2,45,45,34,225,108,6,224,78,53,2,118,34,32,224,78,67,2,114,+34,32,224,78,67,2,108,34,32,224,78,67,2,67,82,34,224,79,69,2,+87,34,32,224,79,68,224,78,69,2,84,34,32,224,78,67,2,88,67,80,+2,80,34,32,224,81,67,2,122,34,32,224,78,5,69,95,128,61,229,200,+1,160,74,128,17,96,113,163,108,224,31,0,128,12,224,123,0,224,13,4,+197,219,128,23,96,143,2,49,52,52,69,147,2,52,53,32,224,122,3,160,+46,224,62,0,224,64,2,64,149,100,107,224,61,2,2,49,48,53,224,62,+8,129,3,96,50,197,184,228,25,0,35,254,69,172,2,54,54,51,96,12,+2,54,48,32,224,239,1,164,195,2,95,50,49,134,18,2,67,32,79,228,+188,4,225,114,8,225,0,124,2,49,49,32,225,0,28,224,249,0,134,192,+160,249,225,247,7,160,99,128,112,224,220,1,224,205,10,104,38,224,205,71,+2,54,56,32,225,205,44,103,60,225,205,13,2,51,51,55,225,205,26,128,+145,224,143,8,224,205,2,136,192,72,52,160,13,231,171,15,2,85,110,107,+2,110,111,119,2,110,32,102,2,108,97,103,2,58,32,34,232,73,2,192,+146,224,57,5,39,83,105,166,232,242,1,232,147,7,227,152,7,201,0,96,+77,224,215,11,105,29,97,42,32,116,193,35,71,183,225,35,0,2,95,52,+54,224,47,23,65,54,224,47,35,65,24,224,47,25,33,197,192,48,72,174,+225,180,1,224,23,0,2,55,48,32,224,72,10,224,128,25,224,55,13,224,+176,18,224,127,4,224,47,24,2,53,57,50,224,95,37,2,55,49,32,224,+47,26,41,106,192,47,224,95,4,130,238,43,204,2,57,57,32,130,21,41,+143,67,239,227,32,14,136,237,201,245,32,89,76,28,2,55,53,55,34,25,+75,79,131,117,224,1,5,198,43,227,9,7,224,39,27,224,35,25,224,31,+21,224,27,17,224,23,13,224,19,9,224,15,5,228,41,4,163,108,74,193,+227,70,13,225,42,3,33,117,225,42,3,2,90,32,66,225,42,230,225,40,+25,65,38,32,33,225,38,3,224,148,3,2,90,32,64,225,20,20,225,62,+117,224,222,13,64,210,35,104,224,210,13,224,208,3,226,13,161,225,199,15,+32,234,68,234,225,189,15,225,191,7,224,242,107,224,186,11,64,182,38,82,+224,182,17,224,184,9,224,186,73,224,152,9,64,150,39,25,224,150,19,224,+154,13,224,78,9,64,74,143,158,224,74,18,224,72,11,224,229,33,224,191,+7,64,114,143,242,224,114,6,192,102,228,252,201,228,222,19,65,14,144,62,+225,14,4,129,12,230,7,215,229,247,21,65,26,136,69,234,217,2,2,115,+97,103,2,101,58,32,2,109,104,115,2,32,91,45,211,243,2,93,32,91,+2,45,118,93,32,4,2,108,93,32,2,91,45,114,64,4,2,67,91,82,+2,124,87,93,64,9,78,171,64,7,2,68,100,101,2,102,93,32,2,91,+45,84,64,4,2,122,93,32,2,91,45,105,2,80,65,84,2,72,93,32,+2,91,45,111,2,70,73,76,2,69,93,32,2,91,77,111,2,100,117,108,+2,101,78,97,2,109,101,93,178,156,75,5,32,127,142,219,244,215,0,107,+254,238,217,1,32,196,75,68,244,101,1,224,39,1,43,171,139,190,128,247,+245,16,2,2,50,53,50,226,31,3,233,154,2,224,71,20,239,101,0,224,+140,4,224,66,1,64,101,2,85,32,64,203,167,32,74,64,77,32,115,53,+127,160,46,64,201,245,7,0,52,179,46,108,236,28,0,106,96,244,163,0,+244,85,27,2,83,97,118,2,105,110,103,2,32,99,97,2,99,104,101,244,+81,3,108,192,32,116,2,49,55,48,160,18,2,56,50,32,236,75,12,96,+160,224,205,1,64,158,2,51,54,53,161,88,108,49,46,95,214,80,239,107,+4,224,236,1,173,155,224,229,2,74,185,64,126,224,117,0,224,69,1,227,+23,11,64,70,161,163,246,206,1,2,49,51,32,240,142,8,130,186,173,169,+130,2,110,134,239,129,0,160,10,142,154,225,122,6,238,24,0,225,127,29,+237,241,0,129,131,237,242,20,2,116,111,112,2,32,108,101,2,118,101,108,+2,32,100,101,2,102,110,115,237,245,3,96,53,65,143,109,79,64,216,2,+53,49,32,240,75,22,160,190,224,197,51,224,99,1,32,61,78,182,64,61,+132,221,224,212,4,240,251,8,184,11,224,236,18,2,32,61,32,238,212,5,+2,54,48,54,239,89,18,181,128,176,76,195,95,64,6,97,186,64,62,216,+126,242,180,0,227,50,8,162,147,129,59,226,146,16,228,243,1,226,71,13,+227,222,2,240,230,3,225,96,7,227,26,3,226,43,31,161,169,225,90,5,+225,88,0,225,70,11,2,102,105,110,2,97,108,32,2,112,97,115,2,115,+32,32,224,0,1,243,137,3,129,57,161,153,192,77,2,53,49,49,49,38,+224,96,5,226,94,2,142,128,2,55,32,95,174,54,247,118,7,2,109,115,+34,226,125,11,183,52,228,227,0,195,104,210,185,249,207,2,33,81,32,94,+145,31,224,215,11,247,213,4,224,200,0,244,75,5,224,68,26,224,65,5,+225,213,8,32,243,224,212,2,2,104,115,99,224,49,13,132,160,193,240,97,+210,226,94,7,129,207,243,69,4,242,162,0,228,212,6,59,71,224,144,16,+226,102,2,226,132,9,47,224,250,10,2,2,72,83,67,246,97,8,231,194,+1,251,192,24,250,230,2,224,243,2,224,99,5,224,96,9,230,191,1,225,+222,0,229,88,3,229,72,0,224,253,2,224,14,2,128,12,227,188,3,225,+70,10,229,93,79,2,69,120,101,2,99,117,116,40,120,224,237,2,230,227,+9,244,117,10,225,192,7,2,51,51,53,243,240,4,229,92,8,32,121,192,+76,225,222,15,228,26,91,2,67,32,99,2,111,109,112,2,105,108,97,2,+116,105,111,2,110,32,32,228,26,114,245,32,5,232,211,2,96,252,32,90,+34,159,227,198,18,2,36,73,78,224,83,9,224,71,1,224,63,25,2,79,+85,84,228,74,8,102,15,161,110,245,6,1,230,176,19,2,45,119,32,2,+45,87,97,2,108,108,32,2,45,79,51,2,32,45,73,224,81,1,92,231,+224,61,23,2,47,115,114,2,99,47,114,2,117,110,116,2,105,109,101,245,+205,26,224,56,13,2,47,101,118,2,97,108,45,253,243,6,224,55,14,2,+117,110,105,2,120,45,34,226,232,5,149,140,106,233,224,64,1,229,55,12,+234,6,1,225,9,11,33,144,2,32,45,108,2,109,32,45,2,111,32,36,+225,91,8,238,62,11,2,54,49,49,231,213,13,34,2,2,57,53,32,224,+16,14,64,55,201,250,231,114,2,226,176,1,32,32,2,50,57,32,222,183,+194,159,224,118,2,2,53,56,32,224,13,2,248,172,0,2,66,32,80,128,+107,2,53,54,55,64,225,203,160,2,57,48,32,226,200,2,2,97,105,110,+224,217,9,76,80,146,196,2,85,32,67,98,69,227,131,1,255,59,0,100,+213,226,17,1,227,61,2,85,68,84,29,247,104,9,247,204,20,85,152,149,+129,2,65,32,64,227,114,8,2,32,125,34,233,47,16,126,207,224,16,4,+217,67,224,16,1,229,201,1,224,21,6,224,24,3,229,247,3,224,57,12,+224,63,13,224,69,8,224,36,1,235,121,0,224,36,19,224,79,3,219,24,+238,200,23,224,57,5,224,53,1,224,47,13,231,210,3,255,239,0,232,181,+2,2,95,53,55,193,187,212,237,2,80,32,95,2,56,54,32,133,1,2,+95,57,55,237,109,2,2,49,56,53,247,155,3,106,210,65,182,2,75,52,+32,225,185,1,231,175,15,2,53,56,50,103,130,2,56,52,32,224,36,13,+200,135,225,30,10,225,64,8,192,51,233,150,1,231,156,0,2,95,50,48,+251,32,9,231,194,4,230,243,0,128,146,232,146,8,2,53,56,53,246,22,+16,65,56,129,68,88,148,158,46,2,53,53,49,224,253,14,160,183,252,217,+4,224,124,9,232,20,3,140,137,224,27,1,2,95,53,52,230,137,1,225,+76,20,233,204,7,225,125,2,224,208,3,231,215,3,97,17,252,192,3,224,+231,1,225,88,0,164,75,249,102,4,226,30,5,224,252,5,102,110,129,24,+167,208,193,30,220,28,36,135,228,22,15,101,28,228,22,1,231,155,7,239,+155,14,64,181,34,134,2,50,32,90,96,1,237,100,9,66,211,231,175,13,+2,82,32,64,97,114,226,7,3,2,75,32,95,77,60,161,98,237,61,7,+239,214,7,161,98,72,184,230,111,14,2,65,32,34,224,187,18,34,14,136,+142,227,82,1,253,109,2,96,27,231,191,17,33,50,102,4,224,242,1,230,+64,1,225,60,5,229,79,2,2,64,92,49,2,48,38,34,230,169,7,130,+124,232,29,15,2,64,34,32,238,185,19,133,117,224,11,3,132,72,229,88,+0,178,47,2,53,53,48,96,19,2,73,32,64,96,1,225,172,1,192,7,+64,42,161,207,68,86,225,203,5,2,80,32,90,224,1,0,224,25,5,134,+62,224,19,5,129,161,32,23,2,52,32,90,224,26,4,32,18,2,51,32,+90,224,67,8,64,65,224,93,13,128,170,224,27,15,243,14,1,202,237,105,+121,67,232,224,16,0,42,211,231,137,1,2,51,50,52,64,4,234,133,1,+225,119,16,2,78,111,32,49,44,2,105,110,105,106,228,2,102,111,117,2,+110,100,32,2,102,111,114,235,229,4,208,141,192,14,228,253,0,71,204,153,+190,224,80,1,2,118,55,46,2,48,92,49,129,254,32,31,71,209,32,31,+203,121,2,53,55,49,211,171,2,55,53,32,128,33,152,94,93,28,116,80,+156,55,197,109,173,2,100,211,2,56,57,32,128,203,2,50,50,32,161,5,+64,17,2,89,32,66,103,222,194,10,229,14,6,229,41,3,98,37,166,164,+225,104,3,194,45,130,85,36,92,224,239,2,224,27,1,193,74,224,126,40,+231,237,8,224,143,0,243,56,1,66,75,225,251,9,224,142,7,192,140,224,+148,5,229,185,2,101,14,2,51,54,32,241,67,9,227,224,0,2,50,49,+51,226,17,19,2,35,105,110,2,99,108,117,2,100,101,32,2,92,51,52,+227,196,2,235,105,1,228,27,3,96,7,233,140,8,32,176,224,89,11,48,+32,2,102,102,105,2,46,104,34,255,128,5,2,51,48,32,225,196,32,249,+34,1,225,83,12,132,15,248,60,5,192,9,225,215,7,225,68,3,225,78,+9,227,116,3,211,148,33,55,32,174,109,38,230,194,0,224,28,7,232,190,+1,160,56,2,79,32,95,225,10,10,2,115,116,97,2,116,105,99,2,32,+115,116,2,114,117,99,2,116,32,102,2,102,105,95,2,101,110,116,2,114,+121,32,2,116,97,98,2,108,101,91,2,93,32,61,2,32,123,34,228,183,+6,244,35,8,64,113,67,83,2,54,52,54,247,77,7,229,163,2,224,38,+2,108,189,224,38,1,2,79,32,102,224,143,0,2,123,32,48,2,44,48,+32,171,7,224,24,3,2,125,59,34,224,19,8,224,181,8,2,42,120,102,+32,11,96,187,32,185,96,7,160,54,244,142,15,119,206,248,211,3,2,110,+105,109,2,112,108,101,2,109,101,110,2,116,101,100,2,32,70,70,2,73,+32,102,2,101,97,116,2,117,114,101,226,43,6,101,221,227,113,36,235,156,+9,226,51,6,66,25,241,102,0,226,101,7,131,168,192,5,197,241,231,60,+0,65,103,162,84,232,1,9,130,84,227,177,13,224,204,114,224,47,19,247,+1,6,231,105,2,105,160,41,102,2,95,54,49,238,28,0,234,218,5,225,+14,23,225,18,23,228,1,30,227,216,1,160,36,224,6,1,64,113,64,63,+229,68,1,229,78,5,234,191,9,230,19,0,64,224,2,61,61,32,50,49,+235,217,3,249,92,6,224,222,3,236,235,2,99,108,2,54,53,54,231,120,+0,2,54,51,52,228,87,18,224,21,5,71,0,158,200,65,109,104,155,130,+110,213,171,96,10,225,144,2,235,231,2,64,112,2,52,51,32,129,146,228,+101,11,2,100,121,110,2,97,109,105,245,146,4,64,93,2,85,32,95,32,+117,136,42,230,112,9,224,100,39,2,119,114,97,2,112,112,101,2,114,34,+32,224,100,11,129,8,224,100,7,225,118,2,224,91,21,133,38,234,25,11,+193,67,32,63,130,134,225,46,10,238,245,3,32,105,246,236,23,230,151,2,+128,49,197,254,2,54,53,53,109,10,226,239,3,128,222,2,53,32,95,96,+27,227,63,5,225,174,1,192,139,251,38,2,227,125,5,253,64,0,225,6,+10,71,94,235,122,5,225,162,2,193,65,226,205,3,249,86,6,161,92,128,+241,128,74,225,130,10,237,148,1,228,13,6,225,164,2,128,104,2,95,52,+54,225,26,0,2,79,32,64,224,151,4,225,225,8,224,51,8,224,21,5,+237,111,5,238,200,5,235,235,0,96,20,131,99,226,65,9,238,208,2,234,+251,4,234,237,20,2,98,97,100,74,221,2,101,105,103,2,110,32,105,2,+109,112,111,2,114,116,32,246,205,28,67,165,32,106,99,165,229,81,7,229,+95,6,172,70,224,55,1,34,31,106,222,80,191,64,15,32,145,96,15,64,+208,64,15,159,222,231,95,3,2,71,69,84,2,82,65,87,231,119,9,32,+23,2,84,73,77,2,69,77,73,2,76,76,73,224,29,9,2,97,99,111,+182,58,224,21,4,2,100,100,95,95,218,224,25,13,2,117,116,102,2,56,+34,32,224,25,8,2,115,105,110,224,21,10,2,116,97,110,224,21,13,2,+50,34,32,224,22,7,2,99,97,108,2,108,111,99,224,23,10,2,108,111,+115,2,101,98,34,224,23,9,224,187,11,2,101,120,112,224,20,9,2,102,+108,117,2,115,104,98,224,23,10,2,111,112,101,224,159,10,2,102,114,101,+168,67,224,21,3,2,103,101,116,224,66,10,32,21,2,101,110,118,224,23,+9,2,105,115,119,2,105,110,100,2,111,119,115,224,26,9,2,108,111,103,+224,20,10,2,122,55,55,224,251,10,2,109,97,108,225,19,12,2,109,100,+53,2,65,114,114,2,97,121,34,224,25,11,2,66,70,73,225,188,11,32,+25,2,83,116,114,2,105,110,103,224,26,10,2,101,109,99,2,112,121,34,+224,23,11,2,109,111,118,225,12,10,2,112,117,116,225,12,10,226,3,12,+2,115,113,114,2,116,34,32,224,21,8,2,121,115,116,2,101,109,34,224,+23,8,226,48,12,2,116,109,112,38,148,224,134,10,2,117,110,103,225,149,+12,2,117,110,108,2,105,110,107,224,182,10,2,101,101,107,2,80,116,114,+224,24,10,2,111,107,101,224,24,16,2,87,111,114,2,100,34,32,224,75,+11,224,25,13,67,37,65,207,2,95,99,111,2,109,112,114,2,101,115,115,+2,111,114,34,224,36,17,2,100,101,99,224,38,18,64,101,2,95,117,105,+2,110,116,56,224,155,13,224,27,16,192,55,2,49,54,34,224,56,17,224,+28,12,192,57,2,51,50,34,224,57,17,224,28,12,192,57,2,54,52,34,+224,57,17,224,28,12,64,57,224,228,18,224,227,18,224,226,19,224,225,19,+224,224,19,224,223,19,224,222,19,224,221,19,36,129,38,58,225,23,15,224,+28,15,64,57,224,56,19,224,55,19,65,108,225,135,18,224,223,17,224,221,+17,224,105,15,2,108,111,110,228,85,10,128,106,224,27,14,64,55,224,54,+18,224,53,18,2,117,108,108,224,110,19,224,111,19,224,112,19,224,55,18,+2,102,108,116,224,53,14,224,25,12,2,115,105,122,2,101,111,102,225,47,+13,160,27,224,108,13,192,28,224,29,13,70,172,2,100,105,114,231,32,14,+224,25,12,2,114,101,97,2,100,100,105,224,50,11,2,95,100,95,229,82,+13,2,99,104,100,192,48,239,136,17,224,1,131,73,15,43,101,233,103,0,+179,107,148,211,118,185,64,33,156,63,80,212,145,117,2,48,51,32,96,33,+144,229,2,56,32,95,2,55,51,48,235,81,2,240,244,4,64,33,2,57,+32,95,96,33,56,179,52,204,139,191,241,62,4,64,100,148,215,87,119,2,+55,57,32,110,32,142,0,2,50,52,56,74,119,234,31,1,2,95,52,52,+138,205,32,53,89,73,96,53,92,53,146,144,2,95,55,53,239,34,3,239,+94,2,128,13,238,81,1,147,56,150,37,235,49,7,250,252,3,84,121,172,+244,192,118,149,66,234,248,18,2,123,32,92,51,205,243,206,2,255,115,27,+64,50,2,44,32,109,2,104,115,95,34,121,2,114,95,34,244,11,9,242,+39,2,2,44,34,32,225,199,4,65,20,224,147,27,224,146,47,224,141,38,+139,189,94,115,237,39,2,84,124,184,200,224,110,13,224,247,6,143,16,113,+10,2,51,57,32,45,84,255,16,1,243,113,1,80,74,64,202,2,54,52,+49,96,40,129,254,224,19,5,240,68,0,247,191,19,240,70,1,234,229,3,+140,188,2,38,32,109,2,117,115,116,2,32,98,101,2,32,80,116,2,114,+47,70,2,117,110,80,200,240,140,126,224,204,11,2,40,72,115,128,40,2,+41,34,32,248,243,5,224,45,1,226,121,1,192,9,250,15,9,238,148,12,+64,219,128,188,65,109,140,243,2,85,32,66,161,44,131,134,238,81,1,242,+183,2,161,140,215,10,183,239,54,178,193,156,161,61,252,222,3,96,110,161,+29,193,139,181,226,129,131,226,67,20,2,59,32,109,34,63,64,15,2,95,+85,110,2,105,116,40,2,115,44,32,226,76,2,250,221,14,32,247,33,187,+224,247,9,99,182,251,59,17,2,52,48,32,251,59,13,65,242,2,48,57,+32,224,159,11,224,142,4,79,43,32,34,33,83,130,107,32,14,32,149,2,+52,55,55,253,37,9,238,178,5,224,176,13,2,95,51,53,243,191,0,161,+175,129,177,142,149,226,165,4,2,52,50,32,226,165,54,2,114,101,116,2,+117,114,110,2,32,116,121,2,112,101,32,194,175,2,73,79,34,241,196,4,+64,124,143,2,125,183,224,68,1,2,80,114,105,2,109,105,116,2,105,118,+101,2,115,46,73,160,51,64,43,198,30,80,248,144,233,243,187,1,160,218,+241,146,0,224,37,0,250,6,4,224,49,3,161,84,241,196,2,243,243,1,+211,136,130,156,209,164,2,50,48,51,224,51,6,242,24,5,192,167,134,164,+247,176,0,249,15,14,2,95,116,111,228,95,4,247,226,5,34,218,145,181,+224,68,18,226,190,49,64,165,198,229,224,167,24,99,46,243,32,6,250,90,+6,224,174,1,248,254,2,224,178,25,224,244,8,255,145,5,224,71,18,227,+40,6,128,63,227,168,15,32,237,68,39,32,237,69,193,188,7,146,113,196,+91,2,67,32,60,226,69,1,254,86,2,226,96,7,226,88,1,81,249,128,+11,224,44,10,230,28,1,64,32,242,223,0,102,64,226,73,4,230,36,0,+224,37,0,119,111,224,35,7,211,73,225,0,1,229,247,7,227,60,2,224,+22,3,243,106,5,224,140,2,104,212,2,95,55,50,33,90,233,41,0,2,+49,52,32,128,110,193,128,246,173,3,254,113,22,228,11,1,254,113,20,2,+116,32,97,2,32,118,97,2,108,105,100,32,128,68,27,254,108,4,2,57,+56,55,225,177,2,136,216,187,72,230,214,13,228,39,2,2,70,108,111,2,+97,116,87,192,76,224,44,11,224,33,5,66,45,224,84,24,2,73,110,116,+224,81,19,224,30,2,224,78,28,240,102,1,224,79,13,224,31,3,224,80,+17,2,68,97,116,2,97,46,87,32,42,96,4,175,79,224,80,17,224,32,+0,224,162,28,2,40,41,34,224,79,18,71,51,224,78,25,2,83,121,115,+50,19,37,185,2,46,72,97,2,110,100,108,251,199,0,224,122,12,226,172,+3,232,88,8,75,227,185,107,226,83,16,2,70,111,114,70,112,2,46,67,+46,2,84,121,112,32,193,230,98,5,64,165,224,53,11,2,67,67,104,2,+97,114,34,224,200,0,224,34,12,2,83,67,104,224,35,24,2,85,67,104,+224,71,25,239,220,1,224,71,17,224,36,27,226,111,2,224,70,15,224,34,+25,2,76,111,110,174,148,224,69,17,224,35,26,33,184,2,100,105,102,2,+102,34,32,224,250,21,47,9,224,34,23,224,35,26,2,76,76,111,224,180,+26,224,36,3,238,243,25,68,98,140,167,232,124,17,229,100,3,64,47,140,+73,224,47,17,224,44,4,203,8,232,117,12,174,55,32,29,229,236,9,201,+155,128,70,137,157,224,115,17,195,177,64,43,137,76,231,128,20,2,118,111,+105,2,100,32,109,237,68,4,234,201,21,231,187,2,49,9,2,32,115,41,+2,32,123,32,237,128,20,2,59,32,125,237,129,6,64,32,202,97,2,57,+48,56,140,119,239,27,0,129,33,79,1,2,56,49,32,33,1,175,20,236,+59,1,128,67,137,84,254,41,10,108,32,236,4,0,160,61,224,55,1,136,+230,102,238,204,62,36,85,128,7,128,43,110,12,96,11,143,134,2,35,49,+50,137,213,32,22,2,50,56,32,224,74,0,2,50,57,32,174,214,39,7,+64,50,129,195,71,71,48,81,199,13,32,23,64,51,77,0,32,41,192,24,+64,74,32,11,32,5,96,13,171,137,232,106,0,103,93,224,68,1,225,147,+1,2,54,50,52,133,8,236,231,0,129,43,224,112,2,2,50,51,49,224,+88,0,240,109,5,224,81,4,130,21,2,54,50,54,225,43,0,154,169,64,+19,251,146,1,233,216,2,2,48,49,32,224,99,0,172,129,233,175,1,224,+28,10,2,95,49,49,224,192,4,227,108,6,65,73,66,200,2,55,48,49,+96,14,131,123,125,75,2,50,53,32,128,34,131,95,83,171,2,67,65,83,+120,227,2,76,101,110,96,25,131,76,2,94,108,122,57,94,96,16,195,22,+32,25,2,75,32,95,2,50,50,54,163,246,224,10,0,32,8,49,173,225,+23,0,32,153,225,127,1,96,14,40,180,224,14,3,97,210,160,14,65,210,+65,119,129,49,157,154,193,128,2,95,53,32,224,14,1,225,16,1,2,54,+50,50,224,23,2,192,7,64,169,131,148,2,94,112,111,120,154,96,18,131,+15,2,94,112,101,120,198,96,18,130,222,240,158,1,226,81,5,128,77,143,+40,65,216,225,127,3,193,206,96,197,178,209,225,138,4,64,94,242,210,0,+2,50,50,48,131,182,2,50,50,50,129,37,239,186,0,64,101,65,83,32,+68,64,13,201,127,42,21,64,14,241,211,0,66,252,2,53,51,54,233,235,+3,229,146,13,159,193,2,32,117,110,2,115,105,103,2,110,101,100,2,32,+99,104,2,97,114,32,2,100,97,116,2,97,91,93,2,32,61,32,2,123,+34,32,229,170,5,96,215,196,131,147,221,2,54,49,52,225,2,0,2,53,+32,35,96,186,128,118,244,234,3,2,125,59,34,224,23,12,224,120,5,2,+42,99,111,2,109,98,101,2,120,112,114,32,123,64,132,224,52,0,33,82,+94,210,228,248,18,68,247,192,61,2,108,101,110,32,64,237,117,11,96,64,+236,191,2,239,111,0,44,150,2,53,57,32,241,96,11,225,159,0,68,125,+244,60,4,2,83,32,85,229,34,2,128,19,158,107,224,9,3,130,124,244,+73,0,244,61,1,244,59,11,2,95,52,57,229,27,6,33,83,97,226,2,+53,51,53,224,199,19,2,49,48,57,238,72,0,242,40,3,64,65,131,134,+32,120,2,50,32,75,2,52,32,75,2,52,32,65,224,96,4,130,251,32,+30,2,52,32,90,224,1,2,231,157,9,64,44,131,21,96,75,224,44,3,+224,48,13,192,52,239,107,1,129,60,255,154,1,225,68,9,242,136,4,161,+57,146,137,224,23,6,210,145,224,76,1,224,14,0,33,22,161,14,245,183,+3,160,42,225,67,0,224,159,1,227,120,0,32,55,70,23,71,237,96,25,+64,69,225,242,4,116,60,102,161,240,84,2,208,182,32,90,32,203,240,171,+2,193,254,224,34,1,129,247,173,222,240,216,5,160,140,64,128,129,97,225,+96,8,225,98,15,128,55,131,251,64,160,2,80,32,67,32,228,167,43,175,+181,2,50,53,55,128,113,71,59,243,183,1,133,24,64,42,64,251,244,246,+1,224,17,3,227,114,16,2,64,32,34,224,135,6,34,21,228,172,0,86,+48,239,200,0,2,83,32,64,239,200,9,239,84,6,224,31,8,193,180,111,+147,224,26,5,129,221,71,191,88,85,96,211,192,117,224,251,9,32,199,168,+43,224,252,4,226,109,8,234,0,1,192,121,72,246,224,77,38,2,85,32,+83,128,174,2,95,49,53,38,31,2,55,52,32,228,103,2,176,160,130,105,+129,91,2,53,55,51,239,147,2,128,21,70,192,64,60,2,53,53,54,64,+4,2,55,32,102,243,186,1,160,9,246,244,5,96,41,192,65,168,202,185,+56,224,1,5,225,138,15,225,60,2,225,11,7,192,26,66,145,225,220,2,+224,45,14,201,51,224,45,10,225,156,13,2,53,48,51,225,77,12,66,210,+171,202,68,250,64,208,65,74,64,22,133,17,97,102,32,77,85,125,2,50,+57,50,163,248,33,77,42,26,242,156,1,160,37,2,56,51,32,193,138,38,+161,89,143,98,159,224,27,8,2,54,53,53,167,53,64,26,224,28,6,2,+49,49,49,2,52,49,49,160,105,40,184,230,197,2,2,116,102,56,78,100,+2,58,32,98,2,97,100,32,238,110,3,226,189,3,32,2,198,196,97,244,+98,36,58,169,150,35,230,26,1,2,35,50,52,246,43,3,164,218,224,58,+22,133,211,32,251,203,12,234,100,0,224,56,41,224,52,42,247,67,6,50,+174,76,27,224,214,5,2,54,52,32,224,34,33,224,33,6,224,25,1,161,+83,225,78,35,107,159,225,17,111,224,236,61,224,233,29,2,49,57,50,224,+176,58,224,141,18,232,103,0,64,38,64,96,128,52,67,149,136,101,77,249,+165,62,84,200,64,24,206,240,131,225,128,75,247,7,2,67,221,67,137,106,+90,2,56,57,32,153,84,72,219,104,200,68,129,128,7,224,32,17,160,245,+224,32,4,67,184,228,23,0,196,88,64,218,69,88,224,24,1,2,49,50,+54,228,158,3,224,211,2,238,105,0,160,42,233,124,29,251,124,10,64,21,+233,146,6,70,65,107,183,2,54,48,48,96,15,137,33,238,55,8,64,175,+2,55,49,32,68,110,2,57,52,32,226,14,2,236,92,4,64,37,72,195,+239,20,1,220,241,224,73,1,64,179,77,106,64,38,32,45,204,181,2,53,+57,55,226,48,1,236,180,9,97,47,162,49,32,243,239,16,1,64,179,137,+53,64,32,2,56,32,58,128,38,32,15,52,81,2,115,101,114,2,105,97,+108,50,49,96,22,136,207,2,94,97,100,2,100,95,108,46,25,2,95,99,+111,2,109,112,114,2,101,115,115,2,111,114,32,64,30,177,222,32,9,76,+209,2,53,57,54,96,15,2,114,110,102,134,75,64,18,209,164,2,75,51,+32,234,163,0,235,157,7,2,53,57,52,233,196,0,224,194,0,33,231,2,+49,32,102,245,105,1,2,101,108,99,2,111,109,101,2,32,116,111,2,32,+105,110,2,116,101,114,2,97,99,116,49,157,2,32,77,105,2,99,114,111,+2,72,115,33,229,178,4,240,47,5,2,50,56,53,237,218,0,239,176,10,+2,57,51,32,64,192,254,109,2,145,62,39,220,228,66,1,39,15,237,241,+0,32,163,231,157,3,81,18,71,234,32,67,99,18,2,55,54,48,172,13,+194,156,64,224,187,133,2,55,53,55,32,75,144,186,236,103,1,235,82,3,+224,1,3,203,58,248,101,7,224,39,27,224,35,25,224,31,21,224,27,17,+224,23,13,64,255,226,98,1,225,223,7,220,88,224,229,33,225,17,185,224,+19,9,224,15,5,224,11,1,146,39,225,55,11,132,90,163,21,68,104,65,+103,106,141,224,19,4,80,49,2,50,49,48,227,53,9,87,177,2,32,39,+58,2,113,117,105,2,116,39,32,35,58,64,8,2,44,32,39,2,58,104,+101,2,108,112,39,2,32,102,111,2,114,32,104,32,9,250,33,2,224,85,+7,2,49,56,56,67,35,127,17,32,121,201,63,224,111,15,2,87,65,82,+2,78,73,78,2,71,58,32,2,67,111,109,2,112,105,108,48,26,2,119,+105,116,2,104,32,71,2,72,67,44,2,32,115,111,2,32,108,105,53,84,+32,20,2,102,117,110,35,190,2,111,110,97,2,108,105,116,2,121,46,34,+226,70,5,102,4,193,0,164,167,67,182,224,234,9,2,53,54,49,224,123,+2,2,46,109,104,2,115,105,34,251,171,6,2,62,32,34,224,91,0,99,+212,96,93,110,183,224,105,0,238,153,2,230,156,4,2,35,53,56,232,6,+3,225,25,1,139,250,161,19,224,174,0,196,94,224,34,1,33,59,96,117,+225,46,16,2,66,121,101,225,123,3,224,75,1,225,0,0,64,17,174,25,+32,153,140,195,225,161,1,228,98,0,148,144,96,213,226,22,27,2,85,110,+114,2,101,99,111,2,103,110,105,2,122,101,100,81,120,2,109,97,110,251,+23,2,224,97,12,226,177,1,143,8,241,39,3,255,204,1,111,100,214,44,+72,67,2,95,51,49,235,14,1,69,251,225,74,8,178,240,128,167,224,14,+0,64,175,252,235,22,2,65,109,98,2,105,103,117,2,111,117,115,192,193,+252,234,3,93,67,128,249,114,232,2,50,53,50,250,248,5,224,226,15,235,+8,3,2,53,52,55,239,81,3,2,53,49,56,232,182,1,224,81,0,65,+181,253,84,1,97,242,33,175,251,185,15,67,127,251,173,0,64,231,112,177,+224,140,3,246,41,1,224,67,15,2,99,108,101,236,162,1,224,68,2,228,+35,4,41,246,32,22,230,196,3,226,25,9,115,51,70,139,65,197,135,31,+228,143,1,35,249,225,23,3,225,48,18,224,167,15,2,114,101,108,2,111,+97,100,224,168,9,227,203,2,111,140,64,129,151,163,227,62,3,167,158,226,+26,3,103,203,236,134,2,167,210,226,77,4,229,102,1,74,44,192,251,229,+106,9,229,82,13,226,20,22,224,233,15,2,100,101,108,2,101,116,101,244,+238,2,226,225,8,97,144,96,9,245,219,2,239,79,2,130,106,128,30,249,+28,0,226,112,4,162,107,2,53,51,32,225,146,22,224,164,15,2,116,121,+112,224,162,17,66,197,225,2,18,224,83,15,2,107,105,110,225,224,0,224,+83,12,119,202,224,83,37,230,144,3,73,118,228,207,17,64,96,192,79,225,+187,16,243,117,7,67,163,138,182,252,218,2,132,63,2,115,58,92,2,49,+48,38,103,44,2,32,32,32,32,0,96,9,170,97,96,26,130,210,64,26,+160,9,2,109,111,100,2,117,108,101,128,28,99,151,96,55,128,9,2,97,+108,108,2,32,100,101,2,102,105,110,60,71,2,111,110,115,96,35,130,41,+2,32,100,32,32,25,128,9,224,32,0,2,40,115,41,2,32,100,92,64,+36,65,169,2,32,101,32,32,0,2,115,104,111,2,119,32,116,64,14,2,+111,102,32,2,101,92,49,32,28,65,114,2,32,116,32,224,28,7,2,116,+92,49,32,28,65,59,128,186,2,116,104,105,2,115,32,116,2,101,120,116,+64,23,119,148,128,0,2,101,118,97,2,108,117,97,32,120,64,19,43,200,+32,120,64,33,32,134,2,110,32,32,96,0,43,235,40,41,2,112,32,108,+2,101,118,101,224,192,3,64,38,65,151,65,64,215,76,227,203,8,197,246,+132,83,228,89,3,227,219,10,2,49,53,52,132,237,103,119,213,215,229,241,+8,45,130,97,243,225,201,1,65,248,227,7,1,2,80,32,66,228,39,5,+67,38,128,9,34,63,228,109,9,52,231,230,115,24,2,57,56,55,205,65,+100,113,126,29,64,12,244,49,7,233,180,10,66,244,238,15,1,2,49,50,+53,168,40,2,55,57,32,199,4,225,30,3,224,5,11,192,144,179,94,64,+18,214,196,2,80,32,79,211,155,225,16,1,231,152,9,236,92,13,65,154,+224,17,3,192,33,242,226,0,214,230,119,106,186,243,255,61,3,254,5,13,+225,14,21,237,219,1,231,200,14,98,195,231,186,4,96,41,225,109,0,224,+58,18,250,41,5,194,68,226,49,9,128,137,141,132,235,29,5,2,95,105,+116,194,213,204,164,226,213,113,176,147,226,213,91,137,27,130,213,2,54,54,+32,225,198,25,240,229,4,226,213,12,192,1,226,197,69,226,179,102,64,234,+140,116,106,201,32,69,39,132,246,162,0,2,50,48,57,253,211,3,2,73,+32,64,64,48,65,3,109,166,226,165,14,134,37,226,169,0,128,39,2,50,+57,49,249,159,19,2,40,109,111,224,52,16,224,37,1,2,41,32,119,2,+104,101,114,102,25,2,105,109,112,2,111,114,116,2,32,80,114,2,101,108,+117,2,100,101,92,224,17,1,2,83,121,115,2,116,101,109,2,46,73,79,+2,46,80,114,49,58,2,79,114,82,2,117,110,92,133,243,2,97,117,108,+2,116,32,40,2,73,110,116,2,101,103,101,2,114,44,32,2,68,111,117,+2,98,108,101,2,44,32,83,2,116,114,105,2,110,103,41,197,241,225,26,+2,74,77,227,35,33,193,159,98,7,77,117,66,107,67,217,2,51,52,52,+162,240,129,71,209,177,232,57,1,169,15,227,5,18,66,115,233,89,1,106,+90,239,175,7,227,167,2,180,41,191,254,160,135,2,55,50,56,160,12,145,+208,227,211,77,237,211,1,224,205,18,67,73,226,158,1,74,6,238,228,0,+184,240,224,126,8,228,238,20,225,177,1,136,236,244,82,1,237,118,16,2,+51,48,49,129,164,2,51,54,53,233,81,0,250,3,3,224,50,6,111,78,+96,190,243,88,5,160,72,224,30,1,243,60,18,229,241,1,2,53,55,49,+224,9,0,64,33,79,54,100,157,227,43,16,95,45,65,50,192,246,65,107,+226,5,7,65,0,136,172,124,13,68,27,252,176,1,99,190,129,225,158,216,+204,56,2,48,54,50,236,101,4,224,29,3,2,80,32,75,241,207,8,196,+127,96,17,78,253,254,226,1,254,189,4,190,71,204,131,128,236,248,45,3,+225,22,7,67,23,98,185,110,206,225,130,2,128,231,231,83,19,2,114,97,+110,2,115,108,97,2,116,101,58,2,32,110,111,2,116,32,102,2,111,117,+110,2,100,32,34,226,96,1,222,82,231,57,0,68,231,225,53,3,136,196,+129,25,128,202,92,123,197,118,141,76,237,131,0,124,141,208,9,64,222,229,+150,0,225,218,1,133,45,131,183,247,164,1,197,223,132,42,128,98,64,21,+254,109,14,224,40,24,224,213,1,238,208,3,224,40,10,227,84,4,253,10,+9,224,30,3,228,214,1,129,234,253,225,18,2,100,121,110,2,115,121,109,+253,223,12,60,137,245,31,9,62,112,225,226,21,225,224,21,65,220,2,32,+112,114,2,105,109,111,2,112,32,34,240,191,5,68,221,32,53,51,33,196,+94,234,186,5,224,245,12,225,102,1,128,245,128,239,254,231,3,225,91,28,+239,138,3,227,110,1,224,35,5,227,97,4,224,133,5,192,26,115,163,162,+59,224,149,10,2,55,48,54,225,73,4,224,44,7,227,45,39,2,58,32,+105,39,48,45,18,39,3,242,74,3,154,47,2,53,51,56,228,87,6,138,+215,69,170,2,54,50,52,242,105,0,98,18,97,239,64,24,89,64,251,119,+3,128,57,138,135,239,0,5,36,205,105,134,227,26,1,239,36,9,32,35,+105,110,192,35,90,239,224,35,11,65,198,192,35,128,7,239,108,15,2,67,+39,34,225,135,1,224,76,12,106,146,252,93,1,224,35,13,224,112,3,156,+154,224,112,15,2,83,39,34,227,200,1,224,76,12,106,153,192,76,133,42,+224,225,9,234,56,3,132,86,224,71,9,224,35,3,132,47,224,35,9,224,+184,3,132,136,224,35,9,225,113,3,134,9,224,220,15,2,66,39,34,234,+137,1,224,76,12,122,102,192,76,138,201,224,112,9,66,255,192,35,2,82,+32,64,224,112,18,2,75,50,34,193,230,131,52,224,40,16,2,51,34,32,+160,40,131,201,224,40,16,2,52,34,32,160,40,134,152,226,57,17,2,66,+34,32,229,244,1,224,201,12,43,133,224,201,1,2,43,32,64,224,35,12,+225,130,3,2,45,32,64,224,35,12,225,17,3,2,42,32,64,224,150,18,+2,113,117,111,245,96,0,64,11,244,161,22,229,170,0,32,10,224,42,20,+2,117,113,117,224,88,1,96,12,224,46,21,224,90,2,64,11,224,44,20,+2,110,101,103,192,43,32,10,224,42,20,247,167,2,32,10,224,42,20,2,+111,114,34,160,41,57,229,224,40,19,2,120,111,114,192,41,32,10,224,42,+20,2,105,110,118,192,42,32,10,224,42,20,2,115,104,108,192,42,32,10,+224,42,22,224,128,0,32,10,224,255,21,224,43,2,64,11,224,87,21,2,+117,98,116,94,39,224,92,0,160,15,224,52,20,2,61,61,34,160,46,102,+140,224,40,17,2,47,61,34,160,40,2,47,61,32,229,22,13,227,236,3,+70,244,224,76,17,2,60,61,34,192,39,224,76,15,227,3,3,2,62,32,+64,224,76,18,2,62,61,34,192,39,224,194,21,2,117,60,34,194,163,224,+158,21,2,117,60,61,224,41,1,224,83,22,2,62,34,32,160,41,224,165,+21,2,117,62,61,224,41,1,224,83,21,2,111,114,100,226,203,1,226,245,+21,2,99,104,114,192,42,32,10,224,42,20,2,102,43,34,160,41,2,102,+43,32,224,40,20,2,45,34,32,160,40,228,160,11,224,40,2,2,42,34,+32,160,40,228,165,21,2,102,47,34,192,40,2,47,32,64,224,40,19,226,+142,1,32,10,224,83,22,224,42,1,226,145,12,224,42,2,225,247,0,2,+102,60,32,224,40,21,224,83,1,225,247,22,2,102,62,34,192,41,225,247,+21,2,102,62,61,224,41,1,224,83,22,229,25,2,64,11,224,44,21,87,+15,224,45,0,119,28,224,46,20,2,114,101,97,226,85,0,96,12,228,249,+21,2,116,111,102,228,250,0,32,11,228,120,21,2,101,113,34,196,115,2,+101,113,32,224,42,19,2,101,114,114,229,126,1,96,12,224,89,23,2,117,+97,108,224,92,2,32,13,224,95,21,224,47,3,224,46,25,2,115,99,109,+249,124,0,64,11,225,19,21,224,44,2,64,11,231,107,21,2,110,102,34,+199,107,2,110,102,32,231,15,20,2,111,77,97,2,116,99,104,231,19,0,+128,14,224,50,22,2,68,101,102,82,205,224,52,1,160,16,224,54,20,51,+19,2,62,62,61,192,51,128,13,224,48,25,224,47,4,224,46,23,2,114,+101,116,2,117,114,110,224,50,2,128,16,224,54,23,45,212,2,110,116,34,+224,53,1,96,15,224,52,23,2,115,101,114,2,105,97,108,63,212,224,56,+2,224,19,0,224,60,23,2,100,101,115,224,62,10,224,21,2,224,125,24,+2,116,100,105,224,232,3,96,15,224,52,26,2,111,117,116,224,53,5,32,+16,224,54,26,35,44,224,54,5,32,16,224,54,23,2,103,101,116,2,65,+114,103,2,82,101,102,224,57,2,224,19,0,225,146,24,2,101,114,102,2,+111,114,109,2,73,79,34,225,150,2,192,19,224,60,23,2,99,97,116,226,+209,1,192,15,254,84,21,240,74,4,128,13,234,70,22,2,119,67,65,149,+186,2,76,101,110,234,81,1,224,21,3,224,64,20,2,112,101,101,2,107,+67,65,128,43,192,62,224,19,3,224,60,32,224,126,2,224,22,6,254,161,+21,2,111,73,110,226,10,0,96,12,224,46,22,2,80,116,114,224,46,1,+32,12,224,46,22,2,68,98,108,224,46,1,32,12,224,207,21,231,121,1,+32,10,224,42,21,2,110,117,108,224,89,0,96,12,224,46,21,2,99,97,+115,224,230,0,96,12,224,46,21,232,166,0,2,112,43,32,224,40,20,232,+166,0,2,112,45,32,224,40,19,2,65,46,97,2,108,108,111,2,99,34,+32,175,176,128,14,224,50,22,2,115,105,122,228,23,0,128,13,224,48,22,+231,95,3,128,13,224,48,22,2,119,114,105,2,116,101,34,224,49,0,96,+14,224,50,22,225,163,1,64,11,255,239,12,224,1,175,82,39,156,144,82,+215,2,48,32,58,146,221,32,15,2,73,32,58,96,17,155,142,216,4,220,+61,221,59,119,10,253,55,19,102,81,122,12,250,99,6,188,15,253,68,14,+88,206,253,68,4,61,64,133,18,64,28,250,30,0,224,73,3,253,193,60,+64,93,152,202,224,122,4,192,120,151,228,90,89,2,53,32,95,2,49,51,+53,115,129,2,49,52,48,92,127,2,52,56,54,213,4,120,124,64,47,214,+222,148,32,2,53,57,32,245,234,3,151,213,211,135,215,174,128,56,179,245,+224,104,6,2,53,48,50,224,96,6,147,227,215,33,145,32,224,89,5,181,+25,64,74,237,219,3,64,7,64,64,129,252,186,176,187,112,145,187,65,37,+186,185,2,50,57,32,248,91,3,224,37,3,89,127,249,117,0,116,18,249,+168,9,96,62,152,102,185,244,2,51,53,49,249,251,8,89,199,245,255,5,+152,199,121,42,224,40,1,64,38,216,204,224,140,7,157,75,32,213,186,46,+65,83,54,238,96,114,160,155,128,255,244,254,1,117,233,248,70,1,224,108,+6,146,117,129,191,126,200,128,68,53,166,214,20,250,191,9,193,194,131,70,+254,140,1,224,92,6,64,199,127,55,220,103,254,143,5,224,213,0,64,39,+246,19,3,156,234,247,26,3,254,166,4,160,30,247,69,5,224,26,4,216,+214,247,101,5,224,31,3,224,64,6,249,131,4,224,2,6,224,74,5,224,+159,8,192,90,224,81,10,248,27,0,224,40,8,249,232,2,225,23,9,192,+1,224,78,9,224,196,3,224,132,7,228,249,10,224,209,15,224,49,17,250,+21,0,224,175,8,225,14,18,224,56,31,224,114,15,224,61,6,220,3,129,+4,216,236,97,73,224,6,23,224,41,10,2,95,52,51,56,61,98,218,36,+188,2,95,57,57,64,9,2,57,55,32,2,35,52,32,230,54,21,225,39,+8,224,143,0,224,136,26,224,157,17,224,143,16,250,84,5,224,143,42,225,+38,33,225,31,28,250,18,3,225,177,21,225,31,49,225,175,35,251,242,9,+224,143,73,225,31,35,255,124,9,226,63,80,225,38,3,224,143,16,255,176,+7,228,93,13,199,5,32,6,224,2,6,225,126,23,2,50,55,32,224,238,+80,226,7,36,230,136,7,224,230,31,224,94,30,230,171,5,224,228,59,224,+221,36,228,150,19,224,126,38,228,16,17,224,126,17,226,213,19,229,210,8,+197,169,225,119,12,227,83,43,2,50,49,32,227,222,81,224,244,17,224,117,+17,230,191,6,224,240,9,32,1,231,200,1,224,18,19,225,46,22,225,18,+17,227,118,9,224,249,2,64,61,74,115,105,62,42,205,2,50,48,54,42,+6,130,67,2,35,51,50,202,228,61,193,224,21,0,227,200,7,235,88,12,+96,237,234,147,8,255,123,1,128,40,225,237,3,234,192,16,224,44,2,234,+129,16,138,163,171,50,224,152,1,161,184,32,192,2,55,54,32,224,179,3,+2,95,49,55,228,5,7,225,104,1,234,86,16,226,193,9,224,63,12,43,+97,32,64,2,52,56,32,129,143,64,71,2,48,57,32,2,35,57,49,233,+176,18,224,115,18,227,50,15,161,103,224,134,4,192,78,2,83,32,95,66,+15,2,49,52,52,65,177,108,79,224,117,5,228,3,9,224,49,5,225,46,+3,224,45,2,224,41,10,226,12,1,138,112,32,251,224,30,3,230,85,13,+225,127,4,2,73,32,64,225,232,7,236,205,18,140,207,224,31,3,174,58,+224,37,0,160,15,2,51,48,55,237,105,0,2,51,52,57,237,82,2,238,+251,10,2,92,56,38,2,32,92,56,2,38,34,32,224,169,7,2,82,32,+75,235,144,7,226,124,7,2,80,32,75,239,156,6,192,209,224,217,1,224,+9,9,224,233,23,109,167,130,190,160,4,208,94,141,172,241,97,7,227,77,+1,225,32,8,227,31,12,109,180,2,39,32,85,237,231,2,224,96,9,224,+206,13,227,241,7,235,182,0,225,161,2,238,23,2,98,207,32,84,131,253,+224,8,0,224,44,0,235,178,6,2,90,32,64,228,163,3,228,23,18,238,+49,14,35,107,164,185,226,193,4,224,75,7,65,98,64,119,97,45,47,13,+133,51,225,37,0,234,47,14,2,85,32,95,2,53,53,32,239,125,5,228,+251,3,161,86,228,161,6,2,85,32,35,224,78,5,160,38,131,85,228,159,+9,224,87,9,225,21,1,240,135,1,224,97,18,229,91,32,225,67,34,229,+128,25,225,74,27,238,227,11,192,146,33,8,131,169,234,140,2,64,108,64,+91,160,118,2,53,50,32,226,172,21,194,118,225,99,0,146,52,227,78,1,+168,215,226,174,2,192,33,225,133,3,228,148,3,224,80,4,161,3,128,146,+224,85,19,2,67,32,80,243,75,1,224,89,19,227,173,10,226,247,17,224,+113,1,209,195,225,1,0,228,13,8,224,66,14,209,172,229,87,7,229,53,+4,195,229,161,144,227,204,0,225,222,10,224,8,4,229,90,34,64,79,2,+82,32,64,226,214,20,232,53,5,225,136,0,227,48,8,129,84,226,200,13,+235,145,2,242,95,25,100,42,64,36,225,144,3,132,221,129,206,103,0,130,+123,128,144,36,17,243,211,1,66,221,231,34,0,82,222,225,18,2,225,159,+1,160,40,2,67,32,83,240,156,0,133,37,64,120,2,50,50,32,229,37,+4,102,113,224,78,0,97,20,2,52,50,57,226,90,0,90,239,192,89,192,+136,224,9,3,226,112,1,98,17,96,184,32,102,179,241,2,50,53,50,128,+47,2,50,56,50,246,248,11,66,97,117,100,33,68,161,39,32,21,65,146,+64,21,232,180,3,66,54,226,115,7,66,63,116,21,64,215,2,56,56,32,+2,95,50,49,234,81,11,193,125,32,132,226,55,2,60,13,2,82,97,119,+2,32,102,97,2,105,108,101,248,190,0,244,76,7,64,140,150,233,2,94,+71,69,2,84,82,65,2,87,32,58,128,139,151,173,37,170,64,15,150,146,+2,94,102,108,2,117,115,104,2,98,32,58,96,23,160,214,32,76,224,214,+1,150,81,33,150,225,191,20,68,165,64,20,98,57,65,53,232,242,4,68,+238,226,78,1,33,17,66,54,225,166,3,2,90,32,67,34,53,130,192,245,+207,9,129,184,64,140,150,182,2,95,52,55,96,13,184,128,65,113,33,96,+65,43,118,231,2,85,32,90,96,80,224,25,2,96,85,32,53,72,152,215,+85,160,145,64,110,128,9,2,75,32,95,97,71,128,75,2,49,48,53,225,+252,11,67,212,247,154,1,32,84,133,149,64,9,66,127,64,33,130,30,121,+7,64,19,224,45,2,161,234,248,109,16,2,69,114,114,2,111,114,58,248,+113,2,64,66,248,180,1,98,69,160,233,76,208,2,50,55,55,86,91,226,+164,1,171,51,225,12,3,198,134,129,97,230,249,3,161,24,225,14,7,86,+171,128,160,2,50,57,49,224,157,4,2,46,104,115,228,176,7,165,15,225,+103,2,229,54,2,192,82,229,73,4,192,37,74,49,2,53,52,54,128,113,+224,193,1,97,158,225,133,1,66,106,2,48,48,32,135,204,136,154,160,200,+224,197,10,121,71,2,95,56,32,231,65,1,224,71,3,2,50,57,57,250,+205,19,66,28,152,208,224,211,2,226,134,1,32,172,2,49,50,32,249,131,+1,128,139,247,118,11,2,51,49,51,238,8,29,224,96,1,229,90,5,56,+36,248,206,7,192,1,135,96,237,39,17,224,123,5,99,105,240,57,2,200,+166,235,10,9,231,116,0,216,177,228,155,9,2,49,57,50,228,150,3,231,+51,5,240,98,0,129,152,226,221,14,2,99,111,109,2,98,105,110,2,97,+116,111,2,114,32,99,2,111,110,118,2,101,114,115,2,105,111,110,226,236,+2,226,78,0,198,73,128,77,2,53,49,49,245,56,1,160,96,68,89,237,+101,0,70,249,35,8,225,223,4,224,117,1,2,109,115,34,240,131,12,160,+239,235,1,10,249,185,2,225,7,16,225,57,1,225,3,6,224,255,28,2,+115,58,92,2,49,48,38,229,191,2,2,53,52,48,225,242,10,250,35,7,+129,30,135,114,251,246,1,192,1,2,89,32,66,173,118,226,160,5,161,84,+168,28,64,221,122,222,34,242,242,151,15,67,14,188,177,100,227,2,50,52,+32,128,48,64,7,64,28,134,41,2,83,32,67,102,23,71,75,128,118,204,+220,101,80,192,48,224,9,3,128,11,128,209,188,73,64,25,250,239,0,249,+13,3,248,221,3,128,88,102,53,168,38,128,37,102,99,2,50,48,51,235,+51,1,155,112,101,166,192,111,241,155,0,235,172,2,64,134,130,100,237,192,+1,138,118,96,64,224,167,3,68,114,192,88,193,29,189,62,237,226,0,66,+165,103,236,250,133,0,72,240,128,23,129,101,161,135,169,169,160,46,96,148,+232,240,0,192,44,233,2,1,64,17,178,132,2,49,53,51,197,37,238,114,+2,249,219,2,139,94,224,89,3,224,53,5,163,76,192,222,198,244,228,224,+2,2,52,49,32,225,51,5,64,233,253,231,0,64,206,137,231,192,210,64,+93,128,77,197,53,224,137,15,224,41,1,64,102,128,120,64,92,135,75,225,+52,19,224,224,0,128,80,194,177,251,173,1,250,215,12,64,42,239,80,3,+204,164,238,91,0,236,161,1,175,137,32,241,232,14,0,97,114,255,243,2,+2,53,57,49,96,32,228,95,3,234,173,0,64,218,243,251,5,64,17,168,+10,64,234,67,69,160,65,2,51,56,32,96,22,64,30,96,22,75,104,73,+153,2,79,32,35,100,205,201,77,64,35,135,246,64,53,34,226,224,41,0,+228,77,1,2,67,39,34,227,176,3,64,132,225,75,45,225,30,1,224,27,+1,236,94,3,224,232,2,247,71,5,224,214,0,128,73,64,132,164,53,224,+216,3,42,212,224,216,5,202,102,224,216,15,2,83,39,34,224,216,4,196,+31,228,90,2,224,125,0,128,33,131,141,224,250,17,247,226,10,140,147,226,+6,10,236,98,3,214,3,226,202,1,66,6,226,29,1,224,231,4,2,55,+57,32,238,110,5,130,9,192,163,227,71,6,196,191,224,163,0,247,135,3,+226,202,7,193,169,224,199,8,224,191,1,226,205,14,242,111,6,226,229,12,+226,218,3,245,6,6,224,95,18,231,45,6,225,62,6,227,252,3,225,11,+1,172,82,65,19,197,61,228,230,4,130,80,227,21,4,68,53,225,84,5,+68,253,64,68,195,90,226,106,3,64,96,226,106,2,64,214,130,106,2,49,+54,32,224,31,5,64,29,163,97,225,196,4,226,172,6,69,6,128,35,77,+234,2,53,50,53,160,22,226,231,10,108,163,224,58,3,130,231,109,56,161,+195,207,144,97,97,161,102,226,181,3,226,109,10,161,165,224,44,20,225,114,+7,224,44,19,225,255,8,224,89,30,208,239,224,89,27,160,9,224,44,20,+237,148,0,160,89,230,96,15,110,75,234,200,0,229,182,11,241,19,0,227,+162,2,236,79,1,229,57,13,2,66,34,32,228,200,5,226,68,3,64,60,+227,199,6,224,68,10,2,66,39,34,224,67,18,226,11,3,224,31,10,2,+57,48,32,224,31,20,120,156,228,75,8,105,134,224,9,3,66,101,133,29,+226,226,1,228,133,1,64,29,229,25,13,164,124,105,189,64,21,207,131,192,+113,224,9,1,244,106,5,230,64,2,2,67,32,61,2,61,32,64,34,245,+224,40,16,240,3,1,240,50,6,227,43,7,232,204,1,224,154,16,251,150,+3,98,83,139,5,64,28,224,181,11,224,138,1,247,254,2,224,183,25,160,+44,64,89,224,55,8,249,191,3,242,70,2,232,132,3,154,7,242,151,5,+242,222,4,224,41,20,33,21,102,218,225,21,3,167,151,160,184,224,45,7,+64,9,224,45,3,132,164,226,170,10,2,75,52,34,250,106,7,224,42,16,+2,51,34,32,224,42,31,2,50,34,32,254,214,17,225,140,1,225,230,5,+234,121,0,66,157,177,191,98,187,232,216,9,64,33,134,41,226,221,0,233,+36,2,64,29,211,135,192,29,230,44,1,32,29,68,88,224,29,3,229,218,+2,64,29,233,94,0,160,29,226,145,1,64,29,133,246,156,182,77,83,82,+113,96,204,34,196,160,10,224,12,6,240,26,2,88,165,226,104,6,224,39,+1,186,117,244,187,4,192,117,134,85,224,115,0,32,17,228,220,1,131,241,+64,114,224,22,0,146,177,192,13,64,64,134,114,2,79,32,58,128,48,32,+11,2,75,32,58,128,33,240,219,18,140,25,2,57,51,32,192,107,133,191,+240,234,7,239,50,0,240,63,9,239,50,28,246,79,3,239,50,31,2,116,+111,116,2,97,108,32,2,105,109,112,2,111,114,116,2,32,116,105,2,109,+101,32,64,0,226,120,1,240,45,1,240,41,6,240,35,7,240,15,21,239,+108,9,246,221,5,160,10,210,215,2,56,49,32,128,99,2,50,53,55,224,+210,5,74,221,32,4,248,65,1,179,8,64,139,224,44,8,2,50,56,51,+178,154,63,10,252,89,9,226,23,1,131,39,219,174,247,102,0,248,138,8,+241,6,3,248,126,0,218,179,169,55,32,229,203,78,244,43,3,53,252,224,+134,4,234,142,5,160,10,32,33,136,52,224,61,11,2,51,48,50,251,23,+7,243,163,6,192,85,207,98,129,117,66,43,2,49,57,55,196,29,2,51,+48,54,239,209,1,244,76,3,243,215,1,226,47,18,2,114,101,99,2,117,+114,115,2,105,118,101,2,32,109,111,2,100,117,108,2,101,58,32,242,94,+5,224,60,0,96,181,128,116,224,78,18,2,44,32,105,130,122,2,99,104,+97,2,105,110,58,224,76,2,120,45,112,229,97,220,225,219,1,252,30,8,+245,109,13,185,192,161,211,2,51,49,49,225,196,2,112,193,193,78,226,13,+1,161,60,225,82,6,227,122,11,193,78,227,123,18,213,155,227,138,33,129,+9,2,105,110,103,225,5,2,224,247,6,160,161,246,13,4,35,149,123,61,+231,102,4,167,94,236,233,3,222,237,253,125,8,224,73,0,228,131,3,244,+169,9,224,243,19,243,81,2,246,151,5,224,22,4,244,197,1,243,127,1,+225,11,24,2,100,111,110,2,101,32,34,244,90,13,226,104,7,226,187,22,+2,44,32,34,225,75,9,245,10,5,228,211,5,252,119,4,224,92,22,2,+109,115,32,2,40,34,32,227,10,15,224,88,6,224,71,18,2,32,43,32,+229,125,11,224,65,5,39,79,114,75,231,250,7,245,132,9,246,149,1,138,+157,224,6,6,226,237,10,228,64,23,238,143,5,107,104,98,20,2,50,52,+56,228,87,1,56,12,2,48,32,102,224,212,0,2,73,110,116,2,101,114,+97,2,99,116,105,2,118,101,34,255,133,7,227,44,45,2,108,111,97,2,+100,101,100,227,41,17,226,235,8,249,182,9,247,193,8,231,122,5,249,110,+9,35,104,239,210,2,230,82,4,227,82,1,227,81,18,214,81,254,210,8,+226,105,8,225,209,29,228,170,123,2,99,97,99,2,104,101,100,225,135,19,+225,20,6,73,122,90,68,32,104,96,238,2,95,57,55,228,73,7,135,70,+138,123,233,243,3,62,243,2,50,50,51,225,113,4,64,213,167,228,242,118,+1,127,168,233,250,6,65,173,252,39,2,59,130,139,68,232,150,5,2,80,+32,95,252,149,3,64,55,220,28,226,66,5,94,152,250,11,3,229,114,7,+251,176,11,219,255,2,51,52,50,224,195,4,218,115,245,97,0,183,64,224,+66,2,224,62,0,32,60,250,128,5,250,254,10,67,218,225,31,1,244,100,+4,243,144,3,160,6,174,181,232,75,44,224,171,1,100,13,71,178,109,192,+33,26,227,40,0,228,22,4,232,112,42,136,102,2,32,110,97,42,154,2,+100,111,101,2,115,32,110,2,111,116,32,2,97,103,114,2,101,101,32,2,+119,105,116,2,104,32,102,63,168,96,29,232,137,44,37,72,96,33,229,72,+1,228,71,14,244,27,2,153,60,244,44,3,161,252,226,32,19,228,110,13,+187,31,226,55,21,33,42,42,117,2,49,57,54,129,255,226,158,1,97,111,+105,204,241,236,1,227,73,7,252,198,3,252,224,7,224,29,9,226,230,23,+225,17,13,226,123,15,224,27,1,224,249,13,226,136,8,228,207,45,255,157,+4,228,207,45,2,116,121,112,2,101,32,99,2,104,101,99,2,107,101,100,+252,57,6,231,130,2,2,51,52,55,76,123,128,77,224,60,1,2,45,45,+45,2,45,45,92,224,52,4,224,1,9,238,26,0,224,2,2,225,27,1,+225,137,9,233,230,6,192,202,230,152,6,173,18,254,214,0,248,62,5,225,+227,15,226,3,7,224,33,9,226,3,31,234,45,2,226,208,15,225,210,44,+253,252,8,225,210,41,2,100,101,115,2,117,103,97,2,114,101,100,254,9,+7,129,197,254,14,6,225,14,22,231,213,9,228,21,8,225,206,1,192,53,+248,76,8,224,51,28,235,166,9,229,197,1,252,230,6,160,100,232,86,1,+250,74,1,252,106,2,34,175,231,54,2,255,206,15,224,21,13,32,71,33,+89,232,150,10,2,95,55,53,225,13,3,255,3,0,47,131,255,5,1,2,+95,54,55,133,125,239,157,6,86,178,77,117,2,90,32,90,234,193,12,255,+103,15,2,90,32,64,96,243,64,7,224,9,5,103,241,225,202,14,224,77,+13,175,126,228,187,0,242,79,1,224,71,1,245,112,3,224,97,13,2,85,+32,75,2,32,65,32,224,17,5,224,211,7,130,64,2,50,54,49,209,54,+116,232,167,40,40,96,224,85,7,72,116,185,20,32,37,47,247,2,49,51,+53,101,250,32,7,70,7,2,53,48,50,160,57,242,79,0,104,178,64,55,+185,53,89,74,2,51,53,53,128,52,2,55,52,32,32,5,118,240,64,158,+243,60,5,216,127,2,48,52,53,96,72,224,43,3,227,75,1,2,101,111,+102,227,64,1,41,133,2,49,56,55,224,150,2,233,48,2,128,133,147,36,+99,251,70,158,160,138,235,72,3,70,182,238,7,6,72,38,245,247,4,194,+248,237,167,0,188,152,64,9,106,56,32,168,228,85,0,39,200,237,13,5,+64,135,183,185,225,13,3,2,52,48,57,96,231,229,85,5,224,206,2,210,+118,72,180,236,194,4,2,77,97,105,2,110,34,32,128,32,2,79,32,95,+128,198,106,70,224,40,6,2,109,97,105,224,40,0,224,147,3,64,145,148,+38,133,19,225,161,1,53,86,232,239,7,192,64,225,202,5,2,54,57,32,+97,15,224,21,2,165,3,98,25,226,45,5,2,57,56,32,226,58,2,2,+55,48,32,2,35,52,48,193,64,35,151,65,11,174,88,96,27,230,58,1,+192,17,239,172,3,225,35,6,35,234,65,112,64,41,251,207,3,229,242,3,+224,222,14,2,119,104,101,2,114,101,34,227,30,7,225,162,17,240,66,7,+225,170,6,225,174,1,227,66,7,214,250,161,26,224,5,51,225,71,3,224,+11,2,97,95,116,28,38,31,2,53,50,32,225,116,9,224,249,4,2,100,+97,116,2,97,34,32,192,178,2,52,51,52,225,110,1,96,102,224,58,5,+34,82,87,112,239,228,3,64,21,65,88,2,52,52,50,224,35,3,2,49,+50,52,248,167,7,227,159,4,227,84,2,64,59,196,52,224,213,28,160,7,+224,213,18,2,110,101,119,73,60,224,216,13,224,210,27,225,80,16,34,19,+96,186,192,192,64,90,183,235,226,46,4,98,167,234,60,0,227,22,3,131,+163,60,42,64,5,96,11,164,217,201,215,120,35,182,206,2,55,52,57,213,+210,245,217,1,243,99,1,226,119,10,225,81,5,225,71,21,64,184,225,71,+20,225,68,52,2,52,51,49,225,252,3,224,121,1,2,54,55,48,32,229,+253,183,0,2,52,57,51,224,171,26,160,105,230,122,5,130,121,89,64,228,+49,8,227,39,0,229,6,4,2,58,58,34,226,183,2,96,181,2,56,55,+53,253,60,1,225,65,2,224,189,0,224,137,5,149,194,225,53,20,144,135,+225,55,2,32,43,228,198,2,226,226,28,130,70,224,100,4,224,12,17,224,+126,5,2,102,111,114,2,101,105,103,229,237,0,224,157,21,224,31,9,2,+99,99,97,2,108,108,34,225,9,3,48,109,32,5,101,230,224,19,0,186,+152,226,8,10,225,108,13,226,12,5,224,247,15,2,52,57,57,224,31,18,+113,162,229,4,4,104,24,160,59,2,48,51,49,224,237,11,2,110,102,105,+2,120,108,34,224,186,3,225,204,3,57,183,224,51,14,2,114,34,32,226,+14,4,224,105,4,224,53,16,237,108,5,64,34,96,172,99,225,229,116,2,+2,105,103,105,161,129,232,250,7,205,52,201,24,2,75,32,66,126,51,68,+74,148,220,2,54,50,32,36,22,242,173,19,42,21,224,36,0,224,38,8,+235,72,5,164,196,102,39,224,42,3,224,1,9,227,109,0,93,190,231,159,+10,226,218,19,226,230,17,230,159,24,2,99,108,97,2,115,115,34,226,70,+2,197,43,228,142,1,230,170,19,230,134,5,192,195,226,94,20,76,110,226,+223,0,224,157,8,2,52,50,48,224,38,12,232,178,13,230,241,17,32,13,+32,5,232,33,2,225,37,18,2,51,56,32,228,113,23,2,110,115,116,2,+97,110,99,229,171,4,228,190,1,224,108,11,224,96,5,230,8,24,2,100,+101,102,2,97,117,108,228,211,2,2,51,56,49,100,26,97,5,195,121,226,+18,8,224,216,21,2,53,48,48,230,128,38,239,240,0,228,119,34,209,136,+73,126,253,4,1,2,80,32,35,193,143,65,247,64,28,213,218,96,28,193,+43,128,28,100,151,137,184,226,226,38,2,50,54,48,226,162,2,228,69,2,+198,208,224,238,4,2,113,117,97,2,108,105,102,2,105,101,100,228,176,3,+226,68,3,103,178,228,92,1,205,40,133,162,225,71,18,2,97,115,34,226,+166,2,229,201,4,96,58,227,17,18,2,57,55,48,232,170,8,224,201,25,+2,104,105,100,55,136,224,198,29,98,74,171,253,113,116,226,74,13,65,134,+150,247,230,4,5,230,64,5,142,192,232,39,6,224,13,19,2,56,57,32,+236,139,7,130,82,234,147,0,236,119,6,224,113,7,166,12,96,71,224,31,+11,164,56,172,58,64,197,143,72,80,104,143,200,64,19,143,36,87,250,80,+62,224,23,1,206,182,144,102,224,27,5,238,74,11,50,170,2,75,50,32,+129,148,134,66,70,64,158,78,142,180,255,224,0,241,171,0,144,112,209,177,+246,59,0,224,37,3,102,163,149,71,248,35,13,240,183,0,248,56,5,145,+11,224,84,3,242,26,1,250,55,6,128,22,183,209,234,216,5,64,36,64,+30,239,81,9,240,215,1,241,181,9,224,17,3,248,20,0,75,97,238,168,+3,247,232,0,177,72,128,13,238,166,9,191,185,224,34,1,65,105,240,19,+2,250,254,1,165,103,39,133,75,201,248,100,3,177,178,235,224,2,235,214,+2,254,179,8,235,221,9,180,216,129,40,114,203,96,180,146,202,2,50,56,+50,231,182,10,66,38,143,223,238,208,7,39,9,128,108,154,202,238,241,9,+32,91,235,218,13,225,189,2,255,196,5,255,192,3,225,96,2,241,79,2,+236,246,14,65,45,129,65,225,14,4,225,8,29,2,95,54,48,224,249,5,+64,243,143,104,177,162,100,83,228,199,13,232,10,19,140,88,130,1,64,53,+2,52,57,48,247,128,6,224,150,2,96,167,224,64,0,147,208,130,22,161,+174,255,212,1,228,248,3,224,95,13,230,91,27,224,92,4,32,9,67,25,+227,31,7,71,245,169,218,225,218,4,2,49,57,32,238,157,14,225,162,14,+116,44,105,172,2,54,56,54,238,126,19,224,113,1,65,133,135,111,240,214,+34,224,165,5,64,88,225,194,2,97,115,225,0,1,64,140,171,137,238,141,+12,233,249,5,225,92,1,226,81,8,2,95,53,48,224,194,1,225,110,15,+32,135,98,21,128,43,130,229,96,124,224,60,1,230,4,1,79,128,103,33,+231,53,7,230,36,0,138,75,192,23,230,48,4,120,133,243,55,35,139,151,+245,89,0,243,55,23,239,141,7,64,194,106,97,126,142,224,123,28,164,59,+224,123,30,239,223,0,234,14,21,2,48,49,52,224,234,23,2,52,55,49,+224,70,1,224,163,17,203,164,193,243,225,3,24,32,123,32,149,167,51,224,+129,11,41,199,226,71,8,224,67,13,208,213,224,67,9,219,16,224,66,2,+67,35,138,118,225,115,25,46,172,233,178,0,227,47,12,225,87,14,134,34,+228,204,1,2,57,55,52,226,153,11,253,193,0,227,112,20,2,56,53,49,+241,254,32,228,40,0,227,112,9,32,28,234,1,3,239,92,3,2,52,56,+56,235,210,10,2,46,46,34,226,67,5,226,105,13,49,157,193,87,67,105,+33,87,153,9,64,15,138,58,233,96,8,64,136,97,127,2,52,56,53,96,+15,184,173,33,48,112,246,101,42,64,29,64,108,64,31,137,144,238,116,19,+97,74,225,8,1,227,220,4,171,44,2,52,56,51,225,40,2,64,11,64,+90,169,207,229,40,22,2,52,55,50,163,12,226,16,0,2,55,56,32,192,+9,228,128,0,2,56,48,32,192,9,64,47,64,95,215,232,227,129,16,132,+7,235,87,9,182,71,2,52,56,49,225,177,9,247,80,12,2,100,111,34,+243,79,7,119,64,2,52,54,48,225,120,0,247,11,0,241,35,12,2,81,+117,97,2,108,68,111,241,36,13,160,217,241,36,0,253,221,0,58,5,233,+214,4,251,147,9,128,70,137,130,149,85,253,164,10,224,188,2,224,79,1,+201,221,233,245,1,38,126,97,67,2,51,48,57,224,71,2,66,0,64,22,+252,67,11,232,161,2,65,74,238,81,20,229,162,3,164,207,240,1,19,251,+11,0,227,121,3,239,91,21,2,104,101,110,224,52,40,2,101,108,115,239,+144,3,160,52,64,207,228,199,0,224,195,14,239,236,25,2,108,101,116,224,+90,2,130,47,235,118,2,241,1,22,224,149,12,67,14,224,149,20,99,123,+242,129,21,2,97,115,101,225,38,40,252,154,1,224,201,0,50,48,225,252,+0,67,175,224,150,18,170,126,211,157,171,138,134,213,128,63,132,180,236,203,+7,64,41,66,130,235,201,8,145,255,193,74,235,84,12,33,160,196,146,64,+96,133,5,138,229,102,11,237,21,9,251,65,19,128,245,243,4,16,64,97,+133,71,230,109,2,141,133,224,9,0,225,25,18,243,233,33,132,111,240,79,+13,75,145,224,73,2,225,221,5,235,208,8,156,91,2,80,32,95,160,194,+192,105,224,69,20,64,231,229,212,0,226,129,13,2,56,52,54,224,211,16,+110,97,224,210,2,148,115,232,128,4,232,247,13,227,0,2,165,243,226,15,+5,68,249,226,36,6,172,130,233,96,0,253,1,10,242,99,9,247,238,28,+240,102,0,253,45,16,54,222,90,16,150,212,242,27,2,114,41,32,131,127,+188,229,60,3,71,1,224,213,9,64,252,224,180,5,232,235,14,235,133,0,+224,228,7,233,27,23,253,245,24,198,96,143,23,70,27,104,63,70,55,96,+195,66,145,212,90,145,147,224,229,1,172,80,224,232,5,237,65,40,231,188,+10,108,160,242,129,1,224,28,12,242,190,3,236,151,69,98,139,236,151,42,+172,148,236,139,33,2,52,54,51,236,117,42,2,52,54,52,236,117,24,233,+172,2,224,141,5,2,52,54,53,224,202,16,224,112,17,225,57,24,2,52,+54,55,224,112,15,166,175,236,207,23,130,101,225,172,35,132,91,226,233,0,+238,54,27,2,54,51,57,82,118,165,231,2,53,53,55,231,23,25,2,112,+114,105,2,109,105,116,2,105,118,101,228,42,2,252,88,0,66,239,232,69,+0,234,20,12,2,115,116,114,246,85,0,234,20,7,162,6,251,57,2,201,+171,224,93,0,64,105,115,9,55,224,173,14,76,7,64,25,167,144,228,80,+4,96,124,241,37,35,38,11,2,50,52,56,243,243,1,2,95,50,57,236,+16,9,241,58,12,64,130,135,211,184,127,2,49,49,32,248,128,4,66,52,+228,8,2,204,150,232,214,15,138,152,33,195,247,175,10,234,169,4,231,52,+6,227,164,6,64,120,214,128,128,150,198,123,192,150,246,130,11,99,241,231,+216,2,224,10,24,245,113,13,224,135,0,230,136,7,166,221,133,99,192,67,+224,15,25,150,130,238,208,5,229,208,0,208,251,244,91,0,143,55,207,63,+227,36,3,224,169,16,232,63,5,224,110,13,67,99,251,109,11,238,237,14,+224,82,13,225,204,1,192,82,239,51,25,233,244,12,224,250,4,244,68,15,+244,242,4,243,126,5,162,133,233,143,62,224,95,8,32,46,240,110,14,225,+43,28,225,40,5,64,77,190,186,225,38,20,225,36,6,225,32,0,225,22,+9,66,255,215,91,35,27,132,108,196,80,136,161,163,54,198,63,195,53,231,+213,12,239,148,15,2,53,52,32,230,8,10,195,12,235,192,1,224,254,0,+224,63,6,101,95,237,120,51,224,145,9,227,136,5,64,209,229,183,0,224,+203,21,112,158,224,203,9,187,244,248,107,14,224,217,3,158,197,32,113,64,+159,224,113,2,228,252,3,73,76,2,54,48,49,243,109,0,232,22,0,255,+96,15,98,136,224,149,8,102,33,234,228,17,234,232,5,64,145,230,67,11,+96,7,230,67,35,64,51,233,167,0,230,36,8,65,41,225,103,3,224,155,+4,2,60,45,34,227,110,2,97,75,2,56,53,57,236,67,3,64,65,242,+223,0,34,87,64,15,210,207,178,239,200,64,2,53,51,32,128,47,242,148,+5,242,239,47,2,53,48,32,248,32,5,64,90,236,155,11,108,221,236,155,+13,236,248,0,197,217,250,103,6,250,99,21,155,250,2,49,56,57,235,150,+1,225,109,3,236,241,147,129,45,132,81,40,246,236,93,0,2,67,32,60,+232,249,1,2,83,32,83,224,22,6,198,246,233,37,4,169,164,182,235,105,+38,225,3,2,224,48,10,224,47,6,2,90,32,95,224,47,6,115,118,250,+22,1,64,170,164,223,225,76,4,108,84,227,9,12,97,34,225,182,15,233,+230,7,167,106,161,51,64,191,2,85,32,83,224,250,7,131,241,224,56,5,+164,5,224,56,2,255,36,1,224,246,17,224,45,15,244,220,5,226,135,5,+65,1,229,15,6,214,212,236,203,23,252,112,1,249,138,0,224,23,2,96,+90,67,89,230,89,1,199,66,166,89,72,8,160,28,96,30,238,184,5,159,+208,156,50,64,44,202,113,73,216,128,72,166,189,64,234,96,190,232,235,10,+229,137,0,96,50,64,44,177,201,191,221,189,106,231,207,0,132,236,175,94,+161,132,235,152,0,128,35,189,159,108,218,161,69,64,87,228,121,19,246,109,+5,2,101,114,105,2,118,105,110,172,24,246,193,1,93,96,217,46,131,159,+238,135,11,253,181,3,185,45,235,54,1,227,213,2,242,201,15,54,75,230,+251,15,245,219,26,2,49,49,53,177,180,195,154,32,116,224,126,1,224,19,+0,173,137,224,95,29,224,107,13,106,62,158,151,158,60,162,188,165,155,100,+255,2,51,48,48,234,12,22,224,169,15,229,80,0,108,123,224,19,3,65,+35,177,176,255,132,13,225,14,2,128,127,229,242,0,160,65,224,36,6,2,+50,57,57,251,36,24,227,106,5,240,87,3,32,179,68,84,2,32,89,32,+128,243,2,80,32,75,230,34,2,193,31,203,247,2,67,32,80,227,240,10,+187,130,244,163,18,224,127,5,170,253,200,82,226,131,4,232,98,24,239,164,+2,250,245,20,228,34,1,248,91,11,246,94,8,2,51,56,32,226,228,3,+64,55,247,195,21,224,55,8,2,50,55,32,96,55,65,165,238,156,3,225,+108,1,167,254,252,255,3,227,72,7,165,98,64,70,247,21,0,174,227,163,+177,131,197,162,86,64,39,169,4,230,94,4,2,49,50,32,233,104,39,2,+51,56,55,233,104,16,64,109,227,212,3,225,205,5,228,93,2,194,168,254,+152,1,228,79,20,2,50,56,32,243,102,1,233,231,10,228,87,2,67,91,+235,83,24,161,147,32,29,194,16,128,142,242,177,2,228,23,24,130,246,130,+230,227,247,15,224,83,1,193,107,224,19,3,64,173,229,173,5,225,4,4,+2,56,52,49,212,107,2,95,53,52,236,176,2,222,147,193,75,247,34,15,+130,8,224,46,1,233,147,32,242,0,1,64,162,197,168,65,173,64,15,246,+69,11,100,219,234,8,7,2,51,48,32,229,33,0,233,208,16,245,242,5,+32,181,129,27,245,230,1,64,114,195,153,171,109,2,50,50,32,130,10,64,+50,64,31,195,129,66,40,32,15,64,23,233,73,9,224,162,10,161,247,96,+26,247,190,152,67,4,246,213,20,246,189,129,232,53,16,245,30,25,182,192,+96,9,228,13,11,230,167,11,246,222,19,161,147,246,222,9,65,81,133,18,+2,83,32,85,85,145,253,175,3,2,84,117,112,2,108,101,34,237,5,3,+163,233,2,90,32,90,32,153,243,208,0,128,70,228,245,0,245,126,12,2,+108,105,116,2,101,114,97,2,108,34,32,138,42,235,118,15,224,22,7,129,+54,235,198,12,255,194,2,255,91,8,193,184,247,199,3,224,42,22,242,80,+5,2,83,32,67,224,136,5,209,161,224,65,15,2,54,52,48,236,16,23,+224,176,24,2,55,52,49,255,238,11,66,148,235,107,0,235,106,3,64,179,+192,24,128,233,192,24,234,86,6,245,247,4,231,98,2,86,99,225,162,1,+2,45,62,34,227,9,2,239,116,2,224,48,15,2,61,62,34,230,145,8,+64,125,165,27,240,104,12,224,51,3,208,104,2,54,53,56,240,104,5,64,+75,224,65,16,224,166,3,240,170,1,244,49,3,64,65,237,68,7,241,166,+11,237,68,19,112,251,237,68,12,65,70,97,117,150,33,253,190,4,227,197,+1,66,199,171,55,163,58,98,77,96,24,64,17,248,130,8,206,156,239,92,+2,229,15,4,198,11,2,90,32,75,192,254,2,56,55,50,245,163,6,69,+202,232,186,0,224,153,14,234,147,1,64,204,229,78,6,225,31,18,128,32,+237,60,4,2,102,111,114,2,97,108,108,225,142,9,2,55,48,52,232,1,+6,186,35,232,91,3,178,0,64,93,224,41,3,232,208,13,71,90,233,223,+4,161,207,137,223,188,252,64,39,164,133,233,223,53,64,25,167,94,201,232,+233,234,13,64,120,228,244,18,2,76,73,100,2,101,110,116,250,115,13,166,+44,228,20,0,226,41,2,111,9,64,10,36,133,96,183,99,31,68,51,96,+201,32,198,129,70,224,166,0,38,30,2,51,48,54,87,84,225,92,0,231,+98,1,192,98,215,178,162,216,153,231,128,1,2,75,50,32,224,37,1,224,+220,1,233,150,5,235,83,6,169,200,64,39,228,109,0,225,4,12,2,83,+121,109,2,79,112,101,2,114,34,32,225,5,63,128,243,129,189,225,15,4,+225,17,20,253,136,0,225,17,51,228,217,5,2,52,49,48,162,220,182,88,+65,33,225,9,18,2,85,73,100,226,14,55,65,6,107,176,160,244,224,202,+49,133,32,65,48,2,52,48,54,209,78,227,255,3,97,68,110,173,227,192,+1,101,12,247,222,2,202,27,224,23,7,32,96,72,183,32,96,128,86,183,+165,233,126,3,197,95,227,239,3,241,192,1,72,255,128,61,224,64,2,201,+91,228,38,17,64,172,72,203,32,51,240,46,11,130,32,228,4,2,239,250,+6,96,242,228,58,1,224,46,17,238,8,1,234,209,8,224,52,15,122,189,+224,98,13,235,140,5,103,110,224,176,2,97,0,228,184,4,66,53,80,107,+115,52,64,8,226,70,1,224,54,1,72,10,2,90,32,67,130,70,32,115,+44,82,80,15,64,36,122,203,230,221,2,224,15,0,225,214,3,96,46,235,+125,2,224,234,12,129,116,133,115,75,227,99,143,42,71,32,20,134,207,64,+30,133,35,2,75,32,65,160,15,200,181,66,11,162,121,162,124,142,224,128,+15,78,67,64,199,2,80,32,95,58,53,194,203,243,163,0,228,125,0,67,+6,236,16,14,235,196,3,2,51,55,51,250,202,23,2,109,111,100,2,117,+108,101,230,205,2,181,72,236,15,7,2,51,56,48,241,166,11,224,13,19,+152,57,236,38,4,130,204,239,123,1,236,18,20,32,41,198,240,224,147,14,+2,57,53,32,236,234,3,65,24,233,134,7,163,200,180,216,128,133,64,39,+233,108,7,222,16,174,87,64,41,228,212,18,201,142,228,208,23,139,216,73,+19,132,171,77,247,34,99,157,165,47,78,2,95,51,52,224,87,12,232,224,+3,70,9,224,53,11,234,2,9,229,25,3,255,168,1,226,247,2,2,54,+56,32,224,29,29,129,37,97,13,232,88,7,138,85,232,88,75,97,132,232,+88,19,2,81,73,100,230,74,32,193,57,232,73,66,225,52,31,133,142,2,+79,32,102,224,185,0,2,99,97,115,163,98,224,21,4,2,108,97,115,2,+115,34,32,224,22,7,2,100,97,116,2,97,34,32,224,21,8,2,101,102,+97,2,117,108,116,224,24,11,247,203,3,224,25,4,2,111,34,32,224,19,+7,2,101,108,115,224,137,10,234,210,3,224,23,6,2,101,105,103,2,110,+34,32,224,24,7,2,105,102,34,224,19,9,2,109,112,111,2,114,116,34,+224,23,9,224,63,11,2,110,102,105,2,120,34,32,224,22,12,224,135,10,+96,23,169,76,224,23,5,2,115,116,97,2,110,99,101,224,25,9,255,161,+0,224,20,3,228,235,3,224,23,3,2,110,101,119,2,116,121,112,224,24,+10,2,111,102,34,224,19,8,2,112,114,105,2,109,105,116,2,105,118,101,+224,26,9,2,116,104,101,224,235,10,224,90,13,2,119,104,101,2,114,101,+34,229,223,2,224,1,35,66,101,134,127,80,148,2,90,32,85,224,23,2,+134,120,64,21,2,66,32,90,175,29,192,27,234,219,5,238,97,5,2,46,+46,34,238,252,11,134,134,209,222,142,33,241,222,9,64,92,235,16,21,227,+187,42,103,30,234,236,3,227,138,41,134,13,36,3,152,165,238,31,17,216,+189,238,83,7,74,13,231,61,2,224,89,1,134,63,106,73,225,44,7,81,+72,64,142,37,168,229,5,0,136,154,150,56,224,248,8,238,242,0,232,192,+6,235,7,2,230,2,3,234,225,1,239,43,4,224,155,1,240,6,6,103,+209,246,50,0,125,89,96,39,71,85,229,221,57,248,22,20,96,109,64,99,+2,54,32,67,233,141,3,73,180,185,21,64,77,129,221,2,50,49,52,224,+54,0,211,158,130,6,2,57,55,50,224,88,2,255,1,0,176,54,161,177,+41,72,244,41,1,161,65,135,127,64,58,244,166,0,107,176,64,192,129,74,+229,28,4,2,109,112,116,2,121,34,32,227,147,7,246,197,1,192,113,146,+193,66,164,136,246,128,255,252,46,3,118,216,224,25,2,252,65,1,224,173,+1,160,144,226,193,2,2,53,51,32,231,253,5,32,249,193,151,226,159,1,+32,20,200,213,217,226,96,9,130,233,120,224,2,57,54,57,254,44,12,194,+160,64,49,239,197,21,2,81,83,121,238,193,34,231,109,11,238,177,66,227,+238,30,66,187,103,121,41,26,96,81,129,197,96,15,2,49,50,52,224,16,+2,247,197,9,224,19,3,2,60,45,34,224,56,1,2,54,52,32,224,55,+11,197,46,224,19,3,201,189,96,55,2,56,55,53,65,131,224,130,2,233,+173,4,229,244,11,64,194,133,69,98,180,139,63,168,180,143,0,64,33,132,+211,238,185,10,247,158,18,235,109,7,64,71,132,193,198,38,230,44,8,75,+239,228,69,3,98,81,239,246,1,100,85,228,61,8,98,173,212,36,110,190,+224,10,2,130,142,229,45,0,97,253,96,170,2,50,49,51,51,215,248,47,+7,248,120,32,239,164,1,248,112,20,96,126,229,172,1,64,236,225,186,1,+2,40,41,34,224,56,0,224,107,20,236,177,7,224,85,20,2,91,93,34,+224,85,18,248,169,0,248,159,7,240,203,2,65,104,133,66,245,120,20,198,+190,198,184,64,54,133,66,240,138,4,96,20,240,71,15,96,57,225,209,9,+239,153,3,67,183,229,227,4,99,200,36,63,252,255,9,64,79,215,194,229,+60,5,88,99,163,193,65,86,130,120,239,14,19,217,128,239,7,7,192,102,+207,90,226,198,1,226,204,8,68,253,241,89,13,2,55,49,32,225,17,18,+232,63,42,224,99,7,109,244,232,67,7,64,120,242,11,11,230,191,0,64,+124,232,98,21,96,99,232,99,6,193,104,194,174,2,50,54,53,80,159,2,+56,32,75,197,180,165,185,232,146,17,188,11,232,146,8,231,188,4,228,178,+4,34,188,243,255,20,233,249,45,243,240,14,230,9,30,68,172,97,239,103,+138,227,77,0,96,57,2,51,48,57,239,69,5,247,141,6,186,158,135,152,+226,214,10,64,109,97,151,232,23,11,97,152,98,44,64,6,226,231,3,226,+27,1,192,2,64,38,254,48,3,65,24,224,227,4,232,211,6,232,71,0,+232,216,28,224,187,9,227,101,52,67,228,234,240,99,234,238,5,234,236,17,+50,204,194,125,2,51,32,85,98,243,133,135,83,66,2,51,54,52,96,94,+250,119,8,160,135,2,50,50,51,162,120,218,104,224,87,1,211,192,65,15,+64,15,132,101,2,80,32,58,96,105,226,1,22,129,88,113,250,224,89,3,+128,49,64,1,68,159,225,149,5,226,18,4,192,38,194,16,226,34,97,247,+19,0,66,33,224,30,3,226,17,5,226,213,1,65,15,232,146,0,64,119,+192,26,33,213,224,93,4,64,40,132,210,91,231,128,15,247,143,0,33,67,+2,51,53,49,224,104,0,168,99,64,175,96,47,149,69,96,23,161,120,225,+118,7,118,50,225,112,4,235,142,3,161,54,128,9,162,97,224,33,2,203,+169,129,98,235,157,4,235,146,4,252,134,1,235,221,3,64,152,187,169,99,+1,99,26,230,245,10,227,122,16,67,120,225,100,9,34,202,246,254,3,64,+152,247,66,3,192,48,36,204,230,145,1,62,1,224,13,1,64,151,195,29,+224,22,0,236,204,17,161,187,160,212,130,111,162,65,96,179,2,89,32,66,+32,169,128,118,64,45,130,171,226,204,1,64,9,2,89,32,64,225,121,5,+132,83,96,188,231,33,0,244,224,7,64,154,134,87,224,39,1,106,19,129,+247,237,17,6,64,24,228,94,1,224,176,1,233,60,2,2,57,54,54,225,+40,2,232,178,6,65,21,172,250,2,52,55,49,225,226,0,64,22,131,226,+2,83,32,66,202,196,229,200,0,227,190,30,227,175,4,230,8,4,96,29,+158,191,36,215,72,178,224,63,10,230,65,10,128,25,171,44,224,58,13,238,+113,5,227,236,1,248,223,7,128,227,248,56,1,130,42,104,254,142,100,96,+5,64,35,131,206,37,37,192,0,96,21,200,142,195,76,65,218,64,23,167,+254,2,51,32,66,227,150,15,226,89,9,227,7,1,130,51,64,19,194,91,+195,166,225,117,0,225,7,1,241,165,3,255,209,1,225,251,5,235,138,2,+32,157,64,9,197,182,64,113,100,77,68,33,64,15,131,180,2,85,32,58,+128,176,132,153,2,52,32,75,224,60,0,239,34,0,70,242,32,74,64,9,+129,127,2,85,32,90,192,200,72,73,247,201,9,148,107,2,32,34,32,232,+86,5,232,88,0,2,95,50,53,193,14,224,67,16,2,40,46,46,2,46,+41,32,116,41,2,92,49,48,2,38,34,32,239,25,1,2,51,49,32,250,+187,7,224,157,2,64,187,130,204,226,92,8,224,16,8,64,53,128,144,129,+144,193,28,198,227,224,45,3,101,59,98,143,96,23,138,98,202,199,2,51,+51,57,234,134,3,2,51,48,48,224,95,0,224,172,1,176,38,192,65,112,+172,2,50,57,57,229,93,8,228,168,2,192,72,226,57,0,225,44,13,2,+65,109,98,2,105,103,117,2,111,117,115,175,208,254,32,3,233,254,0,164,+61,64,172,227,25,7,65,4,166,155,235,239,3,176,195,2,51,50,48,160,+238,232,186,1,224,140,18,2,58,92,49,225,175,3,224,45,22,2,32,32,+102,2,111,117,110,2,100,58,32,32,0,226,48,16,125,96,64,181,134,70,+129,178,140,143,171,239,240,138,3,2,69,79,70,242,200,11,224,130,6,81,+23,64,59,224,36,1,224,165,20,2,101,120,112,2,101,99,116,2,101,100,+58,224,165,2,65,27,96,67,2,95,49,49,34,65,244,161,3,225,96,7,+199,252,51,213,102,88,66,79,2,60,32,64,204,115,224,22,8,167,40,224,+22,7,208,59,134,157,224,22,0,169,211,65,191,224,179,1,2,84,82,97,+2,119,34,32,224,134,1,239,156,3,225,34,0,192,26,224,56,4,2,73,+110,100,236,181,0,225,143,0,224,138,7,214,35,224,138,6,130,34,224,80,+6,2,66,114,97,216,168,192,112,230,221,1,64,43,67,22,245,36,7,169,+99,224,26,12,131,119,233,99,5,224,111,1,2,125,32,108,2,97,121,111,+2,117,116,34,224,99,0,224,27,1,2,123,32,108,224,27,6,234,186,0,+224,225,7,192,100,224,22,6,131,61,224,248,8,197,27,2,75,32,95,67,+97,32,176,37,56,2,53,48,48,224,99,4,224,30,1,224,25,17,2,49,+55,48,225,121,6,225,237,7,224,48,7,34,93,224,53,8,64,30,237,242,+57,226,196,5,202,177,198,234,2,50,54,51,237,92,6,2,50,55,51,246,+54,6,2,50,55,53,227,94,3,2,51,56,32,96,209,143,154,224,204,0,+160,6,101,51,240,130,1,69,84,96,112,199,38,2,83,32,85,235,240,4,+236,109,0,236,25,5,193,176,226,52,2,2,35,51,50,225,234,3,224,55,+33,163,90,231,209,6,160,142,224,47,11,229,92,1,160,101,224,46,20,223,+220,232,249,1,230,32,1,96,44,175,72,224,97,3,173,184,202,139,223,97,+233,16,0,227,45,4,2,35,52,53,236,221,5,2,50,55,57,185,219,2,+50,55,54,226,230,1,225,129,2,224,141,36,224,94,2,224,140,3,96,251,+224,140,23,174,246,224,91,4,103,24,2,95,52,54,103,19,255,61,1,2,+53,48,55,228,60,12,160,64,32,38,85,179,230,55,1,34,123,102,178,169,+52,64,72,36,79,2,95,57,57,106,134,34,152,128,9,62,175,160,255,197,+207,106,20,141,164,232,100,4,2,51,51,50,228,134,8,224,205,2,225,243,+5,193,5,225,243,2,150,202,160,34,64,37,224,34,3,136,79,145,246,225,+125,37,241,253,1,226,10,14,65,28,224,180,3,65,41,64,226,34,70,226,+217,1,64,20,236,161,3,224,127,0,129,161,224,161,0,2,49,54,56,224,+194,0,224,153,23,224,79,1,64,28,225,17,1,236,64,1,173,102,64,99,+33,89,225,32,1,224,127,2,138,244,98,172,113,91,224,86,1,228,77,3,+226,202,0,231,127,9,129,108,225,143,2,160,11,236,208,1,236,206,1,236,+182,1,233,245,2,233,243,0,153,219,248,156,1,226,12,7,169,85,224,22,+7,32,184,224,140,3,224,60,14,212,181,2,53,49,52,226,76,7,251,55,+0,246,230,0,129,10,225,2,30,225,170,0,226,137,1,163,74,224,25,9,+34,5,224,26,0,225,249,0,229,73,9,192,162,224,158,2,51,3,224,33,+3,196,213,243,99,4,227,152,6,128,168,233,115,18,2,85,110,114,2,101,+99,111,2,103,110,105,2,122,101,100,2,32,105,110,2,112,117,116,233,123,+3,231,43,9,195,178,226,82,0,139,109,32,107,2,57,54,32,224,211,2,+195,38,220,152,173,77,64,39,128,253,235,139,3,129,89,64,171,224,152,1,+2,73,108,108,2,101,103,97,2,108,32,67,2,104,97,114,2,32,108,105,+2,116,101,114,2,97,108,34,225,114,2,192,255,225,149,10,198,188,213,156,+248,186,1,97,199,229,27,6,224,194,7,64,7,128,38,193,132,224,98,49,+226,91,57,142,169,101,24,229,158,4,165,2,240,58,7,248,37,3,96,153,+96,88,133,134,231,210,0,238,228,3,224,130,1,229,213,43,232,80,2,211,+92,239,49,10,32,96,227,112,1,129,106,2,51,51,54,174,9,224,152,3,+224,238,6,227,166,2,224,238,8,224,222,2,2,51,51,53,224,222,12,224,+220,90,224,96,1,64,82,242,38,5,192,126,239,132,2,224,41,0,226,35,+3,226,4,24,73,163,187,161,165,89,243,18,5,154,133,230,143,5,182,134,+230,184,3,64,38,231,112,5,69,41,96,110,104,1,99,228,238,127,1,129,+155,64,123,215,151,225,155,15,229,255,0,230,5,2,246,98,5,224,19,1,+224,21,1,232,187,15,243,195,7,224,47,2,64,70,219,114,243,45,5,243,+47,5,224,144,5,130,55,243,55,1,224,154,4,244,151,0,232,33,10,233,+59,0,232,94,2,129,151,234,4,3,195,148,43,51,233,62,5,225,35,6,+243,81,11,232,74,3,195,19,226,169,68,32,159,245,20,2,224,245,1,200,+14,65,203,225,23,5,248,87,1,227,107,1,228,230,1,163,107,218,231,2,+49,53,32,224,101,9,248,57,2,229,11,0,160,63,224,213,9,240,130,1,+224,219,0,224,234,42,228,124,18,224,209,2,229,41,19,229,36,0,192,211,+228,64,31,224,122,6,67,47,147,232,194,227,238,91,4,96,18,129,121,2,+48,54,32,208,202,241,86,3,2,108,101,116,134,229,224,20,3,115,160,224,+22,9,2,100,111,34,224,19,8,2,111,102,34,241,149,8,225,163,7,99,+198,160,13,228,82,3,245,17,1,227,57,1,237,186,12,241,62,4,225,103,+1,195,81,228,129,13,228,172,5,191,146,170,224,234,59,2,228,215,9,228,+41,2,254,67,5,224,83,14,162,219,237,204,14,229,0,18,64,43,229,0,+7,224,189,3,224,136,126,194,171,66,107,150,63,229,151,1,204,59,235,147,+12,235,24,0,34,229,64,6,224,16,1,238,2,0,236,200,9,116,17,229,+150,1,192,32,162,186,32,31,2,48,32,35,132,68,226,132,1,2,46,46,+34,229,197,10,64,58,224,164,4,53,151,228,31,7,238,172,0,169,153,227,+55,5,46,179,121,114,176,163,255,179,0,239,71,45,237,47,13,234,176,0,+236,154,3,221,55,236,168,7,237,247,17,2,48,49,32,193,173,160,237,64,+51,65,40,32,154,75,11,132,129,224,40,0,160,14,160,160,239,26,3,250,+163,7,225,232,7,240,76,17,160,170,225,4,8,240,217,3,225,4,140,223,+51,225,4,41,231,208,1,239,157,5,224,176,48,194,100,224,184,21,224,170,+1,224,168,31,64,151,218,96,233,196,4,165,131,251,94,6,231,144,3,230,+189,3,180,85,116,230,70,170,193,218,230,186,42,244,164,6,129,137,233,141,+5,224,133,21,2,50,56,51,128,133,2,48,56,32,64,68,232,120,5,231,+72,42,221,45,2,85,32,110,2,111,77,97,2,116,99,104,228,98,3,2,+47,108,105,2,98,47,84,2,101,120,116,2,47,83,116,2,114,105,110,2,+103,46,104,2,115,34,32,143,230,129,203,250,142,5,226,199,16,224,13,4,+240,151,0,199,166,242,137,13,193,172,181,126,2,56,52,32,56,155,2,49,+55,32,2,95,52,57,244,106,1,234,171,1,229,158,11,226,168,1,241,230,+8,227,144,1,244,108,15,233,108,7,224,94,9,229,82,6,244,6,8,242,+195,36,227,21,0,128,1,230,143,1,129,247,73,170,224,254,7,70,90,2,+50,50,49,224,24,9,130,174,127,21,2,48,52,32,162,233,226,48,6,130,+44,2,48,32,67,69,240,32,9,2,50,32,80,192,66,2,95,52,53,237,+230,0,2,49,54,51,173,239,160,72,74,41,224,111,5,138,50,240,189,1,+225,176,2,224,145,0,234,60,14,225,50,78,224,255,27,231,192,13,237,70,+1,233,157,0,247,88,25,229,235,2,226,82,21,245,100,3,129,214,2,49,+48,57,225,125,18,224,43,4,225,233,12,224,31,29,132,111,2,57,32,67,+97,235,225,188,5,224,8,1,160,118,225,225,26,225,77,11,68,75,158,108,+106,237,72,245,2,48,57,51,160,124,64,77,229,192,3,229,130,1,202,210,+241,200,7,98,12,244,195,2,194,176,246,211,7,160,248,143,123,134,21,64,+40,102,130,246,251,9,224,45,37,239,210,1,228,223,3,232,2,4,243,138,+0,65,231,128,45,128,69,224,86,14,66,204,118,159,224,128,22,97,113,249,+175,3,162,165,238,54,0,244,219,4,2,95,56,51,231,21,4,224,101,46,+81,26,138,138,247,57,5,65,203,192,23,64,108,66,204,225,64,26,224,42,+34,138,168,2,56,32,102,230,122,0,2,68,97,116,2,97,46,82,2,97,+116,105,2,111,46,114,2,101,99,105,2,112,58,32,2,100,105,118,2,105,+115,105,2,111,110,32,2,98,121,32,2,48,34,32,225,164,9,226,62,0,+255,248,3,226,48,6,64,147,225,24,26,224,42,38,130,253,39,208,130,253,+234,20,1,150,139,2,49,49,54,226,223,7,226,134,8,160,89,224,102,0,+140,48,224,29,10,192,33,2,49,49,52,224,34,15,64,140,159,165,228,222,+3,226,183,14,2,50,48,54,160,209,233,83,1,226,63,23,224,253,3,226,+169,11,96,103,112,137,36,34,131,249,246,137,3,225,9,5,100,153,224,145,+0,233,250,1,32,225,64,86,224,58,5,224,125,5,224,181,5,226,113,24,+227,223,13,224,128,67,65,121,158,90,228,49,26,163,180,225,120,64,158,92,+254,16,8,225,143,3,228,178,33,225,43,5,224,151,52,244,41,3,224,147,+14,129,133,224,123,13,225,61,1,235,21,1,163,62,226,86,12,234,108,0,+230,100,1,241,3,0,224,55,12,200,55,225,24,1,2,49,53,49,224,138,+8,225,2,40,243,244,5,224,156,150,224,64,0,224,125,3,244,11,6,229,+164,14,2,73,110,116,2,101,103,114,2,97,108,46,2,94,58,32,2,110,+101,103,37,178,2,118,101,32,2,101,120,112,2,111,110,101,2,110,116,34,+227,24,1,67,100,229,31,6,226,129,7,228,195,2,160,239,32,17,125,54,+224,223,9,224,43,0,224,207,8,224,44,24,194,156,64,148,151,243,32,128,+2,50,32,75,224,20,0,151,140,72,229,105,157,50,79,233,10,1,32,14,+2,53,32,95,232,250,0,64,46,212,139,32,21,52,216,2,95,52,55,236,+124,2,67,146,64,7,2,80,32,75,236,75,4,245,39,1,202,104,226,23,+1,241,251,1,252,76,1,2,79,32,35,2,57,49,32,244,114,9,234,108,+2,192,110,237,102,4,142,254,106,32,246,62,4,136,72,224,46,8,192,48,+227,116,0,224,191,25,237,225,5,139,37,128,87,224,89,5,129,242,239,142,+3,224,69,2,109,67,96,72,251,55,5,188,208,224,186,4,228,237,3,246,+119,0,224,113,4,224,141,6,192,115,225,41,10,192,32,234,80,3,224,154,+5,179,216,225,164,31,107,233,230,104,9,225,38,21,225,196,4,225,33,13,+225,101,110,235,241,2,2,50,52,32,224,17,6,249,122,0,224,100,1,226,+204,33,67,249,233,112,7,224,152,0,44,166,252,175,2,224,112,9,224,150,+11,224,132,115,160,19,68,12,150,44,125,50,2,48,53,32,45,245,68,109,+64,24,145,104,2,90,32,83,121,226,106,18,228,160,10,64,125,191,227,247,+182,5,245,126,33,252,143,3,247,244,1,238,147,14,2,49,50,48,233,11,+5,2,49,56,32,234,121,18,224,137,82,2,56,56,32,224,136,125,41,247,+224,137,6,235,140,20,224,137,82,2,55,57,32,224,136,125,2,57,56,32,+235,48,5,236,188,16,249,200,12,224,120,16,2,83,32,80,224,120,21,2,+54,54,32,224,120,38,235,218,7,72,25,224,48,14,67,162,192,95,67,161,+144,190,90,119,2,83,32,95,33,109,71,199,32,142,104,75,241,2,9,214,+187,50,142,64,170,64,64,142,1,224,64,18,232,166,1,64,154,128,77,224,+64,3,237,181,0,186,50,245,28,8,164,36,224,22,7,130,39,64,65,172,+125,224,130,17,224,254,4,2,49,50,32,224,130,6,66,98,225,4,22,225,+146,1,64,55,224,65,9,137,82,223,7,122,68,229,71,6,192,27,249,11,+1,231,103,2,236,24,0,73,255,2,82,32,95,224,59,6,236,223,1,231,+244,1,231,30,1,255,90,2,224,113,14,243,227,3,243,179,5,149,202,167,+35,254,202,2,205,72,232,31,4,242,180,0,242,184,7,230,119,0,224,202,+1,117,189,195,105,75,67,98,197,231,147,2,33,205,65,102,83,156,181,110,+245,36,7,2,39,32,79,96,11,67,46,198,176,225,149,4,237,112,5,65,+134,138,196,184,21,234,151,2,186,144,102,133,194,143,233,25,92,65,199,233,+25,16,233,22,46,232,210,23,98,148,232,210,16,231,202,0,65,47,139,197,+64,110,98,252,69,54,243,81,1,242,65,3,139,18,176,39,235,229,72,2,+52,48,32,235,229,47,238,83,4,234,45,57,224,179,34,236,153,12,161,154,+193,151,192,101,233,74,17,251,214,7,224,35,5,64,135,226,181,3,243,132,+5,65,193,137,122,2,80,32,79,233,186,0,196,60,128,41,254,234,1,230,+98,3,2,51,57,32,224,28,18,128,125,223,43,250,230,3,255,55,2,174,+206,96,6,32,61,195,139,99,101,224,34,10,90,73,38,120,229,191,0,239,+80,1,2,44,59,40,2,41,91,93,2,123,125,95,2,96,34,32,241,62,+7,176,39,228,90,5,173,173,224,104,7,37,142,106,124,224,42,3,74,146,+102,179,229,81,1,254,129,0,227,242,33,254,180,1,226,25,1,229,94,1,+229,144,1,226,177,5,226,103,5,228,74,14,128,36,227,206,9,237,198,9,+96,44,192,32,253,196,6,247,48,6,232,220,3,232,145,15,224,104,3,232,+145,4,230,4,0,225,59,0,251,244,4,227,245,23,237,179,90,222,32,224,+196,1,225,14,14,254,37,6,168,201,237,242,9,251,68,1,160,165,70,119,+252,248,5,248,207,5,228,254,28,238,120,39,224,119,3,233,13,1,64,183,+68,105,233,31,17,2,57,53,32,233,31,11,163,226,128,1,224,190,8,225,+202,27,239,58,42,231,182,3,190,59,224,126,9,224,34,1,128,74,2,67,+32,79,224,35,2,249,169,2,229,8,0,228,60,17,2,33,64,35,2,36,+37,38,2,63,43,46,2,47,60,61,2,62,63,92,2,57,50,38,2,94,+124,58,2,45,126,34,227,18,1,163,11,226,217,5,225,77,17,221,96,224,+23,7,2,54,57,32,242,70,11,233,5,4,242,119,1,225,92,74,226,192,+1,195,214,192,201,230,186,5,233,196,2,100,7,235,87,17,226,55,13,253,+216,4,234,100,4,228,248,124,226,116,10,225,25,3,128,209,226,79,3,227,+90,2,240,220,1,224,28,3,64,200,225,167,1,253,165,5,224,155,3,128,+147,100,120,167,33,224,1,3,64,67,226,107,2,229,115,11,224,53,0,224,+142,0,40,70,96,20,226,251,9,226,70,31,243,34,91,229,92,17,192,240,+96,250,239,118,16,2,57,50,32,193,152,225,29,19,230,106,1,161,29,227,+229,1,67,215,2,38,34,32,225,36,9,227,128,2,239,188,6,192,115,134,+219,224,115,5,204,152,225,247,3,248,107,0,192,199,199,64,240,31,17,225,+21,3,243,66,4,224,184,14,230,110,9,197,242,175,147,254,31,10,34,218,+237,28,9,224,185,22,226,11,1,164,11,225,246,4,168,203,225,128,10,230,+48,3,250,191,2,228,77,3,32,49,2,50,52,56,171,14,107,6,96,53,+227,78,5,227,54,11,167,177,234,119,0,162,84,224,64,11,225,42,13,225,+9,3,74,247,148,89,195,209,234,200,13,161,161,230,113,31,229,215,1,227,+113,7,229,226,1,192,213,2,85,32,35,225,255,4,186,210,239,246,3,175,+149,238,52,6,230,204,19,2,97,98,102,2,110,114,116,2,118,92,57,2,+50,38,92,2,51,52,38,2,39,34,32,240,40,6,227,100,19,228,92,0,+230,238,14,114,3,65,191,96,123,2,50,57,50,166,215,231,97,0,2,54,+50,32,224,23,2,168,85,225,63,13,2,66,32,79,224,113,0,229,109,7,+225,202,7,176,187,225,6,8,244,125,17,228,183,2,49,142,245,183,12,162,+139,235,219,9,233,186,24,232,159,2,32,99,33,198,192,84,160,52,209,220,+224,55,3,224,53,11,160,177,160,53,210,84,232,234,47,64,83,231,254,17,+66,239,147,167,225,200,0,33,18,49,0,243,26,1,64,14,33,33,2,53,+53,32,192,48,147,151,234,72,3,141,30,161,23,64,34,147,121,230,255,15,+228,0,10,64,164,198,101,210,197,224,13,7,227,253,5,239,0,7,225,165,+22,64,149,147,205,2,80,32,58,124,138,144,159,238,137,0,165,45,64,236,+253,150,5,2,114,101,97,2,100,58,32,2,102,97,105,2,108,101,100,227,+55,1,68,63,64,71,147,158,224,71,5,248,174,6,32,80,161,61,129,0,+34,96,189,179,192,4,165,101,245,66,2,2,95,53,50,128,188,32,200,160,+60,224,14,10,64,128,146,152,228,32,3,226,229,2,230,148,2,2,95,52,+54,2,32,110,111,2,77,97,116,2,99,104,32,224,220,1,2,46,47,108,+2,105,98,47,2,84,101,120,2,116,47,82,32,231,2,47,76,101,2,120,+46,104,2,115,34,32,234,153,1,254,178,2,224,158,1,64,120,145,225,144,+55,64,15,144,47,64,35,32,164,2,52,56,52,160,48,69,90,64,30,133,+86,64,227,2,49,48,51,255,14,5,64,30,130,133,129,155,130,96,144,191,+64,15,194,77,66,75,2,35,52,32,128,140,65,255,64,28,129,212,201,218,+243,185,2,136,138,226,42,1,2,58,49,50,94,117,224,73,1,192,216,128,+73,2,50,57,56,224,28,3,195,117,192,28,243,255,1,233,6,1,248,30,+1,194,202,231,26,2,253,48,14,228,178,1,235,217,7,35,70,2,55,49,+32,215,104,242,18,2,225,173,1,2,85,110,109,65,191,2,101,100,32,226,+136,1,234,147,9,245,227,5,195,55,227,116,0,245,128,3,245,198,1,230,+229,18,224,75,15,224,72,1,245,237,3,192,72,224,74,4,228,183,4,234,+56,2,195,16,64,251,66,89,226,108,2,32,20,228,170,4,203,235,241,56,+6,161,63,96,71,2,95,51,49,229,175,0,224,82,11,231,140,3,160,2,+225,9,8,49,252,224,43,14,236,172,7,247,10,9,230,83,5,234,118,0,+224,44,11,228,41,1,242,224,1,247,63,5,245,183,2,237,22,9,255,2,+3,242,205,6,224,103,6,247,157,6,225,191,4,226,140,4,224,206,10,243,+193,11,235,176,9,224,82,55,237,97,4,224,50,5,224,75,6,224,71,22,+234,206,7,245,228,4,232,44,3,225,239,4,226,247,11,248,162,12,235,170,+25,165,218,226,125,18,162,167,32,28,216,61,224,23,7,226,52,1,227,27,+18,228,222,5,200,0,196,64,228,47,1,2,66,97,100,2,32,115,116,2,+114,105,110,2,103,32,103,2,97,112,34,235,8,12,224,102,8,236,124,5,+128,102,73,190,233,182,6,227,197,3,87,229,181,40,227,179,0,227,191,7,+197,130,134,54,70,175,2,67,32,80,190,167,89,121,2,95,57,57,249,125,+9,234,243,5,240,139,2,233,229,7,192,50,224,38,20,69,196,224,37,26,+238,46,2,224,114,18,70,165,224,153,27,239,154,2,224,38,19,225,54,0,+224,38,21,224,155,29,234,205,0,224,77,22,194,81,236,0,59,235,229,3,+235,251,27,130,189,165,193,70,243,2,55,51,32,96,15,2,95,55,55,162,+12,66,80,73,168,128,6,192,84,154,137,226,48,4,240,69,11,178,162,162,+151,106,11,246,196,8,231,192,3,239,149,2,229,51,0,242,162,14,184,178,+192,28,2,95,55,50,32,228,174,184,231,14,2,235,214,1,64,9,231,167,+7,65,21,196,177,230,13,0,114,7,224,219,5,252,193,15,250,72,3,192,+19,224,137,6,224,122,13,224,120,31,225,84,9,160,106,224,44,11,231,100,+7,128,102,2,52,32,35,99,153,99,209,253,84,4,160,29,65,149,96,59,+227,243,3,160,56,228,243,0,224,27,2,100,50,98,182,224,127,22,96,40,+96,29,224,39,26,102,57,224,40,28,65,19,224,40,27,228,212,10,224,39,+12,108,109,224,120,27,65,2,224,40,20,69,90,139,129,136,39,233,244,4,+231,88,9,232,46,12,231,29,12,187,106,100,20,238,195,2,245,195,24,231,+187,6,251,57,1,202,40,240,194,2,169,10,2,56,51,32,2,95,55,52,+254,211,19,160,88,230,183,5,2,54,48,32,196,47,225,20,4,153,156,224,+29,2,144,165,2,50,49,32,224,16,1,226,116,2,254,220,4,227,230,4,+98,239,132,159,225,108,1,140,207,125,28,235,169,10,2,78,85,76,199,110,+162,190,224,41,15,2,83,79,72,224,41,0,210,251,224,41,14,2,84,88,+34,192,41,129,134,224,41,15,2,69,84,88,224,41,0,128,181,224,41,16,+2,79,84,34,192,41,128,255,224,41,16,2,78,81,34,192,41,133,197,224,+41,15,2,65,67,75,224,41,0,134,214,224,41,15,2,66,69,76,224,41,+0,135,155,224,41,16,2,83,34,32,160,40,135,2,224,40,15,2,72,84,+34,192,40,129,227,224,40,15,2,76,70,34,225,118,0,225,161,21,2,86,+84,34,224,41,0,225,161,21,2,70,70,34,224,41,0,225,161,21,2,67,+82,34,224,41,0,225,161,21,2,83,79,34,224,41,0,225,161,21,2,83,+73,34,224,41,0,225,161,21,2,68,76,69,224,42,1,225,162,21,2,68,+67,49,224,42,1,225,163,21,2,68,67,50,224,42,1,225,165,21,2,68,+67,51,224,42,1,225,167,21,2,68,67,52,226,245,1,225,168,21,2,78,+65,75,224,42,1,227,75,22,2,89,78,34,224,42,0,227,76,23,2,66,+34,32,192,42,225,171,21,2,67,65,78,224,42,1,227,78,22,2,77,34,+32,192,41,225,172,21,2,83,85,66,224,42,1,225,172,21,2,69,83,67,+224,42,1,225,172,21,2,70,83,34,224,41,0,225,171,21,2,71,83,34,+224,41,0,225,170,21,2,82,83,34,228,117,0,225,169,21,2,85,83,34,+224,41,0,225,168,22,2,80,34,32,192,41,225,167,21,2,68,69,76,227,+125,2,128,253,247,253,15,224,1,37,69,238,146,159,2,95,54,51,203,22,+70,49,149,47,2,50,56,57,213,55,136,189,103,172,32,7,104,167,2,55,+50,32,235,0,1,2,95,55,51,224,13,2,64,87,146,235,2,62,61,32,+64,12,146,232,2,62,32,58,128,68,32,11,2,60,32,58,128,95,32,11,+2,105,99,109,2,112,32,58,128,118,147,74,247,237,14,2,40,41,91,2,+93,44,123,2,125,96,59,129,15,64,50,210,190,191,58,231,201,3,245,138,+3,248,136,3,178,147,39,148,128,228,203,186,135,86,2,51,51,56,241,136,+2,2,95,50,54,237,254,4,74,139,231,121,3,2,95,51,53,105,201,232,+61,3,64,150,142,12,2,95,52,55,2,48,32,67,128,72,96,53,148,61,+231,174,1,192,15,105,1,180,90,105,2,242,32,5,44,180,65,15,33,163,+231,210,7,238,86,2,64,118,137,40,81,234,246,246,24,206,50,224,44,10,+174,78,224,44,1,238,19,1,124,190,224,45,5,2,54,53,32,224,45,5,+32,243,160,156,246,110,4,2,100,105,103,2,105,116,84,2,111,73,110,2,+116,34,32,233,102,2,237,21,11,224,18,0,173,31,128,97,241,80,5,224,+58,29,160,202,224,58,28,96,48,161,40,129,78,137,10,181,56,201,37,181,+56,66,62,248,45,6,205,139,160,16,225,85,34,224,41,5,161,64,225,81,+10,128,121,184,167,225,184,9,225,138,8,99,177,247,36,23,2,68,97,116,+2,97,47,67,2,104,97,114,247,32,1,109,71,234,115,2,238,198,4,226,+255,3,238,214,20,195,88,225,138,4,192,196,249,73,1,219,169,252,9,3,+220,66,238,4,3,243,93,18,227,182,1,128,92,247,59,1,148,90,253,240,+0,235,247,2,224,80,0,2,54,54,32,241,169,18,235,227,6,223,27,142,+126,242,153,9,2,85,110,99,2,108,111,115,54,200,2,123,45,32,2,99,+111,109,2,109,101,110,226,238,0,229,179,1,228,153,7,255,56,4,240,172,+14,2,49,50,51,235,198,8,204,235,243,199,18,2,52,53,32,226,248,3,+132,138,2,50,55,57,243,26,13,236,117,19,224,184,47,224,129,4,224,183,+32,2,49,50,53,224,184,38,226,134,2,224,183,14,248,161,6,245,181,26,+224,55,34,237,120,3,244,194,3,225,26,1,245,211,14,224,215,12,245,18,+7,192,34,245,97,5,224,23,5,247,150,7,227,20,1,35,18,64,37,122,+123,156,120,251,170,1,37,164,190,230,225,249,12,224,8,0,64,67,135,159,+52,224,193,179,192,60,36,5,238,126,3,100,37,39,24,230,178,0,224,93,+7,165,149,128,157,160,6,128,98,135,207,143,3,226,28,2,160,104,224,73,+8,192,54,213,124,243,9,8,253,105,1,64,9,157,141,240,60,3,225,206,+3,2,67,32,60,238,4,1,180,62,226,157,1,2,67,32,61,2,61,32,+64,224,30,5,253,223,1,97,84,248,251,2,227,183,14,224,87,18,251,224,+5,224,87,6,250,149,0,130,90,176,42,224,114,7,115,32,234,66,11,2,+109,111,100,2,117,108,101,247,39,7,2,90,32,75,234,22,12,201,42,130,+94,170,19,2,54,55,32,227,21,0,32,1,94,38,64,3,254,254,3,218,+187,224,215,5,226,150,1,128,213,224,115,3,65,186,209,220,178,53,2,64,+32,85,160,24,199,125,69,194,251,228,8,224,16,0,252,132,1,181,24,71,+161,43,72,32,177,96,185,41,192,64,11,169,236,74,166,102,100,230,106,3,+2,75,32,66,160,49,2,53,32,95,32,5,99,129,53,223,225,13,0,224,+67,2,224,69,5,251,126,10,226,85,8,210,63,246,94,3,224,31,1,251,+168,10,226,141,5,249,79,6,250,144,3,224,58,23,228,16,5,249,238,8,+225,160,9,224,38,1,130,126,128,111,247,103,4,178,166,246,72,7,224,214,+1,251,191,0,229,190,8,252,106,2,250,253,10,246,178,1,226,207,2,249,+103,7,224,193,4,246,177,5,243,105,18,200,74,167,186,129,232,226,212,1,+225,234,1,225,236,9,227,179,6,224,65,15,2,53,57,32,236,67,2,224,+65,6,133,214,224,79,5,64,31,248,242,6,224,38,3,64,30,251,172,9,+228,189,9,248,221,4,97,151,180,67,233,58,0,244,142,0,65,239,37,148,+37,58,161,31,228,112,2,225,123,0,225,33,16,192,43,224,223,12,191,227,+106,31,255,180,8,224,237,7,194,171,133,148,252,206,8,231,107,6,181,237,+225,39,7,224,198,2,225,159,4,224,197,30,192,133,225,235,9,130,42,225,+136,1,251,236,11,224,205,3,224,119,63,184,230,224,119,0,224,83,0,128,+126,226,181,20,107,131,206,166,254,115,9,227,100,6,230,206,17,225,157,3,+195,255,229,104,2,247,7,4,130,102,160,84,228,96,7,234,186,9,233,203,+8,250,150,4,234,1,6,235,143,25,224,68,0,133,252,225,82,11,227,114,+9,247,214,23,229,77,9,224,196,18,228,235,3,231,242,24,130,84,224,171,+17,190,136,195,251,33,203,224,253,22,224,204,0,255,31,15,2,108,97,121,+2,111,117,116,2,32,101,114,2,114,111,114,2,32,125,34,239,143,0,231,+11,25,224,183,35,228,216,11,161,152,128,54,64,30,231,70,15,226,93,0,+227,241,0,232,62,5,199,215,226,180,2,201,19,224,16,0,162,136,194,172,+228,88,5,224,13,7,230,249,4,2,95,50,52,2,56,32,95,166,95,233,+122,6,232,60,1,230,17,21,225,133,5,131,189,105,128,163,161,225,142,1,+2,115,121,110,2,116,97,120,129,142,225,140,39,73,9,144,106,105,34,172,+158,201,35,144,10,176,161,196,168,176,161,64,140,192,54,132,175,192,53,143,+30,137,254,32,15,70,106,107,215,2,75,32,65,192,115,68,225,32,19,129,+11,64,88,2,90,32,85,171,95,232,97,2,129,36,224,22,8,179,43,232,+202,13,224,22,8,243,111,1,232,147,7,192,123,64,185,138,108,224,11,9,+230,107,1,107,22,235,200,9,224,34,1,224,44,3,224,181,10,130,169,224,+69,8,129,246,224,69,13,224,44,8,141,45,224,44,3,235,100,11,65,95,+140,232,108,215,64,32,2,95,56,52,195,241,253,13,15,98,166,64,58,140,+236,161,244,194,45,161,244,70,35,97,183,110,144,65,40,64,20,139,74,2,+73,32,58,130,112,237,97,0,131,102,83,212,142,11,2,51,48,48,172,25,+2,90,32,66,32,156,96,134,2,89,32,66,32,38,128,197,235,236,1,237,+88,3,231,37,11,224,237,5,130,167,142,57,229,135,3,240,72,5,224,29,+16,224,10,0,96,165,37,138,233,59,1,165,133,46,236,161,191,202,177,66,+236,177,168,227,195,0,169,167,137,11,2,50,54,48,85,161,130,105,2,53,+53,32,224,7,3,232,195,1,224,241,1,231,147,0,231,66,7,224,250,1,+237,185,3,224,9,3,129,40,228,236,3,232,220,1,96,165,229,13,9,237,+232,6,160,124,65,174,234,10,4,224,47,18,164,153,136,153,196,86,226,142,+1,226,152,3,227,80,1,224,248,1,224,19,3,227,110,1,132,32,227,7,+8,84,135,100,202,128,154,129,35,225,33,7,193,108,224,37,1,64,5,66,+105,65,31,208,152,103,73,2,50,48,51,226,79,16,34,150,2,48,32,102,+229,92,0,2,80,114,101,2,108,117,100,238,220,2,66,111,196,250,231,217,+3,224,11,1,129,22,64,39,212,40,229,61,0,165,34,66,40,160,64,224,+50,1,64,23,209,2,193,61,64,19,216,131,192,249,230,210,3,224,11,1,+226,62,2,226,208,1,194,2,73,232,2,53,50,32,98,220,111,187,226,202,+2,224,6,20,242,93,1,2,49,50,52,65,51,64,154,192,1,228,121,9,+65,180,224,29,20,2,50,32,90,224,28,12,32,26,2,51,32,90,224,24,+8,32,22,2,52,32,90,224,20,4,64,98,32,20,224,18,10,226,59,1,+226,163,2,203,248,239,11,2,227,212,0,224,19,2,238,86,7,228,35,0,+238,137,2,239,22,5,224,33,10,246,79,5,163,43,171,240,105,186,65,134,+35,40,58,205,68,26,226,135,2,2,95,50,53,232,200,2,2,51,48,55,+96,8,229,25,15,130,206,242,120,3,224,9,39,229,81,21,115,15,246,14,+5,160,147,230,111,9,68,251,2,53,51,32,70,87,251,25,0,224,46,2,+33,152,224,44,12,2,57,52,50,224,44,11,225,194,7,236,207,3,2,48,+50,57,236,207,7,2,50,49,51,247,127,3,224,6,5,170,246,45,203,170,+246,165,138,2,55,54,54,167,253,2,49,51,48,186,229,227,19,0,235,162,+5,32,116,239,188,4,128,1,225,150,15,160,148,161,88,202,96,234,189,8,+224,39,6,236,108,6,64,177,199,147,231,25,17,192,11,225,223,7,238,249,+5,226,212,0,224,109,5,229,185,1,2,95,51,49,253,194,22,64,142,236,+243,0,65,110,64,16,198,195,68,156,213,25,69,206,71,103,231,189,9,224,+9,9,237,93,8,198,201,129,31,237,73,6,224,2,11,235,42,15,242,3,+4,224,54,30,192,108,224,59,45,224,61,30,224,64,19,240,162,10,224,70,+43,240,41,1,64,6,244,11,3,134,1,192,6,239,108,8,238,173,10,202,+186,226,250,7,239,141,1,234,158,0,166,95,224,6,10,232,44,0,200,46,+229,144,0,227,99,4,232,222,5,165,46,2,53,52,32,231,85,3,42,180,+37,49,231,181,3,233,149,3,98,152,232,47,3,2,95,53,51,2,53,32,+85,70,109,224,26,8,238,128,9,224,109,1,224,105,11,160,64,230,206,11,+56,41,225,207,16,142,165,224,2,23,228,35,11,225,114,9,244,246,4,226,+197,23,224,2,5,193,108,224,82,11,245,232,10,224,44,15,224,123,20,224,+38,28,245,87,7,235,124,1,224,10,20,2,95,53,52,239,255,10,226,72,+3,242,46,8,70,44,230,60,5,251,12,0,242,123,5,246,176,6,224,59,+3,71,175,252,86,7,32,29,2,53,52,55,224,73,18,197,119,225,252,2,+255,187,1,2,50,50,32,227,53,1,227,191,18,224,139,9,224,195,4,131,+129,203,58,229,241,11,246,179,3,193,224,224,119,1,161,155,192,223,241,153,+13,166,49,192,237,236,106,11,229,203,2,226,141,20,224,68,20,224,58,11,+32,51,89,143,210,24,164,55,233,112,13,236,5,0,64,225,237,79,3,232,+219,3,128,23,236,108,3,231,85,3,224,95,10,224,107,6,193,61,231,232,+4,224,97,10,224,103,25,235,156,4,170,40,218,82,224,67,3,224,99,11,+224,87,3,200,251,82,97,2,51,55,50,196,140,2,51,48,54,229,33,5,+251,168,11,2,110,111,116,2,32,101,120,2,112,111,114,2,116,101,100,251,+174,7,236,223,2,71,225,108,114,2,82,32,64,234,111,0,32,168,130,147,+73,177,93,141,2,51,50,51,192,104,48,92,2,51,50,54,227,165,4,165,+155,160,8,224,140,11,2,58,32,34,234,112,2,76,230,224,131,4,144,84,+233,218,12,224,6,8,142,183,201,174,197,254,236,142,4,252,141,15,161,158,+2,95,55,56,74,12,160,58,222,32,238,56,1,206,62,64,23,144,190,224,+27,7,224,39,5,162,150,233,194,17,244,59,8,225,240,0,194,252,248,236,+13,161,47,245,83,14,224,35,4,224,203,3,224,179,1,224,219,5,236,69,+43,67,161,192,196,192,220,229,81,2,232,93,0,230,27,3,228,163,1,232,+139,4,234,157,7,251,242,13,245,172,1,69,133,43,200,226,123,0,111,209,+234,197,2,225,51,19,224,1,19,226,60,13,142,146,226,57,17,236,154,0,+172,37,224,59,3,78,183,255,1,18,64,55,2,55,55,51,77,9,193,201,+226,182,4,238,247,8,226,173,72,229,134,1,242,40,4,129,222,252,209,1,+238,132,21,192,74,130,18,231,76,2,203,220,237,30,15,226,228,27,229,13,+3,243,35,0,250,45,7,151,25,176,219,239,69,2,227,83,75,227,81,40,+248,46,7,231,171,8,243,178,9,129,73,231,192,2,235,48,5,195,10,128,+30,193,118,249,20,2,228,113,19,232,176,3,227,216,11,248,221,15,255,19,+10,225,96,7,72,151,128,155,128,23,65,102,188,59,2,57,54,32,65,58,+38,159,230,228,5,129,81,252,235,2,234,89,11,238,233,15,224,180,3,193,+50,233,205,4,228,51,3,224,68,2,65,38,239,18,12,192,222,175,25,228,+101,8,226,166,27,224,105,87,228,235,5,228,203,18,228,149,11,230,7,73,+100,57,65,124,230,8,5,225,182,9,226,87,2,225,21,11,234,247,4,225,+21,13,129,228,224,103,41,192,100,224,79,7,224,1,19,225,101,29,136,164,+219,58,2,95,53,49,41,142,157,160,136,240,2,49,50,49,123,173,2,56,+55,56,238,74,1,64,30,64,54,152,175,245,107,2,234,132,2,173,151,237,+213,11,239,79,11,224,21,2,240,134,4,242,116,12,192,21,160,111,224,45,+0,237,129,8,62,156,205,122,225,227,28,206,76,235,34,1,251,106,5,237,+54,17,227,190,1,238,37,7,134,141,239,35,1,240,170,3,173,145,226,66,+0,96,57,226,58,13,233,242,16,229,66,3,225,121,2,229,111,13,224,47,+62,241,147,7,229,51,1,225,99,51,238,92,1,238,154,21,224,27,20,227,+49,6,162,45,34,8,239,12,0,231,32,23,233,255,13,224,182,17,245,207,+1,226,14,3,192,158,231,65,29,224,17,13,224,67,7,224,35,6,234,125,+2,226,66,3,99,18,239,252,8,224,1,9,239,127,5,224,239,33,228,84,+5,224,171,30,224,225,106,224,223,47,151,77,224,223,161,227,117,86,225,56,+4,230,247,1,236,239,8,228,215,1,230,255,17,102,149,2,56,52,51,231,+246,22,185,92,248,206,0,249,112,11,224,245,54,249,41,3,243,80,14,229,+208,61,102,132,33,201,229,226,4,170,77,206,10,170,83,231,221,31,2,95,+53,55,41,24,233,107,2,139,56,77,80,32,104,80,128,186,29,250,27,1,+225,138,12,253,130,14,232,217,0,2,49,48,49,2,57,32,75,224,63,14,+250,137,0,2,75,32,95,224,143,6,226,154,1,37,106,200,43,158,107,248,+101,7,248,247,14,232,57,2,246,136,9,141,1,128,33,253,224,0,50,51,+135,162,241,223,32,241,210,18,2,117,110,100,2,101,102,105,2,110,101,100,+2,32,109,111,2,100,117,108,2,101,58,32,241,226,14,190,10,234,125,11,+255,67,3,247,181,15,253,156,9,224,19,8,247,16,12,249,117,23,178,74,+224,65,14,140,211,237,189,6,64,64,228,112,3,194,73,235,195,1,233,230,+1,147,243,225,113,0,199,79,224,93,3,64,126,248,200,2,160,33,64,84,+201,72,124,213,2,52,57,32,225,15,4,192,96,245,44,8,224,245,4,246,+238,6,237,175,12,246,31,11,224,144,1,224,203,88,65,255,2,80,32,95,+96,43,232,111,3,224,87,3,228,25,5,224,67,5,192,111,67,57,35,193,+148,65,128,240,130,221,100,68,96,46,226,231,23,249,223,1,131,208,226,230,+1,149,66,194,218,32,106,64,79,32,106,90,39,45,104,150,149,231,20,4,+63,80,224,63,2,2,116,121,81,2,73,100,101,2,110,116,34,227,15,2,+245,226,3,64,81,33,34,99,246,175,218,184,2,149,134,160,251,44,116,233,+171,4,225,149,1,228,128,4,228,103,19,248,97,1,64,32,33,12,225,114,+3,225,221,1,128,146,34,214,32,146,2,80,32,58,128,127,108,248,227,175,+3,64,23,214,57,252,141,4,252,144,7,32,106,2,54,53,32,230,253,1,+160,14,144,186,32,188,128,27,242,109,9,228,38,1,77,163,160,66,224,1,+5,224,67,24,224,57,16,230,38,3,103,104,64,206,150,132,253,137,28,224,+36,42,245,40,11,224,52,8,224,24,14,224,104,18,224,26,29,192,124,224,+12,0,130,183,34,1,65,243,170,172,34,106,2,51,54,32,194,13,46,202,+2,95,54,55,61,31,39,30,248,120,0,33,37,202,216,224,35,19,224,11,+0,2,54,53,57,128,8,2,56,50,51,224,151,4,226,193,3,66,78,228,+48,0,224,7,6,224,17,7,65,167,143,135,99,36,2,83,32,67,238,221,+6,210,153,225,27,7,229,207,1,227,102,0,231,4,0,162,167,232,110,4,+67,35,2,53,57,52,224,178,8,64,52,2,53,57,53,229,77,9,160,119,+250,27,3,237,67,7,227,224,2,99,210,233,227,1,128,190,129,80,2,55,+57,51,234,6,2,2,55,49,32,227,195,5,128,96,2,95,54,51,40,104,+2,55,56,50,254,186,3,33,134,2,56,52,32,241,68,1,233,244,1,163,+122,105,113,64,104,2,56,52,49,165,38,2,57,48,32,231,229,10,2,79,+32,35,2,57,55,32,229,209,4,2,49,51,51,69,37,231,214,1,32,155,+255,19,5,36,121,34,10,2,52,55,55,96,28,33,63,2,57,57,32,74,+141,2,55,32,35,237,13,5,224,40,18,224,207,0,224,63,6,236,110,1,+66,1,145,82,104,255,176,221,245,92,10,101,60,162,150,97,236,65,168,100,+48,2,55,56,51,229,160,2,2,45,62,34,226,49,3,64,37,96,35,189,+204,33,103,231,22,5,139,46,198,157,224,80,10,2,61,62,34,227,133,8,+199,36,64,80,133,102,235,141,1,224,154,7,33,124,2,49,50,54,231,138,+7,160,151,2,57,48,50,160,151,131,89,249,145,3,224,72,7,33,68,231,+124,0,224,64,0,128,19,67,165,129,83,224,64,19,32,137,2,56,53,57,+66,16,224,138,11,225,34,17,231,192,5,224,78,4,2,54,53,56,244,242,+6,225,32,23,245,30,11,237,93,1,255,241,1,253,199,3,228,5,3,233,+218,26,206,93,164,13,134,70,179,194,233,79,3,255,171,1,32,7,131,189,+245,194,9,166,252,131,204,2,49,49,52,129,102,70,138,232,252,2,227,199,+16,227,26,51,171,176,132,199,237,50,0,97,122,234,21,4,224,194,22,68,+13,64,182,69,213,128,177,73,130,128,200,232,75,3,174,167,116,249,2,55,+56,53,160,191,128,115,68,87,66,199,2,48,55,32,233,167,4,64,45,69,+188,128,96,132,65,160,6,64,29,137,197,224,29,5,224,12,6,160,146,32,+45,64,9,32,45,227,120,1,2,80,114,105,2,109,105,116,2,105,118,101,+2,115,46,61,99,131,64,36,137,91,151,37,224,73,2,224,88,7,192,21,+64,50,136,251,2,95,54,32,37,48,41,38,64,203,224,100,12,228,57,1,+130,183,106,199,37,129,161,157,229,2,20,224,89,21,228,66,1,224,89,26,+240,155,3,128,192,137,176,60,88,160,15,137,168,101,16,2,48,49,32,2,+95,53,56,184,44,56,54,192,13,32,144,130,237,66,31,33,22,224,35,1,+2,49,53,55,234,79,1,224,67,21,2,49,49,54,128,230,224,68,8,131,+166,224,61,10,2,50,49,54,164,68,239,208,3,64,180,137,142,224,112,22,+2,50,49,56,224,151,0,224,112,2,74,102,42,182,160,15,2,80,32,66,+124,55,65,49,226,236,5,192,21,249,74,2,2,54,56,50,75,11,198,231,+171,141,2,83,32,73,228,3,0,235,239,1,172,75,2,50,50,51,224,45,+0,81,32,251,66,10,177,233,32,214,227,174,5,104,78,110,67,128,58,224,+97,14,174,101,224,37,1,203,35,139,203,120,138,235,44,0,203,200,254,231,+1,252,39,13,241,247,27,241,243,1,239,184,5,254,3,14,232,103,4,137,+216,203,157,224,1,25,228,91,3,160,72,226,67,3,225,208,2,96,217,226,+19,0,66,5,170,102,33,95,104,198,226,75,3,225,38,0,57,163,224,77,+0,240,219,2,64,90,225,238,0,194,124,138,99,238,78,7,74,199,65,27,+32,8,37,57,32,12,164,244,234,221,6,72,144,254,199,8,245,83,6,64,+68,2,60,32,64,2,32,35,55,239,177,11,225,138,1,224,30,3,129,250,+179,61,225,26,0,42,101,32,139,146,67,230,133,8,180,139,194,140,225,80,+3,64,183,165,181,236,149,5,225,40,8,230,254,2,67,141,2,49,52,53,+226,110,2,178,244,241,187,16,224,206,5,230,137,3,64,206,249,86,3,224,+160,9,110,221,97,113,239,79,3,2,112,101,32,2,115,105,103,2,110,97,+116,2,117,114,101,233,105,1,254,245,15,225,8,5,225,1,17,242,24,1,+224,131,10,71,202,244,156,0,224,85,7,228,210,8,252,81,0,225,170,27,+225,117,0,226,162,11,224,152,2,2,95,52,49,228,4,1,225,118,18,230,+101,4,224,79,5,66,216,139,58,224,148,9,2,56,56,55,224,93,0,70,+115,227,93,2,227,192,0,196,118,194,135,229,229,7,2,56,57,53,243,110,+11,233,86,0,32,17,35,42,69,0,241,126,7,244,104,20,2,67,97,110,+2,110,111,116,2,32,115,97,2,116,105,115,2,102,121,32,2,99,111,110,+2,115,116,114,2,97,105,110,2,116,58,32,244,113,2,108,159,2,55,50,+56,253,186,11,65,144,79,218,37,221,37,27,2,95,54,49,160,176,206,82,+69,148,129,21,228,86,12,230,92,6,228,137,3,242,1,7,130,223,2,110,+111,77,2,97,116,99,2,104,32,102,224,195,0,2,115,114,99,2,47,77,+105,2,99,114,111,2,72,115,47,2,84,121,112,2,101,67,104,2,101,99,+107,2,46,104,115,128,192,43,239,103,6,2,35,49,57,242,35,0,2,90,+32,67,67,108,32,174,2,53,56,48,230,67,0,2,95,56,51,229,78,7,+204,234,226,132,3,210,60,142,103,32,26,229,21,4,70,245,224,44,0,132,+166,230,119,13,224,199,42,2,50,50,32,224,199,3,194,46,32,205,96,103,+64,7,195,79,226,189,15,226,156,4,160,81,136,82,225,120,2,226,135,29,+235,220,3,224,33,2,147,87,235,5,0,107,47,232,24,5,198,139,132,159,+225,92,7,74,134,2,53,32,95,193,81,230,97,20,2,49,52,54,236,38,+12,225,186,3,2,49,56,51,224,227,0,200,13,136,178,243,69,2,161,83,+167,25,32,27,66,201,208,177,224,196,12,224,24,18,231,113,9,227,46,2,+73,18,163,14,2,50,50,55,104,127,179,35,67,94,96,25,224,169,1,228,+142,0,2,51,48,53,224,64,0,139,65,49,157,134,234,225,24,6,196,71,+64,5,198,0,228,143,8,122,202,232,14,5,230,41,5,225,147,8,226,212,+3,100,106,110,185,250,56,0,241,131,7,226,49,21,229,212,6,2,56,57,+50,232,78,3,224,207,7,173,73,106,42,237,20,1,64,121,33,37,241,37,+5,232,223,4,2,49,48,48,97,58,89,248,160,72,2,54,48,32,41,193,+96,77,32,209,168,96,2,54,49,56,225,164,8,139,228,137,218,241,235,5,+160,2,219,154,252,117,5,207,24,232,22,4,172,252,130,200,114,18,170,75,+237,43,0,241,253,7,238,174,3,32,140,65,105,146,50,68,3,224,31,1,+2,52,55,51,206,206,237,1,2,234,38,3,224,113,0,226,162,11,224,95,+19,65,3,140,216,32,96,38,77,32,14,64,163,128,43,65,178,47,25,224,+14,2,2,49,54,52,133,11,112,254,2,56,49,49,224,43,5,37,32,224,+14,3,224,73,6,35,236,224,14,0,64,119,236,155,1,142,60,106,63,32,+201,2,54,32,67,64,105,32,120,109,158,238,4,20,32,53,238,202,0,68,+72,64,200,227,4,1,2,57,57,53,151,206,227,23,6,32,78,115,234,2,+50,56,50,200,193,193,148,229,6,7,229,45,2,226,224,0,230,226,6,2,+57,53,52,244,165,2,228,197,12,2,95,55,55,32,253,2,57,51,48,228,+39,10,136,76,252,120,1,65,36,253,74,0,2,52,55,50,160,38,231,125,+0,77,186,217,107,64,24,175,238,64,116,2,55,53,53,137,108,2,55,53,+54,64,174,144,85,33,73,246,71,4,32,52,69,6,232,193,12,233,86,1,+38,198,99,0,64,209,222,224,254,233,2,235,122,0,192,47,224,31,15,193,+88,224,31,15,198,228,234,231,10,231,199,1,196,80,234,99,3,235,33,4,+239,8,0,227,92,7,236,13,18,61,82,230,132,7,224,55,20,192,233,72,+174,239,65,4,138,223,224,72,14,246,153,1,245,88,1,225,2,6,226,208,+1,235,238,12,224,30,3,199,173,249,214,1,238,120,0,225,32,4,238,100,+1,235,192,0,253,237,5,249,34,0,198,91,42,47,237,243,10,237,188,6,+247,109,2,235,116,6,64,24,247,170,7,224,99,0,183,142,160,42,195,117,+195,41,101,167,66,128,51,218,130,214,227,157,5,254,130,16,247,216,0,107,+197,233,155,3,247,200,7,224,145,5,248,151,6,224,85,7,45,45,224,86,+14,96,161,88,93,166,81,128,166,2,53,50,32,236,63,19,225,180,17,181,+102,141,47,231,137,6,224,31,1,173,79,226,111,4,225,128,5,205,175,237,+81,1,255,224,14,251,54,6,225,250,17,225,254,7,188,146,226,4,10,225,+231,3,249,152,15,224,37,8,235,83,0,201,179,246,98,5,226,198,1,64,+41,123,31,194,66,226,20,6,226,14,48,226,108,28,226,226,6,226,49,3,+224,172,7,242,3,0,96,45,218,219,145,226,151,188,248,170,1,226,0,1,+226,22,4,175,91,161,238,250,22,2,232,122,5,200,124,224,228,7,214,150,+231,56,4,96,229,137,24,233,31,0,132,90,171,10,164,92,191,116,253,217,+11,227,2,45,139,20,226,183,8,204,199,64,1,129,20,239,36,13,211,119,+236,168,9,65,44,171,241,240,97,4,236,62,1,80,235,160,177,237,114,1,+2,63,63,63,250,79,3,32,117,34,86,224,87,3,107,125,227,10,15,240,+30,30,224,192,2,71,99,203,230,242,109,31,227,240,5,227,184,6,254,135,+10,254,231,14,224,65,3,224,71,9,192,73,230,16,1,224,34,10,226,115,+1,255,158,23,128,129,242,30,6,228,209,17,196,120,231,50,0,230,116,12,+229,161,15,160,125,160,177,254,67,2,225,30,2,218,151,224,192,0,227,45,+13,227,13,0,186,65,226,230,8,245,111,11,231,14,2,229,186,0,193,140,+228,43,2,224,247,14,226,209,7,225,213,5,231,50,7,159,213,173,250,2,+90,32,75,160,31,224,9,1,224,230,6,245,26,1,201,182,225,94,10,243,+112,4,229,165,7,173,147,2,54,53,32,236,184,0,229,80,0,99,229,64,+187,138,123,2,56,56,51,229,42,12,129,182,238,42,0,228,162,9,108,140,+87,108,230,109,12,245,30,3,2,54,51,32,227,23,7,233,254,5,226,139,+3,248,43,5,225,77,5,128,11,151,71,230,14,2,138,222,225,100,23,128,+7,241,193,42,108,79,2,35,50,53,241,147,7,32,216,109,65,97,80,225,+70,11,33,51,249,140,0,225,171,22,103,25,135,22,225,177,14,233,1,8,+111,210,183,175,225,5,33,2,65,32,64,225,5,46,115,143,225,5,6,249,+73,5,67,204,236,22,4,129,177,226,250,24,234,228,11,96,221,231,56,2,+249,13,6,226,143,10,69,166,145,102,237,247,6,250,251,5,118,225,224,56,+2,162,233,2,52,50,57,254,46,0,109,125,224,221,8,250,39,27,38,63,+250,40,11,240,55,1,230,115,11,2,50,49,53,160,190,144,193,160,145,142,+0,238,2,1,32,31,98,110,206,3,128,50,175,240,2,55,53,55,32,166,+77,92,224,1,11,129,82,224,123,10,2,55,53,56,225,63,4,143,198,204,+6,173,128,225,78,9,245,132,1,250,41,0,225,98,4,35,25,192,87,224,+60,43,248,106,1,224,60,41,2,50,49,48,224,60,51,244,208,2,248,120,+9,65,33,187,7,98,141,234,40,2,226,2,2,192,127,243,21,6,244,137,+9,136,172,237,149,1,224,172,16,2,57,51,55,249,156,1,231,99,12,204,+53,232,44,18,232,143,6,232,48,0,224,118,3,100,116,113,155,32,233,255,+159,5,236,114,7,233,8,15,2,57,51,52,237,59,16,224,1,1,250,229,+7,250,100,8,232,37,8,193,102,68,236,253,206,0,64,54,165,78,49,58,+227,212,5,249,60,15,89,57,2,97,32,99,2,108,97,115,2,115,32,34,+230,71,2,35,64,250,37,14,225,2,23,237,178,1,224,37,17,227,129,9,+227,165,29,231,13,8,233,197,24,224,91,13,129,250,217,5,232,213,6,198,+55,224,6,0,245,116,3,236,23,9,235,37,13,2,90,32,83,193,141,186,+213,225,143,0,250,220,7,225,157,18,2,115,117,112,2,101,114,102,2,108,+111,117,2,115,32,98,2,105,110,100,2,105,110,103,250,210,8,2,50,53,+56,235,200,24,229,6,13,235,182,27,224,71,9,238,201,10,65,73,235,47,+6,224,119,4,128,31,235,213,3,234,90,9,173,225,234,95,9,224,191,7,+2,95,57,52,230,59,5,226,3,9,203,40,236,75,20,233,108,11,224,17,+7,128,13,137,94,234,4,10,231,118,11,192,1,249,74,7,225,136,13,227,+90,18,245,53,1,224,2,3,224,218,5,248,174,2,228,63,3,130,217,192,+6,160,51,97,94,250,108,19,225,73,29,224,150,2,196,108,254,120,1,224,+228,7,179,62,37,165,236,116,8,224,222,5,67,98,69,96,225,98,6,234,+49,0,238,0,4,163,255,192,222,169,244,128,60,70,144,96,78,224,76,9,+93,221,2,51,54,32,99,176,179,5,224,179,3,101,60,96,62,250,78,2,+222,154,187,97,226,8,5,2,56,52,52,236,32,7,2,57,57,56,236,51,+17,242,31,5,2,48,50,48,196,62,123,67,225,28,4,94,169,36,13,196,+114,226,90,25,234,119,7,198,236,226,207,3,230,230,3,235,87,1,245,100,+1,241,156,3,64,171,158,79,224,228,0,234,168,5,224,9,1,252,36,11,+196,228,2,54,51,52,228,172,0,2,48,51,51,227,42,11,72,69,152,39,+228,246,1,2,105,110,115,2,116,34,32,128,27,152,28,232,97,1,247,104,+11,193,205,232,129,13,232,128,35,226,222,4,255,92,3,65,27,97,184,97,+32,233,48,0,225,236,2,254,124,4,204,143,2,50,48,57,227,112,18,224,+115,71,192,111,225,91,3,153,67,241,16,1,93,117,65,231,66,95,99,115,+102,209,154,251,200,74,230,186,59,2,67,97,110,72,91,2,100,101,114,2,+105,118,101,230,181,28,238,210,1,176,216,226,50,5,32,204,64,220,32,204,+2,79,32,80,224,114,12,2,68,97,116,2,97,46,66,2,111,117,110,2,+100,101,100,192,7,192,120,75,71,129,62,224,61,20,2,69,110,117,2,109,+46,69,32,4,224,55,3,129,82,224,55,21,2,113,46,69,2,113,34,32,+224,51,0,177,189,224,51,20,2,73,120,46,2,73,120,34,224,51,2,129,+18,224,51,20,2,79,114,100,64,3,224,53,1,2,50,48,49,224,53,25,+78,193,2,97,98,108,2,101,46,84,160,8,224,63,3,131,161,224,63,15,+2,84,101,120,2,116,46,82,2,101,97,100,96,4,224,55,3,225,77,21,+96,55,2,83,104,111,2,119,46,83,32,4,224,55,9,227,12,9,65,223,+148,87,242,129,0,235,4,7,65,140,102,192,146,26,233,171,5,228,215,0,+241,26,2,235,249,7,236,13,13,247,156,11,241,132,9,236,50,2,244,114,+21,244,146,13,236,109,4,231,120,24,244,8,0,232,35,20,224,59,13,231,+192,17,230,237,3,232,93,11,146,159,2,51,56,32,224,102,36,224,99,11,+233,234,3,224,91,1,2,54,48,49,224,88,29,231,137,0,233,58,15,134,+15,224,33,19,236,62,7,224,29,21,224,133,11,234,164,1,250,51,13,182,+18,167,60,204,76,232,49,3,2,54,48,52,230,11,0,65,37,161,44,93,+157,234,35,17,225,109,22,224,245,17,238,22,0,245,190,5,237,147,1,135,+236,67,131,241,125,11,237,129,29,237,167,34,227,81,6,128,149,224,2,0,+244,180,1,225,161,37,236,119,13,224,10,24,225,152,0,228,51,0,238,5,+2,163,102,2,55,48,32,65,156,237,126,2,36,186,2,80,97,114,2,101,+110,34,234,44,9,200,104,224,55,1,2,79,32,35,2,54,50,32,225,214,+5,161,114,2,54,57,56,224,18,0,241,18,1,235,87,11,160,167,96,77,+106,215,226,36,7,224,124,4,244,20,1,225,219,11,235,16,0,2,85,32,+35,240,191,10,226,237,15,225,131,0,226,108,1,235,210,5,224,222,3,239,+73,4,227,10,2,96,6,226,174,2,226,156,3,240,232,3,222,46,159,225,+128,197,108,170,149,201,160,207,33,12,2,49,50,51,225,13,12,253,121,7,+97,57,106,180,224,43,13,228,90,2,242,44,7,238,18,0,224,148,32,105,+64,224,103,5,33,107,252,113,9,96,148,2,49,50,53,224,45,8,105,226,+2,55,50,32,255,113,19,2,85,32,65,236,25,3,40,40,64,192,96,80,+64,105,228,69,11,247,228,5,226,91,1,172,254,2,57,48,32,226,33,0,+2,51,48,56,230,23,7,76,180,64,170,227,10,7,2,83,116,114,48,129,+227,11,3,162,117,2,55,52,49,224,67,9,163,23,239,47,4,227,12,8,+227,63,6,110,158,225,79,7,224,132,5,2,115,80,114,2,101,99,34,225,+89,6,116,168,224,55,1,249,207,1,192,15,109,248,96,8,203,31,236,160,+7,72,126,151,47,70,93,114,22,2,50,48,53,170,134,234,234,11,64,174,+225,127,5,65,156,98,33,64,26,226,25,7,134,175,171,106,64,108,150,221,+96,104,106,97,2,95,53,49,126,204,2,53,49,51,160,33,150,204,2,90,+32,67,163,58,69,18,241,182,23,232,59,0,232,56,12,231,182,13,251,241,+8,240,156,0,232,10,0,218,189,130,24,241,13,36,224,112,8,207,91,136,+13,127,177,34,3,204,129,128,174,225,243,1,2,116,121,112,2,101,82,101,+2,112,34,32,253,72,12,80,92,2,79,32,95,51,119,65,66,227,91,8,+252,61,4,97,106,130,108,98,226,145,10,224,125,21,2,109,107,84,2,121,+67,111,2,110,65,112,224,128,4,221,38,244,65,1,224,86,45,224,212,5,+245,190,1,194,165,216,250,163,94,162,60,224,49,51,224,159,14,129,177,224,+159,1,2,91,93,34,228,81,20,238,7,7,227,66,1,153,50,236,127,6,+2,76,105,115,2,116,95,84,33,200,175,212,64,111,224,37,9,2,84,121,+101,204,155,64,35,144,20,236,11,38,235,51,17,226,250,13,253,151,3,226,+236,2,226,177,11,234,190,3,170,165,2,53,51,53,226,105,8,236,115,13,+253,193,10,236,13,8,235,255,6,235,74,8,243,5,5,236,37,4,244,241,+11,230,207,0,234,146,12,64,79,180,24,240,156,14,236,176,1,224,86,4,+33,7,2,51,49,57,243,199,11,240,51,1,166,97,102,112,228,50,2,160,+10,243,151,15,226,14,1,2,60,62,34,235,22,14,193,8,32,67,2,52,+55,50,224,99,17,229,254,4,231,66,5,224,128,10,227,12,3,2,49,57,+57,227,12,6,2,69,81,34,225,24,7,178,99,193,120,225,102,2,225,98,+0,129,86,228,155,13,224,128,38,2,76,84,34,228,216,10,224,122,17,76,+108,192,118,225,223,11,224,126,38,2,71,84,34,244,125,14,204,200,232,163,+34,224,50,1,224,38,6,233,73,9,232,196,6,228,178,6,136,194,224,165,+1,2,99,111,109,2,112,97,114,240,217,0,231,226,15,148,78,241,85,9,+196,117,147,46,224,31,9,50,198,2,110,103,95,228,195,1,97,38,32,41,+2,75,50,32,248,184,8,131,1,39,10,224,16,3,243,38,14,2,87,97,+114,2,110,105,110,2,103,58,32,2,99,97,110,243,47,12,102,94,170,119,+83,14,2,55,50,56,224,83,23,2,32,121,101,2,116,44,32,224,66,1,+73,229,97,134,225,16,7,251,225,10,247,169,1,64,227,145,143,127,177,32,+13,227,175,0,136,168,218,236,64,40,201,57,2,66,32,73,2,79,46,112,+58,179,2,111,114,109,2,73,79,32,246,246,2,97,33,212,70,215,128,96,+120,232,47,0,64,72,137,21,229,245,144,133,20,248,114,0,230,9,0,248,+57,1,242,143,36,252,139,0,237,206,0,229,171,14,240,56,5,240,73,24,+229,187,97,228,58,5,129,41,226,137,1,2,38,38,34,229,200,114,233,117,+7,2,84,114,117,228,31,4,228,182,34,228,172,22,161,142,161,179,229,125,+1,229,254,11,224,180,38,2,70,97,108,2,115,101,34,229,128,12,229,32,+19,2,49,57,52,224,72,6,2,61,61,34,229,27,20,118,179,228,251,9,+150,214,64,30,137,218,140,140,2,90,32,90,239,203,1,130,234,183,180,2,+56,55,49,250,20,2,240,171,5,195,37,130,221,225,219,3,134,198,198,197,+155,166,234,99,8,249,15,0,229,15,3,2,49,54,55,232,252,6,2,95,+53,55,36,53,2,52,55,55,96,142,123,149,64,9,36,163,250,11,0,110,+179,2,57,32,95,2,51,53,49,96,105,96,6,234,202,5,97,237,32,239,+133,101,162,219,225,27,1,230,10,0,128,43,250,193,7,184,138,2,111,108,+34,160,32,134,119,2,66,32,89,160,254,55,53,37,200,224,48,1,2,102,+111,108,2,100,114,49,236,229,7,69,4,98,166,227,197,3,211,25,224,13,+5,244,175,5,64,114,134,202,251,51,8,237,16,1,224,74,15,244,74,2,+64,58,2,95,52,56,58,148,37,120,239,182,1,229,159,107,244,57,0,229,+159,3,98,18,101,160,240,39,3,64,9,249,196,3,229,153,5,228,112,0,+252,252,1,143,89,207,95,129,7,235,61,4,233,214,1,128,127,162,186,228,+3,5,98,186,98,107,240,226,3,225,26,0,2,52,55,51,226,150,14,242,+48,5,230,136,12,224,232,13,2,116,111,69,224,230,55,227,161,6,246,189,+12,224,140,1,224,228,11,241,119,2,229,172,5,224,245,36,228,214,7,241,+179,0,232,182,17,210,81,128,202,244,4,3,252,183,13,224,65,3,252,185,+32,65,96,252,190,24,35,110,81,195,35,110,39,145,73,164,100,92,103,106,+231,113,2,64,37,137,81,163,215,65,155,168,36,224,201,90,189,17,253,139,+26,228,89,7,242,30,13,227,250,14,238,217,12,245,90,0,238,254,49,251,+11,18,250,147,23,250,137,5,250,226,7,145,203,248,174,7,239,251,22,224,+99,2,2,82,32,64,232,12,7,240,62,28,224,33,4,64,68,2,95,52,+50,130,42,231,216,5,224,9,3,227,252,3,2,109,97,120,97,210,245,12,+3,224,29,2,2,105,110,66,224,29,5,231,91,8,226,69,5,70,100,135,+214,243,93,0,68,1,236,16,1,229,153,1,167,228,199,182,2,51,52,57,+231,81,17,228,19,10,227,13,1,140,54,215,104,248,99,0,244,223,18,248,+141,9,53,62,109,106,231,194,7,251,20,6,179,40,41,142,225,251,3,198,+154,251,225,6,250,54,11,245,20,0,2,56,51,32,246,234,6,136,215,2,+95,55,57,247,87,1,160,21,64,46,192,188,72,153,2,52,55,32,232,199,+1,109,87,2,51,48,54,32,42,179,129,83,177,2,55,56,32,73,27,2,+55,55,55,224,23,1,64,70,129,134,225,142,1,2,95,56,56,253,35,7,+235,210,3,224,141,2,242,9,13,193,195,245,183,13,224,189,8,225,184,5,+141,166,2,85,32,66,166,77,173,6,2,56,54,48,224,204,3,225,162,0,+2,57,49,51,231,37,3,169,191,98,48,152,246,163,210,128,13,65,16,129,+254,192,23,224,151,7,224,250,3,64,142,138,185,2,85,32,90,226,110,1,+64,22,138,177,55,205,230,253,8,32,217,2,54,53,32,70,136,164,179,192,+50,137,244,158,94,233,58,8,2,67,32,60,123,192,237,101,3,201,39,2,+67,32,61,2,61,32,64,224,28,1,228,172,6,241,133,7,131,111,231,134,+3,217,163,2,49,56,32,32,53,129,187,143,121,174,108,241,200,9,129,76,+2,49,56,49,243,198,18,224,104,60,192,100,225,41,3,138,242,131,19,224,+73,0,34,206,203,142,131,90,36,28,75,232,225,199,0,64,73,174,95,2,+55,55,53,32,4,2,51,48,32,2,95,52,51,226,234,2,251,2,1,2,+89,32,66,43,39,128,135,232,198,15,64,5,254,80,3,200,220,75,103,232,+220,4,128,30,224,70,3,251,252,3,233,246,3,162,203,189,88,254,167,9,+228,202,13,139,224,228,202,1,192,9,228,174,4,228,216,22,240,98,2,253,+147,6,224,23,5,246,11,2,230,252,11,208,93,227,253,6,224,64,15,235,+163,2,224,72,6,97,218,229,92,12,236,40,8,232,33,10,255,125,3,224,+27,2,225,16,1,235,240,3,235,109,7,2,49,49,52,152,168,226,213,9,+192,115,240,182,1,229,213,3,128,70,2,55,57,51,228,129,1,35,235,213,+10,225,205,15,254,158,12,158,201,192,6,236,128,9,254,128,13,2,95,52,+49,238,145,3,225,76,0,254,120,16,236,114,5,192,9,224,145,3,128,181,+192,70,235,162,26,69,222,126,155,229,14,0,165,55,246,23,2,242,55,9,+225,250,2,231,4,5,163,202,224,121,51,232,5,1,224,115,5,243,28,1,+174,108,231,15,6,224,65,1,255,26,11,226,138,6,224,2,3,239,13,3,+227,129,1,239,37,5,224,23,1,226,140,3,234,140,10,224,52,13,234,72,+7,226,152,2,243,85,4,232,116,7,250,8,6,249,170,0,252,78,3,65,+66,251,174,2,201,183,32,25,225,25,1,101,180,251,249,2,155,245,251,243,+6,195,17,225,149,12,241,131,0,232,76,14,225,219,8,253,179,11,2,49,+55,50,197,218,232,156,0,243,16,1,202,71,243,10,11,224,141,0,234,240,+9,228,217,13,235,220,11,235,194,5,225,176,19,236,84,9,225,195,111,232,+115,1,225,195,87,225,71,10,228,190,7,232,17,1,240,234,1,225,229,21,+243,113,5,228,227,94,131,164,228,191,3,228,245,61,228,247,12,224,15,5,+230,195,0,229,5,0,251,107,32,254,3,12,192,85,228,240,13,64,198,230,+252,14,229,97,29,229,49,21,227,107,11,224,60,2,65,223,250,97,0,246,+168,18,2,55,57,32,246,95,5,80,92,2,102,105,110,2,101,100,34,246,+102,8,245,196,1,236,108,13,137,65,251,122,7,2,67,111,110,2,116,114,+111,2,108,46,69,2,114,114,111,2,114,34,32,96,36,64,117,202,117,96,+156,224,76,1,2,95,50,57,2,48,32,102,224,61,0,2,103,101,116,247,+235,5,224,120,5,64,75,145,139,224,50,1,2,115,101,116,2,70,105,101,+2,108,100,34,160,31,142,157,214,0,98,255,224,44,1,2,46,83,101,224,+45,1,128,47,141,20,224,130,4,224,79,4,140,165,44,163,132,8,64,18,+140,161,224,98,15,2,72,97,115,224,98,6,140,158,246,103,6,2,82,101,+99,2,111,114,100,2,115,34,32,128,35,235,152,1,249,69,0,193,216,75,+121,64,34,214,141,224,32,2,160,8,64,29,129,136,2,85,32,67,242,135,+6,226,117,5,228,127,21,32,71,73,116,237,75,4,237,43,8,195,146,237,+43,32,235,84,1,231,188,5,235,88,25,251,124,3,235,4,13,171,248,195,+165,232,75,3,253,222,5,229,61,10,245,66,3,32,248,188,11,226,235,14,+195,198,160,135,228,34,12,224,177,3,234,186,4,2,95,56,51,2,49,32,+35,245,58,1,97,131,33,81,181,246,212,80,2,90,32,75,160,32,224,9,+1,128,7,2,110,111,77,2,97,116,99,2,104,32,102,226,246,1,2,114,+99,47,2,77,105,99,2,114,111,72,2,115,47,84,56,213,2,67,104,101,+2,99,107,46,2,104,115,34,96,47,2,35,49,49,2,49,48,32,32,7,+2,50,53,32,225,78,6,64,234,100,13,239,147,8,225,161,10,113,169,225,+69,12,252,136,4,176,187,242,50,3,224,66,0,2,53,51,53,230,211,13,+244,44,11,225,14,24,233,234,14,226,20,3,225,163,0,230,7,4,128,39,+236,4,9,236,192,32,230,250,3,232,97,2,2,56,52,51,224,81,6,208,+165,241,196,5,241,184,19,232,18,29,249,117,17,222,224,229,176,1,193,23,+205,57,224,231,4,236,235,2,96,175,2,57,57,56,224,12,1,68,80,64,+193,192,74,243,138,1,32,20,120,15,230,28,7,132,111,178,29,201,2,246,+223,8,61,129,97,90,234,71,2,233,46,7,224,153,6,33,41,2,55,50,+50,231,101,3,240,90,3,128,242,143,52,227,114,4,246,141,8,240,61,3,+240,37,15,226,106,11,221,13,231,120,5,33,6,2,50,55,32,198,156,32,+72,228,41,10,224,167,7,242,142,4,187,96,226,228,23,233,123,11,114,57,+227,101,4,224,163,5,229,196,1,248,176,0,244,63,8,116,203,250,18,5,+138,189,232,60,4,232,75,0,2,53,48,57,236,24,1,65,145,126,234,231,+238,2,2,104,97,114,199,177,224,190,1,64,130,167,135,108,73,32,103,52,+21,134,56,2,95,53,53,2,55,32,102,224,64,0,2,110,111,68,2,101,+102,97,2,117,108,116,192,69,64,59,135,147,64,236,117,14,96,6,96,122,+2,95,55,56,224,127,5,2,80,114,105,2,109,105,116,57,40,2,115,46,+61,2,62,34,32,224,128,3,135,184,245,232,0,134,143,230,209,2,210,93,+235,1,1,245,216,9,224,31,27,128,109,136,19,229,52,0,2,55,53,53,+248,71,5,2,55,53,54,99,66,134,238,53,113,234,101,8,32,21,103,170,+2,57,51,52,224,87,2,190,207,2,55,53,55,33,95,85,186,224,1,5,+217,238,229,191,13,239,66,2,239,129,16,224,43,31,224,39,29,32,168,250,+151,7,64,197,136,221,136,156,232,73,1,236,155,0,232,7,0,43,147,249,+21,0,219,92,64,51,231,209,13,65,79,148,150,232,76,21,132,251,160,44,+231,226,20,229,207,5,192,189,233,120,2,224,101,6,2,56,56,50,229,253,+9,236,180,0,161,209,128,68,137,159,226,30,6,67,81,130,24,97,54,226,+24,2,32,50,64,71,225,251,9,255,253,5,225,231,111,224,35,25,224,31,+21,224,27,17,224,23,13,224,19,9,226,105,10,225,181,4,64,29,227,145,+3,2,56,49,55,230,210,1,66,76,253,9,4,69,214,136,3,165,52,226,+106,6,128,18,247,20,2,80,130,231,110,5,224,80,5,32,117,247,68,4,+65,226,212,221,226,171,8,231,109,0,130,169,224,72,2,64,54,39,144,128,+14,235,220,0,248,4,3,218,151,37,31,176,168,34,80,139,190,228,90,0,+227,114,2,197,234,62,242,72,148,251,229,9,2,95,56,57,252,59,7,225,+13,6,32,175,165,202,234,26,15,65,126,133,255,151,211,167,169,231,137,1,+171,164,251,193,3,249,171,4,227,131,1,224,41,22,63,101,236,10,10,224,+239,2,224,31,3,70,0,157,9,227,228,4,224,56,12,224,130,2,204,201,+231,60,0,224,56,21,224,55,6,230,113,2,237,182,0,231,182,7,65,47,+198,243,209,126,128,232,234,196,4,136,209,234,132,1,34,40,224,16,2,98,+111,128,41,128,65,204,224,226,52,1,137,151,123,66,2,49,57,57,160,124,+247,93,7,224,120,41,32,189,108,81,128,128,251,102,2,224,69,56,236,99,+2,243,210,0,225,96,1,58,140,226,123,3,65,69,199,244,218,75,246,86,+3,228,63,1,234,212,0,64,251,113,32,96,89,253,244,2,225,57,28,32,+145,227,63,3,249,144,11,244,210,3,244,167,10,192,218,158,138,224,89,1,+226,97,6,224,75,7,244,239,10,224,65,11,250,148,10,224,57,5,224,54,+11,225,184,5,236,241,4,224,44,7,32,21,100,28,225,30,12,33,28,236,+225,2,225,181,0,225,191,3,227,8,1,65,186,189,247,174,4,228,49,0,+96,99,64,9,249,241,7,228,19,16,227,164,1,224,46,1,254,17,12,196,+27,235,163,0,204,54,192,32,235,23,1,208,203,253,53,3,38,1,236,173,+1,229,237,5,66,83,2,48,53,55,101,78,229,99,6,196,134,240,125,4,+84,9,251,174,0,224,103,10,198,233,96,87,104,35,64,21,225,180,1,229,+137,14,224,255,6,224,222,6,241,200,1,164,167,233,111,1,251,66,4,204,+64,79,29,228,221,3,247,141,1,224,171,2,32,43,67,84,224,158,5,228,+18,16,130,63,224,253,4,255,163,6,224,34,13,225,62,37,2,52,50,32,+225,38,0,229,249,0,225,50,8,225,195,7,193,244,145,167,129,12,106,132,+224,109,19,197,76,76,42,255,67,5,224,21,18,232,143,10,97,232,47,104,+236,235,3,2,102,117,110,2,100,101,112,204,228,52,145,231,126,15,226,143,+10,227,78,3,238,126,25,253,27,0,232,104,3,65,60,197,32,226,135,2,+226,223,3,224,145,18,231,45,14,227,171,1,225,110,0,225,218,5,224,128,+2,128,130,241,90,0,224,130,13,226,252,10,240,39,0,232,63,11,232,104,+31,236,77,6,224,199,7,224,30,3,192,199,225,65,12,247,83,2,224,190,+15,232,200,13,232,86,17,227,161,11,227,56,0,224,126,2,79,79,98,183,+64,38,225,120,1,64,13,235,73,9,168,5,224,76,3,229,26,4,228,7,+4,232,177,0,228,65,67,225,213,9,245,181,7,228,25,11,224,248,11,64,+118,231,179,0,38,105,232,65,2,227,142,10,224,212,161,250,41,0,236,108,+11,229,79,3,224,230,15,227,181,12,230,187,2,32,217,36,149,128,179,229,+209,3,71,174,144,152,128,234,2,80,32,35,235,103,3,201,102,133,12,64,+44,216,221,230,104,3,253,172,7,79,124,100,241,32,8,37,165,32,12,184,+227,2,56,48,52,230,73,11,225,142,5,225,149,8,2,56,52,50,230,121,+42,251,243,6,225,138,33,228,162,3,230,98,1,2,56,55,32,224,61,4,+69,231,2,55,52,57,230,165,10,2,51,48,48,230,135,23,228,80,9,230,+109,2,2,56,55,52,152,104,78,234,226,100,8,224,109,7,2,50,57,57,+224,109,22,236,68,3,229,144,17,160,147,64,110,128,139,236,76,1,224,147,+24,235,184,5,241,99,1,239,228,1,226,73,11,209,70,162,118,225,152,6,+224,44,5,65,104,122,203,2,95,56,53,106,155,128,144,64,25,240,28,1,+32,68,194,40,64,56,64,28,206,186,96,28,194,123,192,28,237,167,1,96,+30,230,192,3,224,128,9,204,142,81,180,85,65,64,19,212,41,234,49,16,+227,104,0,64,45,227,102,3,96,112,233,85,3,225,46,21,128,64,195,122,+239,122,2,235,66,0,227,15,1,241,13,7,2,48,50,54,228,208,6,130,+14,224,17,1,210,135,236,33,3,230,145,10,227,134,3,198,69,224,118,1,+232,247,8,194,82,226,73,3,224,129,9,237,20,10,249,205,3,224,81,6,+224,49,3,238,142,8,233,221,1,2,95,57,49,115,131,248,223,6,32,22,+241,157,2,32,216,62,129,133,24,249,188,2,2,85,32,65,224,110,4,233,+156,20,129,151,130,240,49,181,2,51,32,58,128,78,64,14,90,1,55,42,+36,54,151,47,246,233,12,63,99,2,115,116,114,2,97,105,110,247,52,3,+66,51,226,181,1,236,219,0,162,182,76,65,96,29,64,27,131,52,65,78,+64,25,130,237,170,24,234,33,1,252,198,4,235,1,1,224,6,5,251,24,+2,249,144,3,193,142,233,108,16,249,191,0,224,49,22,226,236,7,233,24,+10,224,34,7,196,182,66,159,249,68,5,2,83,32,66,226,44,6,247,61,+1,231,133,6,128,221,254,65,11,150,193,249,227,14,201,36,249,227,40,229,+99,4,144,185,224,18,2,216,167,249,253,5,2,83,32,79,249,154,1,218,+150,252,179,5,250,30,11,234,101,36,248,94,5,255,90,0,228,113,3,234,+26,18,192,32,195,184,225,118,9,161,244,225,152,0,233,63,3,224,123,3,+255,177,8,225,160,17,225,162,1,246,113,11,224,138,102,128,38,235,69,1,+191,80,2,50,56,32,250,68,4,255,36,4,233,156,16,249,29,2,248,241,+23,128,162,110,173,2,49,51,49,248,245,16,250,218,1,249,17,15,200,14,+65,1,238,167,12,228,45,1,128,99,2,50,48,56,165,248,160,210,229,8,+6,64,144,54,208,224,105,7,54,142,2,50,32,83,158,176,2,90,32,67,+255,127,4,226,248,1,159,40,2,50,53,50,229,77,7,87,138,231,38,0,+225,24,19,244,222,7,64,142,64,29,160,57,159,128,197,235,161,22,224,103,+3,244,95,1,224,105,25,236,12,4,247,242,16,249,17,11,247,97,0,224,+28,1,227,123,0,228,195,4,166,195,149,37,64,203,239,238,0,164,23,189,+180,128,108,228,28,3,228,113,3,203,59,155,37,2,51,51,32,225,2,16,+224,88,26,129,39,253,14,1,197,143,228,111,2,245,183,2,39,78,62,27,+2,55,55,55,64,4,224,243,1,64,66,232,249,1,224,66,3,65,28,224,+61,27,200,246,253,143,22,2,50,57,32,253,143,23,32,76,251,148,2,67,+77,124,202,34,175,2,75,52,32,2,90,32,90,160,1,225,3,5,192,45,+167,214,253,190,9,228,82,5,251,202,205,251,162,16,33,25,65,120,191,227,+2,55,53,32,32,43,109,53,64,24,136,169,100,174,65,127,233,1,1,2,+36,100,102,2,108,116,34,224,64,0,200,183,228,233,0,229,128,3,89,173,+122,235,228,50,9,251,173,27,237,115,29,32,132,140,86,76,224,2,55,56,+53,243,130,7,133,236,235,88,6,95,11,160,1,232,67,3,251,27,7,234,+170,1,231,157,1,224,96,1,237,159,8,232,25,0,249,205,7,129,43,133,+30,235,250,0,109,176,239,111,28,173,222,253,61,2,64,245,128,31,64,88,+133,15,248,37,4,239,204,23,225,38,3,64,76,193,247,132,50,235,218,0,+235,197,7,64,42,135,5,225,81,2,64,55,132,39,185,124,249,136,3,236,+101,3,234,175,4,250,20,7,234,186,5,226,209,1,234,140,6,226,203,5,+233,12,1,224,58,26,2,49,50,32,224,59,12,234,255,2,224,59,17,226,+87,5,224,116,0,235,158,0,224,59,19,230,101,5,224,248,10,235,176,21,+229,22,1,235,127,16,224,35,8,243,55,15,238,19,11,237,150,10,225,248,+12,223,57,67,139,227,80,5,253,202,5,234,150,6,253,155,8,245,104,7,+234,18,3,224,47,1,193,94,160,35,243,240,10,232,189,0,132,122,96,24,+126,32,130,251,232,189,3,131,2,2,55,48,32,66,211,158,0,32,39,231,+222,5,67,45,114,65,228,236,2,2,120,34,32,224,215,11,231,11,1,130,+5,228,199,7,242,85,7,250,161,15,32,112,226,207,3,225,252,1,240,9,+6,2,56,54,51,64,4,228,17,1,226,127,3,241,237,2,232,78,10,225,+47,11,143,62,2,56,54,55,225,220,8,227,89,13,226,225,25,224,61,5,+225,250,17,224,39,11,193,250,253,21,6,225,86,8,114,203,229,234,1,242,+203,7,253,242,3,240,209,10,253,200,4,240,85,1,130,2,169,100,2,49,+48,48,236,1,7,224,162,16,225,105,10,224,173,6,205,145,64,86,71,4,+108,158,98,10,144,221,2,54,51,52,238,35,14,238,202,3,250,243,1,224,+6,0,96,4,249,94,8,245,137,14,226,72,6,41,112,232,52,11,241,213,+1,224,83,25,224,90,28,232,145,5,224,94,3,229,0,8,234,248,2,235,+89,2,226,107,4,225,204,11,33,188,225,172,1,224,82,14,246,114,5,236,+12,15,229,93,9,224,98,11,246,150,9,242,247,8,193,151,248,124,1,238,+142,9,2,95,57,48,244,173,5,229,77,8,32,35,2,54,50,48,233,178,+12,247,114,10,225,30,11,226,200,3,224,180,6,229,227,21,224,54,1,224,+153,42,231,73,5,228,39,13,224,60,3,228,94,8,240,200,13,240,201,17,+230,43,16,230,54,6,230,42,5,129,49,230,36,13,132,117,134,31,99,176,+166,42,238,145,1,230,40,30,224,166,1,229,147,7,224,140,1,230,138,2,+224,95,5,241,227,31,246,132,9,229,74,14,122,244,2,53,55,54,224,95,+9,226,192,5,233,8,12,227,187,1,252,237,4,180,148,229,113,0,246,254,+4,100,252,243,104,7,224,249,1,240,83,1,144,252,200,145,98,91,225,84,+1,2,98,97,100,2,32,102,105,2,110,97,108,2,32,100,111,2,32,115,+116,2,97,116,101,2,109,101,110,245,109,0,242,30,21,224,21,11,234,41,+1,234,47,6,234,11,5,230,237,9,180,65,236,187,5,230,111,3,237,113,+5,160,16,224,107,0,226,149,9,224,10,35,226,193,7,242,93,8,229,72,+10,251,98,7,194,209,251,59,3,224,19,1,241,118,14,111,161,2,52,49,+52,240,134,15,225,134,11,227,90,17,225,79,5,2,95,54,56,224,207,3,+198,233,110,65,177,62,226,92,2,144,234,194,92,200,239,240,86,0,2,57,+57,55,228,193,2,201,80,226,100,3,216,54,32,30,131,52,160,84,67,26,+151,237,2,53,52,54,238,50,5,192,84,97,251,173,176,129,50,225,42,0,+64,198,82,243,226,178,2,2,102,97,105,2,108,34,32,225,164,5,32,36,+144,223,254,160,0,226,226,2,2,105,110,100,224,47,3,192,180,47,180,225,+238,7,224,108,9,2,62,62,61,224,59,1,228,148,11,2,98,34,32,230,+189,10,226,184,0,226,118,38,250,54,7,163,189,226,91,82,225,206,3,224,+255,12,224,223,12,232,169,5,229,252,7,64,71,253,229,0,224,96,3,246,+168,25,229,93,2,230,235,26,226,223,3,229,207,14,224,49,6,245,32,9,+230,1,23,226,36,3,231,27,14,233,190,12,225,216,7,96,22,32,2,99,+34,103,164,225,101,1,2,70,114,111,2,109,84,104,2,101,110,84,2,111,+34,32,228,125,6,244,132,0,32,12,121,6,227,243,10,224,154,32,224,147,+3,160,93,224,142,19,226,249,2,224,125,103,225,8,2,224,123,23,225,248,+29,232,226,3,225,248,29,234,81,3,224,223,21,232,111,3,165,3,224,211,+10,192,209,229,181,17,232,90,7,228,70,1,235,72,9,229,184,0,155,68,+251,216,8,216,99,234,159,8,236,82,14,234,138,10,168,212,2,51,49,53,+231,122,7,242,15,10,224,21,1,255,178,6,231,214,2,247,249,4,248,39,+1,217,64,226,249,8,238,166,2,235,129,10,183,198,2,48,48,48,198,83,+2,55,57,48,96,79,48,131,241,39,20,239,179,3,97,173,56,168,231,246,+9,101,167,165,172,244,122,5,128,51,249,1,5,232,12,5,224,170,2,149,+177,96,164,238,157,17,238,155,3,98,67,160,123,186,13,32,109,228,134,9,+233,214,0,32,30,231,233,2,224,62,12,249,101,6,230,250,1,252,44,13,+234,143,1,242,183,10,230,201,1,193,129,254,59,10,238,105,6,239,252,0,+181,93,225,172,15,226,133,12,102,219,134,66,70,89,176,79,230,79,29,226,+104,18,238,184,5,233,91,1,224,207,65,245,226,16,129,56,242,166,4,240,+195,1,130,39,247,226,5,128,255,32,6,224,251,15,245,114,46,226,195,5,+245,53,39,237,80,3,238,105,29,232,125,3,241,246,17,227,236,8,156,42,+243,236,1,2,52,53,32,243,236,16,241,124,11,226,207,9,240,88,9,226,+203,15,225,253,12,227,6,2,226,8,5,160,171,2,56,55,49,234,155,3,+131,242,2,53,49,32,249,53,4,225,227,3,2,95,53,49,228,180,11,252,+16,5,196,181,227,240,7,246,90,55,233,172,1,242,64,25,234,131,3,233,+38,13,239,151,3,230,146,5,242,205,16,224,50,6,165,246,224,46,3,32,+242,91,7,229,160,7,227,91,10,160,21,227,92,6,101,178,2,56,52,32,+228,104,18,237,47,6,226,69,19,238,247,5,254,252,19,230,217,7,238,209,+4,238,212,5,224,23,4,239,61,8,239,90,5,231,220,2,224,85,8,224,+48,13,228,9,11,250,43,4,228,59,8,228,68,9,253,36,11,235,145,18,+239,248,12,224,85,44,225,69,7,253,141,8,247,6,9,224,50,23,245,46,+5,240,226,15,247,47,23,245,211,6,251,108,10,240,233,12,246,31,24,225,+164,4,247,223,6,224,212,16,224,64,11,253,109,1,224,90,10,246,130,3,+224,96,1,228,11,9,225,55,27,224,102,92,225,76,10,247,189,1,253,131,+1,2,50,48,51,185,131,39,147,57,131,238,126,9,224,62,3,224,55,15,+36,47,226,68,7,32,19,103,229,231,127,22,230,200,17,102,15,132,247,240,+226,1,233,199,0,240,233,8,32,9,2,83,116,114,2,105,110,103,251,34,+7,244,56,12,224,118,3,240,66,4,230,13,8,2,57,48,57,226,63,30,+227,14,1,249,216,0,226,211,3,229,225,3,249,233,0,33,77,240,176,3,+233,172,19,227,188,14,252,233,15,224,165,9,250,45,12,227,164,121,236,128,+13,224,64,15,226,133,0,226,135,15,244,16,9,231,244,5,194,151,108,96,+2,57,49,32,128,17,2,50,32,95,2,49,49,49,241,123,13,226,165,41,+226,158,13,2,82,97,116,2,105,111,110,2,97,108,34,226,160,210,253,102,+13,230,95,38,230,73,8,226,171,25,226,173,16,232,55,5,229,131,3,231,+85,5,229,183,27,226,188,26,252,103,25,247,242,3,247,167,5,231,212,4,+226,223,16,236,213,11,240,102,4,224,89,46,2,49,49,57,232,143,19,236,+3,12,225,90,13,224,187,17,227,155,9,227,214,32,227,154,9,230,96,5,+227,228,24,2,56,54,32,32,228,252,236,2,193,56,251,176,7,64,109,163,+206,2,54,57,56,192,58,2,57,57,32,246,218,2,2,55,57,50,140,41,+225,52,4,224,131,16,224,71,13,228,99,75,2,73,110,116,2,101,103,101,+2,114,34,32,228,98,199,225,237,1,83,106,2,75,32,95,2,49,56,55,+64,165,97,219,241,241,2,140,172,2,56,32,95,174,255,2,53,50,32,240,+71,3,237,38,3,2,56,57,53,160,8,232,188,4,228,56,8,194,213,233,+180,1,235,245,18,235,151,32,235,143,34,237,84,25,224,173,0,226,208,1,+204,179,225,104,0,185,247,226,191,3,2,55,56,55,227,145,20,235,78,30,+224,151,74,231,137,11,254,50,2,148,3,254,67,4,239,140,22,129,163,225,+151,10,242,105,3,181,146,239,176,8,249,176,1,64,234,80,32,228,120,1,+225,0,1,235,190,2,227,69,12,2,49,48,52,164,212,253,62,10,230,190,+11,242,29,19,241,31,5,242,29,15,240,79,26,228,28,19,253,206,14,228,+32,43,224,149,13,241,137,23,2,48,48,53,253,150,10,228,82,6,224,79,+4,226,89,3,116,5,228,88,15,224,245,12,227,251,0,240,3,10,69,198,+106,38,2,50,49,32,240,166,8,224,128,2,228,54,7,49,43,227,101,1,+225,6,5,225,149,7,49,184,241,230,3,245,160,9,247,47,7,99,8,224,+128,2,227,171,1,224,164,0,246,34,8,64,83,179,33,244,38,0,120,186,+197,21,240,151,11,225,122,0,225,241,0,232,46,8,67,190,114,119,62,195,+2,55,50,56,131,217,245,52,3,224,192,10,64,14,2,56,55,57,247,229,+0,2,51,50,54,227,33,0,225,101,1,255,140,2,244,115,7,225,253,2,+64,215,2,90,32,95,228,19,1,37,215,132,70,244,63,8,253,253,0,224,+230,9,127,108,96,189,128,55,63,253,32,149,83,35,231,107,4,2,116,99,+69,2,120,112,114,2,58,32,99,2,97,110,110,2,111,116,32,2,104,97,+110,2,100,108,101,2,58,32,34,225,232,3,96,60,160,69,82,224,192,219,+248,207,6,224,101,8,2,79,32,35,96,56,250,246,1,192,64,229,21,7,+224,74,5,2,58,49,49,2,50,50,32,2,64,10,65,160,80,2,56,56,+48,151,101,64,54,64,28,33,81,32,28,161,251,244,48,12,231,61,7,2,+56,52,52,244,20,3,32,73,2,95,52,55,224,126,0,64,83,32,38,32,+83,225,24,1,2,80,114,105,2,109,105,116,2,105,118,101,2,115,46,87,+2,111,114,100,65,16,32,38,66,44,96,151,2,48,57,51,233,134,0,64,+7,98,38,32,31,33,158,237,127,0,75,154,170,6,2,55,49,50,32,8,+246,194,0,64,35,162,56,224,35,20,188,96,224,35,17,52,221,64,39,34,+255,2,52,57,57,224,54,6,161,187,32,170,224,147,2,73,128,234,64,3,+2,95,55,48,248,205,0,224,24,7,225,165,1,224,69,5,160,117,128,251,+224,52,2,2,95,57,55,229,207,3,224,26,8,236,99,5,224,83,7,224,+71,14,224,69,53,192,44,224,69,20,65,215,32,61,33,215,2,83,32,83,+192,1,91,72,64,82,242,229,1,215,143,132,176,245,74,1,102,205,165,178,+160,13,64,143,227,154,1,229,88,3,64,29,231,95,3,131,54,2,54,48,+32,131,249,2,65,32,64,96,62,2,53,56,32,227,202,3,100,67,224,31,+14,216,143,224,39,25,224,35,31,224,240,89,2,55,55,32,224,239,128,224,+241,16,231,14,5,224,20,0,166,246,224,241,1,224,176,27,224,134,29,69,+249,184,164,174,54,67,149,68,185,224,227,20,224,54,12,32,158,224,56,30,+74,229,129,220,224,64,5,2,53,57,32,224,63,14,102,237,141,197,224,29,+8,228,4,6,236,138,3,224,214,5,224,63,14,224,93,36,67,185,34,74,+102,12,231,213,1,233,245,1,160,122,128,113,106,180,64,83,134,143,224,113,+35,228,45,3,173,39,240,164,0,234,232,2,224,224,1,96,64,168,136,224,+8,1,2,49,49,53,192,29,39,2,230,107,1,2,68,97,116,2,97,46,+82,83,85,2,46,37,58,2,32,48,32,2,100,101,110,2,111,109,105,2,+110,97,116,2,111,114,34,224,233,2,32,161,68,163,194,151,224,230,0,2,+89,32,64,232,90,1,200,216,239,23,4,225,7,75,195,45,138,97,32,39,+236,211,5,226,132,26,224,32,22,64,242,33,47,32,242,32,170,2,52,32,+90,232,71,0,64,24,32,53,103,135,65,112,101,220,2,52,56,52,230,58,+12,224,23,2,192,189,64,63,33,3,224,63,16,230,52,4,224,63,14,136,+159,43,20,102,127,225,58,2,64,210,104,114,224,137,3,64,49,136,180,2,+85,32,90,224,201,6,136,120,65,141,224,23,4,64,85,72,144,2,47,32,+58,136,94,64,174,72,183,32,25,96,145,32,7,66,77,64,7,190,31,32,+113,101,168,72,44,60,214,64,154,136,100,2,38,48,46,128,187,174,110,231,+191,2,136,95,128,1,45,76,224,52,11,231,238,4,246,98,4,64,21,32,+27,224,233,1,227,252,10,224,70,0,2,38,49,46,160,79,32,53,64,177,+64,215,131,188,2,85,32,67,137,203,160,203,2,80,32,38,128,44,128,228,+160,66,224,64,0,64,1,2,89,32,66,64,38,192,92,255,43,0,225,29,+0,2,49,48,53,226,102,2,64,87,128,19,2,95,57,53,235,45,8,64,+137,131,92,2,105,116,111,2,102,32,58,128,60,226,31,0,64,15,130,111,+163,84,2,115,101,113,164,95,128,9,64,177,192,71,162,88,2,54,51,32,+41,172,97,160,2,52,52,57,225,86,2,64,139,129,59,2,48,57,57,160,+169,128,234,76,19,73,119,97,95,192,45,2,55,51,32,224,13,1,64,95,+130,120,2,102,62,61,96,13,130,84,2,102,62,32,64,12,170,194,2,60,+61,32,2,58,49,48,64,92,96,13,96,12,130,63,2,102,110,101,2,103,+32,58,130,40,64,14,2,42,32,58,129,113,64,12,2,45,32,58,130,82,+64,12,2,43,32,58,129,73,32,12,251,134,5,224,11,1,192,243,75,10,+162,194,2,50,32,65,224,20,0,128,168,65,165,176,154,70,109,64,24,128,+179,206,85,196,45,245,252,2,245,165,4,249,158,3,206,19,241,236,5,208,+82,196,136,148,245,241,181,2,231,223,1,165,180,241,66,25,243,15,3,224,+40,10,238,13,1,246,165,3,243,44,20,243,32,22,205,246,106,119,116,32,+44,239,64,6,245,164,2,252,155,9,192,53,224,36,18,224,119,12,242,43,+3,224,65,10,243,76,7,242,78,15,195,233,224,68,12,233,0,5,224,32,+10,246,64,9,243,7,4,240,56,9,147,142,241,98,7,36,234,224,241,1,+225,253,1,195,217,117,109,237,217,15,54,101,141,216,96,141,224,37,4,103,+147,182,133,2,95,84,121,2,112,101,46,246,146,2,64,48,163,82,224,86,+11,2,70,108,111,2,97,116,87,192,40,232,160,16,112,123,46,250,179,76,+212,62,64,51,163,147,224,92,11,2,67,104,97,224,131,0,131,173,225,39,+1,225,236,2,97,36,240,133,0,2,48,53,51,242,102,11,241,182,8,36,+110,239,62,1,240,162,4,131,237,192,159,229,14,0,240,207,11,2,95,56,+50,194,25,235,249,3,224,108,5,32,96,2,51,52,54,224,17,1,101,165,+2,54,49,32,225,15,0,128,16,64,28,133,235,135,27,226,138,8,132,141,+66,218,96,14,231,67,1,224,9,1,241,247,3,2,95,55,54,224,206,6,+228,128,1,241,223,7,159,160,32,218,112,212,242,77,1,240,116,6,224,198,+2,66,126,233,35,3,64,15,64,23,65,50,166,24,2,53,51,53,96,22,+65,33,64,22,133,38,2,67,32,80,99,30,2,79,32,64,224,192,2,51,+113,39,240,224,122,3,37,97,2,95,55,53,225,134,0,133,74,2,83,32,+80,225,104,1,241,15,7,32,155,224,64,1,226,41,3,67,77,245,226,13,+241,34,11,194,78,226,21,6,66,182,102,182,245,32,9,224,137,7,2,51,+48,32,224,130,7,229,152,1,179,201,180,77,245,77,6,243,44,8,224,182,+0,162,223,177,237,113,238,192,140,200,15,100,102,64,8,82,82,84,29,196,+118,224,19,11,235,4,0,50,14,227,152,1,242,156,4,227,147,1,2,101,+120,105,2,115,116,101,2,110,116,105,2,97,108,115,2,32,110,111,2,116,+32,97,2,108,108,111,2,119,101,100,2,32,105,110,2,32,112,97,2,116,+116,101,2,114,110,32,2,98,105,110,2,100,105,110,2,103,34,32,255,201,+10,227,132,13,97,124,104,17,225,118,21,33,161,229,64,9,74,91,224,42,+8,66,40,133,3,193,244,197,74,231,193,0,64,74,96,31,76,74,250,36,+5,248,233,0,231,149,24,248,75,2,251,34,2,208,35,144,38,2,56,55,+55,237,48,4,245,66,18,2,54,50,54,65,117,194,186,252,30,2,2,99,+110,83,225,80,3,252,173,5,247,129,13,226,93,0,227,212,0,2,54,55,+32,228,136,13,65,89,231,223,1,207,36,168,13,249,56,0,226,144,7,230,+157,3,230,167,4,224,42,7,247,249,0,67,234,224,39,2,96,237,41,221,+195,222,237,197,9,32,30,65,12,160,58,69,18,192,43,246,8,0,228,241,+1,196,195,149,186,61,173,194,44,224,124,3,163,187,229,39,3,224,11,3,+229,19,7,131,182,255,154,1,133,250,227,229,3,2,57,50,50,251,129,12,+225,146,7,76,107,97,234,225,213,4,2,68,34,32,229,138,13,162,45,225,+224,1,195,248,32,71,2,57,53,51,229,34,5,226,20,16,239,170,1,226,+31,10,225,140,5,225,180,24,240,98,4,66,229,234,42,1,228,210,3,234,+30,4,251,0,0,217,221,227,37,7,224,24,0,97,235,64,125,160,113,161,+223,225,155,3,230,221,3,230,233,5,226,236,8,224,77,26,229,179,1,226,+99,33,226,72,36,227,210,12,226,91,9,226,45,2,195,167,164,48,225,164,+3,196,180,137,129,234,13,6,2,55,53,51,71,228,224,53,2,225,13,0,+230,71,4,96,15,104,12,2,95,50,49,2,51,32,85,232,17,2,192,53,+228,157,5,230,138,9,52,198,241,217,0,226,47,5,128,159,137,248,68,107,+224,157,0,2,54,55,48,96,119,231,194,0,64,129,224,196,26,162,151,192,+112,234,66,1,2,56,51,55,181,82,144,5,250,18,3,64,94,202,33,155,+44,234,27,13,2,54,56,32,230,148,27,170,27,234,29,12,162,97,224,119,+1,206,58,212,155,233,79,3,73,10,224,113,23,229,149,11,224,27,1,224,+127,8,32,160,130,185,224,131,3,137,113,192,131,226,87,7,232,40,1,235,+16,19,167,137,235,16,23,64,155,105,198,170,134,2,85,32,95,229,199,0,+224,122,9,231,221,1,224,148,17,150,134,202,174,192,102,218,249,100,111,224,+109,0,252,144,10,127,24,234,181,6,236,37,3,225,147,4,161,224,236,35,+0,224,127,1,128,23,252,252,3,233,127,0,253,191,4,108,2,97,43,99,+36,146,43,252,31,6,203,104,133,32,64,87,239,29,6,226,32,7,224,40,+0,2,54,57,32,225,2,1,136,202,72,233,128,205,32,19,64,31,172,142,+197,142,133,72,75,86,99,78,224,214,4,230,74,5,226,232,5,32,133,2,+57,48,57,233,252,15,238,153,13,193,77,227,90,7,225,84,7,237,159,16,+96,40,163,133,192,166,128,37,225,255,3,192,236,132,246,225,252,0,39,219,+224,69,0,224,203,2,228,79,4,2,57,57,53,224,240,10,132,102,2,56,+56,55,254,217,19,87,170,116,88,101,38,54,183,231,225,7,224,47,9,253,+119,2,2,51,48,55,237,36,11,2,54,54,32,225,78,7,231,115,10,101,+183,131,102,168,199,243,182,7,105,197,99,227,224,213,2,2,53,56,52,241,+195,2,225,223,7,165,198,83,159,228,91,2,2,54,52,32,191,105,234,159,+1,232,238,9,75,29,232,218,5,103,33,224,185,1,233,188,5,230,125,3,+128,2,225,251,3,236,213,6,33,101,227,102,5,162,87,160,56,230,121,6,+2,57,53,52,233,104,10,225,241,10,224,174,7,225,253,19,232,145,4,235,+81,7,232,195,7,237,53,4,224,162,11,2,53,56,53,224,87,10,224,199,+14,231,65,10,236,233,2,2,54,53,32,225,243,3,135,50,52,110,2,51,+32,75,2,52,32,75,2,52,32,65,224,30,4,230,242,3,47,83,206,7,+194,147,98,149,72,135,194,131,226,225,0,239,126,5,192,78,245,4,1,129,+254,235,146,3,66,156,67,188,69,182,201,42,235,192,8,225,243,1,228,120,+0,156,65,198,6,252,105,12,224,32,3,228,112,5,226,82,6,197,53,239,+133,3,241,37,8,250,167,0,64,60,163,82,228,90,0,130,198,224,19,5,+225,3,5,176,187,2,55,55,51,33,43,160,19,213,223,198,140,198,147,2,+95,50,48,132,201,243,164,12,231,72,20,226,124,2,232,13,7,173,33,2,+56,49,55,232,146,3,127,55,44,74,244,53,5,224,95,14,64,180,246,123,+1,246,121,1,246,116,10,238,218,20,227,72,8,228,239,2,37,239,97,141,+169,192,225,77,5,229,251,3,159,52,2,48,53,55,253,31,4,2,48,53,+56,224,239,2,37,111,77,40,2,52,49,32,128,43,227,111,2,90,108,32,+128,2,50,48,51,192,15,2,57,49,51,226,194,12,242,222,3,245,82,19,+128,9,224,146,1,225,51,1,135,112,106,89,2,95,53,52,153,185,96,140,+114,122,141,0,144,87,64,5,32,175,198,241,64,38,203,163,46,26,161,171,+67,240,64,25,217,250,112,179,134,91,2,53,50,32,224,120,2,65,73,103,+233,128,88,231,237,0,72,54,161,196,224,190,7,240,208,0,68,86,136,17,+128,159,208,128,228,209,3,225,241,0,225,231,1,252,223,7,225,48,5,226,+23,0,226,241,0,210,65,2,54,56,54,237,127,11,242,162,8,244,74,6,+237,66,3,136,170,225,187,5,224,120,1,234,45,4,243,87,5,94,22,224,+77,2,166,245,245,144,15,224,195,2,244,196,15,96,215,229,46,2,105,66,+247,100,3,224,69,5,245,37,15,227,204,16,66,99,203,85,133,163,242,13,+10,64,36,2,49,32,35,225,144,1,229,3,10,224,123,1,34,56,240,3,+10,244,162,1,245,70,7,66,33,132,211,2,75,32,66,231,21,10,2,57,+50,51,238,63,23,237,214,4,2,57,53,49,238,57,37,2,57,53,50,230,+247,17,64,157,197,93,70,115,250,181,7,240,97,1,228,186,0,128,28,226,+217,2,249,166,4,227,209,3,251,101,1,224,50,20,245,17,5,161,1,176,+236,251,52,6,229,164,1,174,100,198,14,248,238,6,128,63,126,153,243,96,+0,240,254,1,177,38,2,95,49,53,33,59,160,31,233,89,3,253,207,1,+130,161,208,218,245,170,11,2,50,53,32,244,52,7,2,116,111,111,2,32,+109,97,2,110,121,32,2,97,114,103,2,117,109,101,2,110,116,115,244,66,+6,224,72,19,224,70,5,2,102,101,119,224,69,11,61,184,226,128,5,251,+121,12,233,52,3,97,47,248,164,10,224,49,6,235,158,3,224,49,12,252,+169,19,102,21,224,93,19,224,31,3,131,141,224,143,23,224,48,6,236,209,+5,234,213,6,96,17,99,28,71,175,70,178,180,136,224,70,2,227,234,8,+224,95,1,2,83,32,67,164,214,133,186,253,150,22,237,65,1,224,40,22,+2,49,52,32,224,41,31,224,83,1,225,13,13,224,31,3,129,63,225,209,+25,246,94,7,224,49,5,230,151,10,224,100,3,243,43,3,251,245,8,230,+202,11,224,99,9,254,227,41,244,236,4,224,39,5,247,71,1,224,102,5,+224,149,12,224,249,7,244,186,7,224,202,42,126,52,229,221,4,111,62,106,+137,2,52,56,32,203,231,160,69,228,82,13,249,243,32,2,66,97,100,217,+219,246,172,5,69,179,138,92,104,233,32,91,2,52,57,32,128,22,217,123,+69,202,167,163,229,137,13,224,28,3,232,160,0,193,20,200,187,225,185,1,+232,203,1,236,87,3,225,202,0,232,198,8,227,44,16,230,73,5,224,58,+26,230,80,4,235,64,4,245,163,2,224,59,15,224,119,5,242,139,2,128,+58,230,140,21,229,83,29,145,63,236,67,8,212,139,240,110,12,241,156,8,+128,142,204,60,68,216,232,95,13,246,189,12,243,137,20,235,136,9,238,83,+3,233,47,9,242,144,4,234,154,15,236,92,7,238,75,4,253,71,14,109,+67,33,204,233,59,8,233,185,14,140,163,98,216,39,198,238,62,1,225,88,+55,244,95,7,234,104,9,236,179,3,225,46,1,254,236,21,240,250,7,235,+77,3,192,19,230,237,1,241,110,1,224,170,0,250,36,7,225,120,15,239,+142,3,207,148,224,152,6,241,100,15,225,176,5,245,203,3,254,244,11,227,+242,2,196,227,174,159,184,135,229,10,8,230,38,6,130,77,225,240,10,242,+73,8,225,197,39,2,54,51,53,225,196,18,254,65,0,228,93,28,233,70,+9,228,211,4,224,50,11,246,73,6,228,33,8,224,31,3,65,13,230,251,+7,193,33,236,133,7,227,187,6,227,235,5,238,125,1,227,255,5,225,151,+2,211,11,225,151,19,162,64,246,12,0,76,63,2,56,54,49,163,111,2,+51,52,57,234,92,1,239,132,3,227,46,17,254,137,9,134,89,228,86,6,+2,56,54,51,177,84,224,89,14,50,209,224,184,10,253,160,11,234,86,19,+225,33,7,248,170,10,51,49,160,100,100,86,241,208,4,249,162,8,238,221,+8,192,33,163,106,237,234,6,151,132,234,92,11,233,105,22,228,122,13,224,+13,3,232,170,20,224,246,9,243,13,10,224,220,32,231,225,0,229,178,10,+123,252,177,92,224,127,1,225,242,11,130,79,251,85,5,161,26,96,87,2,+50,57,32,255,2,21,227,252,5,131,151,112,30,247,231,1,160,8,96,150,+2,53,48,56,130,90,238,77,3,228,37,22,225,9,2,238,247,3,229,204,+7,228,0,6,246,56,7,246,196,2,228,115,28,230,129,5,231,75,11,239,+126,2,234,255,13,225,240,7,228,74,6,65,165,249,22,1,2,52,53,32,+249,22,10,2,51,48,32,226,125,15,128,202,247,146,13,192,27,244,192,8,+231,243,11,226,78,5,160,224,232,8,12,96,63,2,56,55,49,228,149,1,+2,54,51,55,96,180,240,237,2,141,226,224,99,2,175,245,32,6,66,24,+93,198,98,17,83,231,236,27,3,224,22,0,2,75,32,75,224,76,5,2,+53,49,48,160,24,247,214,1,238,42,2,98,163,252,142,10,236,105,39,224,+54,14,231,111,3,238,221,0,242,192,9,52,227,229,22,12,237,42,1,235,+13,4,244,55,1,230,180,3,228,106,20,235,13,4,107,255,2,85,32,67,+230,92,4,172,208,2,52,55,32,148,43,33,196,64,150,214,19,2,95,50,+57,2,48,32,102,236,185,0,2,110,101,103,2,97,116,101,236,180,5,228,+202,3,244,89,10,226,142,2,229,10,11,242,134,1,234,194,3,232,212,16,+234,212,25,227,225,5,233,176,5,224,166,2,251,74,9,228,228,5,229,240,+18,224,89,13,227,238,10,235,65,12,217,67,224,10,5,230,141,36,224,142,+13,250,253,14,229,114,5,227,222,11,237,109,1,254,131,7,253,54,8,253,+65,4,37,146,233,174,19,225,243,11,225,223,2,226,155,3,85,92,197,1,+240,80,8,247,24,3,245,70,1,235,26,14,226,132,14,235,211,7,253,153,+4,225,30,4,235,50,11,249,231,3,225,69,4,235,61,10,105,101,229,3,+0,91,206,33,189,106,218,253,152,7,235,81,29,225,215,6,87,224,252,33,+11,255,75,18,224,254,14,232,36,8,69,44,228,29,7,186,178,2,95,50,+50,128,60,224,35,30,55,72,245,116,14,233,253,18,224,179,6,2,52,52,+32,233,1,13,228,63,6,224,139,12,32,62,42,13,32,5,65,123,228,190,+1,2,98,105,110,2,100,34,32,238,26,25,133,99,228,107,7,253,28,2,+249,212,11,223,224,231,92,4,224,69,7,224,42,4,229,166,2,39,34,226,+194,1,227,203,8,130,34,193,249,235,254,18,227,27,9,2,57,50,50,237,+151,29,227,147,2,243,159,1,132,0,250,97,19,103,210,132,8,107,253,228,+3,25,240,99,13,225,42,13,117,184,187,115,254,130,3,233,153,3,238,228,+13,227,81,11,224,247,8,228,253,1,33,221,236,62,0,253,164,8,224,54,+17,254,117,3,224,1,17,228,146,13,129,239,90,183,227,225,36,228,22,0,+67,212,100,91,132,36,37,152,32,191,74,12,248,107,5,2,99,80,97,2,+116,58,32,226,245,1,99,247,101,197,96,53,89,71,174,51,244,174,5,224,+85,10,2,79,32,35,96,56,233,3,1,192,64,243,142,5,192,241,202,37,+241,157,1,65,174,130,44,98,53,64,119,34,251,2,54,51,54,224,179,4,+2,61,61,34,233,205,6,224,41,15,2,84,114,117,232,141,8,224,198,7,+53,61,78,253,85,84,32,9,235,41,3,40,244,196,35,128,38,158,103,2,+75,32,95,96,208,64,17,158,95,2,80,32,58,96,58,158,107,74,81,64,+15,158,65,134,26,227,137,6,230,31,11,200,76,226,78,10,64,57,2,95,+56,56,234,148,1,64,94,158,124,237,245,8,124,90,2,55,54,50,234,47,+11,227,70,13,132,134,237,178,4,224,176,3,234,109,3,228,187,1,234,172,+8,162,36,254,208,17,243,7,5,232,149,20,229,28,0,227,63,1,234,63,+1,110,10,228,74,3,128,24,74,74,234,84,1,240,75,15,172,194,235,154,+2,161,234,205,63,129,106,225,140,17,65,121,157,212,160,60,224,81,3,237,+35,1,237,52,8,232,30,7,139,109,238,232,5,224,72,10,87,206,225,48,+5,192,17,238,103,6,227,77,1,229,11,1,255,176,5,225,78,4,250,241,+3,140,46,229,56,1,96,27,107,218,130,112,236,212,3,224,11,1,236,234,+9,238,35,4,224,250,9,235,197,10,248,15,4,248,94,1,226,4,6,64,+64,236,215,1,165,225,129,244,2,85,32,95,200,86,253,230,3,123,211,225,+95,1,242,170,9,192,9,140,93,2,67,32,79,250,187,12,224,17,7,239,+2,16,193,75,160,115,225,10,8,244,102,8,128,123,138,13,197,196,250,165,+9,240,66,1,249,133,4,225,41,4,203,162,240,124,7,231,69,2,142,152,+238,154,11,239,223,5,186,1,37,70,243,25,6,236,77,11,160,132,241,55,+3,224,34,7,224,188,6,225,27,1,226,46,21,225,91,0,224,83,13,227,+63,0,224,162,24,224,133,0,225,151,3,224,46,25,228,171,7,246,104,15,+224,2,0,242,68,1,224,14,3,236,241,22,224,1,9,33,195,224,166,15,+225,44,18,225,56,19,240,47,11,241,145,4,224,6,15,251,235,12,224,93,+1,247,42,1,71,174,199,219,228,132,1,112,33,189,17,2,64,32,73,247,+158,7,2,95,49,56,198,201,224,51,2,125,70,37,185,199,150,128,54,100,+139,96,79,224,26,2,64,11,232,250,15,248,243,13,238,216,13,228,114,6,+225,138,3,243,166,21,225,235,0,225,97,11,224,225,16,2,56,51,32,2,+95,55,52,225,21,6,225,75,0,104,250,225,75,31,225,22,16,241,238,3,+233,102,2,227,210,14,229,98,4,228,161,15,243,76,2,71,21,166,70,233,+69,5,234,89,11,2,97,109,98,2,105,103,117,2,111,117,115,2,32,111,+112,2,101,114,97,2,116,111,114,2,32,101,120,2,112,114,101,2,115,115,+105,2,111,110,34,226,221,23,225,152,3,251,51,2,225,179,3,225,36,2,+40,238,225,90,9,224,255,15,224,202,41,2,98,97,100,2,32,112,114,2,+101,102,105,2,120,32,101,224,194,16,230,51,11,2,110,111,77,2,97,116,+99,2,104,32,102,224,74,0,2,115,114,99,2,47,77,105,2,99,114,111,+2,72,115,47,2,70,105,120,2,105,116,121,2,46,104,115,128,74,2,35,+54,52,245,234,5,230,29,1,235,234,5,226,51,0,241,110,0,240,171,0,+2,95,53,51,139,61,157,45,251,204,1,169,250,161,6,66,42,41,238,32,+5,252,51,7,140,181,47,161,79,202,192,210,231,100,2,2,64,32,89,240,+239,2,240,235,14,253,107,0,174,22,64,104,66,218,245,155,3,187,32,128,+145,141,166,160,146,131,58,105,209,2,52,48,32,235,176,9,64,23,226,231,+5,163,18,200,208,197,189,165,134,229,90,2,232,51,6,138,78,224,221,2,+170,147,226,44,0,139,26,210,199,242,208,8,224,78,10,225,97,0,224,43,+7,225,69,6,161,99,214,125,224,29,4,74,99,33,215,108,88,195,212,59,+72,46,132,123,165,2,57,55,32,2,35,54,32,224,42,1,32,30,108,8,+237,6,17,245,150,5,64,51,33,87,32,51,2,65,32,58,129,111,32,11,+2,90,32,85,128,27,65,169,108,229,64,11,140,223,231,18,5,238,222,7,+64,39,140,251,151,77,64,15,140,251,2,95,52,52,217,92,65,158,182,151,+32,212,124,1,214,84,192,7,192,27,119,254,188,35,224,27,13,192,55,193,+5,2,95,52,56,229,9,2,64,127,205,28,75,45,243,160,5,235,146,12,+253,235,9,228,126,11,64,199,247,96,8,241,63,0,172,59,2,53,56,57,+254,207,15,227,32,2,239,166,39,2,103,101,116,2,65,112,112,2,67,111,+110,239,170,3,239,93,13,201,240,224,17,1,2,85,32,73,236,191,3,77,+28,161,212,96,125,34,95,226,103,16,249,7,7,34,92,2,50,48,56,224,+73,0,130,165,138,90,64,15,130,138,62,208,253,107,1,143,93,96,29,130,+116,2,80,32,67,240,194,8,192,7,171,143,242,172,0,249,138,3,246,168,+58,227,215,0,230,14,3,224,11,3,32,165,64,111,79,182,201,200,205,51,+242,11,3,188,126,230,177,3,243,198,11,237,217,3,210,67,245,8,2,99,+245,245,7,14,64,136,131,135,33,42,2,56,53,52,242,123,1,238,145,4,+64,38,227,162,1,240,5,9,254,0,6,175,169,66,90,64,7,128,29,64,+67,131,190,66,159,2,80,32,102,226,116,0,2,118,97,108,209,62,242,48,+2,2,121,112,101,194,130,224,21,1,2,107,105,110,245,57,0,230,236,2,+2,111,114,116,128,21,64,100,132,19,240,176,15,232,159,3,238,179,1,244,+111,6,161,128,50,47,130,21,111,248,143,173,134,37,2,51,50,54,227,8,+6,243,163,18,129,218,102,104,130,171,224,66,8,225,140,1,132,80,238,141,+1,167,88,248,141,8,253,241,15,234,33,1,228,68,26,96,177,2,53,57,+52,241,91,0,226,87,5,252,136,28,38,4,227,188,5,224,55,12,251,124,+3,224,121,1,177,92,64,121,250,226,5,68,169,225,222,2,2,101,116,83,+2,76,111,99,2,69,120,112,2,114,34,32,225,42,1,132,94,253,155,0,+150,1,2,57,53,32,224,82,5,186,212,185,22,224,23,1,64,65,132,86,+2,79,32,58,128,31,98,53,160,213,2,50,56,55,224,38,0,132,79,249,+171,6,241,220,0,237,165,0,241,119,2,185,127,37,95,220,192,225,196,1,+230,18,4,254,96,1,224,67,5,37,20,34,185,2,57,55,56,225,16,0,+165,13,224,8,0,160,39,101,88,106,101,224,236,1,229,219,14,2,117,110,+100,42,90,2,110,101,100,229,218,2,162,218,245,136,2,224,59,13,230,14,+4,2,50,53,55,235,222,8,46,252,226,114,1,106,237,241,214,11,232,251,+2,224,184,5,227,63,1,224,128,14,235,229,1,235,15,5,165,195,234,161,+0,224,68,20,224,197,3,247,14,0,128,57,224,212,0,246,109,26,157,37,+40,10,192,51,74,170,41,104,247,244,0,241,70,1,210,8,235,19,0,2,+95,55,55,246,164,7,224,1,11,225,61,0,34,127,68,131,228,19,3,32,+159,64,66,224,186,0,204,14,64,42,133,203,240,26,3,239,242,6,230,94,+10,224,20,6,131,147,64,76,133,241,2,83,32,83,145,130,228,130,21,2,+49,51,32,226,231,5,224,41,17,226,61,1,165,128,224,41,16,228,89,1,+172,139,228,212,26,35,188,245,235,11,228,148,10,224,94,0,156,74,65,80,+33,212,2,53,56,48,229,253,0,199,10,2,48,49,54,236,4,7,224,169,+6,129,212,224,72,16,229,98,0,224,72,2,224,44,13,2,54,51,53,224,+116,15,251,173,6,225,44,7,229,155,3,226,44,0,224,36,7,199,169,225,+14,11,192,27,2,85,32,83,198,69,224,155,4,111,1,160,154,104,97,2,+51,48,55,238,235,2,247,216,3,40,75,226,230,7,225,157,20,225,11,1,+39,164,2,53,56,49,227,103,0,224,126,0,2,95,56,52,171,142,225,24,+2,32,31,57,59,192,47,242,137,4,231,46,29,128,26,225,41,11,236,15,+0,225,73,14,241,66,2,225,72,7,229,160,1,134,234,64,5,231,19,18,+2,85,32,66,224,232,4,65,70,101,228,32,6,194,161,225,93,3,226,25,+9,224,71,13,2,53,49,48,224,59,28,231,232,30,225,185,14,226,111,22,+225,69,22,192,75,224,129,10,192,26,226,26,27,2,55,50,32,226,26,8,+224,245,2,227,105,12,171,171,225,76,12,224,115,26,239,172,0,226,142,4,+224,76,7,226,244,20,237,153,36,2,100,115,69,2,70,105,101,2,108,100,+115,237,152,20,69,182,139,100,138,120,227,212,1,64,238,64,29,235,29,1,+64,29,192,57,192,29,251,236,1,64,29,194,125,192,29,237,208,1,235,89,+28,244,205,6,255,32,7,64,15,226,31,1,251,234,5,193,126,224,49,3,+32,98,128,144,225,76,10,64,157,137,205,96,53,228,137,2,32,15,2,54,+55,48,98,37,170,168,64,43,201,237,75,214,2,54,49,32,232,57,0,202,+146,96,143,144,222,225,145,16,2,101,110,117,2,109,34,32,235,192,6,67,+115,125,157,39,54,228,80,11,224,22,8,166,99,187,16,197,138,166,120,164,+242,2,85,32,90,64,213,228,13,0,224,48,9,240,225,5,50,43,2,52,+56,56,224,50,8,224,52,7,164,30,224,52,0,46,38,240,234,0,160,206,+64,63,226,16,1,226,15,6,68,164,136,152,66,195,65,160,2,57,50,32,+193,48,32,30,242,28,5,2,66,111,111,2,108,34,32,224,89,1,136,93,+224,31,1,2,68,97,116,2,97,46,66,32,36,2,95,84,121,2,112,101,+46,64,42,64,38,130,205,246,248,3,254,18,6,2,57,49,50,234,64,2,+222,13,250,207,6,247,81,2,254,150,10,130,140,34,107,246,38,9,241,188,+12,48,202,225,87,1,254,99,2,227,18,1,32,77,229,65,1,254,87,4,+182,95,224,133,5,139,242,200,37,247,67,6,240,144,6,183,51,240,165,6,+227,92,7,230,247,0,129,154,100,187,100,188,228,203,1,105,55,224,202,4,+224,86,6,128,58,206,253,145,172,245,35,6,228,178,20,2,110,111,116,2,+32,112,111,2,108,121,109,2,111,114,112,2,104,105,99,2,32,101,110,2,+111,117,103,2,104,58,32,227,52,1,72,54,102,165,2,95,50,49,36,67,+236,88,7,227,234,10,117,39,98,177,50,34,2,51,48,54,237,97,5,224,+54,16,130,75,180,45,100,175,64,57,64,115,32,22,164,94,118,21,96,76,+228,204,2,64,54,133,20,67,132,78,24,96,168,255,169,5,64,52,96,33,+180,150,64,81,130,180,230,244,5,38,168,236,100,0,2,57,50,48,128,168,+246,20,4,130,190,254,186,1,64,6,226,42,3,96,56,129,183,225,136,7,+242,41,7,227,41,8,242,178,13,227,189,0,227,11,2,2,57,53,51,243,+137,3,32,208,238,96,4,70,176,240,231,9,41,160,183,98,119,138,133,73,+254,11,7,65,28,133,123,242,206,11,224,93,0,2,57,57,54,230,36,1,+66,216,210,149,170,156,223,124,226,189,0,224,151,16,106,179,96,190,32,84,+226,233,1,224,39,8,64,152,133,186,237,204,15,248,217,5,166,160,132,247,+2,54,48,49,164,139,2,57,56,32,224,238,4,96,115,128,237,65,21,160,+164,2,54,48,50,249,106,2,32,53,130,21,109,196,96,66,165,85,2,54,+48,51,225,81,1,212,203,193,84,128,13,32,47,211,152,231,145,7,2,56,+56,55,240,22,4,228,32,1,33,224,34,60,249,235,2,231,126,7,228,205,+6,2,57,57,53,239,165,5,224,105,16,251,70,7,228,150,7,132,232,32,+125,194,90,238,193,0,224,167,1,224,48,4,213,22,225,81,2,134,17,224,+131,15,80,134,162,22,224,244,8,181,252,226,118,5,234,40,5,229,156,8,+36,248,128,54,224,156,22,224,54,6,122,38,65,57,117,4,246,126,6,192,+7,170,102,99,228,232,234,5,193,34,250,92,2,226,237,4,225,90,8,232,+244,3,39,254,79,198,227,52,2,192,160,237,205,4,225,125,1,225,224,2,+229,59,12,224,26,10,226,61,1,33,145,133,87,239,20,1,100,191,96,186,+241,217,3,230,159,10,249,222,3,231,102,2,255,46,2,253,176,8,173,213,+224,31,17,221,188,226,32,7,2,57,52,55,241,108,14,247,131,0,128,58,+243,140,0,254,176,4,255,191,11,231,210,3,96,24,218,6,196,63,192,229,+192,207,224,96,0,248,82,5,232,101,0,192,73,2,95,57,51,243,25,3,+255,87,15,224,149,13,224,191,0,229,254,7,165,250,160,135,226,71,2,164,+101,224,189,32,249,18,2,216,184,224,164,11,34,86,194,128,246,242,7,218,+40,252,153,1,225,142,16,255,161,3,224,228,1,227,122,3,217,168,238,141,+7,192,191,163,133,162,244,224,164,6,224,82,1,202,58,250,4,13,250,10,+5,231,73,10,234,98,0,226,151,2,224,121,0,228,234,8,224,33,0,160,+142,224,207,1,224,42,10,224,165,3,251,112,3,224,110,3,224,168,1,246,+135,6,224,255,4,224,118,7,64,55,117,173,204,248,239,3,3,194,5,34,+141,228,77,6,35,243,137,20,2,79,32,80,137,74,2,53,54,32,124,148,+182,165,2,57,53,54,96,8,64,31,32,128,2,52,51,32,233,167,0,52,+218,86,218,169,117,96,43,128,52,224,43,17,2,53,57,32,226,81,0,131,+23,224,43,17,2,57,49,32,224,43,0,128,98,96,163,36,248,221,234,2,+57,56,57,231,70,2,224,208,0,248,78,0,242,57,4,150,213,228,155,13,+163,108,233,168,0,241,67,17,226,106,19,225,216,9,224,39,17,224,109,19,+229,193,1,224,109,37,226,234,7,194,137,2,95,57,54,129,107,247,192,7,+227,226,5,97,76,33,62,138,242,237,206,6,77,201,2,76,105,116,2,115,+46,75,2,110,111,119,2,110,83,121,2,109,98,111,110,3,32,47,138,5,+225,110,177,244,114,7,225,110,102,250,147,1,230,233,11,233,84,5,239,60,+0,165,250,102,97,154,71,231,209,3,169,30,224,184,3,239,77,5,245,79,+4,100,93,167,232,199,239,231,36,14,230,67,3,224,33,13,224,161,1,252,+55,16,224,58,15,225,113,7,232,22,14,230,69,13,255,203,3,224,25,9,+165,64,232,108,20,224,62,10,232,19,4,36,164,251,177,1,230,176,25,160,+8,69,179,165,74,244,40,6,233,69,5,82,177,64,11,224,54,0,101,203,+234,101,6,224,1,1,226,90,9,224,137,43,133,47,66,136,237,198,0,232,+209,8,194,10,225,43,3,141,217,2,54,50,32,246,56,4,192,99,237,13,+0,226,145,13,226,71,9,227,156,4,237,161,2,160,9,96,123,232,183,3,+249,56,9,240,251,2,193,179,239,111,7,44,86,227,232,1,241,231,0,238,+104,11,224,32,4,97,148,225,97,12,186,199,195,247,158,180,118,74,231,130,+2,128,200,77,244,129,34,182,170,2,57,56,54,230,184,8,239,150,24,224,+141,1,193,108,226,35,3,224,70,9,220,177,192,9,236,161,1,142,235,2,+56,50,48,232,11,5,253,113,20,2,77,117,108,2,116,105,112,2,108,101,+32,2,99,111,110,2,115,116,114,2,97,105,110,2,116,32,115,2,111,108,+117,2,116,105,111,2,110,115,32,2,102,111,114,253,146,5,142,30,173,201,+49,45,229,100,7,98,120,143,31,72,117,2,51,56,51,97,56,113,74,32,+25,220,176,45,0,55,19,224,133,1,2,116,117,112,2,108,101,67,224,129,+0,2,115,34,32,226,128,3,129,93,81,220,81,50,128,116,117,253,58,90,+2,50,56,57,170,191,2,53,49,32,234,184,3,160,139,247,107,1,171,63,+226,6,3,235,71,1,224,21,3,229,11,5,196,50,228,168,8,192,46,192,+84,247,83,12,128,6,237,63,5,162,234,253,243,2,224,76,1,229,40,1,+245,19,5,234,17,2,230,251,7,130,46,192,254,236,179,9,162,31,194,206,+147,32,102,206,243,150,9,229,75,15,130,233,235,187,8,141,9,2,56,52,+32,254,227,1,225,122,2,216,200,230,155,7,128,227,237,1,1,2,57,54,+55,160,52,2,89,32,67,255,24,7,164,49,232,116,3,225,102,1,255,51,+1,245,130,12,231,124,1,224,98,1,96,248,229,46,1,235,160,2,239,70,+4,92,181,2,57,54,53,192,15,163,140,117,164,224,25,2,227,170,13,232,+80,5,224,13,11,211,68,34,201,32,4,230,70,7,128,31,255,174,0,33,+96,225,168,3,33,88,250,3,1,226,48,1,193,102,224,249,1,180,94,224,+250,3,224,123,4,2,57,32,95,224,27,3,229,235,4,2,48,32,80,129,+39,242,209,0,36,57,36,165,228,149,13,238,219,6,224,117,3,32,75,228,+34,5,231,129,2,246,200,3,224,168,4,164,100,249,245,1,243,241,13,238,+234,5,245,154,1,239,140,13,58,100,241,49,9,230,162,2,234,66,2,198,+1,145,192,224,151,3,245,139,0,215,174,194,9,247,174,0,119,48,178,219,+2,56,57,54,98,212,244,174,13,66,18,229,207,3,240,67,23,249,197,1,+2,51,50,49,229,225,1,229,68,1,2,102,114,101,2,101,32,116,43,208,+2,32,118,97,2,114,105,97,2,98,108,101,2,32,105,110,2,32,111,117,+2,116,112,117,2,116,32,102,2,117,110,100,2,101,112,34,243,203,8,226,+232,5,243,204,5,231,115,3,229,61,0,229,57,9,229,53,9,231,195,1,+227,138,4,206,249,235,127,6,228,230,21,228,200,14,228,190,18,226,199,2,+225,241,9,35,62,142,71,98,229,242,226,7,32,29,141,38,65,180,168,3,+231,157,2,249,123,4,228,185,6,224,47,10,225,20,3,226,243,1,228,246,+9,233,203,1,228,253,2,251,80,1,100,98,34,92,2,95,54,54,227,199,+5,232,196,0,96,13,240,167,11,227,194,3,225,215,2,224,15,14,214,176,+67,121,100,96,210,111,161,121,39,181,224,75,4,235,75,3,224,29,9,224,+31,7,224,34,12,236,82,1,229,184,9,231,106,7,227,30,15,32,176,141,+108,90,112,112,67,2,95,49,54,96,23,36,227,129,234,35,250,162,229,138,+178,2,83,32,67,247,166,1,2,57,55,53,229,134,1,32,8,67,17,160,+13,32,66,136,204,126,21,102,137,32,27,152,172,241,160,0,131,69,96,18,+154,155,128,226,32,59,136,238,49,167,2,51,32,75,192,19,189,46,234,227,+0,105,155,224,61,1,246,6,0,128,25,96,178,192,25,225,0,1,32,18,+71,116,32,78,135,100,96,98,147,168,32,19,251,14,3,236,81,3,32,26,+130,251,237,91,9,244,230,6,245,249,8,32,58,223,189,66,20,232,123,5,+2,57,54,57,225,202,4,161,34,160,55,130,76,32,161,2,50,32,90,224,+140,0,32,23,223,135,2,75,32,90,224,165,6,64,78,163,131,201,94,228,+99,11,244,134,0,240,145,6,255,190,5,240,116,3,246,65,1,224,49,19,+37,93,230,175,11,238,243,1,160,32,239,143,19,230,67,0,227,204,10,69,+232,227,206,4,247,129,1,229,141,5,244,11,8,229,159,7,227,107,10,241,+109,7,237,162,7,199,36,134,125,230,141,1,224,61,44,228,181,0,106,8,+83,235,2,55,49,54,224,56,6,224,212,9,230,218,11,165,26,225,48,0,+225,154,14,225,153,23,225,152,25,232,125,1,235,244,6,224,71,24,235,164,+13,234,120,16,229,226,7,234,109,17,224,31,5,232,197,1,225,154,15,131,+91,225,154,15,225,148,10,245,128,0,225,148,32,35,131,173,196,105,0,64,+38,37,187,160,62,32,16,112,39,169,225,224,74,4,32,56,132,244,225,23,+0,33,7,221,56,66,240,64,83,101,140,123,118,177,27,64,189,192,93,224,+13,5,239,170,5,2,95,49,55,224,106,1,2,95,49,57,224,12,2,78,+244,224,132,2,133,22,2,95,51,32,68,162,224,76,11,2,95,57,32,160,+132,96,47,203,82,228,220,2,153,127,239,111,11,248,190,5,245,1,1,249,+126,0,228,97,2,226,53,1,228,151,18,192,84,224,58,30,111,77,227,61,+10,242,39,4,228,216,27,225,164,0,228,219,8,226,87,11,255,79,2,2,+51,49,32,249,174,1,228,203,6,224,60,1,64,58,113,63,2,56,52,51,+231,241,6,246,27,18,128,55,243,9,7,224,228,1,242,37,8,228,27,8,+224,96,12,224,30,3,64,96,234,156,0,241,223,0,240,59,5,192,39,224,+134,3,2,95,53,55,253,181,8,98,62,184,154,232,224,2,70,211,96,173,+111,230,167,233,64,187,254,37,2,64,158,64,129,251,99,3,249,212,1,64,+110,32,88,64,16,135,202,158,140,228,7,8,185,53,95,25,2,95,53,49,+41,239,2,49,52,52,99,30,81,237,2,57,50,49,145,168,206,100,46,88,+247,134,7,231,29,2,252,96,45,243,222,0,132,110,234,166,2,35,98,36,+64,104,171,96,122,68,140,227,207,2,236,248,15,241,195,5,84,144,99,156,+35,201,242,53,4,2,109,105,110,2,105,109,117,2,109,34,32,245,130,3,+96,233,230,74,3,254,148,3,2,95,56,51,224,94,0,192,100,32,96,202,+239,244,59,18,235,114,7,246,96,8,224,16,0,199,163,227,50,0,130,93,+160,89,212,67,33,219,240,133,3,160,36,33,10,2,54,51,57,133,170,2,+55,32,79,2,32,35,55,64,21,227,9,5,246,61,9,32,193,137,76,249,+220,20,2,78,97,116,153,217,91,172,32,44,162,159,129,129,209,157,164,251,+244,251,1,196,88,224,213,1,248,208,12,33,151,227,224,8,225,127,4,242,+50,3,76,152,32,222,246,78,22,196,61,143,117,255,41,4,79,100,34,246,+224,17,0,227,209,0,246,111,0,246,34,14,241,126,0,225,224,15,233,98,+3,61,2,238,98,7,245,198,28,224,240,3,245,202,17,228,224,5,228,89,+7,33,165,135,128,225,61,5,166,29,61,239,131,252,225,103,6,230,60,0,+170,55,2,51,48,53,64,43,192,253,244,2,0,64,48,64,12,131,216,232,+252,23,225,138,3,232,143,11,233,44,9,230,55,3,247,112,13,132,100,36,+175,33,167,225,30,6,242,27,7,148,123,193,150,244,143,3,64,19,251,138,+17,136,94,224,100,6,224,108,5,224,32,20,33,130,136,202,131,40,226,131,+23,163,236,226,119,11,226,113,10,235,202,5,250,58,27,176,93,101,228,110,+128,101,77,228,81,0,229,87,4,132,218,224,235,5,32,206,169,126,227,187,+8,133,158,64,163,82,239,160,27,2,57,50,54,224,65,2,32,26,224,235,+0,35,188,194,81,32,84,213,229,96,193,2,55,53,53,232,22,0,32,110,+33,1,96,155,2,55,54,48,224,48,1,137,106,2,75,32,66,228,73,14,+227,115,3,247,81,10,224,165,4,244,45,1,160,146,240,253,2,72,120,225,+141,2,161,159,224,60,4,32,54,160,8,250,44,11,32,171,207,46,224,220,+12,2,57,50,53,224,220,8,134,170,71,139,226,48,6,224,14,6,33,25,+35,154,195,239,52,41,193,104,163,194,148,127,244,73,6,2,67,32,79,226,+241,4,32,129,43,15,228,52,1,224,59,0,236,59,1,231,170,0,233,8,+13,227,166,3,242,171,3,253,238,16,237,128,9,237,88,3,239,161,10,255,+158,16,234,195,5,237,90,13,253,166,4,168,93,236,204,0,2,50,57,48,+69,162,243,226,7,216,149,2,51,51,32,255,164,17,2,53,48,32,233,198,+6,33,187,136,5,239,170,1,227,241,7,97,179,246,120,1,237,158,3,224,+41,6,162,125,2,57,51,57,252,54,5,250,75,0,226,134,7,169,195,160,+12,202,29,32,147,135,215,131,44,227,42,8,2,52,55,32,232,158,6,2,+57,52,56,244,18,20,2,58,57,52,135,252,227,120,19,129,133,248,183,18,+195,8,251,54,7,227,22,14,233,48,14,242,100,9,224,165,2,166,252,192,+150,50,59,210,221,64,244,135,23,227,79,4,229,139,2,67,125,234,165,5,+239,164,5,224,115,2,33,162,235,208,6,226,178,3,146,46,234,60,0,237,+252,11,254,209,6,251,209,2,224,41,15,224,34,0,227,115,7,233,124,6,+252,143,19,227,87,33,249,154,3,247,118,3,240,182,6,238,55,6,32,77,+252,154,9,255,84,20,64,76,234,248,2,232,130,1,2,57,52,48,246,140,+0,2,52,49,32,230,151,9,233,11,9,224,21,11,224,33,5,224,209,9,+239,3,4,96,2,224,176,18,250,135,6,234,220,1,225,171,5,96,187,48,+222,224,173,3,253,20,13,225,77,4,242,195,2,253,122,15,2,56,56,52,+249,214,5,224,22,7,224,236,3,68,247,53,124,128,225,106,79,2,56,56,+51,204,205,197,143,32,34,32,236,2,52,55,55,96,22,2,52,32,95,2,+57,57,32,64,9,67,143,96,9,2,57,55,32,229,188,2,224,34,16,225,+40,9,232,163,2,228,127,8,231,130,4,124,85,239,232,0,32,181,77,138,+96,21,2,54,55,48,101,176,124,114,2,52,53,32,227,237,8,136,152,130,+231,229,245,0,225,232,3,196,134,243,66,4,225,242,2,232,7,1,162,110,+100,142,224,128,11,235,116,4,2,50,53,51,237,86,2,65,65,2,57,52,+52,224,156,7,136,224,203,42,148,249,64,5,224,17,9,52,253,231,143,4,+224,68,2,210,95,229,117,23,2,90,32,66,229,105,56,247,203,23,224,150,+2,136,223,229,102,0,247,136,3,32,29,136,204,32,136,2,54,32,58,99,+188,175,36,224,78,1,32,22,134,161,238,236,0,2,49,50,55,230,216,3,+2,51,56,32,131,238,227,244,3,167,72,2,58,57,51,134,140,195,81,229,+172,2,229,117,3,227,115,3,229,137,8,230,82,4,224,21,6,177,119,229,+9,9,247,56,5,224,42,0,224,76,7,251,181,7,224,28,4,160,47,242,+141,8,96,9,224,6,0,33,10,239,25,5,224,1,1,226,10,8,2,51,+52,32,241,146,10,232,108,3,243,215,5,247,254,7,230,21,4,149,19,224,+123,7,227,92,0,232,128,5,72,234,254,214,4,2,53,56,49,191,52,107,+192,140,161,218,147,82,87,96,3,64,175,240,114,1,2,101,120,112,2,97,+110,100,2,68,105,99,2,116,58,32,241,146,1,32,46,113,244,224,137,3,+230,89,8,229,164,9,229,103,18,225,137,8,244,251,11,226,241,5,194,124,+230,101,5,225,140,3,231,27,3,224,25,5,228,124,3,224,29,27,235,58,+2,243,46,3,243,49,2,224,69,11,234,63,7,224,37,14,83,222,2,53,+56,48,104,240,2,48,55,32,249,71,9,231,213,6,253,65,6,191,129,225,+121,2,238,194,4,235,138,17,224,77,2,99,211,250,157,4,213,61,178,236,+242,223,0,37,237,229,11,9,234,172,2,2,54,55,50,70,178,34,30,198,+183,230,173,14,230,100,3,103,41,160,12,199,47,64,132,64,76,207,20,199,+31,225,76,19,232,28,26,254,115,9,253,55,11,234,212,31,224,95,9,235,+91,8,225,221,16,228,158,3,225,178,70,69,251,2,51,53,32,139,67,239,+215,0,131,251,225,159,21,234,104,7,236,250,4,68,36,150,204,247,198,9,+224,28,0,233,246,7,247,7,1,247,5,1,235,161,7,64,25,247,45,1,+32,29,64,153,38,73,223,166,80,250,227,6,2,248,216,2,192,175,84,236,+55,16,64,55,81,133,230,158,9,111,189,192,90,231,78,9,234,234,1,246,+182,7,224,58,24,224,56,0,129,1,231,138,3,64,49,135,10,215,131,90,+89,247,8,1,230,164,4,250,32,23,227,58,5,239,71,1,228,17,1,171,+229,239,213,8,121,207,64,188,65,24,101,241,54,144,230,151,5,226,104,1,+116,6,128,118,225,10,7,180,51,227,5,4,129,99,32,234,169,238,252,168,+1,96,189,42,147,192,67,229,250,8,212,68,114,249,233,252,4,65,45,192,+31,248,181,1,253,142,9,227,202,3,228,1,2,239,155,1,236,183,3,171,+117,248,203,3,2,95,53,52,250,226,11,53,183,37,185,227,31,22,65,30,+92,184,143,215,225,157,4,128,176,229,53,1,80,212,231,82,1,2,36,120,+34,226,32,1,138,135,99,82,2,52,32,75,2,52,32,90,227,63,8,32,+36,243,92,3,247,164,19,208,47,2,50,57,32,227,73,0,194,146,32,70,+170,23,247,197,8,137,126,232,149,0,238,37,0,241,17,7,36,202,128,88,+246,169,0,224,51,0,224,26,0,160,41,246,163,12,224,25,11,226,76,5,+224,113,6,244,28,0,240,242,6,224,38,22,224,83,3,253,186,1,64,164,+227,160,2,229,211,7,227,138,3,224,40,14,224,87,1,252,82,5,128,13,+64,39,226,183,19,243,70,7,251,117,19,225,96,0,252,248,6,224,99,1,+224,18,2,249,214,1,227,175,5,128,93,247,84,1,227,124,3,192,202,239,+161,9,34,39,140,33,237,184,2,247,191,10,34,131,226,10,5,224,10,4,+32,68,140,88,237,60,3,32,20,204,86,242,166,27,255,161,1,237,56,67,+249,198,7,224,250,5,67,56,242,161,6,129,33,32,26,134,139,227,132,15,+254,233,3,163,132,228,152,3,243,180,11,69,145,225,13,30,142,141,238,66,+79,227,131,5,224,158,0,184,88,2,55,53,55,126,172,234,180,5,235,36,+11,234,218,9,237,154,11,224,45,23,224,43,13,32,134,236,108,5,32,160,+207,195,193,172,238,231,4,65,145,133,89,33,195,165,90,226,237,3,32,33,+239,39,0,2,56,55,57,151,120,68,149,32,24,131,0,229,177,1,2,97,+100,105,2,99,116,34,128,27,130,215,131,28,49,170,65,214,32,21,130,216,+228,108,3,228,130,4,236,59,2,230,188,4,236,31,6,56,17,193,177,233,+250,5,239,75,5,246,112,14,252,223,0,136,166,235,7,10,2,95,57,49,+65,68,2,58,57,49,214,47,228,178,5,72,156,236,207,3,133,13,224,213,+3,236,239,19,233,149,10,224,74,6,243,76,2,207,242,232,233,5,169,193,+229,186,9,233,28,10,64,233,226,18,3,224,43,8,224,90,6,224,45,3,+237,82,9,225,75,15,167,193,254,25,11,235,155,5,248,62,9,225,172,2,+242,203,1,225,244,10,2,57,48,57,245,215,22,33,183,238,22,5,224,126,+101,225,224,0,240,157,9,224,20,6,224,168,8,224,64,5,228,48,1,241,+128,2,227,16,34,202,160,228,35,8,224,183,21,244,103,5,224,136,84,132,+89,67,101,228,14,0,225,147,14,239,198,9,240,46,10,245,23,3,168,24,+2,49,53,32,96,6,235,153,7,224,216,7,163,235,96,142,134,104,235,26,+2,234,145,6,2,99,97,110,2,110,111,116,2,45,104,97,2,112,112,101,+2,110,34,32,224,198,0,134,1,242,129,2,185,63,251,65,6,2,57,49,+50,225,137,22,234,88,0,242,244,2,240,190,16,251,120,10,224,208,4,239,+7,6,234,0,3,255,203,6,71,134,2,49,52,32,193,231,72,250,253,109,+7,242,132,7,229,97,26,228,51,2,167,227,171,28,243,98,2,192,19,70,+74,234,249,0,125,247,144,216,2,53,52,55,140,66,2,51,48,54,252,253,+1,224,146,9,130,122,64,55,225,173,1,2,83,117,98,2,115,117,109,2,+112,116,105,2,111,110,32,2,99,104,101,2,99,107,32,2,102,97,105,2,+108,101,100,243,158,1,254,250,16,66,60,251,102,21,254,180,0,243,192,6,+33,72,128,163,32,68,135,89,119,136,2,89,32,83,64,165,129,220,235,72,+3,245,213,2,228,39,1,129,167,231,23,8,229,232,1,239,2,23,232,2,+5,245,71,15,229,255,12,160,65,230,154,4,249,216,2,224,40,9,193,200,+224,32,0,214,121,192,32,226,103,1,66,234,194,82,224,13,5,255,83,15,+228,58,2,235,97,1,204,119,242,239,19,231,20,3,225,46,24,161,178,229,+176,9,252,93,6,224,39,12,224,174,3,242,214,3,228,242,5,224,119,0,+224,83,7,225,170,5,242,203,13,224,17,11,224,74,10,234,197,11,224,56,+10,233,114,2,227,205,14,224,32,1,224,198,1,252,165,13,233,1,11,248,+168,4,228,233,3,226,57,7,230,156,8,225,180,36,241,151,5,238,150,0,+226,227,19,226,153,6,231,130,3,225,203,7,249,36,10,225,108,5,236,200,+3,154,187,225,31,7,232,14,3,224,60,6,224,250,9,253,210,13,231,22,+2,231,6,1,126,159,176,124,131,2,2,50,56,50,229,21,11,233,230,11,+225,2,6,241,141,3,224,130,5,231,148,5,226,34,1,232,217,7,231,226,+0,224,106,0,160,186,229,183,14,160,38,161,225,224,33,9,228,103,1,249,+127,1,243,97,3,208,82,224,7,7,242,149,2,249,171,23,2,102,114,101,+2,101,84,121,2,86,97,114,2,115,58,32,249,171,7,147,246,232,87,9,+64,86,37,199,245,174,9,245,172,1,64,7,213,73,211,237,68,49,111,13,+2,89,32,67,128,241,236,59,1,229,215,4,251,73,8,229,135,9,226,73,+13,224,31,3,143,4,167,115,232,123,7,129,234,180,154,148,187,232,7,7,+208,82,250,148,10,245,190,18,231,241,10,229,54,6,226,50,12,230,47,3,+166,241,96,6,236,128,2,237,12,2,232,178,9,234,91,1,232,222,5,233,+19,7,224,43,1,251,113,20,241,182,5,224,234,8,248,52,0,245,231,10,+225,76,42,247,70,3,2,57,51,32,225,78,15,224,57,4,215,173,232,166,+2,143,128,226,72,0,232,172,16,80,235,118,61,231,45,4,225,234,18,230,+36,1,128,219,250,108,1,250,188,0,231,127,9,128,15,246,84,3,160,166,+223,60,241,192,2,2,56,51,52,233,254,2,224,129,4,224,206,1,2,54,+51,54,96,201,48,163,32,4,247,31,1,128,52,200,3,192,72,227,239,6,+2,79,32,35,121,218,229,150,1,131,225,2,49,54,55,224,159,7,144,149,+242,242,3,239,57,8,254,181,8,2,56,51,53,253,202,9,224,30,13,233,+235,3,181,96,235,45,9,231,140,12,165,228,239,94,0,194,43,225,53,10,+242,154,5,224,28,4,2,58,57,48,144,199,2,85,32,67,66,171,227,152,+6,2,95,53,53,164,201,145,173,130,157,224,37,15,228,103,2,237,178,6,+232,136,7,224,49,1,227,132,7,64,41,247,12,1,2,95,54,57,2,50,+32,102,229,157,0,2,45,62,34,251,131,0,224,24,4,2,80,114,105,2,+109,105,116,2,105,118,101,2,115,46,45,224,35,0,224,102,9,2,95,53,+50,243,173,16,225,243,1,65,216,177,217,244,168,11,2,56,53,51,228,217,+11,230,227,0,229,187,1,96,167,2,52,56,32,226,36,2,2,56,57,50,+224,193,0,52,20,230,78,11,225,210,0,96,139,142,119,242,255,2,246,61,+0,229,196,5,2,56,56,53,243,43,9,224,43,24,32,107,128,10,32,105,+142,169,242,207,1,233,177,8,232,37,5,236,132,1,226,193,6,240,223,9,+251,136,24,242,77,6,233,229,30,236,94,0,235,154,22,224,39,12,235,154,+3,2,83,32,67,224,212,2,235,63,12,224,67,2,230,96,6,228,21,0,+110,104,251,26,5,227,105,1,35,214,230,35,11,225,243,2,255,213,11,224,+136,10,233,149,17,129,240,112,95,224,16,8,224,69,19,233,221,10,243,216,+3,250,187,3,228,154,9,233,98,7,253,7,9,64,63,226,146,6,236,150,+11,225,85,13,207,191,65,86,234,7,1,225,87,23,254,38,11,251,154,3,+245,129,3,245,121,10,225,28,11,228,6,9,2,55,54,53,236,162,15,249,+40,6,236,246,6,224,21,13,225,131,5,34,15,134,186,128,192,192,198,241,+176,12,166,252,176,227,225,172,1,234,225,14,146,168,2,32,117,110,2,105,+102,121,234,226,2,231,59,7,2,54,56,53,231,59,13,224,73,1,2,32,+97,110,2,100,32,34,229,108,1,192,50,239,182,22,226,240,13,36,128,145,+88,243,42,2,232,180,5,2,56,56,49,249,132,6,32,18,235,118,1,32,+81,209,93,65,59,164,202,233,155,0,224,10,0,96,8,65,50,32,63,168,+68,2,57,48,50,224,135,3,139,151,230,92,12,2,126,34,32,96,34,137,+92,237,134,2,224,171,7,233,184,2,243,184,3,230,118,1,32,116,66,252,+229,246,15,201,22,226,198,16,248,72,6,226,198,30,244,120,6,102,144,147,+69,243,210,9,229,113,1,230,215,6,99,145,126,131,228,237,4,96,246,238,+250,1,226,171,60,2,121,99,108,2,105,99,32,226,165,16,74,7,98,116,+41,83,226,28,1,226,176,17,2,61,32,34,226,174,27,241,99,11,243,239,+7,225,225,3,229,172,2,203,185,225,9,1,225,7,0,161,224,224,170,2,+225,237,0,221,211,228,103,25,225,85,21,237,241,0,181,120,131,202,2,56,+57,56,236,178,1,225,23,12,2,101,114,114,2,111,114,58,225,103,4,32,+151,97,164,123,168,73,47,224,46,1,2,116,121,112,2,101,34,32,64,34,+224,19,1,2,107,105,110,245,60,0,224,21,1,2,115,111,114,123,243,224,+21,5,2,114,101,97,2,108,109,34,192,99,137,108,245,78,43,2,56,57,+54,192,68,215,157,117,78,166,52,245,47,7,242,62,8,242,58,24,251,184,+1,245,14,34,166,98,239,180,16,232,72,3,232,172,21,130,134,241,20,13,+227,117,0,240,255,11,235,87,9,84,122,242,182,56,170,228,252,29,15,242,+54,14,239,244,35,149,195,128,44,239,74,7,224,139,3,2,95,53,55,33,+3,2,51,50,51,254,219,3,130,9,138,197,44,67,200,120,241,65,19,245,+180,2,161,235,241,107,26,238,11,8,225,224,54,229,149,8,228,91,0,132,+235,68,81,237,208,6,228,142,11,131,35,128,198,233,169,7,164,142,248,209,+12,210,178,197,88,121,129,173,165,2,56,52,51,224,94,5,228,132,6,246,+254,10,2,85,32,66,132,123,224,71,3,2,49,50,54,64,76,204,239,224,+78,6,214,34,225,82,16,225,49,1,225,165,22,226,193,3,235,59,10,224,+30,3,227,27,5,226,133,4,224,97,19,238,79,3,225,6,10,224,30,3,+131,66,225,115,12,227,21,22,224,59,20,225,134,21,225,206,7,226,35,13,+224,26,16,198,78,224,121,8,242,227,18,224,167,16,227,165,5,35,155,137,+224,224,99,0,2,55,53,53,237,132,4,32,16,66,38,2,57,49,32,67,+207,2,54,48,32,224,232,8,175,51,239,130,2,32,85,201,236,103,46,154,+3,103,103,143,121,224,43,0,32,41,137,216,224,125,6,69,64,224,119,12,+32,48,137,230,32,31,2,55,32,75,98,217,224,1,1,254,37,1,238,231,+5,224,1,3,254,217,11,224,45,15,224,43,13,224,39,29,224,35,25,224,+31,21,32,224,250,106,5,225,0,0,138,134,86,162,234,136,5,237,74,10,+234,127,8,231,22,9,215,187,2,56,55,55,242,170,25,227,162,3,236,19,+15,74,191,108,21,148,7,2,54,51,52,241,153,10,202,247,229,19,6,236,+62,6,245,171,0,128,8,162,239,244,177,8,224,153,7,237,201,0,246,90,+7,32,92,138,226,53,16,251,124,5,33,86,137,239,253,54,8,254,222,0,+236,86,15,233,21,4,244,72,7,246,194,23,32,81,236,128,1,245,186,5,+245,182,16,224,93,5,225,171,12,2,58,56,56,138,38,230,148,10,43,97,+231,165,2,227,248,23,121,209,227,248,13,96,58,168,231,203,97,2,56,55,+32,225,82,1,65,201,116,197,2,75,51,32,2,75,52,32,64,2,224,29,+3,170,31,227,200,11,227,208,13,227,216,45,227,72,6,32,120,211,84,83,+82,130,40,243,92,0,240,7,1,242,232,9,243,93,2,226,13,4,254,183,+48,224,111,0,243,88,28,254,45,7,238,191,0,233,249,20,238,113,4,243,+139,27,231,133,11,230,125,12,67,171,2,54,49,32,240,92,23,237,28,7,+227,79,0,238,54,1,232,221,11,231,151,23,249,21,3,134,240,254,156,10,+254,226,3,245,1,44,245,93,3,232,224,254,245,215,22,244,196,19,228,241,+1,229,155,10,229,235,3,237,62,2,240,8,29,248,16,10,224,192,8,240,+14,1,227,51,6,212,207,2,50,48,56,229,20,7,226,243,26,224,148,9,+231,24,2,245,230,1,231,133,12,105,140,224,74,19,228,30,0,224,181,5,+244,177,6,231,237,5,224,208,0,225,247,10,225,180,0,224,32,2,227,39,+4,228,223,10,64,6,159,8,64,253,38,60,2,55,52,32,160,190,2,51,+53,49,230,208,12,32,2,208,255,224,128,10,225,66,0,103,237,242,156,2,+50,187,236,210,6,96,80,192,74,224,46,6,225,4,1,224,32,0,72,35,+145,111,252,131,7,240,232,1,2,98,97,100,2,32,115,121,2,110,111,110,+2,121,109,32,2,117,115,101,241,94,3,224,207,0,106,174,231,123,22,235,+82,6,238,239,1,102,98,181,54,33,202,60,191,96,20,2,90,32,90,230,+114,4,252,183,3,193,192,244,72,3,230,76,39,223,17,241,26,39,239,57,+71,240,18,3,239,75,2,169,56,97,144,229,228,2,130,15,254,172,0,97,+31,143,95,192,71,225,33,5,232,24,9,128,241,249,16,1,227,220,3,131,+126,78,234,202,154,209,170,248,183,2,225,225,12,98,74,228,132,12,230,150,+37,64,221,239,98,0,224,56,2,241,179,40,230,131,34,242,69,42,230,26,+28,250,131,2,238,121,0,250,106,7,235,134,5,245,8,1,39,245,243,27,+2,33,142,225,129,2,227,73,2,2,50,56,32,244,168,2,2,117,98,115,+121,19,2,109,112,108,2,101,109,101,2,110,116,101,244,205,0,233,204,2,+142,105,42,99,128,14,142,78,32,14,2,52,32,90,224,1,4,224,240,5,+224,62,0,142,77,68,90,2,55,57,32,106,193,67,30,32,24,141,101,224,+141,1,2,100,105,99,117,54,32,26,246,25,1,230,117,2,2,56,51,52,+225,205,4,230,63,12,229,36,1,193,23,152,237,226,114,0,247,66,0,118,+22,2,56,55,56,214,36,34,163,2,49,54,55,224,189,6,64,178,32,137,+2,79,32,35,96,69,129,2,64,51,97,2,255,227,5,129,127,223,124,32,+29,251,253,2,224,37,15,226,197,1,128,45,237,189,1,252,45,7,255,212,+7,194,3,128,41,109,233,109,122,2,95,54,57,2,50,32,102,225,84,0,+2,61,62,34,247,249,0,224,24,4,249,222,2,224,35,1,224,102,9,2,+95,53,50,162,84,238,163,1,225,228,9,78,217,76,105,78,55,34,98,2,+55,32,95,2,50,56,57,230,20,4,224,110,2,2,84,121,112,230,20,0,+32,58,140,43,228,192,1,186,164,2,56,50,52,166,177,68,60,2,50,53,+32,183,235,227,255,3,96,45,2,95,56,49,243,97,1,167,57,32,86,251,+86,10,98,15,224,90,17,188,123,241,124,7,2,49,49,50,64,115,32,91,+209,81,64,100,245,109,33,226,82,1,128,26,238,251,4,230,105,7,224,32,+15,230,82,0,230,32,11,192,27,130,144,165,251,224,175,0,244,188,29,165,+68,224,53,6,244,165,26,237,249,1,235,155,12,224,30,3,226,180,3,240,+227,2,255,29,27,70,161,130,128,231,133,0,224,14,3,2,95,55,57,156,+86,32,191,232,156,1,241,24,3,224,216,2,228,169,13,195,137,182,74,2,+56,55,49,224,95,3,2,54,51,55,224,86,10,232,206,0,166,226,225,59,+14,247,94,17,245,225,176,225,65,1,230,216,28,225,112,11,226,201,11,245,+199,7,2,56,55,50,225,187,3,83,143,200,183,229,49,3,170,164,168,77,+64,59,120,61,225,143,9,231,143,4,161,116,232,14,6,224,123,0,179,10,+192,68,224,77,6,224,215,11,245,249,7,64,48,166,198,2,80,32,35,242,+63,3,32,27,223,75,171,171,34,193,64,6,32,24,135,22,68,216,128,18,+32,32,69,74,32,25,135,21,255,192,1,2,56,54,56,96,24,64,31,64,+50,102,209,2,53,57,54,229,120,4,2,91,93,34,160,142,64,45,156,115,+67,204,224,6,2,161,6,65,8,236,65,0,200,126,65,87,128,11,2,83,+32,83,76,8,103,48,133,120,192,35,224,46,0,167,147,212,61,107,228,128,+170,131,56,64,28,236,49,11,2,99,111,109,2,112,111,115,2,101,83,101,+253,54,0,254,212,0,2,56,54,53,64,63,2,52,50,57,224,19,1,64,+70,131,112,252,15,0,44,215,231,186,5,129,153,137,60,225,151,7,71,229,+134,27,224,183,1,128,179,224,177,7,192,172,224,170,1,2,104,97,115,2,+70,105,101,2,108,100,34,228,89,2,119,113,32,86,230,201,0,224,86,41,+2,115,101,116,224,86,16,216,63,225,91,20,224,82,9,2,117,110,100,2,+101,102,105,2,110,101,100,231,107,1,2,54,52,32,128,74,245,103,13,2,+56,53,54,252,94,5,242,105,7,236,23,3,224,27,11,232,183,5,172,18,+233,162,2,232,92,3,240,188,11,239,67,3,239,130,5,205,111,224,35,10,+239,113,1,199,231,246,242,4,131,230,96,124,38,225,34,182,35,63,2,49,+53,48,239,100,0,34,68,2,32,95,57,105,57,34,66,228,185,2,66,225,+133,223,2,95,50,53,229,169,1,197,87,137,181,158,97,67,210,2,90,32,+67,70,54,39,140,225,66,0,225,153,15,2,78,101,115,43,105,2,32,102,+105,33,240,2,115,32,110,2,111,116,32,2,97,108,108,2,111,119,101,235,+124,8,225,62,7,2,49,48,53,241,114,13,247,232,10,141,213,79,29,224,+63,11,192,197,239,219,0,175,215,224,187,14,163,120,100,96,96,3,65,59,+224,208,1,2,101,120,116,2,114,97,32,96,207,2,40,115,41,2,32,34,+32,224,51,2,2,51,49,48,231,32,0,2,50,49,52,229,136,10,33,129,+32,120,204,173,160,41,225,113,2,247,229,4,235,243,13,224,32,6,224,60,+4,173,38,65,156,242,88,0,128,41,169,0,249,43,1,160,237,96,181,237,+76,26,195,168,123,157,192,185,2,55,56,49,65,104,224,45,3,196,172,243,+240,9,35,146,134,35,67,53,197,135,2,85,32,80,228,194,25,187,163,2,+52,55,48,196,109,32,20,134,58,65,81,2,53,57,32,69,20,64,46,32,+23,205,78,96,46,129,201,141,27,2,55,55,52,160,80,64,48,152,205,106,+215,64,117,145,79,225,109,4,2,67,32,79,230,245,8,224,34,7,2,39,+32,79,136,110,208,138,99,67,229,11,0,229,202,2,224,71,3,64,47,228,+139,16,227,109,3,233,165,0,243,245,10,250,228,0,227,137,13,201,184,226,+184,1,2,114,101,99,2,111,114,100,2,32,119,105,2,108,100,99,2,97,+114,100,227,139,13,107,30,224,226,3,82,100,232,136,1,202,129,64,220,106,+57,96,239,225,41,3,251,78,8,226,50,0,226,13,7,89,71,33,133,64,+90,2,65,32,64,32,1,64,5,32,22,166,176,64,56,103,14,172,147,32,+25,217,105,239,43,16,233,31,1,225,98,6,229,28,0,96,143,225,58,2,+244,71,2,224,46,4,32,37,219,55,252,192,18,32,147,134,176,2,75,32,+66,246,51,9,254,193,0,168,126,178,75,190,181,224,86,6,32,197,195,134,+227,243,8,32,102,240,151,0,122,251,240,133,15,32,40,201,134,66,62,66,+60,32,18,201,125,198,207,224,9,1,219,222,65,197,131,52,231,117,2,167,+114,32,29,252,203,0,231,235,41,2,103,101,116,231,235,15,2,52,57,32,+129,232,204,15,242,219,2,134,241,233,116,0,179,107,2,54,51,57,195,133,+2,55,52,49,132,108,225,250,3,232,52,5,192,154,239,151,3,2,111,120,+121,245,162,5,224,181,3,32,146,130,146,170,196,238,51,0,138,197,64,156,+209,168,64,104,2,56,52,52,224,210,1,132,148,61,187,202,117,132,25,65,+69,111,106,145,76,64,38,96,66,32,93,128,92,129,162,64,73,235,60,2,+206,20,160,119,129,210,239,221,21,2,50,48,54,66,66,218,246,239,222,4,+248,210,13,2,55,54,53,243,178,8,232,135,5,156,198,230,84,2,102,56,+174,138,96,140,38,58,254,158,11,204,172,238,23,2,251,178,2,224,6,8,+249,191,11,135,209,128,72,239,54,18,229,32,1,160,30,112,230,231,94,0,+2,53,52,54,225,162,0,255,72,4,243,88,6,241,85,1,211,56,132,115,+70,93,98,67,64,90,2,80,32,95,2,50,50,51,97,63,87,144,140,199,+130,144,160,24,237,247,11,248,196,0,200,186,232,101,0,34,53,255,6,3,+161,8,96,205,248,140,2,216,12,2,56,52,49,254,137,9,227,248,2,2,+52,50,32,133,77,32,10,195,205,225,248,15,229,160,5,249,247,5,96,51,+128,129,160,62,233,107,6,97,75,253,115,3,225,186,3,221,131,224,50,3,+32,112,161,37,232,203,9,32,172,173,232,214,196,225,31,3,2,51,56,32,+230,80,0,2,58,56,51,132,47,69,106,224,214,25,224,252,0,192,124,250,+1,3,2,56,51,55,232,239,0,110,65,224,142,1,64,114,161,59,241,191,+1,64,70,111,156,230,16,0,161,149,198,9,32,55,132,28,2,90,32,85,+128,14,132,8,254,140,2,165,223,166,172,32,33,132,10,224,197,2,2,53,+56,52,110,121,233,28,1,184,110,234,235,9,132,232,162,133,177,39,215,25,+163,214,33,20,100,17,129,32,73,21,235,101,11,161,5,2,49,54,48,172,+23,236,35,18,96,188,201,147,64,197,183,40,247,24,5,247,30,17,225,42,+0,132,207,32,160,2,55,32,75,32,65,73,120,224,1,11,252,116,3,234,+253,11,224,43,25,224,39,29,224,35,25,224,31,21,224,27,17,224,23,13,+224,19,9,224,15,5,237,237,3,104,47,2,55,53,56,255,61,20,97,84,+199,228,70,63,209,220,96,24,209,98,245,254,0,179,25,238,107,3,224,11,+4,101,115,196,240,145,175,2,52,52,56,176,121,224,8,7,203,179,128,5,+101,179,224,94,0,64,6,45,147,2,52,52,55,224,40,8,224,133,25,111,+93,224,135,0,128,110,160,142,224,135,43,2,82,32,95,224,135,34,193,130,+76,29,224,42,1,224,139,5,224,130,0,224,148,8,224,133,13,224,79,7,+224,143,6,207,188,163,247,224,185,1,224,51,3,224,137,22,224,146,8,160,+84,224,77,20,224,135,0,2,110,111,77,2,97,116,99,2,104,32,102,241,+168,1,2,114,99,47,2,77,105,99,2,114,111,72,2,115,47,84,2,67,+77,111,2,110,97,100,2,46,104,115,137,64,2,35,49,55,68,111,245,44,+2,235,244,5,103,86,232,143,0,2,50,55,32,224,13,3,37,21,224,13,+2,2,57,32,95,224,13,0,37,102,224,12,2,66,179,160,12,34,201,205,+217,139,68,68,190,2,58,56,50,134,20,254,118,3,224,11,3,128,38,2,+95,52,54,160,234,64,233,32,52,244,28,1,224,52,11,224,64,4,101,100,+224,64,1,224,72,6,133,245,224,60,15,224,170,3,224,60,10,166,35,41,+252,226,171,5,186,227,225,230,1,142,74,175,120,224,7,6,224,37,1,119,+180,224,99,4,224,37,17,192,29,224,45,5,224,37,15,224,45,5,64,9,+65,192,186,75,32,200,237,3,1,234,102,21,129,15,53,91,230,198,3,65,+140,237,105,2,241,117,14,2,97,115,115,2,101,114,116,66,132,2,100,101,+58,2,32,101,120,2,112,101,99,50,86,2,61,34,32,233,107,6,252,243,+4,92,229,41,12,32,170,230,235,2,83,25,2,64,32,79,219,94,64,8,+107,45,96,8,64,171,230,187,7,224,149,18,2,44,32,103,2,111,116,61,+236,219,2,96,115,224,110,1,229,163,5,75,171,104,35,199,31,32,18,167,+11,2,49,51,52,32,19,161,125,2,49,52,54,224,99,2,2,84,67,69,+2,120,112,114,252,216,0,224,28,7,252,96,3,224,30,10,2,75,105,110,+237,123,3,224,30,7,2,83,111,114,246,134,4,32,136,67,169,244,205,0,+41,157,224,13,0,32,173,134,100,232,108,0,65,25,2,56,56,32,33,239,+165,1,2,56,49,57,242,61,3,232,151,2,243,114,23,225,100,18,2,77,+117,108,2,116,105,112,2,108,121,32,181,226,2,58,32,34,242,109,2,240,+92,0,242,135,0,32,167,166,243,2,51,50,49,64,13,242,17,0,2,56,+49,56,242,41,2,32,171,128,23,76,231,141,122,227,8,1,105,122,254,104,+1,128,178,238,141,0,32,60,202,39,226,239,17,234,164,23,234,198,15,241,+45,3,214,106,235,82,15,251,78,1,192,174,224,38,3,106,183,145,160,236,+190,4,184,62,34,239,165,104,236,190,7,224,118,15,2,56,48,50,235,76,+8,237,184,4,235,154,29,238,78,0,224,213,18,224,247,14,188,169,236,105,+14,192,159,245,53,12,160,33,67,160,2,49,54,32,227,154,5,77,255,148,+98,37,140,129,44,132,21,164,19,96,8,165,44,36,176,231,34,2,2,117,+99,99,2,32,84,67,227,71,5,32,96,67,55,160,101,193,118,160,6,2,+56,49,49,224,27,2,2,56,49,50,224,13,4,224,157,2,32,8,2,53,+32,95,192,13,32,163,249,114,0,208,7,144,10,112,166,32,158,226,55,1,+190,197,173,209,239,127,3,64,79,35,119,2,52,55,55,225,16,1,203,246,+224,8,7,32,113,133,216,43,228,2,50,32,75,2,52,32,65,225,46,1,+132,201,240,146,5,224,135,7,224,119,5,2,53,55,48,224,119,21,32,85,+240,232,11,224,85,21,2,52,55,54,224,85,24,228,180,0,186,5,224,82,+6,160,71,33,120,224,71,10,32,62,132,75,67,91,149,225,96,54,147,41,+2,56,48,56,205,42,237,52,19,224,75,1,132,137,115,197,237,39,9,2,+58,56,48,246,151,1,98,235,128,20,132,105,97,132,237,94,13,32,35,130,+190,32,33,149,67,66,170,128,15,146,119,66,195,103,161,230,121,1,66,221,+96,86,237,182,19,32,38,212,79,103,171,2,55,53,53,239,56,0,110,94,+35,125,238,94,4,32,48,183,172,205,221,237,59,5,219,80,237,203,19,237,+249,131,237,123,12,32,228,226,20,1,2,55,56,48,249,14,5,2,53,49,+54,236,5,2,2,79,32,80,64,23,64,28,2,57,56,32,64,21,2,79,+32,66,208,118,248,39,1,64,33,178,81,102,162,210,88,193,144,225,181,0,+130,65,96,54,36,136,39,171,2,50,56,57,244,227,6,2,105,109,105,2,+116,105,118,2,101,115,46,228,148,3,2,58,55,57,130,92,224,41,12,200,+37,32,37,198,215,224,219,26,99,140,84,229,103,58,128,228,112,195,249,26,+2,96,24,101,72,211,52,192,210,224,59,10,192,92,224,59,3,161,30,224,+59,24,234,193,0,224,59,2,106,197,224,59,26,193,226,224,59,3,129,134,+224,59,6,160,32,224,59,3,243,9,1,224,59,1,100,7,2,55,57,53,+225,194,10,234,84,2,226,3,15,97,134,131,208,51,205,96,37,99,80,2,+57,52,32,160,144,224,11,5,160,163,32,41,178,82,2,55,57,51,64,13,+214,83,32,15,97,198,64,6,32,4,38,111,2,55,56,50,226,51,15,2,+45,62,34,226,231,1,64,72,248,23,1,2,55,57,49,248,23,4,64,74,+226,140,0,32,13,169,116,87,179,32,13,130,168,224,99,18,2,58,55,56,+226,145,18,2,78,97,116,160,36,130,144,226,224,13,2,121,109,98,2,111,+108,34,128,39,129,49,224,39,12,2,67,111,110,2,115,116,114,2,97,105,+110,192,83,161,82,227,69,28,235,65,3,32,58,129,99,224,41,12,203,138,+32,37,129,123,97,41,161,109,32,20,171,235,2,50,56,56,224,63,2,2,+98,117,105,42,222,2,110,34,32,111,84,65,168,96,4,32,46,209,209,156,+14,185,170,67,134,142,114,244,150,0,214,7,32,12,66,145,38,54,32,4,+233,72,1,224,22,12,32,71,164,73,78,125,167,25,159,223,224,11,2,128,+99,247,81,4,2,55,55,56,224,8,5,224,102,0,78,19,192,96,2,58,+55,55,129,219,2,85,32,67,182,247,64,90,2,60,32,64,199,27,217,245,+224,22,0,172,100,50,47,2,53,56,57,236,39,1,242,11,1,215,250,162,+132,233,133,4,58,101,2,73,100,101,129,222,220,199,2,90,32,95,224,163,+7,2,85,32,73,224,255,0,64,26,163,30,112,200,172,21,65,39,229,0,+0,120,226,142,79,201,84,99,176,254,89,15,96,10,195,141,64,85,236,94,+7,247,177,0,191,132,96,96,182,75,235,24,0,232,149,1,142,170,207,25,+238,85,8,32,99,218,79,128,101,198,209,224,105,3,249,207,2,198,222,252,+246,2,193,155,247,203,0,224,140,0,225,41,2,130,204,119,155,97,80,68,+14,97,1,32,15,215,217,100,132,32,43,196,48,199,76,122,194,119,60,232,+69,17,2,55,55,48,232,69,6,107,230,232,69,7,252,188,1,246,43,255,+246,27,24,33,72,238,252,0,225,121,12,2,54,56,32,225,121,6,77,130,+233,191,11,233,185,1,225,129,229,225,97,18,33,44,235,155,0,203,208,249,+2,23,32,51,132,96,89,57,255,201,2,224,49,15,32,47,132,71,32,47,+50,34,192,48,236,0,6,112,116,133,110,229,43,4,165,171,239,13,1,47,+47,196,24,129,218,239,170,8,2,53,52,32,254,19,4,32,49,122,107,243,+65,0,220,150,221,98,32,207,229,173,4,224,146,0,254,211,1,226,123,4,+221,219,162,129,2,53,57,32,250,160,6,228,158,0,32,21,172,94,192,124,+32,85,132,96,237,13,4,250,118,25,32,55,168,171,68,177,2,95,56,32,+96,18,132,99,2,73,32,58,96,125,226,244,5,66,238,228,106,255,250,150,+7,250,144,24,2,58,55,53,206,201,225,67,37,225,115,255,225,115,9,222,+105,225,106,10,196,131,32,10,196,90,71,188,32,14,200,129,158,46,167,171,+104,30,228,6,1,32,38,196,59,253,200,11,253,202,20,100,44,224,97,9,+105,242,128,176,136,69,32,40,170,251,2,53,55,55,64,13,234,218,5,210,+174,224,2,3,137,5,225,117,13,150,81,234,124,4,2,53,52,51,244,129,+5,120,89,78,183,2,53,54,50,224,72,8,128,173,245,138,6,2,95,53,+51,255,57,0,255,45,3,32,174,132,40,64,36,64,176,201,55,233,64,4,+170,197,238,193,2,224,31,12,203,127,65,214,235,23,7,128,116,252,5,1,+192,23,221,205,2,75,32,95,233,213,2,101,1,224,16,3,128,86,129,81,+233,44,3,139,209,224,252,1,199,200,243,72,4,250,187,0,182,73,234,58,+8,234,61,1,96,57,234,61,0,234,173,1,128,206,234,64,1,234,103,4,+51,204,203,4,245,188,2,139,61,230,65,6,32,15,228,93,1,243,181,2,+128,43,2,52,53,32,248,89,6,32,19,134,178,134,174,2,53,54,48,96,+20,65,180,240,188,0,192,13,224,1,3,224,219,3,64,245,227,150,11,134,+235,2,52,55,50,246,146,2,192,195,225,0,2,224,158,2,199,61,203,203,+32,122,224,143,4,224,251,7,160,207,224,161,12,226,174,0,204,130,254,154,+0,2,39,32,89,235,238,4,227,163,1,192,163,224,61,2,225,145,0,247,+118,1,225,120,12,96,17,237,122,6,240,172,0,245,190,2,244,235,16,2,+95,51,53,224,196,3,204,65,2,95,50,57,2,48,32,102,237,171,0,2,+36,102,34,224,173,4,2,89,32,66,224,193,0,206,213,177,24,64,56,250,+26,20,2,36,120,34,251,123,6,2,49,54,55,225,71,14,224,194,28,248,+87,1,34,70,128,33,224,215,2,224,224,6,64,87,237,220,1,242,35,2,+226,78,0,161,172,255,212,3,221,219,229,88,1,229,98,7,227,166,5,97,+176,137,113,233,112,18,193,107,226,228,8,228,101,7,129,29,228,100,8,131,+113,228,83,8,74,79,160,2,82,220,226,244,4,131,5,229,80,3,70,111,+227,250,10,65,121,129,54,64,198,2,51,49,32,183,133,116,21,244,81,1,+64,12,163,104,243,46,7,228,251,7,225,169,3,229,102,12,230,12,1,225,+0,8,131,160,225,0,8,128,92,225,0,10,229,101,16,225,25,23,128,96,+239,205,2,166,181,97,15,128,251,240,14,2,2,95,55,52,96,19,253,22,+6,244,56,9,162,91,224,242,8,194,152,107,254,241,90,6,224,202,15,128,+200,2,90,32,66,170,238,128,13,192,15,224,221,3,128,11,128,216,226,129,+5,97,246,32,4,2,55,32,79,34,93,64,19,224,175,3,232,60,15,224,+121,5,166,113,229,110,10,199,113,230,212,3,196,198,131,24,194,100,224,155,+11,230,136,17,79,0,50,176,227,212,6,195,251,101,110,67,169,34,173,68,+2,2,79,32,95,113,137,192,205,241,199,3,134,96,2,50,53,50,160,25,+2,52,57,32,36,60,230,121,0,2,50,56,50,224,254,10,250,111,3,115,+238,227,195,13,40,122,140,152,86,7,32,88,177,134,225,255,0,114,143,45,+73,2,50,52,56,49,146,130,51,192,69,232,161,10,2,95,54,50,64,160,+160,168,37,45,192,205,2,52,54,32,160,8,251,0,0,156,172,32,117,138,+93,167,38,242,79,13,129,168,231,170,15,253,206,4,227,17,12,70,1,65,+122,128,94,128,175,231,145,2,203,18,242,168,0,227,215,0,232,216,3,194,+27,231,200,6,224,39,8,231,152,6,160,8,226,197,1,253,218,2,2,101,+113,34,234,99,4,229,252,6,224,107,6,226,110,13,232,167,1,229,45,2,+225,26,1,231,207,0,188,149,230,38,0,128,91,33,179,85,125,234,169,0,+32,57,234,180,3,230,210,3,162,70,66,216,35,1,166,185,230,217,4,233,+33,36,231,180,20,231,178,3,234,96,1,234,118,3,230,176,0,231,197,67,+88,122,86,239,227,60,11,98,171,140,254,2,90,32,67,194,66,226,138,8,+194,132,226,122,203,137,58,160,234,128,105,154,172,167,153,2,95,54,57,250,+232,6,224,47,0,226,3,7,229,182,3,225,238,142,97,240,142,224,225,210,+3,235,130,0,226,233,12,226,211,5,253,28,2,65,5,151,245,120,129,32,+203,230,68,4,237,81,5,206,4,225,249,2,230,190,1,101,147,210,227,229,+46,4,96,163,55,64,236,37,2,228,2,4,173,131,224,68,0,100,59,101,+149,32,255,237,31,2,204,13,227,184,9,96,17,148,3,135,16,128,34,2,+54,52,49,235,231,6,2,54,57,54,234,60,10,236,153,3,65,191,94,108,+231,30,3,2,95,54,48,226,164,3,2,36,113,34,236,35,5,74,4,2,+54,57,48,192,43,32,116,65,112,232,2,9,33,110,248,82,0,238,130,2,+135,253,2,53,55,56,230,52,5,225,68,5,140,247,224,16,1,236,233,3,+240,117,0,224,49,4,248,218,1,2,52,48,32,97,78,161,62,2,51,49,+53,237,52,6,224,252,2,2,53,56,55,245,57,5,225,176,5,96,87,69,+107,225,71,3,233,92,3,225,43,7,226,243,0,32,252,212,194,235,36,6,+176,117,228,35,31,2,110,111,77,2,97,116,99,2,104,34,32,237,167,5,+131,234,2,55,52,49,224,21,10,228,0,1,224,21,13,32,155,209,153,2,+80,32,35,203,18,96,23,209,2,204,239,240,3,1,233,205,0,225,44,12,+248,62,17,224,17,5,232,174,0,229,108,0,236,87,0,224,86,7,99,68,+2,85,32,65,243,123,14,192,153,2,39,32,85,2,32,110,111,97,35,229,+89,3,2,114,99,47,2,77,105,99,2,114,111,72,2,115,47,68,2,101,+115,117,2,103,97,114,2,46,104,115,189,125,2,51,53,51,241,137,2,240,+44,15,241,37,0,229,133,12,242,204,11,224,44,16,230,114,2,224,2,3,+224,100,0,209,135,244,131,19,224,239,1,241,144,2,203,53,224,108,17,243,+96,1,224,72,2,224,123,4,224,129,18,245,167,15,236,147,7,246,38,19,+245,187,12,195,17,253,238,2,224,67,39,224,250,13,224,41,11,226,129,1,+225,192,23,244,141,19,224,29,7,244,209,3,228,157,2,226,212,1,224,10,+14,232,100,1,224,14,0,244,232,3,244,252,0,132,153,207,222,224,102,2,+227,18,9,254,107,8,237,54,8,211,150,238,156,1,224,97,2,227,129,16,+101,167,146,215,2,55,49,48,225,155,16,198,217,224,107,5,192,114,197,216,+197,249,202,189,245,219,7,235,79,6,242,220,6,203,54,242,221,3,133,194,+66,66,64,42,244,231,0,213,26,245,16,1,224,50,0,226,116,20,231,242,+3,239,23,1,175,228,224,176,12,176,204,224,24,1,226,147,1,255,100,1,+80,212,225,51,11,145,37,243,241,0,137,92,225,157,1,232,124,1,251,234,+5,160,178,142,168,224,184,9,194,237,33,176,233,107,13,249,38,16,227,146,+9,225,241,15,224,62,11,227,141,11,227,135,25,227,91,3,226,179,0,210,+64,97,26,33,17,252,236,7,168,120,161,0,114,51,237,45,2,224,174,13,+227,168,44,109,174,227,153,7,227,151,4,227,5,25,233,237,0,248,155,9,+226,209,2,239,47,6,194,5,240,3,0,235,139,1,226,229,4,236,184,1,+229,229,3,226,237,16,225,207,5,241,118,9,246,243,5,226,142,1,66,252,+229,158,14,226,253,2,229,143,13,231,82,4,237,36,1,229,124,3,237,56,+5,224,14,19,229,57,77,231,234,7,235,196,0,255,50,0,230,58,12,228,+168,13,224,228,3,226,69,1,2,51,52,54,224,75,9,226,147,10,238,209,+2,224,124,2,68,73,114,159,2,95,55,50,247,178,7,230,191,15,231,171,+4,224,201,13,196,132,192,54,229,162,6,32,54,140,129,240,56,11,226,191,+0,245,35,2,129,16,106,33,194,21,229,66,3,243,112,0,32,197,237,23,+3,249,1,5,230,129,6,243,241,2,2,55,50,53,237,77,7,248,227,2,+2,55,50,57,229,121,3,128,20,2,49,48,51,246,75,11,164,104,236,3,+1,2,54,52,32,129,101,2,51,48,32,113,136,2,55,51,49,251,105,6,+68,187,172,119,160,221,128,19,224,120,2,230,204,18,227,236,0,131,36,230,+18,5,247,90,2,235,89,9,132,64,32,144,224,101,3,229,30,6,2,83,+32,83,233,143,12,230,56,14,129,154,150,38,230,69,2,224,47,7,197,102,+224,46,0,224,45,6,252,141,9,167,52,225,35,2,2,90,32,89,108,58,+142,121,233,247,13,230,199,3,64,71,246,74,13,236,145,1,224,79,1,228,+9,4,229,21,3,255,136,7,233,214,11,232,19,17,224,228,9,230,230,13,+252,246,10,224,6,9,224,48,3,238,126,1,232,87,16,229,118,30,239,103,+8,150,62,235,202,3,152,31,228,91,1,254,30,7,230,51,5,236,92,3,+227,201,3,88,37,225,144,7,237,234,29,224,81,1,198,82,229,100,6,239,+194,1,241,27,0,228,148,2,96,46,245,39,2,68,128,228,53,3,251,86,+17,239,165,1,2,51,56,32,65,28,67,58,161,28,247,40,5,65,105,247,+41,4,132,157,247,48,2,2,51,54,32,160,8,66,20,32,74,151,37,224,+221,0,50,67,151,64,251,207,10,231,94,8,224,27,29,225,31,8,224,58,+11,224,44,1,196,206,179,3,235,206,1,246,102,0,192,104,230,41,3,132,+108,229,29,4,241,121,10,232,207,4,250,237,1,250,44,3,64,20,89,62,+88,180,246,181,3,254,168,6,226,123,18,230,241,0,239,56,4,227,187,1,+232,2,0,226,122,21,234,93,5,224,84,0,224,119,4,233,219,4,253,118,+4,100,232,89,197,230,48,6,235,167,0,198,207,226,181,4,192,35,64,121,+234,219,7,249,22,6,97,19,34,107,226,45,1,227,190,3,66,93,249,124,+0,244,30,9,224,6,4,237,146,0,233,9,12,244,115,4,249,173,13,224,+31,3,224,110,0,225,127,3,224,22,0,234,126,1,65,1,117,221,245,99,+1,192,8,234,85,0,163,63,96,107,2,54,55,57,161,228,220,114,102,27,+224,17,8,227,127,3,224,1,5,246,139,17,226,76,3,226,208,1,229,69,+0,225,68,3,181,28,2,55,51,53,229,65,22,246,49,7,2,110,34,32,+224,26,15,2,116,116,34,225,183,1,150,151,2,80,32,66,160,211,167,198,+252,105,3,71,53,64,126,197,215,35,45,123,198,226,106,1,252,84,0,226,+38,9,32,98,214,176,135,0,242,161,8,242,110,8,233,248,2,241,254,5,+237,147,13,231,28,7,234,224,10,242,71,18,224,125,18,229,200,1,213,69,+227,200,3,230,17,7,252,61,5,247,94,6,224,10,1,224,21,13,160,10,+222,86,251,72,3,251,38,5,251,40,8,224,115,3,240,43,9,224,110,3,+224,10,2,2,95,53,57,129,157,106,105,2,53,57,49,245,182,12,2,61,+61,34,245,177,12,245,155,3,237,56,7,232,44,7,228,216,9,224,21,21,+122,225,65,2,119,246,107,193,34,137,57,118,191,194,130,151,2,35,50,32,+254,134,9,243,221,4,245,81,24,2,69,110,99,2,111,100,101,2,68,97,+116,2,97,46,104,213,84,2,49,51,54,128,6,240,9,24,229,43,7,240,+73,21,224,59,35,224,29,7,194,96,248,61,6,237,40,14,236,39,13,181,+111,225,245,19,2,79,32,35,103,125,235,213,5,225,241,17,226,114,6,230,+141,1,224,30,14,240,69,11,236,115,13,237,20,5,230,40,1,230,142,2,+36,83,153,149,55,248,32,11,152,164,2,80,32,95,132,115,2,90,32,85,+160,3,2,80,32,90,32,1,228,203,2,230,191,18,152,77,2,95,52,52,+107,71,99,143,2,90,32,66,165,244,167,195,192,16,231,104,10,236,137,8,+236,77,1,66,15,2,75,51,32,224,30,1,224,68,16,64,20,37,87,205,+186,32,149,152,203,226,3,7,130,249,32,30,139,51,204,88,187,220,229,17,+1,235,76,5,246,243,9,243,127,5,2,83,32,67,224,31,5,2,50,50,+32,131,210,227,103,3,237,1,41,224,49,13,224,48,6,226,246,5,68,243,+2,50,55,32,2,64,32,80,64,8,66,123,2,95,54,51,231,99,1,2,+58,55,50,139,16,47,142,2,52,32,95,2,49,52,57,192,38,64,40,2,+56,53,32,79,56,44,80,224,20,0,32,48,138,246,2,75,32,66,198,225,+160,26,165,16,254,1,15,2,105,109,112,2,111,115,115,2,105,98,108,2,+101,58,32,229,13,3,176,226,220,224,160,67,79,119,241,206,0,32,17,2,+51,50,52,241,179,6,224,108,10,35,122,96,69,227,122,6,64,77,245,122,+11,32,203,137,107,224,252,4,206,226,227,63,1,176,169,158,181,93,86,2,+49,55,48,255,130,7,224,136,8,105,90,224,113,3,187,226,224,76,4,255,+2,0,224,65,11,2,53,56,32,224,65,3,255,53,15,193,159,128,183,32,+211,200,135,32,10,136,47,247,20,2,236,244,6,130,157,194,14,226,184,19,+47,240,252,232,2,238,239,2,226,136,1,192,70,144,76,224,45,4,224,47,+12,194,184,222,187,242,17,7,2,67,32,79,240,1,10,255,167,5,32,227,+132,191,233,118,9,94,137,2,56,32,102,226,127,0,2,99,111,110,2,65,+114,105,2,116,121,34,227,31,9,68,203,228,131,7,160,158,32,96,133,20,+82,17,2,50,49,32,132,109,96,23,132,231,235,167,4,234,110,4,96,49,+189,222,239,201,2,233,225,2,37,147,225,94,1,224,21,0,32,90,253,120,+7,35,188,160,42,244,161,0,224,11,2,128,74,224,62,2,196,204,243,234,+1,32,6,129,84,195,109,95,168,242,92,1,181,41,128,98,40,49,128,8,+243,132,10,32,56,194,250,2,58,55,49,132,58,101,227,169,220,162,59,229,+145,4,238,9,2,32,197,128,19,133,117,80,208,100,74,75,224,246,214,4,+226,167,20,224,31,15,97,158,246,246,1,226,105,1,160,24,230,55,3,116,+168,172,130,224,44,28,234,74,5,247,235,7,227,5,7,224,61,7,2,90,+32,67,224,108,12,224,45,15,148,120,2,49,54,32,231,221,17,97,117,230,+144,16,242,103,8,227,119,7,250,51,15,131,139,243,26,5,224,59,19,240,+192,7,247,14,16,34,69,224,50,0,234,110,5,225,145,23,249,227,5,225,+144,4,231,245,7,229,218,1,71,72,232,134,0,228,253,19,195,87,224,31,+15,192,117,161,110,224,31,8,192,213,224,31,0,229,66,6,204,109,224,225,+19,128,35,226,114,13,236,164,7,215,100,129,166,225,162,9,252,18,19,241,+198,7,193,147,224,105,7,162,126,237,31,9,224,198,21,128,114,224,198,29,+225,48,17,231,245,1,224,105,17,165,74,225,48,35,224,71,12,196,241,224,+177,29,228,122,18,226,36,22,194,165,224,243,15,231,130,1,224,171,17,228,+43,13,96,171,2,49,52,52,224,244,34,165,150,224,72,11,2,55,49,50,+67,50,241,34,11,229,51,20,224,81,19,224,76,9,225,5,15,249,103,5,+224,106,13,229,157,18,224,183,9,228,85,46,229,230,10,236,82,1,165,148,+36,97,137,104,68,97,32,21,65,84,32,6,65,135,32,26,137,120,2,102,+47,61,64,12,136,161,2,102,61,61,64,12,136,77,111,152,154,104,230,247,+1,229,122,1,252,83,18,229,70,1,136,136,224,9,5,106,73,32,166,96,+139,129,149,32,115,237,145,1,109,92,195,60,96,205,200,230,64,8,135,204,+161,45,226,234,15,243,91,2,224,31,12,229,15,2,224,31,12,160,150,234,+110,21,104,83,32,234,96,201,2,53,56,57,233,241,1,111,74,105,135,224,+22,4,232,57,0,2,95,50,55,32,215,212,217,170,12,2,53,57,48,169,+123,252,189,5,218,138,244,96,3,170,140,187,214,115,241,235,159,13,2,49,+50,48,235,160,28,106,179,92,75,50,124,32,11,2,56,54,32,146,130,2,+95,57,55,242,130,11,235,45,15,193,54,75,46,192,29,128,170,144,140,33,+203,160,228,224,8,8,243,201,8,230,45,7,251,182,1,221,192,225,185,12,+235,203,27,235,128,0,224,124,1,160,79,53,223,129,183,2,48,56,32,32,+4,77,108,228,26,9,64,64,96,62,2,54,50,52,225,178,2,224,201,7,+255,209,4,231,173,9,224,69,0,66,7,245,180,7,2,102,34,32,254,187,+5,32,39,2,52,55,48,209,33,128,55,130,98,224,57,19,224,154,15,140,+206,49,232,96,65,224,184,9,129,180,227,26,12,230,37,8,235,0,14,247,+139,3,232,202,11,193,204,32,132,52,239,195,34,111,67,239,253,4,140,121,+35,133,233,32,20,192,149,226,22,15,224,149,3,238,18,16,243,1,0,96,+149,99,214,2,49,48,57,225,56,6,2,95,55,48,224,18,1,226,101,20,+32,41,229,163,3,160,91,254,133,9,56,79,120,169,224,250,10,224,210,19,+226,233,28,228,189,1,229,48,0,241,155,19,235,98,1,248,182,5,249,148,+0,224,60,7,240,99,7,252,36,5,224,66,28,244,107,3,252,103,11,224,+13,1,224,66,16,228,160,3,224,52,7,254,244,7,64,53,237,250,5,227,+64,5,118,35,2,76,105,115,2,116,95,84,2,121,112,101,2,46,43,43,+227,79,5,230,226,0,228,62,5,228,64,7,244,246,26,227,203,0,229,10,+16,34,66,230,6,1,240,89,13,64,49,167,170,128,77,160,86,96,56,224,+217,11,2,82,97,116,2,105,111,95,96,218,2,95,109,107,96,13,2,110,+97,108,228,109,6,130,184,32,6,241,250,2,224,19,0,211,99,67,6,32,+122,146,238,32,14,143,39,146,193,32,14,140,218,57,210,167,37,219,60,2,+52,53,53,136,13,93,208,119,231,35,107,69,103,237,37,2,33,161,2,56,+51,32,160,42,224,44,6,2,55,48,52,224,44,5,224,243,25,2,73,110,+116,2,101,103,101,2,114,46,95,2,105,110,116,65,217,2,84,111,73,128,+17,224,246,6,133,206,190,139,49,9,247,15,9,32,120,230,14,3,224,120,+30,161,110,32,125,224,121,15,228,118,7,231,127,0,238,43,1,65,126,97,+95,72,253,64,137,32,34,49,47,128,38,227,1,2,32,41,137,216,225,152,+0,137,218,32,186,32,169,2,49,54,48,199,217,2,55,48,49,64,4,33,+146,39,154,163,200,236,35,0,202,194,224,36,20,32,91,138,41,2,117,113,+117,2,111,116,32,32,14,137,196,2,73,32,58,64,55,211,225,81,141,226,+25,1,65,236,145,249,2,80,32,35,128,80,67,172,32,23,130,64,187,95,+210,61,227,88,0,160,20,250,224,8,37,61,201,116,65,63,81,174,150,23,+230,18,2,83,163,163,93,201,10,161,229,232,78,3,234,204,0,159,50,128,+112,64,58,64,78,53,82,224,60,1,33,166,229,202,1,32,185,130,235,70,+64,211,66,167,90,96,8,130,49,32,38,129,193,129,191,242,75,7,243,45,+3,254,41,2,102,241,229,229,6,64,5,228,43,0,2,90,32,75,224,137,+0,224,11,3,249,146,2,225,78,3,160,22,64,12,35,100,2,53,53,52,+228,214,23,153,201,96,214,137,193,2,53,48,54,227,53,6,2,57,52,32,+102,221,254,19,3,32,92,192,248,225,37,0,130,150,67,87,2,49,48,51,+97,26,36,36,232,185,2,2,118,34,32,224,43,0,130,179,244,92,1,129,+52,242,84,1,130,37,251,0,1,230,26,0,242,112,4,185,217,252,113,4,+226,26,3,255,147,6,129,235,192,58,130,5,253,165,0,2,54,48,51,226,+22,8,192,36,129,118,234,42,3,160,34,149,21,33,49,244,95,3,2,54,+56,52,224,53,2,236,24,4,226,9,3,242,220,0,254,201,8,231,196,10,+230,56,5,252,153,9,254,224,1,193,156,2,50,32,102,228,172,5,2,66,+111,111,2,108,46,111,2,116,104,101,2,114,119,105,2,115,101,34,234,196,+8,235,251,8,251,242,7,129,92,182,77,224,51,7,224,32,1,245,156,0,+224,32,3,33,242,214,194,244,92,2,240,222,0,32,30,132,90,161,29,102,+84,129,22,228,23,0,224,138,3,228,68,0,244,175,3,249,113,5,225,92,+9,224,58,0,98,73,159,81,232,103,6,234,12,5,253,139,3,255,9,7,+225,30,5,224,112,3,160,149,226,205,3,239,59,1,228,247,6,239,95,1,+224,33,3,100,242,235,50,18,128,36,184,169,195,151,229,28,0,225,131,0,+2,95,53,49,89,148,236,223,7,229,47,13,225,243,2,227,38,4,2,39,+32,80,224,51,2,69,38,224,152,0,228,140,5,2,95,56,32,228,24,0,+230,173,1,249,57,7,228,198,7,241,133,1,234,200,2,196,20,128,9,254,+253,5,195,181,194,5,160,60,230,55,2,246,68,1,97,38,186,147,33,39,+241,152,9,204,188,229,59,2,227,156,18,225,176,17,97,242,225,247,0,224,+20,1,2,95,53,54,129,156,192,181,228,2,12,235,195,1,2,95,51,48,+92,202,248,179,1,226,143,1,224,207,20,224,28,10,255,225,7,227,30,5,+224,52,1,230,53,8,69,10,108,175,2,80,32,110,2,111,77,97,2,116,+99,104,96,57,100,129,164,134,252,81,4,128,247,224,44,17,253,44,1,234,+231,4,230,27,6,2,109,34,32,252,204,6,2,54,56,50,65,10,234,161,+1,221,232,39,213,2,83,32,73,225,143,13,129,103,225,56,4,247,250,1,+179,81,251,157,1,224,92,0,64,244,2,52,55,50,64,116,183,5,224,158,+6,2,112,34,32,224,195,10,2,53,51,53,66,237,250,140,0,98,248,104,+1,35,138,138,204,65,163,32,23,137,33,231,251,0,2,80,32,67,227,105,+2,164,32,64,187,238,44,6,2,51,50,54,227,73,8,237,36,2,178,32,+131,30,64,62,240,239,5,32,41,131,63,130,202,210,91,249,144,3,232,24,+2,160,74,194,146,227,103,3,64,29,224,88,2,222,146,135,103,232,48,2,+231,58,4,160,146,209,73,167,19,224,45,2,228,26,9,32,37,49,149,243,+77,3,125,5,196,194,2,58,54,56,202,90,64,215,252,244,9,233,2,4,+188,12,232,84,6,227,122,2,229,179,1,239,120,7,249,206,5,198,109,231,+184,8,224,54,7,243,115,3,225,165,3,224,150,1,224,49,7,227,222,3,+254,248,35,238,247,4,230,190,12,133,6,225,98,5,224,147,1,246,247,12,+243,133,5,226,43,5,185,185,226,51,0,252,3,8,232,41,7,224,233,7,+240,244,3,232,92,14,224,50,7,237,136,5,224,240,13,224,35,7,197,251,+255,133,0,67,162,228,236,4,166,208,64,222,198,212,2,52,50,57,245,67,+5,79,131,244,17,7,225,130,7,200,116,225,94,10,230,80,4,242,167,14,+226,146,0,224,40,15,226,76,1,225,94,3,224,40,10,229,232,1,234,56,+12,224,30,3,241,253,3,231,37,4,234,107,15,184,142,193,68,224,253,7,+224,24,4,243,121,20,227,197,2,226,58,40,246,59,7,224,49,24,236,167,+3,226,56,14,224,34,7,129,13,242,127,6,183,111,230,66,3,226,77,0,+227,18,19,193,30,249,64,2,224,72,0,254,116,3,128,37,2,82,32,95,+225,25,8,198,234,129,188,247,247,8,230,152,1,2,112,97,116,2,86,97,+114,2,115,32,34,229,67,3,225,147,2,225,26,0,81,163,2,49,56,57,+128,32,142,192,2,56,55,32,140,213,130,236,192,153,37,101,241,233,1,243,+76,0,107,169,248,121,4,109,253,227,52,2,186,195,217,217,96,72,207,55,+53,223,96,135,192,130,2,53,49,51,249,44,2,128,20,160,104,220,69,2,+35,53,56,234,237,5,224,36,12,252,114,0,224,71,8,172,90,225,42,1,+2,91,93,34,238,187,1,224,33,12,2,40,41,34,230,142,5,142,198,160,+203,187,104,72,55,166,247,101,110,32,25,142,247,238,67,1,164,87,46,25,+161,216,238,62,3,32,47,206,251,113,33,193,172,68,148,32,27,205,36,176,+190,2,80,32,85,36,99,45,45,2,54,52,53,239,147,4,97,101,250,49,+3,240,111,3,132,255,224,9,5,32,244,228,213,8,239,230,5,2,56,49,+32,147,194,160,240,141,144,70,150,86,234,247,214,1,133,91,197,97,107,131,+131,201,177,112,198,204,194,80,252,71,6,235,11,3,231,28,2,251,201,1,+73,152,41,87,253,3,6,32,242,198,221,96,255,224,143,1,225,14,0,170,+140,136,127,238,12,5,224,179,5,224,47,1,201,144,240,134,1,232,49,1,+168,230,227,194,0,225,62,2,123,223,224,12,0,227,190,8,2,95,54,55,+197,190,147,20,64,7,235,7,1,33,106,229,98,1,33,104,138,52,166,12,+238,238,0,233,128,6,2,54,55,49,231,62,4,233,220,0,232,198,1,233,+224,3,239,1,19,238,210,11,224,25,3,230,212,3,224,21,18,237,113,1,+236,126,0,226,97,4,192,25,211,111,224,204,4,193,62,151,41,233,199,6,+32,2,224,219,7,238,10,1,232,65,5,230,16,7,233,216,8,167,146,99,+206,85,202,2,55,52,32,252,230,10,230,35,1,225,58,4,234,44,3,224,+171,3,244,194,7,237,218,1,235,84,5,234,53,5,238,67,7,138,160,160,+6,224,192,1,173,81,35,176,245,204,1,231,7,6,224,128,1,224,249,3,+224,91,10,193,86,224,90,0,135,6,2,95,55,55,224,88,11,2,95,53,+50,228,100,5,64,33,226,123,0,228,109,17,249,209,5,228,123,1,226,52,+1,226,33,7,226,17,1,224,1,9,161,180,224,253,4,160,61,2,49,53,+49,216,39,165,200,224,200,2,254,214,8,231,228,3,175,21,214,253,237,37,+2,224,66,3,2,95,51,53,64,233,255,16,14,231,37,3,225,30,0,227,+152,2,162,218,89,3,2,55,51,32,255,106,13,243,199,7,32,47,129,100,+225,79,1,196,165,229,185,1,224,25,5,227,136,3,228,69,2,142,98,228,+202,1,230,126,1,253,238,0,234,69,1,47,12,253,231,2,179,15,242,84,+1,192,51,227,208,5,2,58,54,55,237,127,3,224,100,9,224,97,1,247,+201,3,230,121,7,32,70,184,9,69,224,65,60,32,104,2,51,49,53,161,+15,2,54,57,32,97,85,232,70,1,65,71,187,3,2,54,55,51,96,29,+2,54,55,32,96,36,135,81,64,43,160,150,226,162,13,226,124,5,245,250,+1,229,176,2,68,22,32,73,135,203,165,92,229,84,5,195,206,228,157,2,+196,17,131,116,229,177,1,230,239,1,226,240,11,230,202,2,160,201,32,120,+200,20,102,90,223,190,58,53,225,145,0,2,67,32,79,230,214,8,162,124,+80,111,34,118,66,191,2,52,56,32,230,143,3,32,88,136,81,112,222,136,+99,64,41,64,17,64,104,32,55,35,100,2,54,53,55,160,141,2,53,57,+32,96,34,134,146,2,85,32,58,64,31,232,221,0,187,205,2,54,56,32,+232,205,1,65,174,225,203,3,224,209,0,64,37,105,48,39,196,32,13,129,+195,73,62,123,124,2,50,53,50,193,0,160,71,217,60,134,48,128,94,240,+80,3,205,181,236,7,5,229,179,8,32,80,229,225,1,192,39,240,232,4,+224,32,1,232,153,4,224,23,0,189,188,136,204,40,250,227,192,17,160,188,+224,52,10,228,65,0,224,34,2,224,36,9,195,106,224,36,20,195,167,224,+36,4,133,113,250,203,4,229,47,5,32,64,62,167,228,215,0,224,195,5,+231,2,7,33,125,130,247,131,216,164,17,137,142,234,75,9,231,84,4,238,+80,1,224,38,7,102,198,177,132,154,232,237,177,3,248,243,8,232,98,9,+225,157,3,96,70,249,234,7,224,70,5,232,221,7,229,40,9,246,68,1,+231,197,3,241,82,4,201,243,97,51,34,166,232,45,4,229,17,9,192,52,+228,89,1,226,126,4,224,1,3,213,30,236,110,1,2,46,47,108,2,105,+98,47,89,154,2,47,73,110,2,116,77,97,2,112,46,104,2,115,34,32,+102,158,97,233,230,133,12,33,170,228,41,1,67,76,99,196,135,46,234,156,+0,126,221,235,200,0,67,181,252,189,8,165,254,192,184,32,37,203,238,238,+123,0,230,8,1,247,144,10,233,93,4,120,33,180,128,241,145,7,232,217,+1,239,169,1,220,242,68,112,240,108,3,226,89,4,243,196,3,128,51,64,+96,203,79,247,143,8,245,10,3,32,86,65,59,235,115,3,224,11,3,233,+98,0,224,76,3,198,50,253,150,4,96,161,235,233,2,229,184,1,228,2,+2,128,193,33,65,133,52,32,49,86,72,165,73,64,29,128,20,2,53,32,+58,96,20,193,100,64,38,225,5,0,102,206,2,49,48,53,160,74,64,115,+128,53,33,137,64,127,32,18,133,64,97,21,245,213,3,235,24,3,225,16,+4,241,90,5,225,69,1,229,11,1,164,58,64,102,244,241,1,224,58,7,+232,58,0,161,180,237,151,5,163,49,216,119,248,133,6,160,215,2,54,53,+52,129,0,96,11,224,6,9,227,79,10,224,145,3,235,122,11,236,9,13,+236,31,15,254,36,0,228,35,5,236,51,3,246,29,1,235,84,6,228,110,+4,242,103,0,225,5,3,233,211,6,224,75,53,227,243,7,224,75,28,245,+201,1,224,75,4,234,255,7,225,64,1,231,15,2,161,213,65,163,253,179,+5,243,55,2,160,99,224,40,14,238,106,3,229,75,6,128,53,224,51,12,+224,53,13,228,47,7,100,176,224,61,12,227,189,3,227,220,3,66,206,114,+138,230,229,4,35,63,136,95,155,6,32,14,198,240,236,165,5,224,13,9,+224,141,4,233,202,6,32,70,197,140,235,180,5,128,34,32,30,133,122,2,+73,32,58,99,237,32,10,2,80,32,58,100,156,250,13,1,160,6,32,181,+105,86,179,70,54,110,176,163,32,47,250,61,4,255,227,2,96,49,69,240,+2,56,32,102,255,235,5,166,80,2,33,34,32,236,184,3,2,58,54,52,+169,173,250,136,1,205,20,245,36,1,160,143,226,73,2,192,35,238,31,1,+227,139,10,224,16,18,227,129,4,226,44,13,245,215,22,227,111,16,255,136,+5,227,88,28,240,110,0,227,56,24,225,99,2,224,14,10,224,16,25,226,+161,31,33,151,173,17,144,44,227,235,3,240,104,3,229,139,7,170,42,244,+247,0,2,50,48,54,232,178,0,238,226,1,225,60,15,255,222,3,240,17,+15,240,132,6,192,20,195,2,239,144,7,32,15,76,177,160,15,32,214,134,+180,2,90,32,85,128,14,205,167,67,37,160,18,195,135,101,246,2,51,52,+53,244,50,10,230,1,5,116,104,230,127,7,222,239,110,109,255,4,0,253,+153,0,202,167,254,70,3,233,56,9,142,182,230,198,1,77,50,228,8,3,+255,114,10,192,114,2,54,52,51,240,64,3,163,52,224,10,0,240,15,29,+248,27,1,33,23,132,88,160,245,231,24,1,2,53,53,48,239,96,2,128,+197,2,53,52,52,248,164,4,160,119,96,150,194,202,224,91,1,239,37,5,+162,66,105,60,65,25,97,50,248,112,8,55,238,2,49,50,48,247,239,5,+2,49,51,51,65,59,252,244,3,251,62,0,34,49,224,237,12,230,221,3,+32,227,133,29,225,71,0,60,255,235,117,4,226,194,2,64,178,100,173,228,+234,4,2,33,33,58,2,32,101,109,2,112,116,121,247,183,3,200,190,226,+249,16,243,4,22,245,227,1,224,106,7,2,60,48,34,224,187,1,203,46,+139,26,224,195,2,135,91,254,109,8,253,22,25,224,50,30,228,111,4,251,+65,29,227,188,3,199,153,235,98,0,254,112,10,254,62,11,254,112,41,221,+33,224,19,3,237,97,0,224,126,12,255,65,0,128,58,138,9,252,123,6,+224,135,13,225,71,1,254,248,14,225,89,26,225,139,41,255,240,15,253,171,+114,97,51,101,0,100,27,68,14,108,85,96,6,37,17,242,120,1,172,108,+250,9,9,252,218,0,235,219,8,68,113,2,52,55,48,192,83,228,63,2,+2,54,51,56,156,31,75,233,100,50,229,13,4,252,245,3,253,147,16,225,+127,3,224,255,5,246,95,3,253,163,6,224,62,1,238,120,9,224,52,1,+226,242,1,109,224,228,100,3,213,242,235,44,3,128,46,197,78,2,48,56,+32,229,91,1,2,48,57,32,221,160,113,160,239,81,1,2,51,57,32,105,+197,236,13,7,240,131,10,226,35,20,232,168,7,226,234,7,254,100,18,193,+150,225,110,7,227,17,9,101,165,202,95,2,52,49,32,132,203,60,142,129,+20,167,155,214,82,224,25,2,220,168,64,237,156,29,65,143,103,81,2,53,+57,52,233,249,2,226,49,1,2,53,57,53,232,201,2,147,204,200,66,128,+149,128,175,240,59,1,33,76,148,67,66,85,167,5,32,19,64,175,65,111,+2,51,52,57,229,192,15,222,16,32,58,180,112,2,50,56,55,64,13,200,+121,96,202,228,103,0,160,203,136,131,34,189,2,53,32,85,34,37,225,144,+7,128,90,224,23,9,128,69,224,23,8,103,40,255,123,3,192,23,199,150,+229,116,13,52,105,131,62,32,133,234,64,3,230,135,5,2,103,101,116,2,+83,76,111,2,99,32,69,2,85,86,97,2,114,34,32,225,211,5,64,188,+176,218,227,138,7,126,68,160,95,33,171,2,54,50,55,226,156,11,230,108,+14,224,178,8,165,247,96,158,224,104,6,128,23,224,108,0,224,23,4,224,+25,3,2,51,50,54,238,234,7,231,29,14,224,149,9,162,79,224,149,8,+128,81,82,232,224,99,5,255,200,2,224,156,21,224,23,11,224,126,9,209,+183,224,126,7,128,99,224,95,15,191,200,224,121,12,225,24,21,225,26,10,+171,38,230,95,13,224,177,8,214,19,224,176,7,130,168,224,176,17,68,117,+226,77,3,130,57,231,243,1,224,176,13,225,70,1,229,10,3,224,148,8,+255,177,2,231,83,9,227,12,1,64,114,226,92,15,128,143,233,16,3,225,+224,21,227,172,11,224,156,13,129,202,224,156,8,197,29,237,214,1,224,166,+4,242,179,5,224,135,17,225,137,9,225,136,22,226,25,17,36,189,140,41,+164,189,225,178,7,251,206,0,224,90,13,32,62,186,31,128,62,225,90,5,+2,51,49,32,224,42,4,186,56,197,39,228,106,31,245,51,7,32,73,181,+42,229,113,14,193,125,233,160,12,225,60,8,131,11,227,94,19,228,143,27,+225,163,9,231,151,12,229,189,9,228,58,16,228,104,26,226,221,9,161,31,+182,53,65,31,71,42,224,72,9,224,15,14,227,17,7,2,58,54,50,135,+168,224,74,8,226,76,1,224,165,11,228,140,11,32,75,182,150,226,43,5,+224,35,6,214,167,96,37,178,99,2,50,56,57,254,194,2,96,54,224,47,+0,135,153,96,45,78,148,224,85,11,224,105,14,167,182,143,3,2,57,49,+32,32,249,220,84,2,50,51,32,96,34,163,27,2,53,53,54,64,4,2,+55,32,79,36,96,64,149,195,192,32,34,162,255,224,34,4,64,173,224,34,+2,237,235,3,248,163,7,254,231,1,235,105,14,237,167,4,160,5,224,26,+15,243,36,10,246,187,6,255,201,1,247,8,78,224,49,6,224,173,6,224,+31,4,253,122,7,224,99,0,44,92,235,5,7,224,86,9,234,11,0,246,+209,13,73,241,2,48,49,32,248,27,9,187,193,65,134,64,63,32,37,2,+52,32,79,204,207,234,229,7,224,120,2,131,206,224,114,3,242,80,1,247,+15,1,96,78,234,173,7,225,219,16,238,218,5,203,136,176,123,237,36,1,+224,77,5,226,65,0,160,107,160,24,160,91,224,96,1,32,11,66,146,182,+6,224,110,3,224,92,4,224,131,3,224,32,12,96,71,192,241,107,169,201,+14,32,128,2,55,32,102,234,91,0,2,36,104,34,225,29,4,139,213,160,+60,224,58,22,2,118,115,34,238,74,12,64,229,240,178,0,160,16,205,81,+172,225,32,32,196,29,64,28,168,149,65,75,65,22,2,67,32,79,225,215,+12,240,252,16,82,246,171,130,248,51,1,205,17,224,34,1,226,161,2,226,+254,1,35,235,205,11,204,42,238,23,1,248,1,7,32,44,237,32,4,194,+172,140,84,64,211,76,186,64,222,115,9,100,119,32,23,133,67,236,103,115,+211,239,2,95,53,56,2,57,32,95,2,51,50,51,249,84,6,245,17,3,+106,6,175,227,244,25,1,190,100,253,63,5,160,232,236,76,52,224,66,3,+224,120,4,224,25,0,224,101,6,224,36,5,174,210,224,35,6,236,90,67,+225,29,5,224,162,15,34,224,71,107,224,208,2,225,115,0,2,52,50,57,+239,129,3,225,126,6,232,31,0,224,193,3,236,129,44,225,73,10,111,169,+224,169,4,241,191,1,225,98,18,225,100,31,236,166,88,164,45,224,131,15,+224,165,5,2,52,49,52,161,170,192,44,161,152,32,51,233,141,7,2,83,+32,73,255,61,5,243,95,9,32,53,202,103,192,69,239,65,9,236,227,40,+224,73,8,226,80,6,128,30,249,93,0,226,250,19,226,124,4,32,13,239,+93,24,236,249,46,56,18,227,0,4,192,111,243,63,3,224,153,18,226,74,+31,237,36,18,226,178,24,32,148,225,242,0,197,215,64,30,101,118,225,95,+5,130,114,32,61,128,92,32,39,138,142,236,148,64,227,120,51,229,0,42,+224,36,14,236,204,40,224,62,1,226,101,21,236,215,8,227,27,10,33,84,+139,169,69,18,225,126,14,224,181,6,226,249,5,32,64,187,13,224,64,6,+226,62,0,226,130,5,224,99,20,108,77,244,250,0,64,97,226,22,10,64,+78,160,56,226,29,5,140,9,227,165,12,228,41,1,227,181,5,32,53,136,+83,224,53,12,237,191,0,192,159,32,46,173,252,64,17,2,58,54,48,213,+104,154,104,109,78,227,128,0,215,5,160,84,192,112,73,95,141,131,2,54,+48,54,155,4,2,50,48,51,233,54,1,224,74,1,199,191,224,72,1,198,+168,221,42,189,67,107,144,167,250,251,249,14,252,229,3,233,12,0,32,140,+238,16,0,88,58,136,66,152,160,2,53,52,56,192,35,174,4,246,70,1,+118,53,2,79,32,80,64,8,253,54,20,160,35,120,126,224,35,5,228,145,+1,192,229,192,75,182,104,32,119,162,152,140,109,64,48,102,97,97,43,171,+150,32,93,160,46,128,69,224,60,2,130,148,2,80,32,58,96,48,192,10,+206,44,142,235,129,70,128,9,202,54,76,214,234,54,1,193,184,138,54,74,+150,225,9,93,96,39,192,204,108,113,192,119,129,243,158,2,2,53,57,54,+157,255,127,96,239,19,0,96,62,224,47,17,236,24,1,2,91,93,34,224,+51,1,130,9,224,28,1,2,68,97,116,2,97,46,76,2,105,115,116,2,+95,84,121,2,112,101,46,64,41,32,37,247,170,1,193,56,235,123,10,120,+84,216,180,234,217,0,96,24,207,243,2,57,50,32,32,13,129,153,128,61,+112,37,96,35,225,164,1,255,81,0,160,8,32,28,178,156,109,124,40,68,+64,222,236,233,2,2,102,34,32,226,241,2,91,12,96,55,127,118,224,43,+18,96,89,129,220,2,75,32,80,32,3,129,75,128,5,2,58,53,56,204,+46,44,48,2,50,49,52,128,80,227,121,0,190,201,2,49,52,52,248,227,+2,192,32,64,195,194,186,2,49,54,48,249,18,0,250,217,9,32,102,249,+80,2,64,186,2,56,50,32,220,238,176,212,32,19,132,41,97,28,224,35,+0,32,6,194,168,240,130,0,224,65,3,223,86,97,6,237,237,4,110,53,+33,26,224,41,1,206,161,2,53,52,32,228,63,3,141,163,32,163,185,185,+224,123,3,64,41,64,113,2,49,48,49,224,73,1,64,248,2,56,53,32,+76,140,251,149,0,224,105,3,247,246,2,32,85,194,86,131,90,113,226,70,+11,69,78,239,42,0,32,38,210,84,224,36,0,2,83,32,80,224,156,3,+198,137,171,223,175,157,73,22,2,52,55,32,163,100,224,12,4,224,35,0,+32,60,178,107,96,163,65,38,225,32,0,192,143,252,32,0,140,31,236,59,+0,192,10,128,214,35,124,160,64,64,13,33,47,224,13,0,32,99,181,164,+67,139,2,56,48,32,239,199,1,160,97,131,63,37,130,225,71,3,224,133,+27,39,54,224,133,6,224,132,2,46,139,224,131,3,213,222,224,90,11,252,+253,0,224,223,2,128,148,96,73,96,85,131,145,32,72,131,48,2,85,32,+58,96,63,166,211,32,81,98,240,224,66,0,32,29,207,85,65,167,32,14,+130,66,251,60,7,2,105,109,112,2,111,115,115,2,105,98,108,2,101,34,+32,193,240,70,236,96,57,2,75,52,32,32,2,86,68,238,212,3,32,32,+230,35,1,131,35,135,61,179,24,243,34,3,224,217,0,66,29,105,86,128,+73,224,81,3,99,121,68,86,229,143,5,228,135,0,96,8,175,105,2,53,+55,51,143,105,227,39,5,32,146,130,132,100,251,207,60,96,23,130,95,2,+73,32,58,2,53,55,50,230,99,3,209,111,102,99,2,53,55,49,192,242,+2,50,32,75,32,245,224,87,1,196,159,128,165,2,54,49,32,239,241,0,+46,167,93,120,229,219,4,2,36,115,117,2,112,101,114,229,14,2,232,24,+8,2,58,53,54,241,6,0,128,78,224,61,2,2,67,34,32,160,35,129,+188,32,118,100,66,2,90,32,67,255,226,2,125,192,232,129,9,224,145,3,+38,157,99,98,242,36,11,32,93,130,11,74,235,132,181,2,53,54,53,233,+19,7,194,164,35,181,69,127,40,151,224,28,0,243,128,4,112,245,226,125,+0,196,21,134,166,132,39,64,100,64,7,66,71,64,108,104,233,119,12,35,+244,207,235,246,205,7,225,99,18,2,100,117,112,2,108,105,99,2,97,116,+101,2,32,100,101,2,102,105,110,2,105,116,105,2,111,110,32,225,114,2,+2,50,53,55,224,245,10,226,246,5,2,99,104,101,2,99,107,68,2,117,+112,34,225,19,1,229,12,0,160,245,32,7,32,248,2,49,53,48,40,18,+166,93,232,66,5,245,137,1,166,86,200,71,2,54,52,32,96,81,199,142,+234,166,2,255,207,0,246,180,1,226,236,0,2,54,51,32,245,54,7,234,+122,2,237,191,5,32,93,130,240,140,196,164,193,64,182,128,75,96,8,64,+201,2,49,50,50,224,50,1,131,11,143,218,244,39,3,247,192,4,160,78,+66,57,227,165,3,232,122,1,247,105,8,192,62,64,6,64,19,224,65,14,+224,67,3,224,9,1,247,230,3,247,95,8,247,193,18,193,31,247,244,82,+224,232,1,248,159,8,224,79,19,224,81,3,129,82,247,243,20,224,31,6,+247,205,3,65,80,206,165,96,85,142,151,226,150,6,234,239,2,240,219,2,+225,147,1,224,2,5,230,87,1,224,171,9,132,12,204,137,247,170,1,224,+189,3,229,233,0,64,139,96,9,224,6,21,37,187,254,141,7,248,211,5,+98,174,64,107,2,85,32,65,247,47,14,225,202,19,67,92,224,45,3,226,+140,4,152,226,224,56,10,225,149,1,129,95,247,53,5,247,20,1,189,207,+226,196,5,224,50,0,224,89,21,225,226,8,226,49,14,128,107,70,174,234,+219,0,185,46,227,242,2,227,72,1,224,9,1,248,218,0,136,153,195,18,+129,124,129,198,224,227,0,228,80,2,203,221,82,19,193,227,224,11,3,224,+84,30,225,189,0,194,47,199,146,224,75,7,230,131,5,226,107,4,104,46,+161,17,96,166,131,119,241,135,4,32,78,203,64,225,4,19,228,105,5,225,+112,3,227,198,0,225,177,2,251,129,18,224,34,5,224,36,49,227,101,16,+252,192,6,227,246,3,253,18,4,224,65,3,228,161,9,228,41,2,108,230,+163,101,173,22,231,199,1,250,85,3,64,25,2,53,57,32,224,29,4,43,+234,228,63,5,224,193,0,225,236,1,129,232,77,220,78,98,226,147,26,218,+91,239,78,1,232,28,3,249,86,1,236,250,2,2,52,57,54,224,171,1,+224,134,0,131,221,252,149,1,129,119,225,134,8,230,146,8,227,189,14,225,+94,0,227,185,124,227,150,4,244,143,1,97,166,72,142,240,215,17,167,49,+110,156,224,45,25,101,132,33,246,166,47,225,134,1,192,7,228,9,19,2,+90,32,85,224,17,4,232,17,5,227,195,32,2,75,32,35,192,144,227,197,+33,225,135,18,224,16,7,198,214,227,73,0,194,67,227,19,11,225,27,2,+100,193,201,190,96,12,2,52,55,53,244,78,2,64,59,44,56,227,84,12,+110,214,224,75,0,224,11,4,225,126,6,225,81,4,230,231,1,227,2,3,+2,89,32,67,237,62,49,97,136,65,2,224,81,1,108,27,98,134,231,87,+7,128,33,79,172,224,153,7,113,85,2,53,54,48,235,216,2,240,187,1,+240,200,2,236,186,0,44,102,106,236,229,122,7,224,15,1,209,204,2,54,+50,32,140,114,236,198,11,204,196,160,42,175,42,242,73,2,32,20,206,246,+141,160,192,209,2,58,53,53,141,77,167,246,32,47,64,208,230,231,0,110,+57,32,4,2,55,32,79,45,242,67,27,224,170,5,230,182,0,32,72,214,+33,46,28,218,141,96,23,141,44,76,189,67,11,224,119,0,181,159,81,178,+32,13,215,206,132,97,168,37,226,122,8,237,57,2,232,65,3,234,247,17,+224,16,6,228,219,2,228,134,0,233,30,2,176,158,226,171,9,228,131,20,+235,250,1,227,176,1,236,67,0,230,79,10,32,25,143,97,196,62,236,26,+4,236,144,3,97,143,64,56,235,248,11,166,182,244,106,0,232,63,0,243,+0,7,33,93,207,220,141,75,230,0,13,233,146,10,229,91,1,228,175,0,+224,180,2,225,54,6,231,57,14,229,166,4,224,174,0,224,250,3,231,149,+1,234,123,3,194,8,225,143,10,234,65,0,227,191,5,235,230,0,32,137,+2,51,48,54,224,51,3,225,114,0,241,45,8,237,4,3,96,82,224,27,+4,229,13,0,225,52,1,225,147,0,227,218,4,244,154,0,244,31,1,235,+97,8,200,131,249,34,1,231,26,6,128,102,232,172,11,202,43,225,163,5,+232,187,0,206,164,224,250,13,240,90,0,225,184,2,224,72,57,224,68,14,+130,8,240,238,4,229,27,2,253,67,6,139,18,119,234,240,175,8,36,111,+120,155,225,43,1,250,36,13,250,34,4,237,201,11,197,65,65,180,245,102,+0,2,67,32,79,229,201,1,139,134,178,7,192,229,224,238,2,230,10,1,+224,20,2,52,8,248,233,0,64,20,99,95,67,153,224,5,3,228,238,2,+217,160,128,28,249,201,15,96,42,133,170,224,168,24,162,210,226,219,9,33,+123,227,50,5,224,34,2,224,182,3,64,20,248,178,0,182,93,145,191,240,+245,3,91,81,241,134,18,229,133,4,163,130,225,48,1,224,68,0,183,128,+65,236,65,217,64,63,193,152,69,210,147,207,2,50,55,56,230,81,3,78,+213,225,86,8,225,47,9,64,47,249,221,0,240,138,11,236,64,9,239,77,+14,236,48,20,224,15,5,250,61,7,224,234,2,178,37,76,0,86,67,153,+65,99,22,120,239,234,92,4,32,46,245,85,1,224,79,1,32,22,250,49,+2,2,51,54,32,232,78,0,2,51,57,32,160,55,199,208,226,21,5,211,+188,243,255,18,2,32,61,32,245,96,7,2,53,51,56,224,193,2,64,99,+120,83,32,56,58,32,87,62,160,31,64,142,2,51,56,51,98,82,2,51,+55,32,128,64,32,137,224,32,0,32,60,186,14,98,189,2,95,51,57,64,+175,247,178,0,2,51,57,53,255,80,5,2,51,57,50,224,76,4,192,8,+248,67,4,224,53,14,68,176,2,51,57,52,181,12,32,8,32,4,2,51,+32,79,34,93,64,29,228,55,2,128,132,96,8,96,31,245,217,8,224,118,+6,96,39,64,21,163,64,32,212,162,190,2,53,51,53,233,109,1,228,171,+4,127,171,224,83,1,32,50,213,15,227,54,11,255,100,2,233,185,1,96,+53,130,242,233,166,9,64,103,128,129,92,130,33,179,64,13,2,114,110,102,+130,74,32,17,185,163,225,160,3,160,25,196,121,32,24,108,220,66,72,2,+83,32,83,102,213,229,194,3,231,70,3,2,67,32,60,69,79,240,173,5,+160,180,65,218,2,61,61,32,224,30,6,68,234,89,207,187,55,224,53,18,+231,122,3,128,53,224,55,8,164,78,2,95,52,50,128,202,96,28,97,150,+249,72,5,64,226,97,46,32,207,224,185,11,224,22,8,128,100,238,43,1,+160,22,97,189,233,191,3,192,23,135,225,2,85,32,66,130,116,96,130,247,+73,2,2,101,102,97,2,117,108,116,227,77,1,96,38,139,64,32,8,182,+76,2,51,57,56,224,56,7,2,44,32,34,248,0,6,2,53,50,48,230,+185,8,96,118,2,52,50,52,192,70,224,127,8,2,105,110,115,2,116,97,+110,2,99,101,34,226,201,2,224,71,6,64,67,141,150,96,71,247,30,9,+131,75,227,90,6,224,110,13,2,99,108,97,2,115,115,34,224,107,3,201,+0,32,10,194,197,32,10,234,0,5,225,108,8,204,180,225,107,6,132,64,+36,207,236,226,0,163,225,224,159,15,139,24,228,230,16,2,105,110,102,2,+105,120,34,224,134,2,68,142,227,177,4,64,113,194,79,224,26,5,123,30,+228,65,3,192,28,243,139,7,196,42,232,154,10,226,2,40,196,166,225,190,+5,225,173,15,225,28,22,225,188,8,2,102,111,114,2,101,105,103,2,110,+32,105,60,176,2,114,116,32,2,99,99,97,2,108,108,34,233,69,2,32,+242,36,32,102,175,101,114,224,214,2,38,139,2,95,49,55,226,159,7,229,+86,5,224,104,1,2,58,58,34,229,90,4,226,144,4,2,85,32,85,234,+238,6,162,158,133,200,226,158,11,128,23,224,225,26,128,217,224,124,1,65,+239,128,208,224,39,5,2,113,117,97,2,108,105,102,2,105,101,100,224,167,+3,224,207,2,225,215,3,129,22,225,253,5,105,32,231,91,15,2,97,115,+32,225,215,4,237,148,5,224,146,0,231,182,0,230,192,2,64,112,140,27,+224,79,2,2,104,105,100,2,105,110,103,224,169,3,228,99,3,135,29,231,+241,0,226,102,0,70,228,226,194,6,164,101,238,36,11,237,170,2,227,171,+7,131,202,227,194,8,161,147,227,194,7,134,222,224,219,2,231,166,1,225,+182,17,2,116,121,112,228,192,3,226,85,29,2,52,48,49,227,35,4,224,+111,17,227,129,7,225,26,15,227,125,3,226,209,37,111,134,2,48,52,32,+224,188,0,192,103,113,226,241,218,7,230,123,9,225,75,13,131,216,225,75,+53,197,149,224,144,16,224,203,4,228,107,17,224,129,34,2,110,101,119,224,+132,42,197,55,32,10,250,236,3,39,215,136,156,241,176,2,228,8,26,2,+100,97,116,2,97,34,32,224,128,8,224,94,4,253,74,14,224,254,55,224,+122,14,224,251,16,230,36,22,2,32,124,34,227,193,8,238,254,6,225,49,+5,233,26,1,73,50,126,172,54,126,132,115,137,105,232,201,15,2,114,105,+118,228,104,4,228,102,52,2,49,57,32,224,145,10,140,25,230,0,16,239,+110,1,225,134,24,35,255,212,16,232,131,1,227,193,1,2,80,32,66,192,+176,193,53,235,121,1,32,12,74,28,224,214,6,96,39,192,154,230,117,13,+225,251,1,227,231,3,228,38,18,128,115,225,41,14,225,27,6,140,96,224,+123,1,236,208,4,2,49,50,51,236,209,7,160,23,239,71,1,96,69,140,+115,73,67,163,47,227,224,0,237,34,6,76,64,224,80,3,228,7,1,32,+69,213,139,48,125,224,143,3,224,242,10,2,40,46,46,2,41,34,32,229,+187,11,64,8,32,74,140,181,226,132,20,96,199,225,27,5,229,184,35,229,+253,25,229,223,7,224,77,0,225,60,3,224,118,4,233,143,17,225,35,0,+141,128,139,93,226,68,0,160,137,146,42,225,12,0,96,76,2,52,48,50,+224,62,3,141,173,225,23,8,224,189,4,129,147,35,76,181,225,225,122,5,+2,61,62,34,224,147,7,176,50,67,125,32,13,141,26,149,176,85,184,230,+118,7,131,55,224,23,9,128,202,224,23,8,162,32,230,190,8,163,127,230,+191,9,198,192,32,250,194,91,173,71,235,184,22,2,95,97,34,243,243,22,+231,23,8,228,15,3,231,156,3,231,108,9,221,229,237,232,7,129,171,227,+57,2,227,48,23,228,226,0,224,40,6,2,49,50,54,224,41,15,237,143,+1,240,214,25,145,22,96,58,225,248,6,2,45,62,34,228,102,4,229,107,+6,234,89,6,227,193,13,250,119,11,224,73,8,226,26,9,201,246,224,23,+7,128,199,225,84,9,143,132,97,245,224,240,3,160,14,2,52,48,52,227,+32,1,225,69,6,241,162,6,227,139,10,229,171,2,231,167,16,96,246,225,+68,2,229,74,10,234,37,38,2,52,48,53,236,50,5,229,135,10,239,190,+4,228,230,3,228,112,6,225,112,6,225,86,9,160,215,225,86,8,130,234,+226,73,57,234,215,22,167,152,224,96,5,231,175,0,2,52,49,49,249,36,+7,86,169,237,154,14,2,102,34,32,224,246,12,128,175,224,56,17,2,116,+104,101,2,110,34,32,224,58,10,32,219,224,53,17,2,101,108,115,234,129,+4,160,53,231,124,11,225,69,25,229,200,1,232,214,11,229,91,12,128,71,+224,22,8,196,123,242,147,14,225,230,7,129,141,224,160,26,192,151,227,37,+6,228,9,0,2,52,49,51,238,203,1,233,246,5,2,111,34,32,243,109,+1,231,233,19,2,46,100,111,230,111,5,96,87,2,53,32,35,218,48,244,+93,3,32,25,240,202,11,50,131,231,4,1,225,6,8,132,44,225,6,8,+222,74,228,67,13,234,149,53,225,33,6,160,8,224,249,6,2,108,101,116,+235,21,4,224,245,19,235,138,5,243,180,15,227,11,14,224,145,10,236,110,+23,2,99,97,115,226,232,11,224,37,6,2,111,102,34,225,184,32,236,77,+12,226,228,12,196,157,240,49,14,225,198,6,133,234,54,215,247,95,10,229,+46,2,225,226,6,247,213,19,79,114,241,224,13,231,33,5,227,233,6,225,+35,0,2,52,55,48,182,128,128,23,165,217,143,205,64,11,32,6,252,174,+7,236,160,1,253,72,2,239,201,6,246,214,5,41,78,247,246,1,238,213,+0,223,122,119,112,32,103,106,116,222,58,163,218,192,12,33,97,64,71,34,+220,2,49,52,52,244,140,4,246,8,5,2,36,34,32,255,245,3,242,127,+8,237,208,0,224,91,0,131,69,96,34,32,96,224,235,9,2,58,53,49,+220,33,2,95,51,49,96,38,90,220,64,23,141,202,239,157,2,141,203,130,+11,154,199,248,78,10,241,179,1,248,24,12,224,30,3,129,151,97,140,170,+145,254,62,9,64,97,157,97,224,76,1,159,200,192,140,142,69,248,225,4,+160,30,161,116,197,76,225,140,0,64,49,155,209,131,136,128,80,219,227,231,+18,14,238,177,13,128,190,229,163,9,253,149,1,227,252,2,2,90,32,75,+243,139,7,224,190,38,224,175,0,128,172,224,168,10,224,144,23,224,133,9,+65,204,128,2,253,4,6,33,140,94,98,130,145,67,222,244,87,3,156,201,+224,171,0,160,43,112,251,226,180,3,2,91,93,34,224,104,4,217,243,64,+43,129,232,2,95,51,53,64,52,162,24,227,188,0,99,173,99,247,2,53,+48,57,228,168,8,200,235,205,55,204,72,227,93,0,226,242,15,225,49,12,+237,221,2,128,31,230,73,5,226,148,7,35,26,143,201,133,200,2,95,50,+56,99,218,2,53,49,53,67,183,193,104,32,37,143,169,2,75,32,89,101,+90,69,23,242,151,9,193,20,64,63,247,29,2,195,114,133,149,225,91,1,+248,165,11,124,118,2,50,50,51,226,41,0,225,184,4,139,102,68,39,249,+179,6,32,35,2,49,32,67,32,23,63,252,225,228,2,228,34,12,144,45,+68,199,2,49,56,57,128,236,66,96,224,16,4,64,93,224,16,2,2,49,+54,56,226,23,1,224,94,0,190,218,160,86,176,57,68,0,159,68,2,52,+55,32,2,35,54,53,193,117,64,14,73,59,129,227,32,47,255,117,1,224,+117,0,65,20,224,100,7,161,218,32,48,175,130,224,96,5,207,200,224,96,+0,2,49,50,50,192,48,221,71,2,80,32,35,200,148,96,23,143,104,96,+23,201,178,64,23,66,154,192,23,218,219,96,23,223,32,2,95,51,48,88,+73,160,153,227,23,1,2,64,92,57,2,50,38,61,2,43,45,58,2,60,+62,46,2,33,35,36,2,37,94,38,2,42,47,124,2,126,63,92,2,50,+50,54,2,38,92,49,2,51,54,38,2,92,49,56,2,51,38,92,160,14,+2,53,38,92,2,49,52,54,224,14,0,2,52,38,92,224,14,8,32,4,+224,59,2,2,50,56,38,131,119,32,138,130,171,224,186,9,222,187,96,25,+197,150,68,87,32,27,129,239,99,12,126,108,239,7,1,163,30,229,154,5,+132,49,236,48,4,228,171,1,197,51,75,202,128,21,241,188,13,2,52,49,+54,231,129,8,140,0,66,171,117,18,228,184,5,32,167,130,64,254,26,10,+235,157,14,193,249,235,180,14,231,235,6,208,47,67,254,144,28,199,220,114,+221,64,21,180,67,125,123,98,145,2,52,51,50,232,147,8,199,170,224,98,+10,207,61,251,133,16,224,26,18,241,194,13,233,177,44,160,99,224,94,2,+105,169,96,247,181,59,96,33,2,52,51,52,69,144,224,133,7,224,44,1,+129,73,128,44,2,53,48,50,249,21,6,233,75,12,224,60,1,234,18,0,+224,13,2,192,74,254,241,9,224,37,9,242,66,9,34,34,132,51,32,32,+32,185,2,49,52,57,224,150,1,32,8,101,81,2,49,52,48,224,20,1,+32,48,132,51,2,102,115,104,2,111,119,32,32,14,179,112,96,63,2,52,+52,49,69,107,2,52,53,53,97,234,244,109,1,2,49,51,55,224,164,1,+192,81,196,182,64,8,96,66,2,53,50,32,64,61,112,34,2,95,52,56,+177,25,2,52,56,53,224,75,1,32,13,81,53,192,13,2,49,53,52,224,+13,4,224,41,4,45,11,101,103,38,17,192,20,66,105,2,58,52,57,196,+149,148,24,65,82,70,110,131,234,38,174,228,135,2,2,73,110,116,2,101,+103,101,2,114,58,32,2,100,105,118,2,105,115,105,2,111,110,32,2,98,+121,32,2,48,34,32,231,49,3,128,59,64,5,223,182,134,206,32,75,38,+249,2,95,56,57,64,134,170,255,224,17,9,231,121,3,249,140,9,64,11,+195,234,233,212,0,135,1,224,19,7,200,169,170,127,184,89,228,126,3,70,+7,44,43,200,139,131,91,164,244,228,87,3,228,151,1,32,47,225,77,0,+235,47,1,232,213,0,137,76,2,52,57,52,98,114,2,65,32,64,196,140,+240,220,3,228,226,1,148,82,96,6,224,88,0,128,68,65,120,162,219,85,+17,141,36,236,112,8,32,105,150,85,105,17,160,150,226,210,7,226,218,0,+97,255,33,230,225,210,7,2,105,110,105,2,116,58,32,233,120,1,129,172,+225,142,1,225,208,4,69,141,150,202,224,105,5,32,93,134,55,129,109,128,+189,41,95,118,173,2,52,57,53,128,34,134,66,228,108,3,2,95,54,50,+32,80,167,135,216,149,32,161,160,125,101,55,128,62,73,85,34,43,162,184,+236,23,2,226,199,2,184,164,237,138,0,64,10,2,89,32,64,204,118,192,+21,188,53,64,10,171,214,102,54,225,97,5,235,191,4,250,151,5,202,248,+226,86,0,226,2,2,192,88,32,14,200,52,2,53,54,32,35,117,233,76,+3,130,39,170,36,96,34,69,172,224,34,4,193,253,2,54,48,32,192,243,+73,123,55,89,192,14,2,95,57,53,233,157,4,32,102,212,129,181,124,129,+69,33,23,134,246,160,250,235,135,0,64,8,129,137,192,220,237,187,0,224,+8,1,99,29,98,95,34,162,243,221,4,97,59,33,156,164,196,192,8,226,+194,1,128,33,97,192,64,26,64,72,101,112,32,72,225,12,5,224,34,0,+160,36,228,8,5,180,74,160,60,128,34,2,55,57,32,225,167,2,238,94,+0,227,240,0,65,244,224,210,0,97,161,64,6,238,134,2,236,88,0,37,+48,96,145,227,245,5,237,229,1,129,211,239,221,3,97,217,254,120,0,214,+113,2,52,57,49,224,115,7,224,201,0,129,14,224,14,0,64,192,224,45,+0,97,57,198,247,231,248,2,224,244,21,96,53,217,100,160,88,225,86,8,+108,183,229,95,0,161,31,164,79,109,244,38,221,128,9,227,88,2,237,94,+5,163,146,169,87,164,200,248,32,4,224,95,4,224,15,5,34,120,167,76,+224,20,0,49,178,241,177,1,32,31,135,59,161,93,166,161,64,28,32,26,+135,71,133,69,32,14,203,80,202,66,197,238,227,151,3,239,145,3,33,20,+128,194,32,8,210,190,224,19,0,2,58,52,56,240,196,0,71,62,109,144,+170,87,96,29,133,41,2,95,50,55,44,234,140,9,108,231,32,25,253,147,+0,239,0,0,35,163,64,85,128,167,39,141,224,31,14,128,214,39,187,96,+89,64,88,193,182,163,20,97,222,32,13,133,93,98,144,79,83,111,87,103,+242,104,69,227,135,2,32,8,168,153,224,17,2,130,2,133,15,72,49,225,+126,7,192,138,96,31,225,158,3,64,229,224,31,7,129,158,231,163,7,32,+24,193,156,2,75,32,95,226,0,4,32,26,220,98,133,23,232,71,2,231,+233,12,230,92,3,232,127,14,224,55,24,136,101,132,201,241,20,2,232,28,+3,229,166,4,194,38,232,77,1,236,120,5,64,113,226,57,6,99,100,42,+11,229,100,1,241,27,9,192,78,160,136,230,14,3,224,143,5,228,54,1,+230,84,4,224,152,1,224,146,28,224,144,9,224,140,9,224,64,22,34,132,+232,43,13,231,213,1,66,148,205,217,2,52,55,49,64,112,237,219,4,2,+52,55,50,196,82,99,61,78,193,100,86,164,57,32,32,76,6,36,96,233,+89,6,238,23,0,224,199,9,32,117,163,127,2,52,55,52,103,30,231,4,+2,2,95,56,54,160,11,2,95,57,55,232,6,3,232,31,5,224,38,16,+66,96,64,3,49,36,103,127,96,195,224,162,0,135,141,224,110,2,224,57,+2,132,113,134,89,129,178,192,67,230,51,2,167,74,192,13,224,75,4,224,+165,9,245,155,5,170,61,98,229,233,25,5,225,73,7,213,86,226,109,3,+232,74,0,32,112,224,54,0,162,88,224,84,1,2,50,48,54,224,85,4,+96,87,69,2,224,87,0,224,52,10,224,137,6,224,51,11,33,179,210,227,+2,75,32,75,2,52,32,90,226,139,2,32,27,208,59,201,140,233,225,1,+194,170,232,133,0,2,82,32,95,224,26,4,225,98,3,32,73,240,105,1,+224,1,1,201,143,235,223,7,224,27,9,224,23,13,224,19,9,224,15,5,+224,11,1,227,161,1,160,142,208,80,96,242,224,244,6,133,93,224,244,1,+64,205,235,88,3,224,21,1,39,233,224,24,5,200,51,234,125,9,246,239,+7,96,105,133,167,237,173,9,2,102,111,108,2,100,108,49,250,12,2,88,+223,96,49,210,183,235,29,0,229,21,8,160,90,165,206,229,66,1,71,126,+68,203,237,53,12,235,72,5,236,67,3,246,185,0,137,160,128,198,235,29,+7,234,210,3,167,63,98,136,36,33,235,39,9,234,255,5,197,84,227,113,+6,235,51,6,192,214,64,80,232,120,1,232,127,0,67,96,2,52,50,32,+132,64,176,154,102,122,32,49,179,161,233,200,1,167,170,32,26,172,249,99,+198,162,205,179,54,230,168,7,172,123,231,113,1,233,67,11,160,162,205,44,+202,114,230,91,1,249,75,1,236,203,0,225,183,1,236,233,13,134,1,224,+101,1,229,199,2,203,66,199,58,160,10,32,33,201,252,202,138,233,92,5,+224,76,3,2,54,52,32,235,206,5,96,31,231,61,4,228,63,3,239,203,+6,224,210,17,224,151,10,108,143,198,73,224,155,25,224,123,8,224,159,10,+224,191,9,225,159,5,225,43,3,64,1,2,110,111,77,2,97,116,99,2,+104,32,102,255,9,1,2,47,108,105,2,98,47,68,2,97,116,97,2,47,+73,110,113,33,2,46,104,115,131,119,54,45,150,52,193,215,170,1,2,52,+54,51,198,246,32,20,246,217,0,215,194,229,209,0,211,3,99,57,128,27,+162,170,138,41,230,232,5,236,198,5,226,60,1,143,110,228,128,4,228,173,+3,224,11,3,248,28,0,2,75,50,32,224,233,38,99,153,180,163,249,197,+6,253,24,1,226,147,2,228,11,3,241,47,1,227,249,4,64,81,240,252,+1,229,35,3,227,181,0,38,158,238,255,4,229,87,2,224,97,14,238,1,+4,224,98,6,229,43,1,96,87,161,180,197,203,131,220,100,253,43,61,240,+185,6,176,248,228,168,15,228,237,19,192,58,237,140,5,224,73,15,162,76,+228,238,7,224,96,15,229,41,28,232,151,5,32,242,205,155,211,190,235,136,+25,202,100,161,62,134,106,76,252,66,239,88,23,112,151,109,113,154,74,243,+118,11,240,189,0,32,58,181,8,2,52,53,56,227,42,1,67,139,227,42,+3,228,47,0,225,125,0,230,155,7,226,26,0,230,157,13,226,136,18,176,+34,68,8,194,32,231,165,5,100,140,141,190,236,25,4,226,244,53,224,112,+4,226,244,14,224,117,9,226,244,36,224,98,6,242,69,2,193,194,33,105,+134,242,162,244,226,219,49,165,83,226,110,6,224,14,5,32,109,135,69,34,+7,32,11,134,251,2,95,54,51,246,254,1,87,138,239,2,1,178,145,55,+33,96,6,140,72,145,203,76,145,224,40,0,107,51,160,12,32,87,250,167,+2,219,196,160,75,32,28,133,131,242,239,0,32,17,227,245,1,224,46,0,+224,30,0,96,32,163,35,199,155,226,145,6,128,23,244,142,5,160,114,237,+29,0,226,74,2,201,31,101,164,253,87,0,230,239,4,160,118,131,82,178,+157,177,9,225,104,0,136,35,188,241,96,63,228,169,2,242,222,7,144,221,+255,143,1,226,196,3,130,76,2,89,32,67,224,96,4,230,145,1,230,83,+3,160,200,230,71,3,243,46,0,179,127,234,7,6,244,118,2,65,94,215,+87,224,171,8,238,201,8,160,177,224,175,9,162,88,235,1,4,2,108,116,+87,2,46,99,109,2,112,34,32,224,32,2,245,30,0,192,8,242,247,2,+224,8,0,33,101,132,125,224,253,3,240,99,5,64,129,98,153,164,93,224,+40,2,241,255,4,166,159,161,34,32,8,232,88,0,2,50,54,49,96,106,+79,49,32,106,129,61,32,14,131,120,2,75,32,65,128,14,205,89,76,97,+192,1,227,185,7,32,38,163,52,62,59,32,3,160,154,65,73,32,26,226,+247,12,96,35,32,28,194,247,241,11,1,225,117,22,203,35,224,16,0,37,+147,225,138,5,32,85,178,91,32,93,234,246,0,90,204,146,221,194,246,64,+17,132,200,246,188,0,32,252,224,96,0,32,70,191,145,64,103,164,7,134,+86,59,89,184,75,64,26,64,156,66,205,83,126,108,163,132,244,64,238,164,+233,229,5,1,144,16,227,81,1,32,62,139,226,64,89,96,107,231,222,8,+160,45,64,78,77,213,228,188,3,231,54,1,56,237,2,57,32,35,181,227,+224,96,3,224,56,14,96,46,226,11,0,64,128,64,135,249,66,0,227,28,+1,226,82,1,236,1,1,230,78,4,230,113,4,130,110,229,218,1,225,22,+37,230,195,5,163,169,235,138,1,224,107,7,116,110,224,107,46,254,59,3,+224,113,7,192,254,192,244,224,243,0,224,115,9,64,17,65,166,224,114,22,+224,158,50,228,81,5,2,78,117,109,2,101,114,105,2,99,46,115,61,239,+43,1,2,65,116,66,2,97,115,101,2,58,32,110,2,101,103,97,2,116,+105,118,2,101,32,97,2,114,103,117,2,109,101,110,2,116,34,32,225,74,+4,224,2,0,40,254,240,101,5,224,253,7,64,6,224,210,32,130,29,96,+30,65,187,224,30,9,224,97,67,232,79,7,229,118,17,225,36,14,2,117,+110,115,2,117,112,112,2,111,114,116,2,101,100,32,2,98,97,115,2,101,+34,32,224,170,7,217,184,227,3,8,194,246,35,238,2,51,54,53,234,206,+10,229,111,0,224,60,9,226,185,1,243,185,0,224,14,1,226,201,13,224,+89,7,254,61,0,178,43,224,78,3,243,244,3,225,141,20,83,252,225,253,+1,224,13,5,224,72,5,225,169,4,2,52,51,55,128,139,73,128,192,83,+240,209,3,225,162,26,36,92,134,84,227,99,0,131,9,224,43,1,96,104,+128,18,193,4,32,52,243,212,0,2,50,32,75,2,52,32,65,224,24,1,+134,108,225,105,8,239,171,2,228,43,77,225,223,1,240,50,2,239,34,0,+222,85,245,5,3,238,143,4,211,234,65,122,2,35,52,53,226,231,6,192,+200,227,28,32,224,82,9,229,246,5,224,108,15,248,0,7,224,122,42,128,+84,255,6,5,33,151,135,233,101,48,55,151,128,75,196,1,244,108,0,156,+27,161,243,65,150,225,50,7,255,218,3,254,231,6,164,191,64,49,98,46,+2,35,56,32,235,228,2,76,2,39,203,228,9,1,2,32,37,32,227,229,+3,224,54,9,231,33,1,98,230,32,144,246,188,1,32,75,65,79,224,19,+0,32,223,200,172,158,158,225,117,7,129,71,225,26,7,32,54,203,201,168,+47,32,168,108,64,56,184,56,175,238,20,2,98,66,205,57,128,20,97,36,+135,83,226,149,2,2,51,51,50,128,237,105,78,32,33,225,248,3,205,177,+110,231,224,27,0,32,134,213,168,247,7,11,173,157,227,59,2,246,250,5,+32,74,163,114,171,45,171,179,2,49,52,52,129,180,96,164,189,228,224,32,+12,236,16,0,224,21,4,232,169,0,32,98,137,1,246,70,7,2,108,97,+115,2,116,58,32,2,91,93,34,243,151,2,167,182,74,138,190,22,192,68,+64,12,100,51,138,67,2,95,51,57,159,98,2,49,54,32,129,19,51,15,+32,20,2,51,32,102,224,96,0,2,45,62,34,226,197,4,32,125,129,39,+64,98,147,176,2,50,52,32,160,61,128,70,32,36,181,118,128,140,251,96,+1,229,73,5,230,56,0,247,204,3,237,139,2,236,98,2,237,164,5,224,+189,0,97,223,64,6,96,180,230,32,1,2,95,53,49,224,246,1,243,76,+15,160,190,2,51,56,57,250,245,7,2,50,53,32,224,238,0,217,30,119,+91,227,108,4,128,126,191,175,96,11,160,20,225,65,6,2,32,124,34,227,+75,3,2,51,57,55,192,8,43,78,64,42,61,218,97,240,224,191,2,64,+137,33,150,244,219,5,224,215,2,32,152,164,77,225,239,1,246,206,4,129,+33,2,52,50,51,130,85,225,42,0,224,152,3,2,119,104,101,2,114,101,+34,227,233,5,2,52,49,53,2,32,35,50,224,171,0,146,83,160,141,252,+146,7,32,132,239,151,1,2,49,50,32,255,138,1,64,118,98,103,100,236,+165,249,2,60,32,64,35,8,162,231,224,22,6,130,65,238,191,1,160,22,+129,135,2,85,32,66,129,113,33,140,32,210,227,205,1,225,143,7,160,69,+143,61,224,14,1,224,29,2,224,24,1,161,74,225,128,14,225,106,2,225,+52,6,2,46,46,34,224,37,11,203,45,224,167,10,224,143,99,224,134,20,+224,119,24,224,229,30,225,191,10,180,244,225,191,7,130,72,64,142,224,140,+4,224,125,37,224,209,25,64,102,227,133,1,225,73,6,2,49,50,52,225,+74,6,227,132,54,128,143,32,135,38,63,225,24,5,34,248,198,69,224,172,+8,224,18,0,128,122,228,126,1,224,128,17,160,130,224,91,0,242,90,0,+193,60,64,6,192,59,2,57,49,32,224,188,4,192,22,120,45,224,67,1,+177,56,38,71,225,61,15,134,12,225,145,6,2,60,45,34,226,139,12,192,+8,100,57,33,45,224,53,5,2,108,101,116,228,250,4,228,92,31,2,58,+52,49,188,4,32,167,144,226,166,198,32,40,129,61,224,189,26,32,253,104,+73,227,69,12,224,65,17,2,51,57,57,224,255,9,2,58,58,34,224,69,+4,161,214,32,168,245,136,1,2,80,32,35,193,172,76,13,32,27,135,5,+96,115,32,13,188,52,92,165,2,51,54,56,96,99,104,68,32,26,133,203,+2,80,32,58,2,52,49,52,229,81,7,64,239,32,23,244,239,1,156,204,+233,252,0,237,3,11,81,214,2,61,61,32,247,186,2,239,195,4,196,147,+234,60,0,224,57,23,33,171,135,218,206,174,192,9,32,152,130,241,32,174,+42,163,165,254,2,49,49,32,254,244,0,2,51,56,56,250,239,6,2,95,+52,48,129,97,169,66,160,105,32,54,130,156,137,130,238,57,8,238,29,0,+96,68,70,211,189,234,235,16,3,247,104,1,234,51,2,244,26,3,224,71,+2,230,127,9,224,32,4,224,34,7,203,91,228,226,6,128,125,42,144,34,+197,233,153,4,2,115,101,112,2,49,32,65,2,98,111,118,231,98,4,224,+42,17,2,66,101,115,2,105,100,101,229,204,9,233,24,6,231,30,11,53,+23,194,121,240,91,11,242,32,0,239,42,8,65,68,225,62,1,242,208,2,+233,125,8,66,23,33,177,139,242,224,50,3,161,198,233,70,0,224,1,5,+176,24,225,128,4,224,125,1,225,97,6,244,185,1,246,161,0,238,78,3,+225,6,0,232,81,11,224,247,11,224,100,0,108,120,2,51,53,56,247,100,+8,254,170,5,182,19,251,108,4,224,91,30,123,80,224,91,19,129,69,34,+250,255,120,0,68,7,224,106,2,246,228,0,224,115,5,239,79,15,231,119,+4,192,28,206,74,161,217,193,79,225,197,52,224,246,7,228,191,2,101,110,+239,254,5,134,180,106,117,67,209,67,232,227,209,0,210,36,240,26,14,194,+154,225,249,4,226,54,27,226,250,11,229,19,0,228,207,1,227,33,19,64,+11,75,54,227,3,11,224,88,24,225,1,5,227,122,7,160,176,33,249,132,+64,139,151,2,48,55,32,229,145,2,33,125,208,13,229,21,0,247,153,0,+32,44,173,95,232,57,1,226,66,2,2,51,54,57,225,203,0,227,141,21,+165,119,97,151,134,181,235,159,10,128,106,228,252,56,2,111,110,101,2,76,+105,110,2,101,114,32,229,0,29,224,46,0,229,4,13,228,248,27,89,130,+225,87,0,228,126,0,228,98,13,224,79,8,128,68,143,22,164,40,224,75,+4,192,25,99,230,224,101,6,224,76,8,131,147,80,162,229,151,4,64,173,+189,129,200,229,64,71,114,17,231,146,1,242,119,1,231,139,13,229,176,0,+224,78,4,32,74,168,93,233,216,17,98,118,130,102,234,116,5,65,219,234,+245,7,137,4,234,74,5,233,76,17,224,90,48,235,249,18,32,210,137,21,+81,201,2,50,56,50,123,173,64,46,98,223,2,50,55,56,142,214,228,202,+3,232,107,0,96,61,169,72,239,156,22,2,102,111,114,2,97,108,108,239,+160,10,170,151,2,48,50,32,225,7,7,224,213,4,32,104,206,235,235,225,+2,208,63,237,115,15,234,99,27,2,52,48,49,224,99,1,169,100,74,119,+32,13,137,94,2,80,32,75,66,243,225,79,1,224,12,2,32,36,137,76,+130,134,108,5,32,21,96,30,201,153,178,221,242,241,1,34,196,74,184,2,+67,32,79,225,182,4,252,107,2,133,167,147,217,178,175,206,214,226,215,2,+66,2,225,185,31,178,120,225,185,2,97,126,99,21,74,230,239,226,2,227,+14,1,211,122,106,94,192,126,67,163,224,43,0,32,23,2,53,32,95,128,+100,145,218,128,135,128,132,161,205,243,193,2,96,12,237,92,17,116,196,237,+92,9,116,199,226,9,0,97,246,139,187,2,51,57,49,235,187,1,96,79,+160,23,61,141,99,195,125,222,97,150,224,48,5,107,63,98,175,235,236,115,+161,54,235,236,8,96,165,160,152,108,239,249,35,7,204,251,96,43,130,128,+226,4,6,2,56,55,32,226,4,2,108,85,227,190,11,102,191,64,61,65,+42,32,13,185,32,226,18,17,254,181,2,226,18,21,172,200,226,18,2,96,+146,160,128,229,216,1,32,116,130,135,224,236,0,235,40,11,192,236,64,85,+96,43,225,118,2,236,195,2,225,123,4,232,200,1,232,67,21,173,62,236,+154,9,253,147,8,128,91,225,174,1,225,178,3,32,244,64,153,2,65,32,+58,96,74,97,83,2,56,48,32,32,4,64,253,32,20,130,131,32,15,2,+49,32,35,2,49,48,48,129,67,32,207,191,10,89,226,198,102,224,22,6,+229,26,1,32,70,130,178,46,194,64,72,184,7,67,76,42,226,104,224,174,+240,132,158,67,51,32,40,196,162,87,187,2,58,51,55,214,156,128,29,64,+49,152,23,237,207,0,195,2,231,34,1,187,236,249,5,4,202,97,107,112,+2,51,53,50,235,5,8,34,84,201,81,251,229,4,67,252,92,29,2,95,+49,54,224,241,0,2,50,50,49,236,13,4,32,151,228,158,3,64,109,233,+19,14,224,169,0,32,101,152,208,224,108,2,226,197,2,228,214,9,224,59,+5,110,228,224,59,5,32,132,251,227,0,227,228,2,238,231,38,224,49,29,+224,119,3,235,147,0,237,144,20,239,143,7,235,102,15,224,9,9,224,237,+13,238,208,18,228,206,5,224,16,2,172,85,196,37,249,89,0,2,51,55,+50,244,8,6,224,113,9,235,230,4,171,147,130,15,160,45,250,19,5,224,+20,4,228,33,5,239,174,29,224,217,1,239,165,5,239,161,8,224,113,12,+224,134,20,225,223,3,239,112,20,238,102,22,224,174,1,238,102,5,200,223,+97,31,239,97,6,224,150,14,224,64,9,167,21,254,167,1,230,241,2,227,+241,5,230,183,21,225,30,14,192,110,173,100,236,89,6,239,94,49,32,243,+239,99,2,224,241,18,229,151,1,35,183,133,141,201,115,175,15,251,20,1,+162,217,225,176,15,225,135,3,238,226,20,128,172,232,177,1,238,182,18,236,+151,8,119,222,208,213,40,229,124,187,235,247,3,32,198,134,73,61,175,2,+51,53,48,128,17,166,70,54,194,238,185,1,157,128,2,64,32,73,170,209,+76,25,163,128,32,49,134,49,228,194,2,243,172,0,225,142,15,231,129,5,+226,69,3,229,106,5,225,142,6,241,87,7,228,198,1,226,87,16,229,169,+13,130,41,177,64,161,64,228,58,2,228,236,35,224,84,7,98,81,107,18,+245,22,6,229,12,10,97,61,248,12,0,242,107,0,245,30,24,242,138,0,+225,4,4,245,23,103,2,97,98,111,2,118,101,78,2,101,115,116,240,27,+30,224,47,1,245,33,81,226,17,16,245,33,16,226,94,2,228,131,5,224,+32,22,226,131,8,225,126,20,230,172,3,231,124,29,245,13,65,224,192,12,+245,28,13,242,243,11,243,234,7,98,150,32,86,229,237,2,197,239,193,114,+229,239,0,235,46,40,224,189,0,224,174,6,244,188,8,132,214,224,191,7,+245,139,24,246,137,29,224,51,3,225,123,11,245,148,4,226,43,30,230,191,+3,181,116,245,105,8,36,13,249,57,10,228,19,29,245,107,0,224,146,2,+193,121,236,187,0,226,163,20,226,113,7,245,122,22,224,208,1,203,215,43,+110,44,143,226,84,6,230,176,38,128,163,225,166,0,241,123,2,147,204,198,+137,33,3,2,49,53,48,33,236,132,216,224,83,0,225,156,4,225,105,2,+243,244,0,65,60,2,52,57,32,64,204,248,166,5,246,237,1,98,87,134,+209,231,212,48,224,59,0,224,35,6,242,80,1,225,22,8,192,26,234,87,+10,232,34,26,160,248,183,206,225,137,11,225,139,37,103,250,182,183,37,201,+2,54,54,32,238,54,8,244,204,3,164,133,136,32,33,65,178,56,2,51,+54,54,64,13,239,128,1,47,126,198,138,125,91,64,32,128,41,33,205,32,+13,209,121,32,170,99,2,248,92,2,67,8,229,59,0,143,175,227,144,1,+233,155,1,128,48,235,121,1,226,246,35,228,30,14,231,75,24,225,44,1,+225,230,4,65,108,225,223,7,231,19,5,2,98,101,115,2,116,32,103,255,+93,3,230,226,10,252,6,28,224,243,0,114,157,200,105,203,129,233,106,9,+230,63,9,227,198,0,251,55,14,253,200,17,229,59,17,235,150,22,229,67,+5,224,156,10,251,142,0,66,8,160,175,229,209,5,224,56,5,229,151,4,+226,215,12,194,48,226,50,3,249,222,2,250,170,44,250,229,3,250,109,1,+224,58,14,236,187,5,231,18,1,226,65,54,2,49,34,32,226,66,20,227,+42,17,226,75,7,228,181,1,230,63,0,64,80,196,158,226,82,7,231,28,+3,139,18,226,48,9,225,22,26,225,213,7,231,169,29,240,4,5,253,215,+29,240,18,1,96,72,72,50,229,46,3,253,191,10,232,3,26,227,60,21,+230,233,10,64,20,83,46,218,98,128,9,128,7,37,7,141,151,37,45,64,+183,65,114,32,19,211,224,57,191,32,13,214,90,32,35,218,168,96,37,140,+79,105,157,32,13,200,79,96,39,192,174,133,121,73,190,128,41,2,55,32,+58,100,6,224,41,1,192,171,160,41,133,191,237,54,0,98,11,96,153,32,+27,247,111,0,245,33,1,225,56,6,32,48,194,244,152,115,225,34,3,160,+47,167,248,2,95,56,51,231,211,0,130,104,226,110,1,129,5,64,123,212,+148,201,13,224,52,2,166,148,237,140,0,231,186,2,234,200,4,235,159,16,+231,186,55,233,146,2,231,185,14,224,107,3,231,185,1,161,34,234,193,24,+252,167,21,185,134,192,139,238,112,3,228,54,5,2,102,105,116,2,115,34,+32,250,165,3,152,226,64,134,130,120,64,211,161,114,130,120,2,75,50,32,+231,151,1,233,167,3,129,239,235,241,0,226,1,4,253,12,9,66,95,228,+144,15,227,246,2,237,78,32,230,100,9,233,150,18,146,168,233,69,7,225,+26,5,2,100,105,115,2,112,108,97,2,121,32,108,2,97,121,34,230,106,+14,234,241,20,224,40,3,65,148,241,113,3,226,20,2,242,172,41,2,95,+49,51,92,246,64,3,66,44,49,209,2,49,48,32,241,209,5,242,170,9,+245,64,3,64,6,96,68,235,6,16,229,51,3,128,40,224,238,3,229,43,+25,225,210,11,236,153,9,244,189,32,225,201,65,2,50,34,32,225,161,13,+230,178,1,232,130,13,225,5,43,225,231,109,66,107,198,81,64,13,2,90,+32,75,224,13,0,224,11,1,165,32,35,213,134,64,2,89,32,66,33,153,+131,146,135,192,239,246,2,180,21,132,117,205,118,224,249,2,231,181,4,198,+16,134,128,2,115,101,113,64,12,134,127,129,50,122,147,32,211,74,112,2,+58,51,52,222,193,68,79,158,135,32,20,198,133,133,24,64,142,224,5,23,+225,49,10,226,1,1,2,84,109,111,2,100,117,108,2,101,32,34,225,153,+8,224,54,0,66,52,70,224,225,126,35,101,7,226,26,0,225,160,19,211,+230,69,94,167,94,64,239,251,243,1,64,6,159,172,2,95,49,49,97,9,+246,116,1,251,13,4,229,67,0,32,121,193,148,251,71,6,224,25,0,177,+249,128,81,193,93,224,140,2,250,116,0,64,121,2,95,50,49,83,170,187,+95,160,13,124,84,96,43,135,111,60,74,102,77,70,99,129,44,32,26,191,+14,96,118,2,95,50,51,226,33,0,35,132,111,170,130,36,32,58,32,135,+128,31,2,95,53,53,192,184,224,51,2,2,95,50,52,64,83,193,148,2,+48,49,32,224,25,0,2,49,51,49,207,191,224,68,0,64,70,228,180,3,+32,137,134,161,232,75,5,228,62,1,2,95,51,49,140,228,234,214,3,96,+107,224,131,1,96,249,203,116,225,118,2,195,25,64,177,2,50,54,32,144,+73,92,75,2,51,50,51,163,253,2,50,52,32,32,4,250,119,5,226,145,+16,2,77,111,100,66,144,2,110,111,116,2,32,102,111,2,117,110,100,2,+58,32,34,228,51,7,194,150,2,49,51,51,65,151,240,194,2,224,84,15,+2,92,49,48,2,38,115,101,2,97,114,99,2,104,32,112,2,97,116,104,+2,61,34,32,251,25,2,96,70,2,49,52,49,192,4,244,5,3,2,50,+49,50,228,81,16,165,5,225,219,20,225,27,0,129,38,161,193,225,39,32,+224,208,16,2,70,105,108,225,35,14,224,206,3,245,144,10,212,116,225,218,+5,227,110,0,197,129,32,115,158,206,160,199,164,241,226,123,13,100,180,248,+142,1,226,138,5,139,35,162,134,203,147,226,89,2,2,95,51,51,2,51,+32,102,224,216,0,2,109,104,115,2,99,112,112,2,46,104,115,225,245,5,+232,88,1,240,191,4,228,223,1,224,151,2,128,144,2,51,56,32,226,48,+1,227,74,2,192,209,227,76,11,2,51,52,48,160,217,224,77,5,160,189,+248,137,0,225,242,5,96,250,32,112,192,87,225,223,1,2,49,56,56,66,+66,192,40,2,50,52,56,178,40,242,88,2,231,145,5,2,114,101,109,56,+4,97,221,2,102,97,105,2,108,101,100,225,6,1,32,128,134,44,2,94,+117,110,2,108,105,110,2,107,32,58,96,114,161,79,225,81,3,44,114,227,+79,2,2,72,83,67,2,80,80,72,2,83,34,32,247,149,6,197,93,193,+81,225,67,6,226,170,6,224,202,6,2,49,57,50,246,158,5,128,42,34,+247,228,142,1,226,186,14,2,69,120,101,2,99,117,116,2,101,58,32,226,+179,28,33,87,252,227,5,228,1,4,34,128,224,98,11,34,65,226,64,5,+226,41,3,224,150,14,2,32,45,45,2,110,111,108,2,105,110,101,231,11,+6,248,36,0,160,115,67,182,102,205,224,75,0,2,51,54,32,160,169,236,+218,5,231,41,11,252,98,8,135,249,196,207,224,154,15,2,79,34,32,231,+54,13,66,229,34,1,40,218,2,50,32,75,2,52,32,75,32,2,224,29,+3,135,84,2,79,32,102,224,75,0,2,39,45,68,2,77,73,78,2,95,+86,69,2,82,83,73,2,79,78,95,2,98,97,115,2,101,40,120,2,44,+121,44,2,122,41,61,2,40,120,60,2,61,52,124,2,124,121,60,2,61,+49,52,2,41,39,34,167,186,224,58,1,2,45,68,95,2,95,77,72,2,+83,95,95,128,26,207,138,64,254,227,22,19,141,183,230,30,3,227,22,27,+162,79,101,77,226,78,20,2,99,97,108,2,108,67,111,2,109,109,97,69,+6,131,51,226,89,9,250,217,2,96,178,135,179,2,94,115,121,2,115,116,+101,2,109,32,58,96,164,99,72,224,197,5,224,180,3,96,206,240,136,1,+64,40,224,25,5,202,90,32,242,232,126,2,228,122,3,110,194,228,119,11,+164,118,230,76,8,2,50,57,51,128,80,195,84,229,90,15,224,110,1,2,+51,51,50,225,83,0,2,49,52,52,129,84,238,231,0,34,186,67,77,250,+71,0,74,218,150,190,129,172,193,94,226,68,1,71,224,2,110,111,77,2,+97,116,99,2,104,32,102,225,116,0,2,46,47,108,2,105,98,47,2,83,+121,115,33,62,2,47,73,79,229,174,0,2,35,51,48,64,72,2,35,49,+52,235,87,0,96,107,105,70,128,123,97,50,41,111,192,148,224,22,0,234,+61,3,128,47,224,141,9,97,188,136,203,175,104,167,132,106,33,224,103,4,+234,39,3,244,189,1,224,14,0,249,62,6,202,101,224,141,2,234,20,3,+236,218,0,234,42,6,128,100,32,147,134,216,35,132,66,5,32,15,134,42,+2,94,116,109,2,112,110,97,2,109,101,32,32,17,133,187,226,17,6,2,+49,55,50,241,226,1,65,140,67,55,216,77,81,237,40,17,108,74,236,72,+2,162,64,224,69,1,104,72,104,117,198,219,226,42,11,129,117,96,115,247,+209,6,231,212,11,234,145,2,225,134,14,64,106,99,50,2,95,53,32,96,+47,64,34,32,22,228,144,0,164,143,237,101,3,96,32,132,147,32,86,2,+53,32,85,228,68,0,67,101,96,54,32,10,131,156,2,85,32,73,128,25,+131,154,32,47,2,50,32,58,105,43,32,13,2,73,32,58,64,15,97,115,+128,235,228,44,2,227,99,1,166,36,2,50,48,32,160,218,228,66,13,234,+98,5,96,116,129,191,2,85,32,67,243,70,0,98,199,98,32,232,63,2,+230,23,2,230,195,16,230,117,20,224,122,5,243,180,4,226,7,2,211,180,+224,30,14,226,38,1,250,128,6,253,167,7,224,134,16,230,247,8,225,65,+5,229,68,6,224,72,18,2,44,32,99,2,111,108,32,229,127,21,226,83,+3,224,57,1,2,101,110,100,2,45,111,102,2,45,102,105,2,108,101,34,+224,42,22,2,110,111,32,2,108,111,99,2,97,116,105,2,111,110,34,228,+58,6,224,36,20,33,215,131,133,237,172,0,32,91,237,173,0,65,215,98,+208,99,133,2,51,49,55,197,64,224,130,11,234,160,4,205,180,205,117,38,+219,131,12,77,85,131,35,2,51,49,54,188,41,96,23,246,47,1,148,251,+72,4,2,51,49,52,228,128,3,160,8,32,44,131,26,240,135,3,228,142,+13,196,140,64,55,240,56,0,207,25,244,237,5,192,21,34,192,245,146,11,+239,82,8,254,95,0,227,38,5,64,177,99,155,45,37,32,13,131,155,2,+94,71,69,2,84,84,73,2,77,69,77,2,73,76,76,67,167,77,65,240,+178,0,2,90,32,95,2,49,56,51,192,62,215,138,2,48,57,32,233,37,+17,32,39,247,164,1,32,43,128,172,32,8,145,38,32,59,215,231,197,242,+128,184,193,26,225,7,1,224,33,1,227,190,1,36,254,225,66,0,224,53,+3,224,228,1,64,103,64,165,2,50,55,56,227,16,0,161,105,64,139,161,+223,2,48,53,32,225,223,1,2,48,54,32,224,23,0,130,9,64,30,128,+17,35,160,2,51,48,51,240,74,1,96,29,161,71,128,98,2,56,57,32,+246,111,1,64,42,165,79,96,14,129,76,108,100,2,57,56,32,64,138,69,+191,96,76,211,109,75,134,236,212,3,114,86,96,60,129,111,146,24,153,13,+64,27,32,18,2,90,32,85,64,14,96,66,210,142,2,50,57,54,130,98,+98,185,2,50,57,55,128,69,96,118,133,130,96,19,64,10,2,79,46,99,+104,32,32,17,202,12,230,163,6,232,204,1,2,50,57,52,238,138,4,236,+118,7,64,188,177,149,206,95,32,86,129,62,2,75,32,90,198,49,96,70,+176,210,238,204,6,175,131,168,14,64,201,143,146,228,178,14,2,111,112,101,+2,110,70,105,2,108,101,58,2,32,99,97,2,110,110,111,2,116,32,111,+32,16,229,12,4,231,72,5,32,122,186,104,2,50,57,48,64,4,64,164,+32,20,129,153,224,87,1,2,73,110,116,2,101,114,97,2,99,116,105,2,+118,101,34,128,33,162,238,2,50,56,55,64,4,65,173,32,20,129,128,32,+15,2,56,32,75,197,234,148,41,96,34,128,226,173,171,84,51,246,177,4,+224,16,1,68,28,192,13,163,188,234,33,6,32,79,129,185,224,59,4,122,+192,64,145,162,158,103,71,90,249,249,126,0,241,237,4,224,84,10,161,241,+129,203,71,148,64,6,65,44,238,146,3,2,49,56,49,64,4,209,76,99,+139,232,98,1,2,49,56,54,238,151,6,226,22,5,239,83,15,96,114,131,+46,2,49,57,48,238,153,14,238,151,2,226,3,16,2,76,111,97,2,100,+105,110,2,103,32,115,2,97,118,101,2,100,32,99,2,97,99,104,231,14,+1,231,216,10,224,201,2,239,196,0,254,182,3,224,218,10,33,40,130,195,+170,133,241,135,1,2,49,57,52,231,116,4,137,145,65,134,107,75,238,186,+2,65,77,96,19,32,6,251,36,3,98,14,115,216,177,31,96,33,98,244,+2,50,48,57,224,145,2,128,60,2,49,48,53,253,187,20,151,241,224,9,+1,235,61,0,244,23,6,224,158,4,130,56,100,137,244,43,4,244,85,9,+212,48,224,118,17,243,86,1,160,98,224,94,6,181,14,240,21,7,237,87,+2,224,55,14,242,176,1,248,129,5,130,92,201,35,66,96,2,49,57,55,+228,144,1,109,76,2,50,53,49,246,190,16,224,83,5,32,42,103,201,193,+123,221,163,246,219,1,224,228,20,168,76,134,42,2,50,53,54,238,110,4,+225,215,7,250,89,9,224,206,0,224,200,7,240,206,6,229,122,1,225,199,+0,241,242,11,192,63,241,243,18,193,94,242,2,33,2,105,110,118,2,97,+108,105,2,100,97,116,2,101,32,99,67,107,239,177,9,245,213,1,251,123,+8,225,226,9,100,174,39,60,224,233,1,226,14,0,161,9,227,78,5,226,+177,2,82,64,238,40,2,68,224,161,98,166,57,145,233,73,124,2,80,32,+75,224,35,0,253,173,3,219,32,226,76,0,232,119,0,152,60,36,249,226,+35,11,105,5,225,199,10,232,122,2,100,84,70,28,97,100,248,117,2,32,+242,104,56,96,68,104,29,110,118,96,30,96,14,2,90,32,90,224,1,0,+249,117,7,32,38,198,136,40,110,128,203,98,52,32,13,193,1,2,55,57,+32,251,216,3,41,147,237,254,5,34,27,105,1,97,31,244,129,0,130,220,+248,88,1,254,232,2,248,50,10,33,127,194,219,220,55,96,46,32,23,69,+111,101,80,172,193,160,13,226,234,7,252,154,1,223,69,224,120,1,255,33,+2,253,231,9,255,17,4,227,19,5,176,20,162,107,141,93,2,53,32,95,+2,50,48,55,225,191,6,239,69,6,235,46,1,65,63,236,239,4,255,226,+5,224,57,6,2,58,50,55,245,196,1,196,29,64,43,235,233,1,160,38,+251,249,5,148,55,171,74,32,83,198,101,67,4,235,252,0,224,239,1,176,+94,43,236,225,74,1,229,225,3,253,135,3,186,34,66,19,78,100,2,50,+54,48,193,245,225,9,3,32,23,247,253,0,225,158,9,224,87,0,225,144,+15,225,174,0,225,132,11,102,194,225,132,36,231,85,1,231,7,0,160,57,+227,0,1,227,16,13,224,57,6,192,150,217,234,224,62,30,46,51,160,54,+65,150,61,213,2,95,55,52,193,38,195,179,160,8,127,150,160,116,249,111,+1,130,50,254,148,5,113,68,254,190,14,32,251,225,199,1,95,229,2,83,+32,83,101,249,128,70,224,42,1,224,82,19,160,72,243,127,5,226,174,23,+201,239,41,193,2,50,50,51,226,61,6,100,242,226,14,1,2,90,32,83,+225,252,7,227,170,0,228,26,4,225,120,5,232,32,9,224,99,7,225,217,+27,167,15,224,225,5,231,36,0,234,211,17,224,244,11,137,187,224,244,88,+227,4,0,235,196,13,224,241,23,238,212,2,226,30,3,224,241,26,224,21,+1,163,255,225,3,7,225,9,0,215,41,229,240,3,229,238,1,227,228,3,+250,99,4,68,125,228,86,0,35,9,195,31,242,106,1,36,102,146,186,227,+52,11,242,202,4,224,110,0,252,4,5,225,108,9,224,141,3,225,27,1,+193,131,193,22,231,191,4,224,65,2,225,1,0,230,152,32,225,151,15,225,+132,2,225,5,1,128,154,2,66,32,82,231,2,41,224,101,15,225,28,4,+192,250,225,134,2,191,246,108,97,228,163,11,96,24,225,135,2,69,98,94,+162,148,81,2,50,54,52,225,157,8,228,58,3,224,121,18,229,28,23,224,+120,51,231,109,0,226,111,4,227,168,0,83,227,128,9,232,62,17,224,17,+27,230,200,3,226,53,2,235,122,6,135,104,64,206,39,154,224,230,8,224,+214,7,138,103,224,30,0,228,128,3,2,54,57,32,164,137,255,195,9,194,+238,224,227,18,224,229,83,238,100,0,32,206,224,229,54,2,55,49,32,160,+8,224,27,7,225,219,6,36,120,138,234,192,131,224,251,26,235,152,1,175,+63,233,150,3,224,12,2,32,91,212,162,224,91,40,234,232,8,227,232,1,+129,33,224,6,3,41,125,224,77,7,231,110,7,96,62,232,253,1,224,10,+3,225,143,5,224,210,8,230,95,3,160,22,228,157,8,96,23,224,21,4,+193,27,226,5,5,224,151,41,224,41,1,225,115,29,230,115,15,248,40,6,+161,158,140,175,229,193,1,227,220,24,225,250,5,232,209,7,224,100,2,224,+131,26,32,127,140,228,224,127,42,234,253,4,226,39,4,225,126,9,224,84,+0,230,55,12,232,65,8,226,2,90,224,124,10,225,231,84,68,243,33,103,+2,35,50,32,32,11,244,171,0,233,73,15,231,220,4,228,147,2,224,6,+3,233,90,0,225,26,3,233,120,9,234,105,1,238,148,0,233,106,23,233,+140,27,224,166,6,225,7,1,204,226,103,231,233,1,12,231,16,7,165,61,+233,6,0,229,77,4,146,94,33,51,205,251,65,198,225,206,1,137,231,32,+30,139,185,49,192,32,11,138,208,2,35,51,32,32,11,233,210,3,230,48,+29,226,132,7,233,82,4,234,92,8,32,98,191,179,32,22,114,63,35,55,+224,202,0,87,212,225,59,3,32,45,221,217,120,243,110,103,80,174,59,140,+237,55,1,129,188,101,171,122,215,218,196,250,204,1,128,27,99,4,186,249,+224,27,13,192,55,214,130,2,95,52,56,238,244,1,32,125,208,225,146,220,+88,137,255,95,14,86,210,245,90,2,2,58,50,53,130,207,49,73,61,159,+2,49,52,57,242,214,1,32,8,131,157,2,52,48,32,224,20,0,32,48,+223,60,145,206,64,35,188,173,64,45,2,75,32,95,160,164,32,26,250,97,+0,224,149,21,97,39,129,139,130,37,96,60,129,252,242,86,1,252,183,0,+178,86,84,191,97,174,82,247,225,115,0,235,192,2,176,110,225,228,1,226,+38,1,241,99,2,172,110,99,143,227,106,3,236,139,4,224,75,9,229,34,+5,187,107,96,154,251,8,1,96,178,162,20,112,165,33,107,32,190,240,169,+0,245,177,3,32,44,226,65,1,2,95,57,49,150,65,153,126,64,49,32,+25,2,47,61,32,2,58,50,52,129,174,193,125,32,66,249,19,3,2,52,+53,32,182,123,64,175,32,30,129,156,2,94,109,100,2,53,66,70,2,73,+76,69,64,18,225,148,0,248,247,0,2,50,50,52,64,10,137,9,56,66,+225,149,2,250,248,6,214,13,209,209,113,122,224,56,5,246,226,4,160,39,+34,64,213,108,224,21,2,2,50,52,52,227,127,4,64,188,187,179,64,25,+190,123,200,153,100,139,91,232,237,150,1,245,229,0,229,56,5,161,189,141,+247,230,146,8,246,214,0,163,155,234,29,4,57,7,170,17,54,81,246,68,+2,244,31,10,237,217,8,251,222,4,96,222,244,154,0,224,55,2,128,116,+223,23,38,229,165,59,238,59,2,255,48,5,251,217,7,224,56,16,246,34,+1,249,217,2,160,19,33,81,226,153,0,2,50,32,90,230,10,12,32,35,+162,174,2,49,53,49,69,216,162,27,235,36,1,97,198,2,35,56,32,96,+99,122,16,32,51,130,181,2,35,49,54,64,12,220,39,2,50,53,32,36,+8,2,50,50,54,165,60,224,10,0,32,8,66,244,98,50,64,13,2,51,+48,32,224,13,3,226,135,0,96,13,66,209,224,13,1,100,139,2,50,51,+56,96,118,64,22,66,216,2,112,111,107,2,101,87,111,2,114,100,32,32,+18,131,10,2,94,112,101,2,101,107,87,160,18,130,254,169,19,32,60,195,+30,55,189,96,69,131,11,97,20,2,75,52,32,210,141,32,24,177,74,224,+56,0,204,2,192,56,223,11,54,126,32,13,129,91,2,112,43,32,32,11,+214,221,128,82,193,98,32,24,202,31,98,137,172,185,244,66,9,2,50,50,+57,245,95,2,2,95,56,49,192,22,194,76,69,33,32,77,129,105,115,41,+2,52,32,90,230,153,4,64,65,222,116,66,104,32,60,65,59,114,101,160,+79,72,221,157,5,233,205,1,32,56,197,217,96,82,224,84,6,129,74,2,+95,57,54,161,250,98,7,32,23,196,78,224,1,3,229,28,5,233,189,5,+234,91,15,237,197,13,231,193,35,96,142,129,184,137,237,2,50,48,32,249,+47,1,226,199,0,224,255,18,193,213,2,56,32,102,250,6,0,2,117,110,+100,2,101,102,105,2,110,101,100,153,253,32,37,195,73,248,191,21,64,94,+227,112,5,224,35,3,32,31,226,15,0,2,95,52,32,142,143,35,67,124,+148,240,94,0,66,174,2,95,51,57,192,49,231,228,1,2,49,55,32,96,+41,129,131,64,48,165,56,64,17,192,10,197,251,2,97,108,108,2,111,99,+32,32,16,181,20,186,116,36,36,96,67,240,220,2,121,76,96,27,2,51,+32,67,86,46,134,182,2,49,52,52,132,106,167,217,135,164,2,35,52,55,+253,71,1,128,32,225,53,1,2,46,104,115,219,45,32,120,129,148,198,179,+64,44,247,253,0,172,84,228,187,0,231,146,1,229,4,3,32,52,228,191,+0,2,51,32,90,225,122,20,160,47,129,126,64,76,88,79,229,16,0,188,+184,232,2,4,230,214,6,92,69,67,10,64,6,250,248,1,250,28,10,66,+69,97,69,233,108,15,65,194,129,94,244,198,5,64,97,186,184,252,126,6,+2,79,32,35,169,70,224,206,6,130,45,233,74,6,100,34,224,184,1,233,+89,11,224,120,1,32,68,196,52,129,135,91,213,249,133,15,33,146,161,41,+248,115,4,164,176,212,1,249,106,4,160,47,192,241,225,105,1,249,108,9,+237,164,9,237,185,10,116,11,224,102,8,224,98,3,202,44,96,204,130,248,+2,95,54,51,64,43,108,176,96,208,2,90,32,67,160,7,160,70,248,71,+6,224,36,8,96,63,224,36,22,72,131,224,36,24,116,67,224,37,24,2,+50,48,54,224,37,9,2,95,55,50,225,88,2,50,84,224,12,0,32,232,+131,214,229,249,12,32,75,225,4,0,122,248,32,55,66,85,225,195,2,245,+191,3,96,27,236,119,7,192,7,224,51,29,224,59,5,224,51,21,224,95,+5,192,59,224,51,29,224,111,6,129,31,162,112,129,31,200,232,64,8,33,+3,2,115,99,109,2,112,32,58,96,70,205,150,225,122,7,68,218,252,30,+0,235,146,3,98,62,96,75,132,116,227,115,2,227,96,5,84,221,236,179,+3,2,48,50,32,137,64,64,46,135,115,227,177,6,234,159,2,234,47,4,+32,32,195,195,157,58,224,16,0,224,31,0,32,153,128,84,97,30,98,91,+204,58,64,8,132,29,2,49,56,55,128,45,140,57,32,38,230,171,1,232,+139,0,96,29,229,76,1,224,23,2,163,68,33,93,2,49,57,54,166,11,+237,186,20,196,94,37,42,224,144,1,224,245,47,67,52,224,245,7,224,244,+4,224,12,1,32,171,168,144,2,51,32,66,224,110,9,210,16,225,99,21,+224,206,9,132,250,226,17,4,96,129,174,209,96,8,97,56,32,10,202,34,+224,103,15,67,161,224,93,7,32,54,130,144,2,85,32,73,128,14,214,48,+248,114,5,2,49,57,49,128,30,200,68,230,242,5,230,248,17,160,100,130,+15,228,35,0,224,49,17,32,43,130,34,2,82,32,95,142,51,2,49,56,+57,255,195,2,70,169,162,82,195,97,2,49,56,56,224,93,0,232,216,10,+96,46,99,4,109,88,104,194,2,49,56,53,128,26,164,159,83,217,32,13,+129,65,128,63,32,14,129,25,2,80,32,58,64,57,64,10,232,78,2,2,+109,104,115,2,99,97,99,2,104,101,34,128,42,129,22,231,182,23,144,237,+231,250,9,186,92,238,161,3,2,49,51,49,238,162,0,67,104,74,57,230,+201,0,2,49,56,48,224,223,3,233,184,1,224,124,5,120,39,224,124,0,+239,42,6,2,49,55,54,240,153,1,226,45,3,181,110,159,31,233,110,5,+2,49,50,50,238,2,12,239,151,7,32,92,170,66,224,187,1,2,49,49,+51,192,27,231,56,1,224,147,8,64,170,239,176,11,193,14,226,191,7,161,+1,173,230,2,49,55,56,32,13,64,68,74,114,2,79,46,100,2,101,115,+101,2,114,105,97,2,108,105,122,2,101,32,58,64,28,106,127,2,97,100,+100,2,95,108,122,2,55,55,95,2,100,101,99,2,111,109,112,2,114,101,+115,2,115,111,114,64,31,130,39,224,147,8,166,176,240,124,9,97,180,162,+80,72,187,224,159,8,32,83,130,96,2,94,117,110,2,103,101,116,2,98,+32,58,96,46,225,172,8,32,69,65,88,234,225,2,181,79,2,95,56,52,+172,36,239,85,0,240,179,6,2,49,55,51,234,244,0,236,37,3,2,104,+71,101,2,116,67,104,2,97,114,58,2,32,69,79,2,70,34,32,225,43,+1,190,138,47,78,66,242,186,31,2,94,103,101,128,157,226,199,0,228,67,+9,76,201,64,22,68,142,209,222,143,122,64,146,234,52,4,224,134,1,2,+111,112,101,2,110,66,105,2,110,97,114,2,121,70,105,2,108,101,58,2,+32,99,97,2,110,110,111,2,116,32,111,32,22,2,32,34,32,229,86,1,+46,177,34,102,70,166,251,185,4,225,38,7,108,102,225,1,7,162,88,160,+222,178,180,84,61,2,75,32,67,33,81,226,194,2,2,35,51,57,192,176,+69,157,49,223,192,17,128,106,166,97,2,49,52,54,163,65,124,79,196,77,+224,48,6,160,18,2,54,32,102,224,237,0,2,39,92,57,2,50,38,39,+2,39,34,32,224,33,3,47,243,224,213,0,224,120,3,210,107,84,45,68,+22,224,20,4,227,132,0,242,23,2,227,138,4,224,41,0,162,153,130,47,+131,56,200,148,128,190,226,54,0,96,121,224,174,3,64,173,2,92,51,52,+2,38,34,32,229,179,11,249,191,0,242,187,1,239,193,0,236,114,1,2,+83,32,83,215,150,2,49,52,56,224,130,0,34,10,44,57,70,45,229,140,+2,195,216,205,213,129,245,184,212,227,66,0,150,168,213,190,71,130,189,11,+242,61,1,224,194,5,224,191,6,2,67,32,79,224,117,4,143,155,235,196,+8,225,80,6,224,1,1,2,79,32,80,2,32,35,55,224,101,8,2,97,+34,32,224,31,2,64,145,224,31,5,2,98,34,32,224,31,2,110,196,224,+32,5,2,102,34,32,224,32,3,66,16,224,32,5,2,110,34,32,224,32,+3,66,213,224,32,5,2,114,34,32,224,32,2,65,45,224,31,5,2,116,+34,32,224,64,3,68,49,224,32,5,2,118,34,32,224,64,3,224,163,9,+64,3,192,35,238,198,12,98,82,165,36,119,128,33,64,52,152,97,249,131,+50,97,181,2,35,53,55,192,47,169,193,247,205,1,225,240,1,100,228,151,+205,192,20,32,48,165,133,133,11,245,11,2,180,253,121,242,101,115,229,27,+0,226,225,0,37,109,2,35,52,53,192,93,200,30,185,193,64,79,227,77,+2,232,222,4,224,74,0,245,112,6,97,165,226,190,16,96,97,96,74,244,+158,0,69,168,224,51,1,226,138,7,224,15,5,96,66,167,39,245,63,0,+35,6,2,56,32,35,161,79,160,93,67,184,224,93,10,32,217,134,76,2,+99,104,114,64,12,197,216,40,37,35,61,129,92,219,8,106,48,2,95,57,+48,96,97,56,168,224,80,0,32,13,46,133,224,13,2,68,173,224,13,0,+78,87,224,13,0,106,233,32,103,134,50,239,159,0,248,224,1,155,178,252,+124,13,196,53,251,202,0,64,16,196,58,33,0,86,14,105,226,129,29,32,+136,193,2,106,138,64,198,64,29,149,17,224,29,2,240,40,2,65,197,224,+37,14,224,67,23,132,201,75,1,234,60,3,249,148,9,228,244,0,253,56,+1,65,186,224,87,14,192,204,134,92,74,107,224,39,11,130,104,244,132,6,+133,252,124,204,224,180,20,192,24,161,174,139,164,188,9,239,145,11,96,34,+235,192,6,241,218,6,96,115,224,62,1,237,140,1,187,152,244,103,22,96,+161,254,131,3,237,145,1,122,89,98,207,96,39,240,55,0,248,0,16,96,+42,230,131,0,191,162,2,49,53,51,32,6,114,49,66,187,224,31,14,139,+194,187,146,246,252,8,96,35,246,37,129,67,178,236,193,5,225,90,14,237,+70,0,247,15,8,68,206,140,188,228,164,2,169,89,128,32,187,168,229,185,+6,160,39,229,185,1,2,49,50,54,192,48,129,200,2,60,61,32,32,11,+205,67,88,95,104,96,64,13,37,111,32,12,189,23,92,38,2,49,52,50,+128,89,120,149,103,91,188,39,96,18,32,11,2,61,61,32,32,11,170,102,+139,83,104,202,71,231,185,13,96,190,189,232,234,245,3,121,237,224,19,0,+32,69,240,100,1,121,132,32,6,112,100,96,40,125,136,32,17,64,204,102,+57,2,58,49,51,206,71,255,8,0,166,50,110,219,72,93,64,11,236,91,+3,193,208,224,37,3,228,26,4,228,24,1,137,32,132,42,132,38,224,78,+7,224,76,4,232,117,4,244,119,3,128,218,186,58,210,131,224,200,4,194,+219,186,75,67,142,130,7,32,18,250,62,0,164,22,32,18,248,127,1,226,+122,1,32,22,227,24,0,224,60,1,129,160,169,236,64,147,64,42,117,209,+246,248,0,32,37,210,81,57,240,32,13,129,130,2,94,99,108,2,111,115,+101,76,64,186,6,226,156,1,2,58,49,50,129,118,240,151,12,108,83,239,+19,11,224,42,5,65,226,57,239,160,34,2,49,49,54,236,14,3,236,16,+7,214,227,236,24,4,96,136,254,154,0,130,227,32,96,96,22,187,147,64,+10,228,110,3,224,170,4,216,163,96,55,254,88,5,96,19,70,193,64,21,+170,186,247,62,3,2,49,49,52,236,68,3,224,26,5,236,95,3,224,28,+6,103,110,224,27,11,233,178,1,2,119,43,34,242,27,5,2,49,50,52,+255,44,1,202,226,127,180,65,90,240,81,1,237,62,2,176,83,253,164,4,+240,152,0,33,18,130,63,2,94,102,111,77,178,32,15,229,81,5,228,171,+17,186,149,75,199,129,52,136,61,186,133,32,108,72,90,123,16,32,20,205,+180,112,46,97,20,32,20,130,74,47,198,2,115,116,100,2,111,117,116,32,+18,186,87,108,201,97,220,128,9,117,153,2,49,49,53,226,32,5,226,30,+0,64,76,186,134,111,251,2,70,73,76,2,69,32,58,96,29,192,18,2,+117,116,102,80,57,186,144,199,126,140,214,131,115,32,28,129,9,32,143,2,+112,101,114,2,102,111,114,2,109,73,79,64,21,129,15,58,223,96,145,239,+60,1,240,42,5,32,140,130,30,32,8,126,180,169,199,32,53,129,16,112,+240,126,95,192,47,129,26,185,103,128,81,178,247,129,31,185,60,106,48,2,+58,49,48,129,26,126,102,64,17,158,121,2,117,116,98,64,14,128,233,228,+166,1,200,216,64,6,99,228,97,252,243,83,2,233,182,9,164,162,94,124,+202,129,153,64,64,138,183,230,65,4,182,237,99,25,195,64,63,168,229,3,+2,243,36,8,100,4,164,218,227,87,1,136,60,225,70,6,229,97,1,131,+118,64,184,86,227,224,62,5,164,176,32,26,224,55,1,223,57,227,212,5,+224,225,2,241,219,7,224,89,8,242,122,13,183,207,34,230,241,126,5,2,+101,97,100,237,72,3,32,40,130,29,2,65,46,119,2,114,105,116,82,142,+183,155,131,73,192,77,161,237,235,25,0,32,134,75,131,237,2,7,252,160,+1,191,150,165,161,96,198,64,36,32,55,236,82,0,242,60,2,239,70,3,+32,109,162,65,51,24,2,95,55,57,108,253,103,98,127,147,2,95,56,50,+143,222,237,134,13,152,99,237,131,5,68,252,116,52,90,216,224,46,5,237,+97,17,224,151,2,160,43,160,19,2,95,57,56,64,165,248,26,0,161,247,+96,156,78,222,160,175,96,52,224,70,2,32,26,64,17,153,9,234,129,3,+129,39,128,130,95,122,245,124,1,252,11,1,130,35,96,36,162,21,224,42,+4,224,66,15,228,251,6,184,181,140,37,241,35,4,98,214,129,157,64,177,+226,91,0,250,108,1,192,41,68,219,140,206,70,90,2,54,32,110,2,111,+77,97,2,116,99,104,246,130,3,2,47,108,105,2,98,47,68,2,97,116,+97,2,47,73,110,2,116,101,103,2,101,114,95,2,84,121,112,2,101,46,+104,190,232,2,35,50,55,225,25,5,128,207,34,21,87,47,172,61,226,18,+0,224,23,0,38,121,64,149,224,6,1,241,195,5,224,74,7,193,251,192,+74,2,89,32,67,242,186,0,98,189,115,119,192,231,131,253,150,121,206,142,+225,93,1,137,82,238,172,0,225,93,3,255,143,1,225,245,2,65,106,132,+218,2,113,117,111,38,31,185,12,64,115,2,95,57,52,64,119,96,125,224,+15,2,106,237,2,95,50,55,225,70,2,161,59,2,58,32,117,2,110,115,+117,2,112,112,111,2,114,116,101,2,100,32,119,69,71,2,115,105,122,119,+222,147,111,2,50,55,54,129,54,2,35,50,49,2,52,55,52,2,56,51,+54,111,164,2,58,57,53,96,116,224,247,3,240,100,1,106,51,225,229,4,+100,111,224,233,1,100,97,193,162,66,22,245,235,4,227,102,0,42,70,195,+28,102,22,185,180,2,105,110,118,32,11,132,88,2,115,104,114,32,11,132,+83,75,100,185,114,2,114,101,109,32,11,131,232,2,75,32,58,185,75,2,+65,32,58,185,52,56,221,185,31,173,239,206,79,2,58,56,54,236,147,27,+185,51,187,185,236,146,4,185,63,237,224,19,185,87,2,110,101,103,32,11,+128,187,2,42,32,58,184,208,2,45,32,58,183,216,2,43,32,58,183,212,+237,146,93,2,58,55,56,224,251,8,224,185,6,184,44,40,2,183,226,33,+92,183,219,158,237,98,195,114,213,2,95,54,56,96,5,100,55,118,8,131,+253,126,52,210,129,94,51,160,11,2,58,55,52,199,243,182,6,241,96,5,+70,17,194,25,123,180,183,196,224,35,3,224,59,3,224,47,9,129,105,2,+62,61,32,2,58,55,49,128,10,32,9,129,106,77,237,179,227,2,60,32,+58,179,189,2,105,99,109,62,187,179,153,109,232,163,88,102,71,179,95,77,+229,178,144,66,127,178,142,239,97,126,178,180,226,166,0,252,35,6,177,49,+128,218,97,161,95,119,191,139,2,58,54,49,131,97,2,101,113,117,2,97,+108,32,2,58,54,48,239,72,0,109,198,238,80,2,202,237,34,241,138,240,+232,182,6,2,39,32,85,224,24,4,247,80,4,233,99,0,133,94,241,233,+0,147,27,167,222,96,11,2,95,53,57,224,91,4,64,173,224,21,1,2,+58,53,57,160,236,171,116,177,145,2,95,53,54,228,247,2,2,77,72,83,+2,68,73,82,132,223,2,58,53,55,252,66,13,108,211,2,95,52,50,236,+82,26,252,164,8,81,123,236,88,17,177,217,35,53,177,195,2,95,53,51,+32,11,130,52,2,112,101,101,2,107,67,65,2,83,116,114,2,105,110,103,+32,20,129,187,2,90,32,85,96,56,161,170,48,239,2,58,53,49,128,46,+2,110,117,108,33,151,177,1,97,196,118,5,97,196,160,170,2,58,52,57,+242,42,8,242,54,4,129,88,217,58,129,56,177,1,32,164,176,255,37,55,+176,251,2,112,61,61,32,11,128,186,37,67,176,233,147,241,2,58,52,51,+251,85,0,2,101,110,118,32,15,128,179,168,193,99,58,111,207,97,83,66,+70,238,79,4,102,163,112,236,65,49,193,48,240,237,1,145,27,144,235,176,+234,2,95,51,56,2,32,58,51,128,225,2,112,99,97,2,115,116,32,2,+58,51,56,173,184,2,114,101,101,32,13,225,224,1,128,126,64,87,80,58,+224,96,1,176,60,2,110,101,119,193,122,2,76,101,110,32,22,161,158,48,+30,100,60,240,57,0,2,58,51,51,160,9,128,23,160,227,99,121,128,17,+173,213,236,6,5,226,99,8,235,254,3,188,87,235,105,4,2,95,50,57,+224,162,0,128,237,235,108,7,2,116,97,105,2,108,34,32,128,35,116,23,+176,114,71,232,2,58,50,56,96,11,2,101,114,114,93,228,175,236,44,169,+175,235,2,65,46,114,43,170,32,14,237,221,0,33,180,2,65,114,103,2,+82,101,102,32,20,215,82,32,74,131,9,96,143,97,160,100,250,174,228,32,+53,2,62,62,32,2,58,50,50,160,118,227,10,0,143,147,253,173,3,160,+73,64,11,57,11,192,11,46,235,192,11,2,58,50,49,247,95,4,115,33,+227,101,2,116,225,160,41,228,136,0,64,41,128,38,110,40,224,37,1,2,+95,56,32,140,89,161,17,33,16,175,10,224,53,9,143,70,128,179,212,3,+225,46,0,175,26,245,252,1,229,63,4,175,27,150,141,51,128,231,248,5,+244,166,3,239,35,2,96,126,107,171,224,13,4,96,241,201,1,48,6,224,+75,1,210,211,162,87,2,51,32,66,100,143,241,245,0,194,48,90,100,207,+94,252,196,0,125,33,32,255,161,19,2,58,57,32,201,18,227,185,3,207,+41,2,58,54,32,161,216,2,114,101,116,2,117,114,110,36,93,225,233,1,+67,249,195,248,246,71,7,230,173,55,2,58,50,32,224,80,1,224,40,15,+2,58,49,32,232,158,1,246,212,0,64,234,91,72,2,54,32,32,236,150,+11,224,1,255,224,1,255,224,1,255,224,1,255,224,1,255,224,1,255,224,+1,255,224,1,255,224,1,255,224,1,255,224,1,255,224,1,255,224,1,157,+0,125,+};+unsigned char *combexpr = data;+int combexprlen = 82882;+#include "mhsffi.h"+static struct ffi_entry table[] = {+{ 0,0 }+};+struct ffi_entry *xffi_table = table;
ghc/Compat.hs view
@@ -127,13 +127,7 @@   res <- try $ openTempFile tmp tmplt   case res of     Right x -> return x-    Left (_::SomeException) -> openTempFile "" tmplt--hSerialize :: Handle -> a -> IO ()-hSerialize _ _ = error "ghc: hSerialize"--hDeserialize :: Handle -> IO a-hDeserialize _ = error "ghc: hDeserialize"+    Left (_::SomeException) -> openTempFile "." tmplt  usingMhs :: Bool usingMhs = False
ghc/Data/Integer.hs view
@@ -1,4 +1,4 @@-module Data.Integer(_integerToIntList, readInteger) where+module Data.Integer(_integerToIntList) where  -- Same as in Data.Integer _integerToIntList :: Integer -> [Int]@@ -6,6 +6,3 @@                     | otherwise =  to i   where to 0 = []         to n = fromInteger r : to q  where (q, r) = quotRem n 2147483648--readInteger :: String -> Integer-readInteger = read
ghc/MicroHs/Instances.hs view
@@ -27,7 +27,7 @@  instance NFData Exp where rnf (Var i) = rnf i; rnf (App f a) = rnf f `seq` rnf a; rnf (Lam i e) = rnf i `seq` rnf e; rnf (Lit l) = rnf l -instance NFData Lit where rnf (LInt i) = rnf i; rnf (LInteger i) = rnf i; rnf (LDouble d) = rnf d; rnf (LRat r) = rnf r; rnf (LChar c) = rnf c; rnf (LStr s) = rnf s; rnf (LPrim s) = rnf s; rnf (LForImp s) = rnf s; rnf (LTick s) = rnf s; rnf (LUStr s) = rnf s+instance NFData Lit where rnf (LInt i) = rnf i; rnf (LInteger i) = rnf i; rnf (LDouble d) = rnf d; rnf (LRat r) = rnf r; rnf (LChar c) = rnf c; rnf (LStr s) = rnf s; rnf (LPrim s) = rnf s; rnf (LForImp s _) = rnf s; rnf (LTick s) = rnf s; rnf (LUStr s) = rnf s  instance NFData Ident where rnf (Ident _ s) = rnf s 
ghc/PrimTable.hs view
@@ -11,7 +11,7 @@ import Foreign.C.Types import Foreign.Marshal.Alloc import Foreign.Ptr-import System.Environment+--import System.Environment import System.IO.Unsafe --import Debug.Trace import Compat@@ -113,7 +113,7 @@   , comb "IO.serialize" ioserialize   , comb "IO.deserialize" iodeserialize   , comb "newCAStringLen" (fmap fromPair . newCAStringLen . toString)-  , comb "IO.getArgs" iogetargs+  , comb "IO.getArgRef" iogetargref    , comb0 "IO.stdin" stdin   , comb0 "IO.stdout" stdout@@ -162,10 +162,13 @@     iodeserialize :: Handle -> IO a     iodeserialize _ = error "ghc does not support deserialize" +{-     iogetargs :: IO Any     iogetargs = do       args <- getArgs       return $ fromList $ map fromString args+-}+    iogetargref = error "ghc: no IO.getArgRef"      -- Can't implement this     rnf :: a -> ()
+ ghc/System/Compress.hs view
@@ -0,0 +1,4 @@+module System.Compress(compress) where++compress :: String -> String+compress _ = error "compress: not available with ghc"
ghc/System/Console/SimpleReadline.hs view
@@ -1,13 +1,15 @@ module System.Console.SimpleReadline(-  getInputLine,+--  getInputLine,   getInputLineHist   ) where import qualified System.Console.Haskeline as H import System.Console.Haskeline hiding (getInputLine) +{- getInputLine :: String -> IO (Maybe String) getInputLine prompt =   runInputT defaultSettings (H.getInputLine prompt)+-}  getInputLineHist :: FilePath -> String -> IO (Maybe String) getInputLineHist hist prompt =
+ ghc/System/IO/Serialize.hs view
@@ -0,0 +1,28 @@+-- Copyright 2024 Lennart Augustsson+-- See LICENSE file for full license.+module System.IO.Serialize(+{-+  hSerialize, hDeserialize,+  writeSerialized,+-}+  writeSerializedCompressed,+  readSerialized,+  ) where+--import System.IO++{-+hSerialize   :: forall a . Handle -> a -> IO ()+hSerialize = errghc+hDeserialize :: forall a . Handle -> IO a+hDeserialize = errghc+writeSerialized :: forall a . FilePath -> a -> IO ()+writeSerialized = errghc+-}++writeSerializedCompressed :: forall a . FilePath -> a -> IO ()+writeSerializedCompressed = errghc+readSerialized :: forall a . FilePath -> IO a+readSerialized = errghc++errghc :: a+errghc = error "System.IO.System: serialization not available with ghc"
lib/AllOfLib.hs view
@@ -19,11 +19,11 @@ import Data.Char_Type import Data.Complex import Data.Constraint-import Data.Double import Data.Dynamic import Data.Either import Data.Enum import Data.Eq+import Data.FloatW import Data.Floating import Data.Foldable import Data.Fractional@@ -34,11 +34,14 @@ import Data.IOArray import Data.IORef import Data.Int+import Data.Int.IntN+import Data.Int.Instances import Data.IntMap import Data.IntSet import Data.Integer import Data.Integer_Type import Data.Integral+import Data.Ix import Data.List import Data.List_Type import Data.Map@@ -57,16 +60,18 @@ import Data.Records import Data.Semigroup import Data.STRef+import Data.String import Data.Traversable import Data.Tuple import Data.Typeable import Data.TypeLits+import Data.Version import Data.Void import Data.Word-import Data.Word8 import Data.ZipList import Debug.Trace import Foreign.C.String+import Foreign.C.Types import Foreign.Marshal.Alloc import Foreign.Marshal.Array import Foreign.Marshal.Utils@@ -82,10 +87,14 @@ import System.Environment import System.Exit import System.IO+import System.IO_Handle import System.IO.MD5 import System.IO.PrintOrRun+import System.IO.Serialize+import System.Info import System.Process import Text.PrettyPrint.HughesPJ+import Text.PrettyPrint.HughesPJClass import Text.Read import Text.Show import Text.String
− lib/Control/Concurrent.hs
@@ -1,25 +0,0 @@-module Control.Concurrent(-  ThreadId,-  forkIO,-  ) where-import Prelude()              -- do not import Prelude-import Primitives-import Prelude-import Data.Word--newtype ThreadId = ThreadId (Ptr ())--instance Show ThreadId where-  show (ThreadId p) = "ThreadId#" ++ show (primPtrToWord p)--instance Eq ThreadId where-  ThreadId p == ThreadId q  =  primPtrEQ p q--instance Ord ThreadId where-  ThreadId p `compare` ThreadId q = p `compare` q--primForkIO :: IO () -> IO (Ptr ())-primForkIO = primitive "IO.fork"--forkIO :: IO () -> IO ThreadId-forkIO io = ThreadId <$> primForkIO io
lib/Control/Exception.hs view
@@ -4,9 +4,12 @@   Exn(..),   exnToString,   onException,+  SomeException,   ) where import Primitives import Prelude++type SomeException = Exn  newtype Exn = Exn String 
+ lib/Control/ExceptionX.hs view
@@ -0,0 +1,103 @@+module Control.ExceptionX(+  module Control.ExceptionX+  ) where+import Prelude+import Data.Typeable++------------------++primRaiseX :: forall a . SomeException -> a+primRaiseX = primitive "raiseX"+primCatchX :: forall a . IO a -> (SomeException -> IO a) -> IO a+primCatchX = primitive "catchX"++throwX :: forall e a. Exception e => e -> a+throwX e = primRaiseX (toException e)++throwXIO :: forall e a. Exception e => e -> IO a+throwXIO e = primRaiseX (toException e)++catchX   :: forall e a .+           Exception e+        => IO a+        -> (e -> IO a)+        -> IO a+catchX io handler = primCatchX io handler'+    where handler' e = case fromException e of+                       Just e' -> handler e'+                       Nothing -> throwXIO e++tryX :: forall e a . Exception e => IO a -> IO (Either e a)+tryX ioa = catchX (fmap Right ioa) (return . Left)++------------------++data SomeException = forall e . Exception e => SomeException e+  deriving (Typeable)++instance Show SomeException where+    showsPrec p (SomeException e) = showsPrec p e++class (Typeable e, Show e) => Exception e where+    toException      :: e -> SomeException+    fromException    :: SomeException -> Maybe e+    displayException :: e -> String++    toException = SomeException+    fromException (SomeException e) = cast e+    displayException = show++instance Exception SomeException where+    toException se = se+    fromException = Just+    displayException (SomeException e) = displayException e++------------------++-- Call to 'error'+data ErrorCall = ErrorCall String+  deriving (Typeable)++instance Show ErrorCall where+  showsPrec _ (ErrorCall err) = showString err++instance Exception ErrorCall++--errorCallException :: String -> SomeException+--errorCallException s = toException (ErrorCall s)++------------------++-- Errors generated by the compiler++newtype PatternMatchFail = PatternMatchFail String deriving (Typeable)+newtype RecSelError      = RecSelError      String deriving (Typeable)+newtype RecConError      = RecConError      String deriving (Typeable)+newtype RecUpdError      = RecUpdError      String deriving (Typeable)+newtype NoMethodError    = NoMethodError    String deriving (Typeable)++instance Show PatternMatchFail where showsPrec _ (PatternMatchFail s) = showString s+instance Show RecSelError      where showsPrec _ (RecSelError      s) = showString s+instance Show RecConError      where showsPrec _ (RecConError      s) = showString s+instance Show RecUpdError      where showsPrec _ (RecUpdError      s) = showString s+instance Show NoMethodError    where showsPrec _ (NoMethodError    s) = showString s++instance Exception PatternMatchFail+instance Exception RecSelError+instance Exception RecConError+instance Exception RecUpdError+instance Exception NoMethodError++patternMatchFail :: forall a . String -> a+recSelError      :: forall a . String -> a+recConError      :: forall a . String -> a+recUpdError      :: forall a . String -> a+noMethodError    :: forall a . String -> a++patternMatchFail s = throwX (PatternMatchFail s)+recSelError      s = throwX (RecSelError      s)+recConError      s = throwX (RecConError      s)+recUpdError      s = throwX (RecUpdError      s)+noMethodError    s = throwX (NoMethodError    s)++------------------
lib/Data/Char.hs view
@@ -114,8 +114,8 @@       case rest of         [] -> False         c : _ -> isDigit c-    spec = [('\a',"\\a"), ('\b', "\\b"), ('\f', "\\f"), ('\n', "\\n"),-            ('\r', "\\r"), ('\t', "\\t"), ('\v', "\\v"), ('\\', "\\\\")]-    look [] = if isPrint c then [c] else "\\" ++ show (ord c) ++ if needProtect then "\\&" else ""+    spec = [('\a',"\\a"::String), ('\b', "\\b"::String), ('\f', "\\f"::String), ('\n', "\\n"::String),+            ('\r', "\\r"::String), ('\t', "\\t"::String), ('\v', "\\v"::String), ('\\', "\\\\"::String)]+    look [] = if isPrint c then [c] else ("\\"::String) ++ show (ord c) ++ if needProtect then "\\&"::String else []     look ((d,s):xs) = if d == c then s else look xs   in look spec
− lib/Data/Double.hs
@@ -1,223 +0,0 @@--- Copyright 2023 Lennart Augustsson--- See LICENSE file for full license.-module Data.Double(Double) where-import Prelude()              -- do not import Prelude-import Primitives-import Control.Error-import Data.Bits-import Data.Bool-import Data.Char-import Data.Eq-import Data.Floating-import Data.Fractional-import Data.Function-import Data.Integer-import Data.List-import Data.Ord-import Data.Ratio-import Data.Real-import Data.RealFloat-import Data.RealFrac-import Data.Num-import Data.Word-import Text.Read-import Text.Read.Numeric-import Text.Show------- NOTE: On 32 bit platforms the MicroHs Double type is actually 32 bit floats.-----instance Num Double where-  (+)  = primDoubleAdd-  (-)  = primDoubleSub-  (*)  = primDoubleMul-  negate = primDoubleNeg-  abs x = if x < 0.0 then - x else x-  signum x =-    case compare x 0.0 of-      LT -> -1.0-      EQ ->  0.0-      GT ->  1.0-  fromInteger = _integerToDouble--instance Fractional Double where-  (/) = primDoubleDiv-  -- This version of fromRational can go horribly wrong-  -- if the integers are bigger than can be represented in a Double.-  -- It'll do for now.-  fromRational x | x == rationalNaN = 0/0-                 | x == rationalInfinity = 1/0-                 | x == -rationalInfinity = (-1)/0-                 | otherwise =-    fromInteger (numerator x) / fromInteger (denominator x)--instance Eq Double where-  (==) = primDoubleEQ-  (/=) = primDoubleNE--instance Ord Double where-  (<)  = primDoubleLT-  (<=) = primDoubleLE-  (>)  = primDoubleGT-  (>=) = primDoubleGE-  --- For now, cheat and call C-instance Show Double where-  show = primDoubleShow--instance Read Double where-  readsPrec _ = readSigned $ \ r -> [ (primDoubleRead s, t) | (s@(c:_), t) <- lex r, isDigit c ]--instance Real Double where-  toRational x | isNaN x = rationalNaN-               | isInfinite x = if x < 0 then -rationalInfinity else rationalInfinity-               | otherwise =-    case decodeFloat x of-      (m, e) -> toRational m * 2^^e--instance RealFrac Double where-  properFraction _ = error "Double.properFraction not implemented"--instance Floating Double where-  pi     = 3.141592653589793-  log  x = primPerformIO (clog x)-  exp  x = primPerformIO (cexp x)-  sqrt x = primPerformIO (csqrt x)-  sin  x = primPerformIO (csin x)-  cos  x = primPerformIO (ccos x)-  tan  x = primPerformIO (ctan x)-  asin x = primPerformIO (casin x)-  acos x = primPerformIO (cacos x)-  atan x = primPerformIO (catan x)--foreign import ccall "log"  clog  :: Double -> IO Double-foreign import ccall "exp"  cexp  :: Double -> IO Double-foreign import ccall "sqrt" csqrt :: Double -> IO Double-foreign import ccall "sin"  csin  :: Double -> IO Double-foreign import ccall "cos"  ccos  :: Double -> IO Double-foreign import ccall "tan"  ctan  :: Double -> IO Double-foreign import ccall "asin" casin :: Double -> IO Double-foreign import ccall "acos" cacos :: Double -> IO Double-foreign import ccall "atan" catan :: Double -> IO Double-foreign import ccall "atan2" catan2 :: Double -> Double -> IO Double---- Assumes 64 bit floats-instance RealFloat Double where-  floatRadix     _ = 2-  floatDigits    _ = flt 24 53-  floatRange     _ = flt (-125,128) (-1021,1024)-  decodeFloat      = flt decodeFloat32 decodeFloat64-  encodeFloat      = flt encodeFloat32 encodeFloat64-  isNaN            = flt isNaNFloat32 isNaNFloat64-  isInfinite       = flt isInfFloat32 isInfFloat64-  isDenormalized   = flt isDenFloat32 isDenFloat64-  isNegativeZero   = flt isNegZeroFloat32 isNegZeroFloat64-  isIEEE         _ = True-  atan2 x y        = primPerformIO (catan2 x y)--flt :: forall a . a -> a -> a-flt f d | _wordSize == 32 = f-        | otherwise       = d--decodeFloat64 :: Double -> (Integer, Int)-decodeFloat64 x =-  let xw   = primWordFromDoubleRaw x-      sign =  xw .&. 0x8000000000000000-      expn = (xw .&. 0x7fffffffffffffff) `shiftR` 52-      mant =  xw .&. 0x000fffffffffffff-      neg  = if sign /= 0 then negate else id-  in  if expn == 0 then-        -- subnormal or 0-        (neg (_wordToInteger mant), 0)-      else if expn == 0x7ff then-        -- infinity or NaN-        (0, 0)-      else-        -- ordinary number, add hidden bit-        -- mant is offset-1023, and assumes scaled mantissa (thus -52)-        (neg (_wordToInteger (mant .|. 0x0010000000000000)),-         primWordToInt expn - 1023 - 52)--isNaNFloat64 :: Double -> Bool-isNaNFloat64 x =-  let xw   = primWordFromDoubleRaw x-      expn = (xw .&. 0x7fffffffffffffff) `shiftR` 52-      mant =  xw .&. 0x000fffffffffffff-  in  expn == 0x7ff && mant /= 0--isInfFloat64 :: Double -> Bool-isInfFloat64 x =-  let xw   = primWordFromDoubleRaw x-      expn = (xw .&. 0x7fffffffffffffff) `shiftR` 52-      mant =  xw .&. 0x000fffffffffffff-  in  expn == 0x7ff && mant == 0--isDenFloat64 :: Double -> Bool-isDenFloat64 x =-  let xw   = primWordFromDoubleRaw x-      expn = (xw .&. 0x7fffffffffffffff) `shiftR` 52-      mant =  xw .&. 0x000fffffffffffff-  in  expn == 0 && mant /= 0--isNegZeroFloat64 :: Double -> Bool-isNegZeroFloat64 x =-  let xw   = primWordFromDoubleRaw x-      sign = xw .&. 0x8000000000000000-      rest = xw .&. 0x7fffffffffffffff-  in  sign /= 0 && rest == 0---- Simple (and sometimes wrong) encoder-encodeFloat64 :: Integer -> Int -> Double-encodeFloat64 mant expn = fromInteger mant * 2^^expn--decodeFloat32 :: Double -> (Integer, Int)-decodeFloat32 x =-  let xw   = primWordFromDoubleRaw x-      sign =  xw .&. 0x80000000-      expn = (xw .&. 0x7fffffff) `shiftR` 23-      mant =  xw .&. 0x007fffff-      neg  = if sign /= 0 then negate else id-  in  if expn == 0 then-        -- subnormal or 0-        (neg (_wordToInteger mant), 0)-      else if expn == 0xff then-        -- infinity or NaN-        (0, 0)-      else-        -- ordinary number, add hidden bit-        -- mant is offset-1023, and assumes scaled mantissa (thus -52)-        (neg (_wordToInteger (mant .|. 0x00400000)),-         primWordToInt expn - 127 - 22)--isNaNFloat32 :: Double -> Bool-isNaNFloat32 x =-  let xw   = primWordFromDoubleRaw x-      expn = (xw .&. 0x7fffffff) `shiftR` 23-      mant =  xw .&. 0x007fffff-  in  expn == 0xff && mant /= 0--isInfFloat32 :: Double -> Bool-isInfFloat32 x =-  let xw   = primWordFromDoubleRaw x-      expn = (xw .&. 0x7fffffff) `shiftR` 23-      mant =  xw .&. 0x007fffff-  in  expn == 0x7ff && mant == 0--isDenFloat32 :: Double -> Bool-isDenFloat32 x =-  let xw   = primWordFromDoubleRaw x-      expn = (xw .&. 0x7fffffff) `shiftR` 23-      mant =  xw .&. 0x007fffff-  in  expn == 0 && mant /= 0--isNegZeroFloat32 :: Double -> Bool-isNegZeroFloat32 x =-  let xw   = primWordFromDoubleRaw x-      sign = xw .&. 0x80000000-      rest = xw .&. 0x7fffffff-  in  sign /= 0 && rest == 0---- Simple (and sometimes wrong) encoder-encodeFloat32 :: Integer -> Int -> Double-encodeFloat32 mant expn = fromInteger mant * 2^^expn
+ lib/Data/FloatW.hs view
@@ -0,0 +1,223 @@+-- Copyright 2023 Lennart Augustsson+-- See LICENSE file for full license.+module Data.FloatW(FloatW) where+import Prelude()              -- do not import Prelude+import Primitives+import Control.Error+import Data.Bits+import Data.Bool+import Data.Char+import Data.Eq+import Data.Floating+import Data.Fractional+import Data.Function+import Data.Integer+import Data.List+import Data.Ord+import Data.Ratio+import Data.Real+import Data.RealFloat+import Data.RealFrac+import Data.Num+import Data.Word+import Text.Read+import Text.Read.Numeric+import Text.Show++--+-- This is a floating point type that is a wide as the word width of the machine.+--++instance Num FloatW where+  (+)  = primFloatWAdd+  (-)  = primFloatWSub+  (*)  = primFloatWMul+  negate = primFloatWNeg+  abs x = if x < 0.0 then - x else x+  signum x =+    case compare x 0.0 of+      LT -> -1.0+      EQ ->  0.0+      GT ->  1.0+  fromInteger = _integerToFloatW++instance Fractional FloatW where+  (/) = primFloatWDiv+  -- This version of fromRational can go horribly wrong+  -- if the integers are bigger than can be represented in a FloatW.+  -- It'll do for now.+  fromRational x | x == rationalNaN = 0/0+                 | x == rationalInfinity = 1/0+                 | x == -rationalInfinity = (-1)/0+                 | otherwise =+    fromInteger (numerator x) / fromInteger (denominator x)++instance Eq FloatW where+  (==) = primFloatWEQ+  (/=) = primFloatWNE++instance Ord FloatW where+  (<)  = primFloatWLT+  (<=) = primFloatWLE+  (>)  = primFloatWGT+  (>=) = primFloatWGE+  +-- For now, cheat and call C+instance Show FloatW where+  show = primFloatWShow++instance Read FloatW where+  readsPrec _ = readSigned $ \ r -> [ (primFloatWRead s, t) | (s@(c:_), t) <- lex r, isDigit c ]++instance Real FloatW where+  toRational x | isNaN x = rationalNaN+               | isInfinite x = if x < 0 then -rationalInfinity else rationalInfinity+               | otherwise =+    case decodeFloat x of+      (m, e) -> toRational m * 2^^e++instance RealFrac FloatW where+  properFraction _ = error "FloatW.properFraction not implemented"++instance Floating FloatW where+  pi     = 3.141592653589793+  log  x = primPerformIO (clog x)+  exp  x = primPerformIO (cexp x)+  sqrt x = primPerformIO (csqrt x)+  sin  x = primPerformIO (csin x)+  cos  x = primPerformIO (ccos x)+  tan  x = primPerformIO (ctan x)+  asin x = primPerformIO (casin x)+  acos x = primPerformIO (cacos x)+  atan x = primPerformIO (catan x)++foreign import ccall "log"  clog  :: FloatW -> IO FloatW+foreign import ccall "exp"  cexp  :: FloatW -> IO FloatW+foreign import ccall "sqrt" csqrt :: FloatW -> IO FloatW+foreign import ccall "sin"  csin  :: FloatW -> IO FloatW+foreign import ccall "cos"  ccos  :: FloatW -> IO FloatW+foreign import ccall "tan"  ctan  :: FloatW -> IO FloatW+foreign import ccall "asin" casin :: FloatW -> IO FloatW+foreign import ccall "acos" cacos :: FloatW -> IO FloatW+foreign import ccall "atan" catan :: FloatW -> IO FloatW+foreign import ccall "atan2" catan2 :: FloatW -> FloatW -> IO FloatW++-- Assumes 64 bit floats+instance RealFloat FloatW where+  floatRadix     _ = 2+  floatDigits    _ = flt 24 53+  floatRange     _ = flt (-125,128) (-1021,1024)+  decodeFloat      = flt decodeFloat32 decodeFloat64+  encodeFloat      = flt encodeFloat32 encodeFloat64+  isNaN            = flt isNaNFloat32 isNaNFloat64+  isInfinite       = flt isInfFloat32 isInfFloat64+  isDenormalized   = flt isDenFloat32 isDenFloat64+  isNegativeZero   = flt isNegZeroFloat32 isNegZeroFloat64+  isIEEE         _ = True+  atan2 x y        = primPerformIO (catan2 x y)++flt :: forall a . a -> a -> a+flt f d | _wordSize == 32 = f+        | otherwise       = d++decodeFloat64 :: FloatW -> (Integer, Int)+decodeFloat64 x =+  let xw   = primWordFromFloatWRaw x+      sign =  xw .&. 0x8000000000000000+      expn = (xw .&. 0x7fffffffffffffff) `shiftR` 52+      mant =  xw .&. 0x000fffffffffffff+      neg  = if sign /= 0 then negate else id+  in  if expn == 0 then+        -- subnormal or 0+        (neg (_wordToInteger mant), 0)+      else if expn == 0x7ff then+        -- infinity or NaN+        (0, 0)+      else+        -- ordinary number, add hidden bit+        -- mant is offset-1023, and assumes scaled mantissa (thus -52)+        (neg (_wordToInteger (mant .|. 0x0010000000000000)),+         primWordToInt expn - 1023 - 52)++isNaNFloat64 :: FloatW -> Bool+isNaNFloat64 x =+  let xw   = primWordFromFloatWRaw x+      expn = (xw .&. 0x7fffffffffffffff) `shiftR` 52+      mant =  xw .&. 0x000fffffffffffff+  in  expn == 0x7ff && mant /= 0++isInfFloat64 :: FloatW -> Bool+isInfFloat64 x =+  let xw   = primWordFromFloatWRaw x+      expn = (xw .&. 0x7fffffffffffffff) `shiftR` 52+      mant =  xw .&. 0x000fffffffffffff+  in  expn == 0x7ff && mant == 0++isDenFloat64 :: FloatW -> Bool+isDenFloat64 x =+  let xw   = primWordFromFloatWRaw x+      expn = (xw .&. 0x7fffffffffffffff) `shiftR` 52+      mant =  xw .&. 0x000fffffffffffff+  in  expn == 0 && mant /= 0++isNegZeroFloat64 :: FloatW -> Bool+isNegZeroFloat64 x =+  let xw   = primWordFromFloatWRaw x+      sign = xw .&. 0x8000000000000000+      rest = xw .&. 0x7fffffffffffffff+  in  sign /= 0 && rest == 0++-- Simple (and sometimes wrong) encoder+encodeFloat64 :: Integer -> Int -> FloatW+encodeFloat64 mant expn = fromInteger mant * 2^^expn++decodeFloat32 :: FloatW -> (Integer, Int)+decodeFloat32 x =+  let xw   = primWordFromFloatWRaw x+      sign =  xw .&. 0x80000000+      expn = (xw .&. 0x7fffffff) `shiftR` 23+      mant =  xw .&. 0x007fffff+      neg  = if sign /= 0 then negate else id+  in  if expn == 0 then+        -- subnormal or 0+        (neg (_wordToInteger mant), 0)+      else if expn == 0xff then+        -- infinity or NaN+        (0, 0)+      else+        -- ordinary number, add hidden bit+        -- mant is offset-1023, and assumes scaled mantissa (thus -52)+        (neg (_wordToInteger (mant .|. 0x00400000)),+         primWordToInt expn - 127 - 22)++isNaNFloat32 :: FloatW -> Bool+isNaNFloat32 x =+  let xw   = primWordFromFloatWRaw x+      expn = (xw .&. 0x7fffffff) `shiftR` 23+      mant =  xw .&. 0x007fffff+  in  expn == 0xff && mant /= 0++isInfFloat32 :: FloatW -> Bool+isInfFloat32 x =+  let xw   = primWordFromFloatWRaw x+      expn = (xw .&. 0x7fffffff) `shiftR` 23+      mant =  xw .&. 0x007fffff+  in  expn == 0x7ff && mant == 0++isDenFloat32 :: FloatW -> Bool+isDenFloat32 x =+  let xw   = primWordFromFloatWRaw x+      expn = (xw .&. 0x7fffffff) `shiftR` 23+      mant =  xw .&. 0x007fffff+  in  expn == 0 && mant /= 0++isNegZeroFloat32 :: FloatW -> Bool+isNegZeroFloat32 x =+  let xw   = primWordFromFloatWRaw x+      sign = xw .&. 0x80000000+      rest = xw .&. 0x7fffffff+  in  sign /= 0 && rest == 0++-- Simple (and sometimes wrong) encoder+encodeFloat32 :: Integer -> Int -> FloatW+encodeFloat32 mant expn = fromInteger mant * 2^^expn
+ lib/Data/Generics.hs view
@@ -0,0 +1,32 @@+module Data.Generics(+  ) where++type V1 :: forall (k::Kind) . k -> Type+data V1 p++type U1 :: forall (k::Kind) . k -> Type+data U1 p = U1++newtype Par1 p = Par1 p++type Rec1 :: forall (k::Kind) . (k -> Type) -> k -> Type+newtype Rec1 f p = Rec1 (f p)++type K1 :: forall (k::Kind) . Type -> Type -> k -> Type+newtype K1 i c p = K1 c++newtype M1 :: forall k . Type -> Type{-Meta-} -> (k -> Type) -> k -> Type+newtype M1 i c f p = M1 (f p)++infixr 5 :+:+type (:+:) :: forall k . (k -> Type) -> (k -> Type) -> k -> Type+data (:+:) f g p = L1 (f p) | R1 (g p)++infixr 6 :*:+type (:*:) :: forall k . (k -> Type) -> (k -> Type) -> k -> Type+data (:*:) f g p = f p :*: g p++infixr 7 :.:+type (:.:) :: forall k1 k2 . (k2 -> Type) -> (k1 -> k2) -> k1 -> Type+newtype (:.:) f g p = Comp1 (f (g p))+
lib/Data/Int.hs view
@@ -1,12 +1,13 @@ -- Copyright 2023 Lennart Augustsson -- See LICENSE file for full license.-module Data.Int(Int) where+module Data.Int(Int, Int8, Int16, Int32, Int64) where import Prelude()              -- do not import Prelude import Primitives import Data.Bool_Type import Data.Bounded import Data.Char_Type import Data.Eq+import Data.Int.IntN import Data.Integer_Type import Data.Integral import Data.List_Type@@ -41,8 +42,6 @@ instance Real Int where   toRational i = _integerToRational (_intToInteger i) ---------------------------------- instance Eq Int where   (==) = primIntEQ   (/=) = primIntNE@@ -53,8 +52,6 @@   (<=) = primIntLE   (>)  = primIntGT   (>=) = primIntGE----------------------------------  instance Show Int where   show = showInt_
+ lib/Data/Int/Instances.hs view
@@ -0,0 +1,369 @@+module Data.Int.Instances() where+import Prelude()+import Primitives+import Control.Error+import Data.Bits+import Data.Bool_Type+import Data.Bounded+import Data.Enum+import Data.Eq+import Data.Function+import Data.Int.IntN+import Data.Integer_Type+import Data.Integral+import Data.List+import Data.Num+import Data.Ord+import Data.Ratio_Type+import Data.Real+import Numeric+import Text.Read+import Text.Show++--------------------------------------------------------------------------------+----    Int8++-- Do sign extension by shifting.+i8 :: Int -> Int8+i8 w = I8 ((w `primIntShl` n) `primIntShr` n)+  where n = _wordSize `primIntSub` 8++bin8 :: (Int -> Int -> Int) -> (Int8 -> Int8 -> Int8)+bin8 op (I8 x) (I8 y) = i8 (x `op` y)++bini8 :: (Int -> Int -> Int) -> (Int8 -> Int -> Int8)+bini8 op (I8 x) y = i8 (x `op` y)++cmp8 :: (Int -> Int -> Bool) -> (Int8 -> Int8 -> Bool)+cmp8 op (I8 x) (I8 y) = x `op` y++una8 :: (Int -> Int) -> (Int8 -> Int8)+una8 op (I8 x) = i8 (op x)++instance Num Int8 where+  (+)  = bin8 primIntAdd+  (-)  = bin8 primIntSub+  (*)  = bin8 primIntMul+  abs x = x+  signum x = if x < 0 then -1 else if x > 0 then 1 else 0+  fromInteger i = i8 (_integerToInt i)++instance Integral Int8 where+  quot = bin8 primIntQuot+  rem  = bin8 primIntRem+  toInteger = _intToInteger . unI8++instance Bounded Int8 where+  minBound = I8 0x80+  maxBound = I8 0x7f++instance Real Int8 where+  toRational = _integerToRational . _intToInteger . unI8++instance Show Int8 where+  showsPrec = showIntegral++instance Read Int8 where+  readsPrec = readIntegral++instance Enum Int8 where+  succ x = x + 1+  pred x = x - 1+  toEnum = i8+  fromEnum = unI8+  enumFrom n = n : enumFrom (n+1)+  enumFromThen n m = from n+    where d = m - n+          from i = i : from (i+d)+  enumFromTo l h = takeWhile (<= h) (enumFrom l)+  enumFromThenTo l m h =+    if m > l then+      takeWhile (<= h) (enumFromThen l m)+    else+      takeWhile (>= h) (enumFromThen l m)++instance Eq Int8 where+  (==) = cmp8 primIntEQ+  (/=) = cmp8 primIntNE++instance Ord Int8 where+  (<)  = cmp8 primIntLT+  (<=) = cmp8 primIntLE+  (>)  = cmp8 primIntGT+  (>=) = cmp8 primIntGE++{-+instance Bits Int8 where+  (.&.) = bin8 primIntAnd+  (.|.) = bin8 primIntOr+  xor   = bin8 primIntXor+  complement = una8 primIntInv+  shiftL = bini8 primIntShl+  shiftR = bini8 primIntShr+  bitSizeMaybe _ = Just 8+  bitSize _ = 8+  bit n = i8 (primIntShl 1 n)+  zeroBits = 0+-}+++--------------------------------------------------------------------------------+----    Int16++-- Do sign extension by shifting.+i16 :: Int -> Int16+i16 w = I16 ((w `primIntShl` n) `primIntShr` n)+  where n = _wordSize `primIntSub` 16++bin16 :: (Int -> Int -> Int) -> (Int16 -> Int16 -> Int16)+bin16 op (I16 x) (I16 y) = i16 (x `op` y)++bini16 :: (Int -> Int -> Int) -> (Int16 -> Int -> Int16)+bini16 op (I16 x) y = i16 (x `op` y)++cmp16 :: (Int -> Int -> Bool) -> (Int16 -> Int16 -> Bool)+cmp16 op (I16 x) (I16 y) = x `op` y++una16 :: (Int -> Int) -> (Int16 -> Int16)+una16 op (I16 x) = i16 (op x)++instance Num Int16 where+  (+)  = bin16 primIntAdd+  (-)  = bin16 primIntSub+  (*)  = bin16 primIntMul+  abs x = x+  signum x = if x < 0 then -1 else if x > 0 then 1 else 0+  fromInteger i = i16 (_integerToInt i)++instance Integral Int16 where+  quot = bin16 primIntQuot+  rem  = bin16 primIntRem+  toInteger = _intToInteger . unI16++instance Bounded Int16 where+  minBound = I16 0x8000+  maxBound = I16 0x7fff++instance Real Int16 where+  toRational = _integerToRational . _intToInteger . unI16++instance Show Int16 where+  showsPrec = showIntegral++instance Read Int16 where+  readsPrec = readIntegral++instance Enum Int16 where+  succ x = x + 1+  pred x = x - 1+  toEnum = i16+  fromEnum = unI16+  enumFrom n = n : enumFrom (n+1)+  enumFromThen n m = from n+    where d = m - n+          from i = i : from (i+d)+  enumFromTo l h = takeWhile (<= h) (enumFrom l)+  enumFromThenTo l m h =+    if m > l then+      takeWhile (<= h) (enumFromThen l m)+    else+      takeWhile (>= h) (enumFromThen l m)++instance Eq Int16 where+  (==) = cmp16 primIntEQ+  (/=) = cmp16 primIntNE++instance Ord Int16 where+  (<)  = cmp16 primIntLT+  (<=) = cmp16 primIntLE+  (>)  = cmp16 primIntGT+  (>=) = cmp16 primIntGE++{-+instance Bits Int16 where+  (.&.) = bin16 primIntAnd+  (.|.) = bin16 primIntOr+  xor   = bin16 primIntXor+  complement = una16 primIntInv+  shiftL = bini16 primIntShl+  shiftR = bini16 primIntShr+  bitSizeMaybe _ = Just 16+  bitSize _ = 16+  bit n = i16 (primIntShl 1 n)+  zeroBits = 0+-}+++--------------------------------------------------------------------------------+----    Int32++-- Do sign extension by shifting.+i32 :: Int -> Int32+i32 w = if n == 0 then I32 w else I32 ((w `primIntShl` n) `primIntShr` n)+  where n = _wordSize `primIntSub` 32++bin32 :: (Int -> Int -> Int) -> (Int32 -> Int32 -> Int32)+bin32 op (I32 x) (I32 y) = i32 (x `op` y)++bini32 :: (Int -> Int -> Int) -> (Int32 -> Int -> Int32)+bini32 op (I32 x) y = i32 (x `op` y)++cmp32 :: (Int -> Int -> Bool) -> (Int32 -> Int32 -> Bool)+cmp32 op (I32 x) (I32 y) = x `op` y++una32 :: (Int -> Int) -> (Int32 -> Int32)+una32 op (I32 x) = i32 (op x)++instance Num Int32 where+  (+)  = bin32 primIntAdd+  (-)  = bin32 primIntSub+  (*)  = bin32 primIntMul+  abs x = x+  signum x = if x < 0 then -1 else if x > 0 then 1 else 0+  fromInteger i = i32 (_integerToInt i)++instance Integral Int32 where+  quot = bin32 primIntQuot+  rem  = bin32 primIntRem+  toInteger = _intToInteger . unI32++instance Bounded Int32 where+  minBound = I32 0x80000000+  maxBound = I32 0x7fffffff++instance Real Int32 where+  toRational = _integerToRational . _intToInteger . unI32++instance Show Int32 where+  showsPrec = showIntegral++instance Read Int32 where+  readsPrec = readIntegral++instance Enum Int32 where+  succ x = x + 1+  pred x = x - 1+  toEnum = i32+  fromEnum = unI32+  enumFrom n = n : enumFrom (n+1)+  enumFromThen n m = from n+    where d = m - n+          from i = i : from (i+d)+  enumFromTo l h = takeWhile (<= h) (enumFrom l)+  enumFromThenTo l m h =+    if m > l then+      takeWhile (<= h) (enumFromThen l m)+    else+      takeWhile (>= h) (enumFromThen l m)++instance Eq Int32 where+  (==) = cmp32 primIntEQ+  (/=) = cmp32 primIntNE++instance Ord Int32 where+  (<)  = cmp32 primIntLT+  (<=) = cmp32 primIntLE+  (>)  = cmp32 primIntGT+  (>=) = cmp32 primIntGE++{-+instance Bits Int32 where+  (.&.) = bin32 primIntAnd+  (.|.) = bin32 primIntOr+  xor   = bin32 primIntXor+  complement = una32 primIntInv+  shiftL = bini32 primIntShl+  shiftR = bini32 primIntShr+  bitSizeMaybe _ = Just 32+  bitSize _ = 32+  bit n = i32 (primIntShl 1 n)+  zeroBits = 0+-}++--------------------------------------------------------------------------------+----    Int64++-- Do sign extension by shifting.+i64 :: Int -> Int64+i64 w = if _wordSize == 64 then I64 w else error "No Int64"++bin64 :: (Int -> Int -> Int) -> (Int64 -> Int64 -> Int64)+bin64 op (I64 x) (I64 y) = i64 (x `op` y)++bini64 :: (Int -> Int -> Int) -> (Int64 -> Int -> Int64)+bini64 op (I64 x) y = i64 (x `op` y)++cmp64 :: (Int -> Int -> Bool) -> (Int64 -> Int64 -> Bool)+cmp64 op (I64 x) (I64 y) = x `op` y++una64 :: (Int -> Int) -> (Int64 -> Int64)+una64 op (I64 x) = i64 (op x)++instance Num Int64 where+  (+)  = bin64 primIntAdd+  (-)  = bin64 primIntSub+  (*)  = bin64 primIntMul+  abs x = x+  signum x = if x < 0 then -1 else if x > 0 then 1 else 0+  fromInteger i = i64 (_integerToInt i)++instance Integral Int64 where+  quot = bin64 primIntQuot+  rem  = bin64 primIntRem+  toInteger = _intToInteger . unI64++instance Bounded Int64 where+  minBound = I64 0x8000000000000000+  maxBound = I64 0x7fffffffffffffff++instance Real Int64 where+  toRational = _integerToRational . _intToInteger . unI64++instance Show Int64 where+  showsPrec = showIntegral++instance Read Int64 where+  readsPrec = readIntegral++instance Enum Int64 where+  succ x = x + 1+  pred x = x - 1+  toEnum = i64+  fromEnum = unI64+  enumFrom n = n : enumFrom (n+1)+  enumFromThen n m = from n+    where d = m - n+          from i = i : from (i+d)+  enumFromTo l h = takeWhile (<= h) (enumFrom l)+  enumFromThenTo l m h =+    if m > l then+      takeWhile (<= h) (enumFromThen l m)+    else+      takeWhile (>= h) (enumFromThen l m)++instance Eq Int64 where+  (==) = cmp64 primIntEQ+  (/=) = cmp64 primIntNE++instance Ord Int64 where+  (<)  = cmp64 primIntLT+  (<=) = cmp64 primIntLE+  (>)  = cmp64 primIntGT+  (>=) = cmp64 primIntGE++{-+instance Bits Int64 where+  (.&.) = bin64 primIntAnd+  (.|.) = bin64 primIntOr+  xor   = bin64 primIntXor+  complement = una64 primIntInv+  shiftL = bini64 primIntShl+  shiftR = bini64 primIntShr+  bitSizeMaybe _ = Just 64+  bitSize _ = 64+  bit n = i64 (primIntShl 1 n)+  zeroBits = 0+-}+++
+ lib/Data/Int/IntN.hs view
@@ -0,0 +1,24 @@+-- Copyright 2024 Lennart Augustsson+-- See LICENSE file for full license.+module Data.Int.IntN(module Data.Int.IntN) where+import Prelude()              -- do not import Prelude+import Primitives++-- Just the types for sized Int.+-- The types are exported in Data.Int, instances are in Data.Int.Instances++newtype Int8 = I8 Int+unI8 :: Int8 -> Int+unI8 (I8 x) = x++newtype Int16 = I16 Int+unI16 :: Int16 -> Int+unI16 (I16 x) = x++newtype Int32 = I32 Int+unI32 :: Int32 -> Int+unI32 (I32 x) = x++newtype Int64 = I64 Int+unI64 :: Int64 -> Int+unI64 (I64 x) = x
lib/Data/Integer.hs view
@@ -6,7 +6,7 @@   _integerToInt,   _wordToInteger,   _integerToWord,-  _integerToDouble,+  _integerToFloatW,   _integerToRational,   _integerToIntList,   _intListToInteger,
lib/Data/Integer_Type.hs view
@@ -55,12 +55,12 @@ _integerToWord :: Integer -> Word _integerToWord x = primIntToWord (_integerToInt x) -_integerToDouble :: Integer -> Double-_integerToDouble (I sign ds) = s `primDoubleMul` loop ds+_integerToFloatW :: Integer -> FloatW+_integerToFloatW (I sign ds) = s `primFloatWMul` loop ds   where-    loop [] = 0.0::Double-    loop (i : is) = primDoubleFromInt i `primDoubleAdd` (primDoubleFromInt maxD `primDoubleMul` loop is)+    loop [] = 0.0::FloatW+    loop (i : is) = primFloatWFromInt i `primFloatWAdd` (primFloatWFromInt maxD `primFloatWMul` loop is)     s =       case sign of-        Plus  -> 1.0::Double-        Minus -> 0.0 `primDoubleSub` 1.0+        Plus  -> 1.0::FloatW+        Minus -> 0.0 `primFloatWSub` 1.0
+ lib/Data/Ix.hs view
@@ -0,0 +1,113 @@+module Data.Ix(Ix(..)) where+import Prelude()+import Control.Error+import Data.Bool+import Data.Char+import Data.Enum+import Data.Int+import Data.Integer+import Data.Integral+import Data.List+import Data.Num+import Data.Ord+import Data.Tuple+import Data.Word++class Ord a => Ix a where+  range :: (a, a) -> [a]+  index :: (a, a) -> a -> Int+  inRange :: (a, a) -> a -> Bool+  rangeSize :: (a, a) -> Int+  unsafeIndex :: (a, a) -> a -> Int+  unsafeRangeSize :: (a, a) -> Int++  index b i | inRange b i = unsafeIndex b i+            | otherwise   = error "Ix.index: out of bound"++  rangeSize b@(_l,h) | inRange b h = unsafeIndex b h + 1+                     | otherwise   = 0++  unsafeRangeSize b@(_l,h) = unsafeIndex b h + 1++instance Ix Int where+  range (m,n) = [m..n]+  unsafeIndex (m,_n) i = i - m+  inRange (m, n) i = m <= i && i <= n++instance Ix Integer where+  range (m,n) = [m..n]+  unsafeIndex (m,_n) i = fromInteger (i - m)+  inRange (m, n) i = m <= i && i <= n++instance Ix Word where+  range (m,n) = [m..n]+  unsafeIndex (m,_n) i = fromIntegral (i - m)+  inRange (m, n) i = m <= i && i <= n++instance Ix Word8 where+  range (m,n) = [m..n]+  unsafeIndex (m,_n) i = fromIntegral (i - m)+  inRange (m, n) i = m <= i && i <= n++instance Ix Bool where+  range (m,n) = [m..n]+  unsafeIndex (m,_n) i = fromEnum i - fromEnum m+  inRange (m, n) i = m <= i && i <= n++instance Ix Char where+  range (m,n) = [m..n]+  unsafeIndex (m,_n) i = fromEnum i - fromEnum m+  inRange (m, n) i = m <= i && i <= n++instance Ix () where+  range ((),()) = [()]+  unsafeIndex ((),_n) () = 0+  inRange ((), ()) () = True++instance Ix a => Ix (Solo a) where -- as derived+  range (MkSolo l, MkSolo u) =+    [ MkSolo i | i <- range (l,u) ]+  unsafeIndex (MkSolo l, MkSolo u) (MkSolo i) =+    unsafeIndex (l,u) i+  inRange (MkSolo l, MkSolo u) (MkSolo i) =+    inRange (l, u) i++instance (Ix a, Ix b) => Ix (a, b) where -- as derived+  range ((l1,l2),(u1,u2)) =+    [ (i1,i2) | i1 <- range (l1,u1), i2 <- range (l2,u2) ]+  unsafeIndex ((l1,l2),(u1,u2)) (i1,i2) =+    unsafeIndex (l1,u1) i1 * unsafeRangeSize (l2,u2) + unsafeIndex (l2,u2) i2+  inRange ((l1,l2),(u1,u2)) (i1,i2) =+    inRange (l1,u1) i1 && inRange (l2,u2) i2++instance (Ix a1, Ix a2, Ix a3) => Ix (a1,a2,a3)  where+  range ((l1,l2,l3),(u1,u2,u3)) =+    [(i1,i2,i3) | i1 <- range (l1,u1),+                  i2 <- range (l2,u2),+                  i3 <- range (l3,u3)]++  unsafeIndex ((l1,l2,l3),(u1,u2,u3)) (i1,i2,i3) =+    unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * (+    unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * (+    unsafeIndex (l1,u1) i1))++  inRange ((l1,l2,l3),(u1,u2,u3)) (i1,i2,i3) =+    inRange (l1,u1) i1 && inRange (l2,u2) i2 &&+    inRange (l3,u3) i3++instance (Ix a1, Ix a2, Ix a3, Ix a4) => Ix (a1,a2,a3,a4)  where+  range ((l1,l2,l3,l4),(u1,u2,u3,u4)) =+    [(i1,i2,i3,i4) | i1 <- range (l1,u1),+                     i2 <- range (l2,u2),+                     i3 <- range (l3,u3),+                     i4 <- range (l4,u4)]++  unsafeIndex ((l1,l2,l3,l4),(u1,u2,u3,u4)) (i1,i2,i3,i4) =+    unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * (+    unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * (+    unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * (+    unsafeIndex (l1,u1) i1)))++  inRange ((l1,l2,l3,l4),(u1,u2,u3,u4)) (i1,i2,i3,i4) =+    inRange (l1,u1) i1 && inRange (l2,u2) i2 &&+    inRange (l3,u3) i3 && inRange (l4,u4) i4
lib/Data/List.hs view
@@ -321,7 +321,7 @@ intersect = intersectBy (==)  intersectBy :: forall a . (a -> a -> Bool) -> [a] -> [a] -> [a]-intersectBy eq xs ys = filter (\ x -> not (elemBy eq x ys)) xs+intersectBy eq xs ys = filter (\ x -> elemBy eq x ys) xs  deleteBy :: forall a . (a -> a -> Bool) -> a -> [a] -> [a] deleteBy _ _ [] = []@@ -408,3 +408,11 @@ substString _ _ [] = [] substString from to xs@(c:cs) | Just rs <- stripPrefix from xs = to ++ substString from to rs                               | otherwise = c : substString from to cs++group :: Eq a => [a] -> [[a]]+group = groupBy (==)++groupBy :: (a -> a -> Bool) -> [a] -> [[a]]+groupBy _  []     =  []+groupBy eq (x:xs) =  (x:ys) : groupBy eq zs+  where (ys,zs) = span (eq x) xs
lib/Data/Maybe.hs view
@@ -51,15 +51,20 @@ instance MonadFail Maybe where   fail _ = Nothing +instance MonadPlus Maybe where+  mzero = Nothing+  Nothing `mplus` y = y+  x       `mplus` _ = x+ instance Alternative Maybe where   empty = Nothing   Nothing <|> y = y   x       <|> _ = x  instance forall a . Semigroup a => Semigroup (Maybe a) where-    Nothing <> b       = b-    a       <> Nothing = a-    Just a  <> Just b  = Just (a <> b)+  Nothing <> b       = b+  a       <> Nothing = a+  Just a  <> Just b  = Just (a <> b)  instance forall a . Semigroup a => Monoid (Maybe a) where   mempty = Nothing@@ -78,6 +83,10 @@ isJust :: forall a . Maybe a -> Bool isJust Nothing = False isJust (Just _) = True++isNothing :: forall a . Maybe a -> Bool+isNothing Nothing = True+isNothing (Just _) = False  mapMaybe :: forall a b . (a -> Maybe b) -> [a] -> [b] mapMaybe _ [] = []
+ lib/Data/String.hs view
@@ -0,0 +1,40 @@+module Data.String(+  IsString(..),+  String,+  lines, unlines,+  words, unwords,+  ) where+import Prelude()+import Data.Bool+import Data.Char+import Data.Eq+import Data.Function+import Data.List++class IsString a where+  fromString :: String -> a++instance IsString String where+  fromString s = s++lines :: String -> [String]+lines "" = []+lines s =+  case span (not . (== '\n')) s of+    (l, s') ->+      case s' of+        [] -> [l]+        _:s'' -> l : lines s''++unlines :: [String] -> String+unlines = concatMap (++ "\n")++words :: String -> [String]+words s =+  case dropWhile isSpace s of+    "" -> []+    s' -> w : words s''+      where (w, s'') = span (not . isSpace) s'++unwords :: [String] -> String+unwords ss = intercalate " " ss
+ lib/Data/Time/Clock.hs view
@@ -0,0 +1,17 @@+-- A hack to be able to compile cpphs.+-- We need a proper package for this.+module Data.Time.Clock(+  UTCTime(..),+  getCurrentTime,+  ) where+import Prelude+import System.IO++-- Second since 1970, probably+newtype UTCTime = UTCTime Int+  deriving (Show)++getCurrentTime :: IO UTCTime+getCurrentTime = do+  t <- getTimeMilli+  return $ UTCTime $ t `quot` 1000
+ lib/Data/Time/Format.hs view
@@ -0,0 +1,7 @@+module Data.Time.Format(module Data.Time.Format) where+import Data.Time.Clock++data TimeLocale++formatTime :: TimeLocale -> String -> UTCTime -> String+formatTime _ _ (UTCTime t) = show t ++ "s"
lib/Data/Tuple.hs view
@@ -20,8 +20,8 @@ --data (a,b,c) = (a,b,c) -- etc -data Solo a = Solo a-  deriving (Eq)+data Solo a = MkSolo a+  deriving (Eq, Ord)  fst :: forall a b . (a, b) -> a fst (a, _) = a@@ -63,7 +63,7 @@   showsPrec _ () = showString "()"  instance forall a . Show a => Show (Solo a) where-  showsPrec p (Solo a) = showParen (p > 10) (showString "Solo " . showsPrec 11 a)+  showsPrec p (MkSolo a) = showParen (p > 10) (showString "MkSolo " . showsPrec 11 a)  instance forall a b . (Show a, Show b) => Show (a, b) where   showsPrec _ (a, b) = showParen True (showsPrec 0 a . showString "," . showsPrec 0 b)@@ -82,8 +82,8 @@   maxBound = ()  instance forall a . (Bounded a) => Bounded (Solo a) where-  minBound = Solo minBound-  maxBound = Solo maxBound+  minBound = MkSolo minBound+  maxBound = MkSolo maxBound  instance forall a b . (Bounded a, Bounded b) => Bounded (a, b) where   minBound = (minBound, minBound)@@ -103,7 +103,7 @@   _ <> _ = ()  instance forall a . Semigroup a => Semigroup (Solo a) where-  Solo a <> Solo b = Solo (a <> b)+  MkSolo a <> MkSolo b = MkSolo (a <> b)  instance forall a b . (Semigroup a, Semigroup b) => Semigroup (a, b) where   (a, b) <> (a', b') = (a <> a', b <> b')@@ -120,7 +120,7 @@   mempty = ()  instance forall a . Monoid a => Monoid (Solo a) where-  mempty = Solo mempty+  mempty = MkSolo mempty  instance forall a b . (Monoid a, Monoid b) => Monoid (a, b) where   mempty = (mempty, mempty)
lib/Data/Typeable.hs view
@@ -29,7 +29,7 @@ import Data.STRef import Data.Type.Equality import Data.Void-import Data.Word8+import Data.Word import System.IO.MD5 import Unsafe.Coerce 
+ lib/Data/Version.hs view
@@ -0,0 +1,19 @@+module Data.Version(+  Version(..),+  showVersion,+  makeVersion+  ) where++data Version = Version { versionBranch :: [Int] }+  deriving (Show, Eq, Ord)++showVersion :: Version -> String+showVersion (Version b) = intercalate "." (map show b)++{-+parseVersion :: ReadP Version+parseVersion = do branch <- sepBy1 (fmap read (munch1 isDigit)) (char '.')+                  pure Version{versionBranch=branch}+-}+makeVersion :: [Int] -> Version+makeVersion b = Version b
lib/Data/Word.hs view
@@ -1,14 +1,16 @@ -- Copyright 2023,2024 Lennart Augustsson -- See LICENSE file for full license.-module Data.Word(Word) where+module Data.Word(Word, Word8, Word16, Word32, Word64) where import Prelude()              -- do not import Prelude import Primitives+import Control.Error import Data.Bits import Data.Bool_Type import Data.Bounded import Data.Char import Data.Enum import Data.Eq+import Data.Function import Data.Int()  -- instances only import Data.Integer import Data.Integral@@ -89,4 +91,348 @@   bitSizeMaybe _ = Just _wordSize   bitSize _ = _wordSize   bit n = primWordShl 1 n+  zeroBits = 0++--------------------------------------------------------------------------------+----    Word8++newtype Word8 = W8 Word+unW8 :: Word8 -> Word+unW8 (W8 x) = x++w8 :: Word -> Word8+w8 w = W8 (w .&. 0xff)++bin8 :: (Word -> Word -> Word) -> (Word8 -> Word8 -> Word8)+bin8 op (W8 x) (W8 y) = w8 (x `op` y)++bini8 :: (Word -> Int -> Word) -> (Word8 -> Int -> Word8)+bini8 op (W8 x) y = w8 (x `op` y)++cmp8 :: (Word -> Word -> Bool) -> (Word8 -> Word8 -> Bool)+cmp8 op (W8 x) (W8 y) = x `op` y++una8 :: (Word -> Word) -> (Word8 -> Word8)+una8 op (W8 x) = w8 (op x)++instance Num Word8 where+  (+)  = bin8 primWordAdd+  (-)  = bin8 primWordSub+  (*)  = bin8 primWordMul+  abs x = x+  signum x = if x == 0 then 0 else 1+  fromInteger i = w8 (primIntToWord (_integerToInt i))++instance Integral Word8 where+  quot = bin8 primWordQuot+  rem  = bin8 primWordRem+  toInteger = _wordToInteger . unW8++instance Bounded Word8 where+  minBound = W8 0+  maxBound = W8 0xff++instance Real Word8 where+  toRational = _integerToRational . _wordToInteger . unW8++instance Show Word8 where+  showsPrec = showIntegral++instance Read Word8 where+  readsPrec = readIntegral++instance Enum Word8 where+  succ x = x + 1+  pred x = x - 1+  toEnum = w8 . primIntToWord+  fromEnum = primWordToInt . unW8+  enumFrom n = n : enumFrom (n+1)+  enumFromThen n m = from n+    where d = m - n+          from i = i : from (i+d)+  enumFromTo l h = takeWhile (<= h) (enumFrom l)+  enumFromThenTo l m h =+    if m > l then+      takeWhile (<= h) (enumFromThen l m)+    else+      takeWhile (>= h) (enumFromThen l m)++instance Eq Word8 where+  (==) = cmp8 primWordEQ+  (/=) = cmp8 primWordNE++instance Ord Word8 where+  (<)  = cmp8 primWordLT+  (<=) = cmp8 primWordLE+  (>)  = cmp8 primWordGT+  (>=) = cmp8 primWordGE++instance Bits Word8 where+  (.&.) = bin8 primWordAnd+  (.|.) = bin8 primWordOr+  xor   = bin8 primWordXor+  complement = una8 primWordInv+  shiftL = bini8 primWordShl+  shiftR = bini8 primWordShr+  bitSizeMaybe _ = Just 8+  bitSize _ = 8+  bit n = w8 (primWordShl 1 n)+  zeroBits = 0++--------------------------------------------------------------------------------+----    Word16++newtype Word16 = W16 Word+unW16 :: Word16 -> Word+unW16 (W16 x) = x++w16 :: Word -> Word16+w16 w = W16 (w .&. 0xffff)++bin16 :: (Word -> Word -> Word) -> (Word16 -> Word16 -> Word16)+bin16 op (W16 x) (W16 y) = w16 (x `op` y)++bini16 :: (Word -> Int -> Word) -> (Word16 -> Int -> Word16)+bini16 op (W16 x) y = w16 (x `op` y)++cmp16 :: (Word -> Word -> Bool) -> (Word16 -> Word16 -> Bool)+cmp16 op (W16 x) (W16 y) = x `op` y++una16 :: (Word -> Word) -> (Word16 -> Word16)+una16 op (W16 x) = w16 (op x)++instance Num Word16 where+  (+)  = bin16 primWordAdd+  (-)  = bin16 primWordSub+  (*)  = bin16 primWordMul+  abs x = x+  signum x = if x == 0 then 0 else 1+  fromInteger i = w16 (primIntToWord (_integerToInt i))++instance Integral Word16 where+  quot = bin16 primWordQuot+  rem  = bin16 primWordRem+  toInteger = _wordToInteger . unW16++instance Bounded Word16 where+  minBound = W16 0+  maxBound = W16 0xffff++instance Real Word16 where+  toRational = _integerToRational . _wordToInteger . unW16++instance Show Word16 where+  showsPrec = showIntegral++instance Read Word16 where+  readsPrec = readIntegral++instance Enum Word16 where+  succ x = x + 1+  pred x = x - 1+  toEnum = w16 . primIntToWord+  fromEnum = primWordToInt . unW16+  enumFrom n = n : enumFrom (n+1)+  enumFromThen n m = from n+    where d = m - n+          from i = i : from (i+d)+  enumFromTo l h = takeWhile (<= h) (enumFrom l)+  enumFromThenTo l m h =+    if m > l then+      takeWhile (<= h) (enumFromThen l m)+    else+      takeWhile (>= h) (enumFromThen l m)++instance Eq Word16 where+  (==) = cmp16 primWordEQ+  (/=) = cmp16 primWordNE++instance Ord Word16 where+  (<)  = cmp16 primWordLT+  (<=) = cmp16 primWordLE+  (>)  = cmp16 primWordGT+  (>=) = cmp16 primWordGE++instance Bits Word16 where+  (.&.) = bin16 primWordAnd+  (.|.) = bin16 primWordOr+  xor   = bin16 primWordXor+  complement = una16 primWordInv+  shiftL = bini16 primWordShl+  shiftR = bini16 primWordShr+  bitSizeMaybe _ = Just 16+  bitSize _ = 16+  bit n = w16 (primWordShl 1 n)+  zeroBits = 0++--------------------------------------------------------------------------------+----    Word32++newtype Word32 = W32 Word+unW32 :: Word32 -> Word+unW32 (W32 x) = x++w32 :: Word -> Word32+w32 w = if _wordSize == 32 then W32 w else W32 (w .&. 0xffffffff)++bin32 :: (Word -> Word -> Word) -> (Word32 -> Word32 -> Word32)+bin32 op (W32 x) (W32 y) = w32 (x `op` y)++bini32 :: (Word -> Int -> Word) -> (Word32 -> Int -> Word32)+bini32 op (W32 x) y = w32 (x `op` y)++cmp32 :: (Word -> Word -> Bool) -> (Word32 -> Word32 -> Bool)+cmp32 op (W32 x) (W32 y) = x `op` y++una32 :: (Word -> Word) -> (Word32 -> Word32)+una32 op (W32 x) = w32 (op x)++instance Num Word32 where+  (+)  = bin32 primWordAdd+  (-)  = bin32 primWordSub+  (*)  = bin32 primWordMul+  abs x = x+  signum x = if x == 0 then 0 else 1+  fromInteger i = w32 (primIntToWord (_integerToInt i))++instance Integral Word32 where+  quot = bin32 primWordQuot+  rem  = bin32 primWordRem+  toInteger = _wordToInteger . unW32++instance Bounded Word32 where+  minBound = W32 0+  maxBound = W32 0xffffffff++instance Real Word32 where+  toRational = _integerToRational . _wordToInteger . unW32++instance Show Word32 where+  showsPrec = showIntegral++instance Read Word32 where+  readsPrec = readIntegral++instance Enum Word32 where+  succ x = x + 1+  pred x = x - 1+  toEnum = w32 . primIntToWord+  fromEnum = primWordToInt . unW32+  enumFrom n = n : enumFrom (n+1)+  enumFromThen n m = from n+    where d = m - n+          from i = i : from (i+d)+  enumFromTo l h = takeWhile (<= h) (enumFrom l)+  enumFromThenTo l m h =+    if m > l then+      takeWhile (<= h) (enumFromThen l m)+    else+      takeWhile (>= h) (enumFromThen l m)++instance Eq Word32 where+  (==) = cmp32 primWordEQ+  (/=) = cmp32 primWordNE++instance Ord Word32 where+  (<)  = cmp32 primWordLT+  (<=) = cmp32 primWordLE+  (>)  = cmp32 primWordGT+  (>=) = cmp32 primWordGE++instance Bits Word32 where+  (.&.) = bin32 primWordAnd+  (.|.) = bin32 primWordOr+  xor   = bin32 primWordXor+  complement = una32 primWordInv+  shiftL = bini32 primWordShl+  shiftR = bini32 primWordShr+  bitSizeMaybe _ = Just 32+  bitSize _ = 32+  bit n = w32 (primWordShl 1 n)+  zeroBits = 0++--------------------------------------------------------------------------------+----    Word64++newtype Word64 = W64 Word+unW64 :: Word64 -> Word+unW64 (W64 x) = x++w64 :: Word -> Word64+w64 w = if _wordSize == 64 then W64 w else error "No Word64"++bin64 :: (Word -> Word -> Word) -> (Word64 -> Word64 -> Word64)+bin64 op (W64 x) (W64 y) = w64 (x `op` y)++bini64 :: (Word -> Int -> Word) -> (Word64 -> Int -> Word64)+bini64 op (W64 x) y = w64 (x `op` y)++cmp64 :: (Word -> Word -> Bool) -> (Word64 -> Word64 -> Bool)+cmp64 op (W64 x) (W64 y) = x `op` y++una64 :: (Word -> Word) -> (Word64 -> Word64)+una64 op (W64 x) = w64 (op x)++instance Num Word64 where+  (+)  = bin64 primWordAdd+  (-)  = bin64 primWordSub+  (*)  = bin64 primWordMul+  abs x = x+  signum x = if x == 0 then 0 else 1+  fromInteger i = w64 (primIntToWord (_integerToInt i))++instance Integral Word64 where+  quot = bin64 primWordQuot+  rem  = bin64 primWordRem+  toInteger = _wordToInteger . unW64++instance Bounded Word64 where+  minBound = W64 0+  maxBound = W64 0xffffffffffffffff++instance Real Word64 where+  toRational = _integerToRational . _wordToInteger . unW64++instance Show Word64 where+  showsPrec = showIntegral++instance Read Word64 where+  readsPrec = readIntegral++instance Enum Word64 where+  succ x = x + 1+  pred x = x - 1+  toEnum = w64 . primIntToWord+  fromEnum = primWordToInt . unW64+  enumFrom n = n : enumFrom (n+1)+  enumFromThen n m = from n+    where d = m - n+          from i = i : from (i+d)+  enumFromTo l h = takeWhile (<= h) (enumFrom l)+  enumFromThenTo l m h =+    if m > l then+      takeWhile (<= h) (enumFromThen l m)+    else+      takeWhile (>= h) (enumFromThen l m)++instance Eq Word64 where+  (==) = cmp64 primWordEQ+  (/=) = cmp64 primWordNE++instance Ord Word64 where+  (<)  = cmp64 primWordLT+  (<=) = cmp64 primWordLE+  (>)  = cmp64 primWordGT+  (>=) = cmp64 primWordGE++instance Bits Word64 where+  (.&.) = bin64 primWordAnd+  (.|.) = bin64 primWordOr+  xor   = bin64 primWordXor+  complement = una64 primWordInv+  shiftL = bini64 primWordShl+  shiftR = bini64 primWordShr+  bitSizeMaybe _ = Just 64+  bitSize _ = 64+  bit n = w64 (primWordShl 1 n)   zeroBits = 0
− lib/Data/Word8.hs
@@ -1,113 +0,0 @@--- Copyright 2023,2024 Lennart Augustsson--- See LICENSE file for full license.-module Data.Word8(Word8) where-import Prelude()              -- do not import Prelude-import Primitives-import Data.Bits-import Data.Bool_Type-import Data.Bounded-import Data.Char-import Data.Enum-import Data.Eq-import Data.Function-import Data.Int()  -- instances only-import Data.Integer-import Data.Integral-import Data.List-import Data.Maybe_Type-import Data.Num-import Data.Ord-import Data.Real-import Data.Word-import Numeric-import Text.Read-import Text.Show--newtype Word8 = W8 Word-unW8 :: Word8 -> Word-unW8 (W8 x) = x--w8 :: Word -> Word8-w8 w = W8 (w .&. 0xff)--bin8 :: (Word -> Word -> Word) -> (Word8 -> Word8 -> Word8)-bin8 op (W8 x) (W8 y) = w8 (x `op` y)--bini8 :: (Word -> Int -> Word) -> (Word8 -> Int -> Word8)-bini8 op (W8 x) y = w8 (x `op` y)--cmp8 :: (Word -> Word -> Bool) -> (Word8 -> Word8 -> Bool)-cmp8 op (W8 x) (W8 y) = x `op` y--una8 :: (Word -> Word) -> (Word8 -> Word8)-una8 op (W8 x) = w8 (op x)--instance Num Word8 where-  (+)  = bin8 primWordAdd-  (-)  = bin8 primWordSub-  (*)  = bin8 primWordMul-  abs x = x-  signum x = if x == 0 then 0 else 1-  fromInteger i = w8 (primIntToWord (_integerToInt i))--instance Integral Word8 where-  quot = bin8 primWordQuot-  rem  = bin8 primWordRem-  toInteger = _wordToInteger . unW8--instance Bounded Word8 where-  minBound = W8 0-  maxBound = W8 0xff--instance Real Word8 where-  toRational = _integerToRational . _wordToInteger . unW8--instance Show Word where-  showsPrec = showIntegral--instance Read Word where-  readsPrec = readIntegral------------------------------------instance Enum Word8 where-  succ x = x + 1-  pred x = x - 1-  toEnum = w8 . primIntToWord-  fromEnum = primWordToInt . unW8-  enumFrom n = n : enumFrom (n+1)-  enumFromThen n m = from n-    where d = m - n-          from i = i : from (i+d)-  enumFromTo l h = takeWhile (<= h) (enumFrom l)-  enumFromThenTo l m h =-    if m > l then-      takeWhile (<= h) (enumFromThen l m)-    else-      takeWhile (>= h) (enumFromThen l m)------------------------------------instance Eq Word8 where-  (==) = cmp8 primWordEQ-  (/=) = cmp8 primWordNE--instance Ord Word8 where-  (<)  = cmp8 primWordLT-  (<=) = cmp8 primWordLE-  (>)  = cmp8 primWordGT-  (>=) = cmp8 primWordGE------------------------------------instance Bits Word8 where-  (.&.) = bin8 primWordAnd-  (.|.) = bin8 primWordOr-  xor   = bin8 primWordXor-  complement = una8 primWordInv-  shiftL = bini8 primWordShl-  shiftR = bini8 primWordShr-  bitSizeMaybe _ = Just 8-  bitSize _ = 8-  bit n = w8 (primWordShl 1 n)-  zeroBits = 0
+ lib/Foreign/C/Types.hs view
@@ -0,0 +1,46 @@+-- Types used for C FFI.+module Foreign.C.Types(+ CChar(..),  CSChar(..),  CUChar(..),+ CShort(..), CUShort(..),+ CInt(..),   CUInt(..),+ CLong(..),  CULong(..),+ CPtrdiff(..),+ CSize(..),  CSSize(..),+ CLLong(..), CULLong(..),+ CIntPtr(..), CUIntPtr(..),+ CFloat(..), CDouble(..),+ intToCSize, cSizeToInt,+ ) where+import Prelude()+import Primitives+import Data.Word++-- The MicroHs Word type is the "natural" architecture word size;+-- it is the same as the pointer difference type.+-- And Int is the natural signed word size.+newtype CChar    = CChar    Char+newtype CSChar   = CSChar   Int+newtype CUChar   = CUChar   Word+newtype CShort   = CShort   Int+newtype CUShort  = CUShort  Word+newtype CInt     = CInt     Int+newtype CUInt    = CUInt    Word+newtype CLong    = CLong    Int+newtype CULong   = CULong   Word+newtype CPtrdiff = CPtrdiff Word+newtype CSize    = CSize    Word+newtype CSSize   = CSSize   Int+newtype CLLong   = CLLong   Int+newtype CULLong  = CULLong  Word+newtype CIntPtr  = CIntPtr  Int+newtype CUIntPtr = CUIntPtr Word++newtype CFloat   = CFloat   FloatW+newtype CDouble  = CDouble  FloatW++-- Temporary conversion functions.+intToCSize :: Int -> CSize+intToCSize i = CSize (primIntToWord i)++cSizeToInt :: CSize -> Int+cSizeToInt (CSize i) = primWordToInt i
lib/Foreign/Marshal/Alloc.hs view
@@ -6,22 +6,24 @@ import Prelude()              -- do not import Prelude import Primitives import Control.Error(undefined)+import Foreign.C.Types+import Foreign.Ptr import Foreign.Storable -foreign import ccall "free" c_free :: forall a . Ptr a -> IO ()+foreign import ccall "free" c_free :: Ptr () -> IO ()  free :: forall a . Ptr a -> IO ()-free = c_free+free p = c_free (castPtr p) -foreign import ccall "malloc" c_malloc :: forall a . Int -> IO (Ptr a)+foreign import ccall "malloc" c_malloc :: CSize -> IO (Ptr ())  mallocBytes :: forall a . Int -> IO (Ptr a)-mallocBytes = c_malloc+mallocBytes n = c_malloc (intToCSize n) `primBind` \ p -> primReturn (castPtr p) -foreign import ccall "calloc" c_calloc :: forall a . Int -> Int -> IO (Ptr a)+foreign import ccall "calloc" c_calloc :: CSize -> CSize -> IO (Ptr ())  callocBytes :: forall a . Int -> IO (Ptr a)-callocBytes = c_calloc (1::Int)+callocBytes n = c_calloc (intToCSize (1::Int)) (intToCSize n) `primBind` \ p -> primReturn (castPtr p)  malloc :: forall a . Storable a => IO (Ptr a) malloc  = mallocBytes (sizeOf (undefined :: a))
lib/Foreign/Marshal/Utils.hs view
@@ -1,6 +1,7 @@ module Foreign.Marshal.Utils(module Foreign.Marshal.Utils) where import Prelude import Foreign.Marshal.Alloc+import Foreign.C.Types import Foreign.Ptr import Foreign.Storable @@ -47,11 +48,11 @@   wth x $ \ x' ->     withMany wth xs (\ xs' -> f (x' : xs')) -foreign import ccall "memcpy"  c_memcpy  :: forall a b . Ptr a -> Ptr a -> Int -> IO ()-foreign import ccall "memmove" c_memmove :: forall a b . Ptr a -> Ptr a -> Int -> IO ()+foreign import ccall "memcpy"  c_memcpy  :: Ptr () -> Ptr () -> CSize -> IO ()+foreign import ccall "memmove" c_memmove :: Ptr () -> Ptr () -> CSize -> IO ()  copyBytes :: forall a b . Ptr a -> Ptr a -> Int -> IO ()-copyBytes = c_memcpy+copyBytes p q i = c_memcpy (castPtr p) (castPtr q) (intToCSize i)  moveBytes :: forall a b . Ptr a -> Ptr a -> Int -> IO ()-moveBytes = c_memmove+moveBytes p q i = c_memmove (castPtr p) (castPtr q) (intToCSize i)
lib/Foreign/Ptr.hs view
@@ -1,4 +1,8 @@-module Foreign.Ptr(module Foreign.Ptr, Ptr) where+module Foreign.Ptr(+  module Foreign.Ptr,+  Ptr,+  FunPtr,+  ) where import Prelude()              -- do not import Prelude import Primitives import Data.Word@@ -23,3 +27,7 @@  minusPtr :: forall a b . Ptr a -> Ptr b -> Int minusPtr = primPtrSub++--instance forall a . Show (FunPtr a) where+--  showsPrec _ p = showString "FUNPTR#" . showsPrec 0 (primPtrToWord p)+
lib/Foreign/Storable.hs view
@@ -2,8 +2,11 @@ import Prelude()              -- do not import Prelude import Primitives import Control.Error(undefined)+import Foreign.C.Types import Foreign.Ptr-import Data.Word8+import Data.Int+import Data.Int.Instances+import Data.Word  class Storable a where    sizeOf      :: a -> Int@@ -36,20 +39,162 @@   peek p      = c_peekWord p   poke p w    = c_pokeWord p w -foreign import ccall "peekPtr" c_peekPtr :: forall a . Ptr (Ptr a) -> IO (Ptr a)-foreign import ccall "pokePtr" c_pokePtr :: forall a . Ptr (Ptr a) -> Ptr a -> IO ()+instance Storable Int where+  sizeOf    _ = wordSizeInBytes+  alignment _ = wordSizeInBytes+  peek p      = c_peekWord (castPtr p) `primBind` \ w -> primReturn (primWordToInt w)+  poke p w    = c_pokeWord (castPtr p) (primIntToWord w) +foreign import ccall "peekPtr" c_peekPtr :: Ptr (Ptr ()) -> IO (Ptr ())+foreign import ccall "pokePtr" c_pokePtr :: Ptr (Ptr ()) -> Ptr () -> IO ()+ instance forall a . Storable (Ptr a) where   sizeOf    _ = wordSizeInBytes   alignment _ = wordSizeInBytes-  peek p      = c_peekPtr p-  poke p w    = c_pokePtr p w+  peek p      = c_peekPtr (castPtr p) `primBind` \ q -> primReturn (castPtr q)+  poke p w    = c_pokePtr (castPtr p) (castPtr w) -foreign import ccall "peekByte" c_peekByte :: Ptr Word8 -> IO Word8-foreign import ccall "pokeByte" c_pokeByte :: Ptr Word8 -> Word8 -> IO ()+foreign import ccall "peek_uint8" c_peek_uint8 :: Ptr Word8 -> IO Word8+foreign import ccall "poke_uint8" c_poke_uint8 :: Ptr Word8 -> Word8 -> IO ()  instance Storable Word8 where   sizeOf    _ = 1   alignment _ = 1-  peek p      = c_peekByte p-  poke p w    = c_pokeByte p w+  peek p      = c_peek_uint8 p+  poke p w    = c_poke_uint8 p w++foreign import ccall "peek_uint16" c_peek_uint16 :: Ptr Word16 -> IO Word16+foreign import ccall "poke_uint16" c_poke_uint16 :: Ptr Word16 -> Word16 -> IO ()++instance Storable Word16 where+  sizeOf    _ = 2+  alignment _ = 2+  peek p      = c_peek_uint16 p+  poke p w    = c_poke_uint16 p w++foreign import ccall "peek_uint32" c_peek_uint32 :: Ptr Word32 -> IO Word32+foreign import ccall "poke_uint32" c_poke_uint32 :: Ptr Word32 -> Word32 -> IO ()++instance Storable Word32 where+  sizeOf    _ = 4+  alignment _ = 4+  peek p      = c_peek_uint32 p+  poke p w    = c_poke_uint32 p w++foreign import ccall "peek_uint64" c_peek_uint64 :: Ptr Word64 -> IO Word64+foreign import ccall "poke_uint64" c_poke_uint64 :: Ptr Word64 -> Word64 -> IO ()++instance Storable Word64 where+  sizeOf    _ = 8+  alignment _ = 8+  peek p      = c_peek_uint64 p+  poke p w    = c_poke_uint64 p w++foreign import ccall "peek_int8" c_peek_int8 :: Ptr Int8 -> IO Int8+foreign import ccall "poke_int8" c_poke_int8 :: Ptr Int8 -> Int8 -> IO ()++instance Storable Int8 where+  sizeOf    _ = 1+  alignment _ = 1+  peek p      = c_peek_int8 p+  poke p w    = c_poke_int8 p w++foreign import ccall "peek_int16" c_peek_int16 :: Ptr Int16 -> IO Int16+foreign import ccall "poke_int16" c_poke_int16 :: Ptr Int16 -> Int16 -> IO ()++instance Storable Int16 where+  sizeOf    _ = 2+  alignment _ = 2+  peek p      = c_peek_int16 p+  poke p w    = c_poke_int16 p w++foreign import ccall "peek_int32" c_peek_int32 :: Ptr Int32 -> IO Int32+foreign import ccall "poke_int32" c_poke_int32 :: Ptr Int32 -> Int32 -> IO ()++instance Storable Int32 where+  sizeOf    _ = 4+  alignment _ = 4+  peek p      = c_peek_int32 p+  poke p w    = c_poke_int32 p w++foreign import ccall "peek_int64" c_peek_int64 :: Ptr Int64 -> IO Int64+foreign import ccall "poke_int64" c_poke_int64 :: Ptr Int64 -> Int64 -> IO ()++instance Storable Int64 where+  sizeOf    _ = 8+  alignment _ = 8+  peek p      = c_peek_int64 p+  poke p w    = c_poke_int64 p w++foreign import ccall "peek_int" c_peek_int :: Ptr CInt -> IO CInt+foreign import ccall "poke_int" c_poke_int :: Ptr CInt -> CInt -> IO ()++instance Storable CInt where+  sizeOf    _ = intSize+  alignment _ = intSize+  peek p      = c_peek_int p+  poke p w    = c_poke_int p w++foreign import ccall "peek_uint" c_peek_uint :: Ptr CUInt -> IO CUInt+foreign import ccall "poke_uint" c_poke_uint :: Ptr CUInt -> CUInt -> IO ()++instance Storable CUInt where+  sizeOf    _ = intSize+  alignment _ = intSize+  peek p      = c_peek_uint p+  poke p w    = c_poke_uint p w++foreign import ccall "peek_long" c_peek_long :: Ptr CLong -> IO CLong+foreign import ccall "poke_long" c_poke_long :: Ptr CLong -> CLong -> IO ()++instance Storable CLong where+  sizeOf    _ = longSize+  alignment _ = longSize+  peek p      = c_peek_long p+  poke p w    = c_poke_long p w++foreign import ccall "peek_ulong" c_peek_ulong :: Ptr CULong -> IO CULong+foreign import ccall "poke_ulong" c_poke_ulong :: Ptr CULong -> CULong -> IO ()++instance Storable CULong where+  sizeOf    _ = longSize+  alignment _ = longSize+  peek p      = c_peek_ulong p+  poke p w    = c_poke_ulong p w++foreign import ccall "peek_llong" c_peek_llong :: Ptr CLLong -> IO CLLong+foreign import ccall "poke_llong" c_poke_llong :: Ptr CLLong -> CLLong -> IO ()++instance Storable CLLong where+  sizeOf    _ = llongSize+  alignment _ = llongSize+  peek p      = c_peek_llong p+  poke p w    = c_poke_llong p w++foreign import ccall "peek_ullong" c_peek_ullong :: Ptr CULLong -> IO CULLong+foreign import ccall "poke_ullong" c_poke_ullong :: Ptr CULLong -> CULLong -> IO ()++instance Storable CULLong where+  sizeOf    _ = llongSize+  alignment _ = llongSize+  peek p      = c_peek_ullong p+  poke p w    = c_poke_ullong p w++foreign import ccall "peek_flt" c_peek_flt :: Ptr FloatW -> IO FloatW+foreign import ccall "poke_flt" c_poke_flt :: Ptr FloatW -> FloatW -> IO ()++instance Storable FloatW where+  sizeOf    _ = _wordSize+  alignment _ = _wordSize+  peek p      = c_peek_flt p+  poke p w    = c_poke_flt p w++foreign import ccall "sizeof_int" c_sizeof_int :: IO Int+foreign import ccall "sizeof_long" c_sizeof_long :: IO Int+foreign import ccall "sizeof_llong" c_sizeof_llong :: IO Int+intSize :: Int+intSize = primPerformIO c_sizeof_int+longSize :: Int+longSize = primPerformIO c_sizeof_long+llongSize :: Int+llongSize = primPerformIO c_sizeof_llong
lib/Prelude.hs view
@@ -8,7 +8,6 @@   module Data.Bool,   module Data.Bounded,   module Data.Char,-  module Data.Double,   module Data.Either,   module Data.Enum,   module Data.Eq,@@ -30,13 +29,14 @@   module Data.RealFrac,   module Data.Records,   module Data.Semigroup,+  module Data.String,   module Data.Tuple,   module Data.Word,   module System.IO,   module Text.Read,   module Text.Show,   module Text.String,-  Float,+  Float, Double,   usingMhs, _wordSize, _isWindows,   ) where import Prelude()              -- do not import Prelude@@ -47,7 +47,7 @@ import Data.Bool(Bool(..), (&&), (||), not, otherwise) import Data.Bounded(Bounded(..)) import Data.Char(Char, String)-import Data.Double(Double)+import Data.FloatW(FloatW) import Data.Either(Either(..), either) import Data.Enum(Enum(..)) import Data.Eq(Eq(..))@@ -56,9 +56,10 @@ import Data.Function(id, const, (.), flip, ($), seq, ($!), until, curry, uncurry) import Data.Functor(Functor(..), (<$>)) import Data.Int(Int)+import Data.Int.Instances import Data.Integer(Integer) import Data.Integral(Integral(..), fromIntegral, gcd, lcm, even, odd, (^))-import Data.List+import Data.List  -- XXX import Data.Maybe(Maybe(..), maybe) import Data.Monoid(Monoid(..)) import Data.Num(Num(..), subtract)@@ -69,6 +70,7 @@ import Data.RealFrac(RealFrac(..)) import Data.Records  -- XXX redo this somehow import Data.Semigroup(Semigroup(..))+import Data.String(IsString(..), lines, unlines, words, unwords) import Data.Tuple(()(..), fst, snd) import Data.Word(Word) import System.IO(IO, putChar, putStr, putStrLn, print, getLine, getContents, interact,@@ -83,4 +85,5 @@ usingMhs :: Bool usingMhs = True -type Float = Double+type Float  = FloatW+type Double = FloatW
lib/Primitives.hs view
@@ -27,10 +27,11 @@ data AnyType data Char data Int-data Double+data FloatW data IO a data Word data Ptr a+data FunPtr a data IOArray a  data () = ()   -- Parser hacks allows () to be used@@ -63,35 +64,35 @@ primIntGE   :: Int -> Int -> Bool primIntGE   = primitive ">=" -primDoubleAdd :: Double -> Double -> Double-primDoubleAdd  = primitive "f+"-primDoubleSub :: Double -> Double -> Double-primDoubleSub  = primitive "f-"-primDoubleMul :: Double -> Double -> Double-primDoubleMul  = primitive "f*"-primDoubleDiv :: Double -> Double -> Double-primDoubleDiv = primitive "f/"-primDoubleNeg :: Double -> Double-primDoubleNeg = primitive "fneg"+primFloatWAdd :: FloatW -> FloatW -> FloatW+primFloatWAdd  = primitive "f+"+primFloatWSub :: FloatW -> FloatW -> FloatW+primFloatWSub  = primitive "f-"+primFloatWMul :: FloatW -> FloatW -> FloatW+primFloatWMul  = primitive "f*"+primFloatWDiv :: FloatW -> FloatW -> FloatW+primFloatWDiv = primitive "f/"+primFloatWNeg :: FloatW -> FloatW+primFloatWNeg = primitive "fneg" -primDoubleEQ :: Double -> Double -> Bool-primDoubleEQ = primitive "f=="-primDoubleNE :: Double -> Double -> Bool-primDoubleNE = primitive "f/="-primDoubleLT :: Double -> Double -> Bool-primDoubleLT = primitive "f<"-primDoubleLE :: Double -> Double -> Bool-primDoubleLE = primitive "f<="-primDoubleGT :: Double -> Double -> Bool-primDoubleGT = primitive "f>"-primDoubleGE :: Double -> Double -> Bool-primDoubleGE = primitive "f>="-primDoubleShow :: Double -> [Char]-primDoubleShow = primitive "fshow"-primDoubleRead :: [Char] -> Double-primDoubleRead = primitive "fread"-primDoubleFromInt :: Int -> Double-primDoubleFromInt = primitive "itof"+primFloatWEQ :: FloatW -> FloatW -> Bool+primFloatWEQ = primitive "f=="+primFloatWNE :: FloatW -> FloatW -> Bool+primFloatWNE = primitive "f/="+primFloatWLT :: FloatW -> FloatW -> Bool+primFloatWLT = primitive "f<"+primFloatWLE :: FloatW -> FloatW -> Bool+primFloatWLE = primitive "f<="+primFloatWGT :: FloatW -> FloatW -> Bool+primFloatWGT = primitive "f>"+primFloatWGE :: FloatW -> FloatW -> Bool+primFloatWGE = primitive "f>="+primFloatWShow :: FloatW -> [Char]+primFloatWShow = primitive "fshow"+primFloatWRead :: [Char] -> FloatW+primFloatWRead = primitive "fread"+primFloatWFromInt :: Int -> FloatW+primFloatWFromInt = primitive "itof"  primWordAdd :: Word -> Word -> Word primWordAdd  = primitive "+"@@ -117,10 +118,14 @@ primWordAshr  = primitive "ashr" primWordInv :: Word -> Word primWordInv  = primitive "inv"-primWordToDoubleRaw :: Word -> Double-primWordToDoubleRaw = primitive "toDbl"-primWordFromDoubleRaw :: Double -> Word-primWordFromDoubleRaw = primitive "toInt"+primWordToFloatWRaw :: Word -> FloatW+primWordToFloatWRaw = primitive "toDbl"+primWordFromFloatWRaw :: FloatW -> Word+primWordFromFloatWRaw = primitive "toInt"+primIntShl :: Int -> Int -> Int+primIntShl  = primitive "shl"+primIntShr :: Int -> Int -> Int+primIntShr  = primitive "ashr"  primWordEQ  :: Word -> Word -> Bool primWordEQ  = primitive "=="@@ -191,8 +196,8 @@ primThen          = primitive "IO.>>" primReturn       :: forall a . a -> IO a primReturn        = primitive "IO.return"-primGetArgs      :: IO [[Char]]-primGetArgs       = primitive "IO.getArgs"+primGetArgRef    :: IO (IOArray [[Char]])+primGetArgRef     = primitive "IO.getArgRef" primPerformIO    :: forall a . IO a -> a primPerformIO     = primitive "IO.performIO" 
+ lib/System/Compress.hs view
@@ -0,0 +1,22 @@+module System.Compress(compress) where+import Foreign.C.String+import Foreign.C.Types+import Foreign.Marshal.Alloc+import Foreign.Marshal.Utils+import Foreign.Ptr+import Foreign.Storable+import System.IO.Unsafe++foreign import ccall "lz77c" c_lz77c :: CString -> CSize -> Ptr CString -> IO CSize++-- This really ought to be [Word8] -> [Word8]+compress :: String -> String+compress file = unsafePerformIO $ do+  (iptr, ilen) <- newCAStringLen file+  pptr <- new nullPtr+  olen <- c_lz77c iptr (intToCSize ilen) pptr+  optr <- peek pptr+  res <- peekCAStringLen (optr, cSizeToInt olen)+  free iptr+  free optr+  return res
lib/System/Console/SimpleReadline.hs view
@@ -13,7 +13,7 @@ import System.IO --Ximport Compat -foreign import ccall "getRaw" c_getRaw :: IO Int+foreign import ccall "GETRAW" c_getRaw :: IO Int   -- Get an input line with editing.
lib/System/Directory.hs view
@@ -1,12 +1,27 @@-module System.Directory(removeFile, doesFileExist) where+module System.Directory(+  removeFile,+  doesFileExist,+  doesDirectoryExist,+  getDirectoryContents,+  listDirectory,+  setCurrentDirectory,+  ) where import Prelude import Control.Monad(when) import Foreign.C.String import Foreign.Ptr import System.IO -foreign import ccall "unlink" c_unlink :: CString -> IO Int+data DIR+data Dirent +foreign import ccall "unlink"   c_unlink   :: CString -> IO Int+foreign import ccall "opendir"  c_opendir  :: CString -> IO (Ptr DIR)+foreign import ccall "closedir" c_closedir :: Ptr DIR -> IO Int+foreign import ccall "readdir"  c_readdir  :: Ptr DIR -> IO (Ptr Dirent)+foreign import ccall "c_d_name" c_d_name   :: Ptr Dirent -> IO CString+foreign import ccall "chdir"    c_chdir    :: CString -> IO Int+ removeFile :: FilePath -> IO () removeFile fn = do   r <- withCAString fn c_unlink@@ -19,3 +34,38 @@   case mh of     Nothing -> return False     Just h  -> do { hClose h; return True }++doesDirectoryExist :: FilePath -> IO Bool+doesDirectoryExist fn = withCAString fn $ \ cfn -> do+  dp <- c_opendir cfn+  return False+  if dp == nullPtr then+    return False+   else do+    c_closedir dp+    return True++getDirectoryContents :: FilePath -> IO [String]+getDirectoryContents fn = withCAString fn $ \ cfn -> do+  dp <- c_opendir cfn+  when (dp == nullPtr) $+    error $ "getDirectoryContents: cannot open " ++ fn+  let loop r = do+        de <- c_readdir dp+        if de == nullPtr then do+          c_closedir dp+          return $ reverse r+         else do+          sp <- c_d_name de+          s <- peekCAString sp+          loop (s:r)+  loop []++listDirectory :: FilePath -> IO [String]+listDirectory d = filter (\ n -> n /= "." && n /= "..") <$> getDirectoryContents d++setCurrentDirectory :: FilePath -> IO ()+setCurrentDirectory d = do+  r <- withCAString d c_chdir+  when (r /= 0) $+    error $ "setCurrentDirectory failed: " ++ d
lib/System/Environment.hs view
@@ -5,27 +5,34 @@   getProgName,   withArgs,   lookupEnv,+  getEnv,   ) where import Prelude-import Primitives(primPerformIO, primGetArgs)-import Data.IORef+import Primitives import Foreign.C.String import Foreign.Ptr -progArgs :: IORef [String]-progArgs = primPerformIO $ do-  args <- primGetArgs-  newIORef args-+-- primArgRef returns an array containing a list of strings.+-- The first element is the program name, the rest are the arguments. getArgs :: IO [String]-getArgs = readIORef progArgs+getArgs = do+  aa <- primGetArgRef+  as <- primArrRead aa 0+  return $ tail as                          -- drop program name +getProgName :: IO String+getProgName = do+  aa <- primGetArgRef+  as <- primArrRead aa 0+  return $ head as                          -- get program name+ withArgs :: forall a . [String] -> IO a -> IO a withArgs as ioa = do-  old <- readIORef progArgs-  writeIORef progArgs as+  aa <- primGetArgRef+  old <- primArrRead aa 0+  primArrWrite aa 0 $ head old : as         -- keep program name   a <- ioa-  writeIORef progArgs old+  primArrWrite aa 0 old   return a  foreign import ccall "getenv" c_getenv :: CString -> IO CString@@ -38,6 +45,9 @@    else     Just <$> peekCAString cptr --- XXX implement this-getProgName :: IO String-getProgName = return "???"+getEnv :: String -> IO String+getEnv var = do+  mval <- lookupEnv var+  case mval of+    Nothing  -> error $ "getEnv: not found " ++ var+    Just val -> return val
lib/System/IO.hs view
@@ -5,6 +5,7 @@   IOMode(..),   stdin, stdout, stderr,   hGetChar, hPutChar,+  hLookAhead,   putChar, getChar,   hClose, hFlush,   openFile, openFileM, openBinaryFile,@@ -16,13 +17,12 @@   interact,   writeFile, readFile, appendFile, -  hSerialize, hDeserialize, cprint,-  writeSerialized, readSerialized,+  cprint,    mkTextEncoding, hSetEncoding, utf8,    getTimeMilli,-  openTmpFile,+  openTmpFile, openTempFile,    withFile,   ) where@@ -41,23 +41,19 @@ import Data.List import Data.Maybe import Data.Num+import Data.String import Data.Tuple import Text.Show import Foreign.C.String import Foreign.Marshal.Alloc import Foreign.Ptr import System.IO.Unsafe+import System.IO_Handle  data FILE-data BFILE-newtype Handle = Handle (Ptr BFILE) -primHSerialize   :: forall a . Ptr BFILE -> a -> IO ()-primHSerialize    = primitive "IO.serialize" primHPrint       :: forall a . Ptr BFILE -> a -> IO () primHPrint        = primitive "IO.print"-primHDeserialize :: forall a . Ptr BFILE -> IO a-primHDeserialize  = primitive "IO.deserialize" primStdin        :: Ptr FILE primStdin         = primitive "IO.stdin" primStdout       :: Ptr FILE@@ -65,6 +61,13 @@ primStderr       :: Ptr FILE primStderr        = primitive "IO.stderr" +{- This works, but assumes we have stdio+foreign import ccall "stdio.h &stdout" c_stdout :: IO (Ptr (Ptr FILE))+foreign import ccall "peekPtr" c_peekPtr :: Ptr (Ptr FILE) -> IO (Ptr FILE)+primStdout :: Ptr FILE+primStdout = primPerformIO (c_stdout `primBind` c_peekPtr)+-}+ foreign import ccall "fopen"        c_fopen        :: CString -> CString -> IO (Ptr FILE) {- foreign import ccall "fclose"       c_fclose       :: Handle             -> IO Int@@ -73,12 +76,13 @@ foreign import ccall "fputc"        c_fputc        :: Int ->     Handle  -> IO Int -- foreign import ccall "fwrite"       c_fwrite       :: CString -> Int -> Int -> Handle -> IO Int -}-foreign import ccall "getTimeMilli" c_getTimeMilli ::                       IO Int+foreign import ccall "GETTIMEMILLI" c_getTimeMilli ::                       IO Int  foreign import ccall "closeb"       c_closeb       :: Ptr BFILE          -> IO () foreign import ccall "flushb"       c_flushb       :: Ptr BFILE          -> IO () foreign import ccall "getb"         c_getb         :: Ptr BFILE          -> IO Int-foreign import ccall "putb"         c_putb         :: Int ->  Ptr BFILE  -> IO ()+foreign import ccall "ungetb"       c_ungetb       :: Int -> Ptr BFILE   -> IO ()+foreign import ccall "putb"         c_putb         :: Int -> Ptr BFILE   -> IO () foreign import ccall "add_FILE"     c_add_FILE     :: Ptr FILE           -> IO (Ptr BFILE) foreign import ccall "add_utf8"     c_add_utf8     :: Ptr BFILE          -> IO (Ptr BFILE) @@ -106,12 +110,6 @@ instance MonadFail IO where   fail         = error -hSerialize   :: forall a . Handle -> a -> IO ()-hSerialize (Handle p) = primHSerialize p--hDeserialize :: forall a . Handle -> IO a-hDeserialize (Handle p) = primHDeserialize p- stdin        :: Handle stdin        = bFILE primStdin stdout       :: Handle@@ -136,6 +134,12 @@    else     return (chr c) +hLookAhead :: Handle -> IO Char+hLookAhead h@(Handle p) = do+  c <- hGetChar h+  c_ungetb (ord c) p+  return c+ hPutChar :: Handle -> Char -> IO () hPutChar (Handle p) c = c_putb (ord c) p @@ -258,19 +262,6 @@ interact :: (String -> String) -> IO () interact f = getContents >>= putStr . f -writeSerialized :: forall a . FilePath -> a -> IO ()-writeSerialized p s = do-  h <- openFile p WriteMode-  hSerialize h s-  hClose h--readSerialized :: forall a . FilePath -> IO a-readSerialized p = do-  h <- openFile p ReadMode-  a <- hDeserialize h-  hClose h-  return a- getTimeMilli :: IO Int getTimeMilli = c_getTimeMilli @@ -299,6 +290,22 @@  -------- +-- XXX needs bracket+withFile :: forall r . FilePath -> IOMode -> (Handle -> IO r) -> IO r+withFile fn md io = do+  h <- openFile fn md+  r <- io h+  hClose h+  return r++--------++splitTmp :: String -> (String, String)+splitTmp tmpl = +  case span (/= '.') (reverse tmpl) of+    (rsuf, "") -> (tmpl, "")+    (rsuf, _:rpre) -> (reverse rpre, '.':reverse rsuf)+ -- Create a temporary file, take a prefix and a suffix -- and returns a malloc()ed string. foreign import ccall "tmpname" c_tmpname :: CString -> CString -> IO CString@@ -306,20 +313,25 @@ -- Create and open a temporary file. openTmpFile :: String -> IO (String, Handle) openTmpFile tmpl = do-  let (pre, suf) =-        case span (/= '.') (reverse tmpl) of-          (rsuf, "") -> (tmpl, "")-          (rsuf, _:rpre) -> (reverse rpre, '.':reverse rsuf)+  let (pre, suf) = splitTmp tmpl   ctmp <- withCAString pre $ withCAString suf . c_tmpname   tmp <- peekCAString ctmp   free ctmp-  h <- openFile tmp WriteMode+  h <- openFile tmp ReadWriteMode   return (tmp, h) --- XXX needs bracket-withFile :: forall r . FilePath -> IOMode -> (Handle -> IO r) -> IO r-withFile fn md io = do-  h <- openFile fn md-  r <- io h-  hClose h-  return r+-- Sloppy implementation of openTempFile+openTempFile :: FilePath -> String -> IO (String, Handle)+openTempFile tmp tmplt = do+  let (pre, suf) = splitTmp tmplt+      loop n = do+        let fn = tmp ++ "/" ++ pre ++ show n ++ suf+        mh <- openFileM fn ReadMode+        case mh of+          Just h -> do+            hClose h+            loop (n+1 :: Int)+          Nothing -> do+            h <- openFile fn ReadWriteMode+            return (fn, h)+  loop 0
+ lib/System/IO/Serialize.hs view
@@ -0,0 +1,52 @@+-- Copyright 2024 Lennart Augustsson+-- See LICENSE file for full license.+module System.IO.Serialize(+  hSerialize, hDeserialize,+  writeSerialized, writeSerializedCompressed,+  readSerialized,+  ) where+import Primitives(Ptr)+import System.IO_Handle+import System.IO++primHSerialize   :: forall a . Ptr BFILE -> a -> IO ()+primHSerialize    = primitive "IO.serialize"+primHDeserialize :: forall a . Ptr BFILE -> IO a+primHDeserialize  = primitive "IO.deserialize"++hSerialize   :: forall a . Handle -> a -> IO ()+hSerialize (Handle p) = primHSerialize p++hDeserialize :: forall a . Handle -> IO a+hDeserialize (Handle p) = primHDeserialize p++writeSerialized :: forall a . FilePath -> a -> IO ()+writeSerialized p s = do+  h <- openBinaryFile p WriteMode+  hSerialize h s+  hClose h++foreign import ccall "add_lz77_compressor" c_add_lz77_compressor :: Ptr BFILE -> IO (Ptr BFILE)+foreign import ccall "add_lz77_decompressor" c_add_lz77_decompressor :: Ptr BFILE -> IO (Ptr BFILE)++writeSerializedCompressed :: forall a . FilePath -> a -> IO ()+writeSerializedCompressed p s = do+  h@(Handle p) <- openBinaryFile p WriteMode+  hPutChar h 'z'                               -- indicate compressed+  h' <- Handle <$> c_add_lz77_compressor p+  hSerialize h' s+  hClose h'++-- Read compressed or uncompressed+readSerialized :: forall a . FilePath -> IO a+readSerialized p = do+  h@(Handle p) <- openBinaryFile p ReadMode+  c <- hLookAhead h+  h' <- if c == 'z' then do                    -- compressed?+          hGetChar h   -- get rid of the 'z'+          Handle <$> c_add_lz77_decompressor p+        else+          return h+  a <- hDeserialize h'+  hClose h'+  return a
+ lib/System/IO_Handle.hs view
@@ -0,0 +1,6 @@+module System.IO_Handle(BFILE, Handle(..)) where+import Prelude()+import Primitives++data BFILE+newtype Handle = Handle (Ptr BFILE)
+ lib/System/Info.hs view
@@ -0,0 +1,32 @@+module System.Info(os, arch, compilerName, compilerVersion, fullCompilerVersion) where+import Data.Char+import Data.Version(Version(..))+import System.Directory+import System.IO+import System.Process+import System.IO.Unsafe++os :: String+os = if _isWindows then "windows" else uname "-s"++arch :: String+arch = if _isWindows then "x86_64" else uname "-m"++compilerName :: String+compilerName = "mhs"++compilerVersion :: Version+compilerVersion = Version [0,9]++fullCompilerVersion :: Version+fullCompilerVersion = Version [0,9,0]++-- Assume the system has an uname command+uname :: String -> String+uname flag = unsafePerformIO $ do+  (fn, h) <- openTmpFile "uname"+  hClose h+  callCommand $ "uname " ++ flag ++ " >" ++ fn+  res <- readFile fn+  removeFile fn+  return $ map toLower $ filter (not . isSpace) res
lib/Text/PrettyPrint/HughesPJ.hs view
@@ -9,6 +9,7 @@   hcat, hsep,   vcat,   sep, cat,+  fsep, fcat,   nest, hang,   punctuate,   parens, brackets, braces,@@ -79,7 +80,6 @@  -- mkNest checks for Nest's invariant that it doesn't have an Empty inside it mkNest :: Int -> Doc -> Doc-mkNest k _ | k `seq` False = undefined mkNest k (Nest k1 p)       = mkNest (k + k1) p mkNest _ NoDoc             = NoDoc mkNest _ Empty             = Empty@@ -366,3 +366,64 @@ fits _ (NilAbove _)        = True fits n (TextBeside s p)    = fits (n - length s) p fits _ _                   = error "fits"++---------++fcat :: [Doc] -> Doc+fcat = fill False++fsep :: [Doc] -> Doc+fsep = fill True++-- Specification:+--+-- fill g docs = fillIndent 0 docs+--+-- fillIndent k [] = []+-- fillIndent k [p] = p+-- fillIndent k (p1:p2:ps) =+--    oneLiner p1 <g> fillIndent (k + length p1 + g ? 1 : 0)+--                               (remove_nests (oneLiner p2) : ps)+--     `Union`+--    (p1 $*$ nest (-k) (fillIndent 0 ps))+--+-- $*$ is defined for layouts (not Docs) as+-- layout1 $*$ layout2 | hasMoreThanOneLine layout1 = layout1 $$ layout2+--                     | otherwise                  = layout1 $+$ layout2++fill :: Bool -> [Doc] -> RDoc+fill _ []     = empty+fill g (p:ps) = fill1 g (reduceDoc p) 0 ps++fill1 :: Bool -> RDoc -> Int -> [Doc] -> Doc+fill1 _ _                   k _  | k `seq` False = undefined+fill1 _ NoDoc               _ _  = NoDoc+fill1 g (p `Union` q)       k ys = fill1 g p k ys `union_`+                                   aboveNest q False k (fill g ys)+fill1 g Empty               k ys = mkNest k (fill g ys)+fill1 g (Nest n p)          k ys = nest_ n (fill1 g p (k - n) ys)+fill1 g (NilAbove p)        k ys = nilAbove_ (aboveNest p False k (fill g ys))+fill1 g (TextBeside s p)    k ys = textBeside_ s (fillNB g p k ys)+fill1 _ (Above _ _ _)       _ _  = error "fill1 Above"+fill1 _ (Beside _ _ _)      _ _  = error "fill1 Beside"++fillNB :: Bool -> Doc -> Int -> [Doc] -> Doc+fillNB _ _           k _  | k `seq` False = undefined+fillNB g (Nest _ p)  k ys   = fillNB g p k ys+                              -- Never triggered, because of invariant (2)+fillNB _ Empty _ []         = Empty+fillNB g Empty k (Empty:ys) = fillNB g Empty k ys+fillNB g Empty k (y:ys)     = fillNBE g k y ys+fillNB g p k ys             = fill1 g p k ys+++fillNBE :: Bool -> Int -> Doc -> [Doc] -> Doc+fillNBE g k y ys+  = nilBeside g (fill1 g ((elideNest . oneLiner . reduceDoc) y) k' ys)+    -- XXX: TODO: PRETTY: Used to use True here (but GHC used False...)+    `mkUnion` nilAboveNest False k (fill g (y:ys))+  where k' = if g then k - 1 else k++elideNest :: Doc -> Doc+elideNest (Nest _ d) = d+elideNest d          = d
+ lib/Text/PrettyPrint/HughesPJClass.hs view
@@ -0,0 +1,133 @@+-----------------------------------------------------------------------------+-- |+-- Module      :  Text.PrettyPrint.HughesPJClass+-- Copyright   :  (c) Lennart Augustsson 2014+-- License     :  BSD-style (see the file LICENSE)+--+-- Maintainer  :  David Terei <code@davidterei.com>+-- Stability   :  stable+-- Portability :  portable+--+-- Pretty printing class, simlar to 'Show' but nicer looking. +--+-- Note that the precedence level is a 'Rational' so there is an unlimited+-- number of levels. This module re-exports 'Text.PrettyPrint.HughesPJ'.+--+-----------------------------------------------------------------------------++module Text.PrettyPrint.HughesPJClass (+    -- * Pretty typeclass+    Pretty(..),++    PrettyLevel(..), prettyNormal,+    prettyShow,++    -- re-export HughesPJ+    module Text.PrettyPrint.HughesPJ+  ) where++import Text.PrettyPrint.HughesPJ++-- | Level of detail in the pretty printed output. Level 0 is the least+-- detail.+newtype PrettyLevel = PrettyLevel Int+  deriving (Eq, Ord, Show)++-- | The "normal" (Level 0) of detail.+prettyNormal :: PrettyLevel+prettyNormal = PrettyLevel 0++-- | Pretty printing class. The precedence level is used in a similar way as in+-- the 'Show' class. Minimal complete definition is either 'pPrintPrec' or+-- 'pPrint'.+class Pretty a where+  pPrintPrec :: PrettyLevel -> Rational -> a -> Doc+  pPrintPrec _ _ = pPrint++  pPrint :: a -> Doc+  pPrint = pPrintPrec prettyNormal 0++  pPrintList :: PrettyLevel -> [a] -> Doc+  pPrintList l = brackets . fsep . punctuate comma . map (pPrintPrec l 0)++-- | Pretty print a value with the 'prettyNormal' level.+prettyShow :: (Pretty a) => a -> String+prettyShow = render . pPrint++pPrint0 :: (Pretty a) => PrettyLevel -> a -> Doc+pPrint0 l = pPrintPrec l 0++appPrec :: Rational+appPrec = 10++comma :: Doc+comma = text ","++-- Various Pretty instances+instance Pretty Int where pPrint = text . show++instance Pretty Integer where pPrint = text . show++instance Pretty Double where pPrint = text . show++instance Pretty () where pPrint _ = text "()"++instance Pretty Bool where pPrint = text . show++instance Pretty Ordering where pPrint = text . show++instance Pretty Char where+  pPrint = text . show+  pPrintList _ = text . show++instance (Pretty a) => Pretty (Maybe a) where+  pPrintPrec _ _ Nothing = text "Nothing"+  pPrintPrec l p (Just x) =+    maybeParens (p > appPrec) $ text "Just" <+> pPrintPrec l (appPrec+1) x++instance (Pretty a, Pretty b) => Pretty (Either a b) where+  pPrintPrec l p (Left x) =+    maybeParens (p > appPrec) $ text "Left" <+> pPrintPrec l (appPrec+1) x+  pPrintPrec l p (Right x) =+    maybeParens (p > appPrec) $ text "Right" <+> pPrintPrec l (appPrec+1) x++instance (Pretty a) => Pretty [a] where+  pPrintPrec l _ = pPrintList l++instance (Pretty a, Pretty b) => Pretty (a, b) where+  pPrintPrec l _ (a, b) =+    parens $ fsep $ punctuate comma [pPrint0 l a, pPrint0 l b]++instance (Pretty a, Pretty b, Pretty c) => Pretty (a, b, c) where+  pPrintPrec l _ (a, b, c) =+    parens $ fsep $ punctuate comma [pPrint0 l a, pPrint0 l b, pPrint0 l c]++instance (Pretty a, Pretty b, Pretty c, Pretty d) => Pretty (a, b, c, d) where+  pPrintPrec l _ (a, b, c, d) =+    parens $ fsep $ punctuate comma+      [pPrint0 l a, pPrint0 l b, pPrint0 l c, pPrint0 l d]++instance (Pretty a, Pretty b, Pretty c, Pretty d, Pretty e) => Pretty (a, b, c, d, e) where+  pPrintPrec l _ (a, b, c, d, e) =+    parens $ fsep $ punctuate comma+      [pPrint0 l a, pPrint0 l b, pPrint0 l c, pPrint0 l d, pPrint0 l e]++instance (Pretty a, Pretty b, Pretty c, Pretty d, Pretty e, Pretty f) => Pretty (a, b, c, d, e, f) where+  pPrintPrec l _ (a, b, c, d, e, f) =+    parens $ fsep $ punctuate comma+      [pPrint0 l a, pPrint0 l b, pPrint0 l c,+        pPrint0 l d, pPrint0 l e, pPrint0 l f]++instance (Pretty a, Pretty b, Pretty c, Pretty d, Pretty e, Pretty f, Pretty g) =>+         Pretty (a, b, c, d, e, f, g) where+  pPrintPrec l _ (a, b, c, d, e, f, g) =+    parens $ fsep $ punctuate comma+      [pPrint0 l a, pPrint0 l b, pPrint0 l c,+        pPrint0 l d, pPrint0 l e, pPrint0 l f, pPrint0 l g]++instance (Pretty a, Pretty b, Pretty c, Pretty d, Pretty e, Pretty f, Pretty g, Pretty h) =>+         Pretty (a, b, c, d, e, f, g, h) where+  pPrintPrec l _ (a, b, c, d, e, f, g, h) =+    parens $ fsep $ punctuate comma+      [pPrint0 l a, pPrint0 l b, pPrint0 l c,+        pPrint0 l d, pPrint0 l e, pPrint0 l f, pPrint0 l g, pPrint0 l h]
lib/Text/Read.hs view
@@ -18,11 +18,12 @@ import Data.Either import Data.Eq import Data.Function+import Data.Int import Data.List import Data.Maybe_Type import Data.Num import Data.Ord-import Data.Int+import Data.String import Text.Read.Numeric import Text.Read.Lex 
lib/Text/Read/Lex.hs view
@@ -10,18 +10,18 @@ type ReadS a = String -> [(a, String)]  lex :: ReadS String-lex []       = [("","")]+lex []       = [([],[])] lex ('\'':s) = [('\'':ch++"'", t) | (ch,'\'':t) <- lexLitChar s,                                     ch /= "'" ] lex ('"':s)  = [('"':str, t) | (str,t) <- lexString s]   where-    lexString ('"':s) = [("\"",s)]+    lexString ('"':s) = [("\""::String, s)]     lexString s = [(ch++str, u)                   | (ch,t)  <- lexStrItem s,                     (str,u) <- lexString t ] -    lexStrItem ('\\':'&':s) =  [("\\&",s)]-    lexStrItem ('\\':c:s) | isSpace c = [("\\&",t) |+    lexStrItem ('\\':'&':s) =  [("\\&"::String,s)]+    lexStrItem ('\\':c:s) | isSpace c = [("\\&"::String,t) |                                          '\\':t <- [dropSpace s]]     lexStrItem s = lexLitChar s @@ -33,20 +33,20 @@                                          (fe,t)  <- lexFracExp s ]           | otherwise  = []    -- bad character     where  -    isSingle c = c `elem` ",;()[]{}_`"-    isSym c    = c `elem` "!@#$%&?+./<=>?\\^|:-~"-    isIdChar c = isAlphaNum c || c `elem` "_'"+    isSingle c = c `elem` (",;()[]{}_`"::String)+    isSym c    = c `elem` ("!@#$%&?+./<=>?\\^|:-~"::String)+    isIdChar c = isAlphaNum c || c == '_' || c == '\''      lexFracExp ('.':c:cs) | isDigit c       = [('.':ds++e,u) | (ds,t) <- lexDigits (c:cs),          (e,u) <- lexExp t]     lexFracExp s = lexExp s  -    lexExp (e:s) | e `elem` "eE"-      = [(e:c:ds,u) | (c:t)  <- [s], c `elem` "+-",+    lexExp (e:s) | e == 'e' || e == 'E'+      = [(e:c:ds,u) | (c:t)  <- [s], c == '-' || c == '+',           (ds,u) <- lexDigits t] ++         [(e:ds,t)   | (ds,t) <- lexDigits s]-    lexExp s = [("",s)]+    lexExp s = [([],s)]  lexDigits :: ReadS String lexDigits s = [(cs, t) | (cs@(_:_), t) <- [span isDigit s]]@@ -54,7 +54,7 @@ lexLitChar :: ReadS String lexLitChar ('\\':s) = [ prefix '\\' c | c <- lexEsc s ]   where-    lexEsc (c:s)     | c `elem` "abfnrtv\\\"'" = [([c],s)]+    lexEsc (c:s)     | c `elem` ("abfnrtv\\\"'"::String) = [([c],s)]     lexEsc ('^':c:s) | c >= '@' && c <= '_'    = [(['^',c],s)]     lexEsc ('o':s)               = [prefix 'o' (span isOctDigit s)]     lexEsc ('x':s)               = [prefix 'x' (span isHexDigit s)]
lib/Text/Read/Numeric.hs view
@@ -23,6 +23,7 @@ import Data.Maybe_Type import Data.Num import Data.Ord+import Data.String import Text.Read.Lex(lex, dropSpace) import Text.Show 
lib/Text/String.hs view
@@ -18,6 +18,7 @@ import Data.Ord import Data.Ratio import Data.Real+import Data.String import Data.Tuple import Text.Read import Text.Show@@ -27,25 +28,6 @@  showPairS :: forall a b . (a -> String) -> (b -> String) -> (a, b) -> String showPairS sa sb (a, b) = "(" ++ sa a ++ "," ++ sb b ++ ")"--lines :: String -> [String]-lines "" = []-lines s =-  case span (not . (== '\n')) s of-    (l, s') -> case s' of { [] -> [l]; _:s'' -> l : lines s'' }--unlines :: [String] -> String-unlines = concatMap (++ "\n")--words :: String -> [String]-words s =-  case dropWhile isSpace s of-    "" -> []-    s' -> w : words s''-      where (w, s'') = span (not . isSpace) s'--unwords :: [String] -> String-unwords ss = intercalate " " ss  padLeft :: Int -> String -> String padLeft n s = replicate (n - length s) ' ' ++ s
+ lib/TimeCompat.hs view
@@ -0,0 +1,6 @@+module TimeCompat(module TimeCompat) where+import Prelude+import Data.Time.Format++defaultTimeLocale :: TimeLocale+defaultTimeLocale = error "defaultTimeLocale"
src/MicroHs/Compile.hs view
@@ -10,8 +10,11 @@ import Prelude import Data.List import Data.Maybe+import System.Directory+import System.Environment import System.IO import System.IO.MD5+import System.Process import Control.DeepSeq import MicroHs.Abstract import MicroHs.CompileCache@@ -36,9 +39,9 @@  -- Compile the module with the given name, starting with the given cache. -- Return the "compiled module" and the resulting cache.-compileCacheTop :: Flags -> IdentModule -> Cache -> IO ([(Ident, Exp)], Cache)+compileCacheTop :: Flags -> IdentModule -> Cache -> IO ((IdentModule, [(Ident, Exp)]), Cache) compileCacheTop flags mn ch = do-  (ds, ch') <- compile flags mn ch+  ((rmn, ds), ch') <- compile flags mn ch   t1 <- getTimeMilli   let     dsn = [ (n, compileOpt e) | (n, e) <- ds ]@@ -48,26 +51,26 @@     putStrLn $ "combinator conversion " ++ padLeft 6 (show (t2-t1)) ++ "ms"   when (verbosityGT flags 3) $     putStrLn $ "combinators:\n" ++ showLDefs dsn-  return (dsn, ch')+  return ((rmn, dsn), ch')  getCached :: Flags -> IO Cache-getCached flags | not flags.readCache = return emptyCache+getCached flags | not (readCache flags) = return emptyCache getCached flags = do   mcash <- loadCached mhsCacheName   case mcash of     Nothing ->       return emptyCache     Just cash -> do-      when (flags.loading || verbosityGT flags 0) $+      when (loading flags || verbosityGT flags 0) $         putStrLn $ "Loading saved cache " ++ show mhsCacheName       validateCache flags cash -compile :: Flags -> IdentModule -> Cache -> IO ([LDef], Cache)+compile :: Flags -> IdentModule -> Cache -> IO ((IdentModule, [LDef]), Cache) compile flags nm ach = do-  ((_, t), ch) <- runStateIO (compileModuleCached flags nm) ach+  ((cm, t), ch) <- runStateIO (compileModuleCached flags nm) ach   when (verbosityGT flags 0) $     putStrLn $ "total import time     " ++ padLeft 6 (show t) ++ "ms"-  return (concatMap bindingsOf $ map tModuleOf $ M.elems $ cache ch, ch)+  return ((tModuleName $ tModuleOf cm, concatMap bindingsOf $ map tModuleOf $ M.elems $ cache ch), ch)  -- Compile a module with the given name. -- If the module has already been compiled, return the cached result.@@ -86,7 +89,7 @@       when (verbosityGT flags 0) $         liftIO $ putStrLn $ "importing done " ++ showIdent mn ++ ", " ++ show (tp + tt) ++                  "ms (" ++ show tp ++ " + " ++ show tt ++ ")"-      when (flags.loading && mn /= mkIdent "Interactive") $+      when (loading flags && mn /= mkIdent "Interactive") $         liftIO $ putStrLn $ "loaded " ++ showIdent mn       cash <- get       put $ workToDone cm cash@@ -110,7 +113,8 @@      -- liftIO $ putStrLn $ showEModule mdl   -- liftIO $ putStrLn $ showEDefs defs-  when (nm /= nmn) $+  -- TODO: skip test when nm is a file name+  when (isNothing (getFileName nm) && nm /= nmn) $     error $ "module name does not agree with file name: " ++ showIdent nm ++ " " ++ showIdent nmn   let     specs = [ s | Import s <- defs ]@@ -188,20 +192,40 @@  ------------------ +-- Is the module name actually a file name?+getFileName :: IdentModule -> Maybe String+getFileName m | ".hs" `isSuffixOf` s = Just s+             | otherwise = Nothing+  where s = unIdent m++-- TODO:+--  * with the CPP flag, run the prepocessor on the file readModulePath :: Flags -> IdentModule -> IO (FilePath, String)-readModulePath flags mn = do+readModulePath flags mn | Just fn <- getFileName mn = do+  mh <- openFileM fn ReadMode+  case mh of+    Nothing -> errorMessage (getSLoc mn) $ "File not found: " ++ show fn+    Just h -> readRest fn h+                        | otherwise = do   mh <- findModulePath flags mn   case mh of-    Nothing -> errorMessage (getSLoc mn) $ "File not found: " ++ show mn ++ "\npath=" ++ show flags.paths-    Just (fn, h) -> do-      file <- hGetContents h-      return (fn, file)+    Nothing -> errorMessage (getSLoc mn) $ "Module not found: " ++ show mn ++ "\nsearch path=" ++ show (paths flags)+    Just (fn, h) -> readRest fn h+  where readRest fn h = do+          file <-+            if doCPP flags then do+              hClose h+              runCPPTmp flags fn+            else+              hGetContents h+          return (fn, file) + findModulePath :: Flags -> IdentModule -> IO (Maybe (FilePath, Handle)) findModulePath flags mn = do   let     fn = map (\ c -> if c == '.' then '/' else c) (unIdent mn) ++ ".hs"-  openFilePath flags.paths fn+  openFilePath (paths flags) fn  openFilePath :: [FilePath] -> FilePath -> IO (Maybe (FilePath, Handle)) openFilePath adirs fileName =@@ -214,3 +238,27 @@       case mh of         Nothing -> openFilePath dirs fileName -- If opening failed, try the next directory         Just hdl -> return (Just (path, hdl))++runCPPTmp :: Flags -> FilePath -> IO String+runCPPTmp flags infile = do+  (fn, h) <- openTmpFile "mhscpp.hs"+  runCPP flags infile fn+  file <- hGetContents h+  removeFile fn+  return file++mhsDefines :: [String]+mhsDefines =+  [ "'-DMIN_VERSION_base(x,y,z)=(x<=4||y<=14)'" -- Pretend we have base version 4.14+  , "-D__MHS__"                                 -- We are MHS+  ]++runCPP :: Flags -> FilePath -> FilePath -> IO ()+runCPP flags infile outfile = do+  mcpphs <- lookupEnv "MHSCPPHS"+  let cpphs = fromMaybe "cpphs" mcpphs+      args = mhsDefines ++ cppArgs flags+      cmd = cpphs ++ " --noline " ++ unwords args ++ " " ++ infile ++ " -O" ++ outfile+  when (verbosityGT flags 0) $+    putStrLn $ "Execute: " ++ show cmd+  callCommand cmd
src/MicroHs/CompileCache.hs view
@@ -10,6 +10,7 @@ import qualified MicroHs.IdentMap as M import MicroHs.TypeCheck(TModule) import System.IO+import System.IO.Serialize import System.IO.MD5(MD5CheckSum) import Compat @@ -45,10 +46,7 @@ workToDone _ _ = undefined  saveCache :: FilePath -> Cache -> IO ()-saveCache fn cash = do-  hout <- openFile fn WriteMode-  hSerialize hout cash-  hClose hout+saveCache fn cash = writeSerializedCompressed fn cash  loadCached :: FilePath -> IO (Maybe Cache) loadCached fn = do@@ -57,6 +55,5 @@     Nothing ->       return Nothing     Just hin -> do-      cash <- hDeserialize hin       hClose hin-      return (Just cash)+      Just <$> readSerialized fn
src/MicroHs/Deriving.hs view
@@ -7,8 +7,41 @@ import MicroHs.Expr import MicroHs.Ident import MicroHs.TCMonad---import Debug.Trace+import Debug.Trace +doDeriving :: EDef -> T [EDef]+doDeriving def@(Data    lhs cs ds) = (def:) . concat <$> mapM (derive lhs  cs) ds+doDeriving def@(Newtype lhs  c ds) = (def:) . concat <$> mapM (derive lhs [c]) ds+doDeriving def                     = return [def]++type Deriver = LHS -> [Constr] -> EConstraint -> T [EDef]++derivers :: [(String, Deriver)]+derivers =+  [("Data.Bounded.Bounded",   derBounded)+  ,("Data.Enum.Enum",         derEnum)+  ,("Data.Eq.Eq",             derEq)+  ,("Data.Ix.Ix",             derNotYet)+  ,("Data.Ord.Ord",           derOrd)+  ,("Data.Typeable.Typeable", derTypeable)+  ,("Text.Read.Read",         derShow)+  ,("Text.Show.Show",         derShow)+  ]++derive :: Deriver+derive lhs cs d = do+  let c = getAppCon d+  case lookup (unIdent c) derivers of+    Nothing -> tcError (getSLoc c) $ "Cannot derive " ++ show c+    Just f  -> f lhs cs d++derNotYet :: Deriver+derNotYet _ _ d = do+  traceM ("Warning: cannot derive " ++ show d ++ " yet, " ++ showSLoc (getSLoc d))+  return []++--------------------------------------------+ expandField :: EDef -> T [EDef] expandField def@(Data    lhs cs _) = (++ [def]) <$> genHasFields lhs cs expandField def@(Newtype lhs  c _) = (++ [def]) <$> genHasFields lhs [c]@@ -93,37 +126,6 @@  -------------------------------------------- -doDeriving :: EDef -> T [EDef]-doDeriving def@(Data    lhs cs ds) = (def:) . concat <$> mapM (derive lhs  cs) ds-doDeriving def@(Newtype lhs  c ds) = (def:) . concat <$> mapM (derive lhs [c]) ds-doDeriving def                     = return [def]--type Deriver = LHS -> [Constr] -> EConstraint -> T [EDef]--derivers :: [(String, Deriver)]-derivers =-  [("Data.Typeable.Typeable", derTypeable)-  ,("Data.Eq.Eq",             derEq)-  ,("Data.Ord.Ord",           derOrd)-  ,("Text.Show.Show",         derShow)-  ]--derive :: Deriver-derive lhs cs d = do-  let c = getAppCon d-  case lookup (unIdent c) derivers of-    Nothing -> tcError (getSLoc c) $ "Cannot derive " ++ show c-    Just f  -> f lhs cs d--{--derNotYet :: Deriver-derNotYet _ _ d = do-  traceM ("Warning: cannot derive " ++ show d ++ " yet, " ++ showSLoc (getSLoc d))-  return []--}----------------------------------------------- derTypeable :: Deriver derTypeable (i, _) _ etyp = do   mn <- gets moduleName@@ -230,10 +232,58 @@ --------------------------------------------  -- XXX should use mkQIdent+derBounded :: Deriver+derBounded lhs cs@(c0:_) ebnd = do+  hdr <- mkHdr lhs cs ebnd+  let loc = getSLoc ebnd++      mkEqn bnd (Constr _ _ c flds) =+        let n = either length length flds+        in  eEqn [] $ tApps c (replicate n (EVar bnd))++      ident = mkIdentSLoc loc+      iMinBound = ident "minBound"+      iMaxBound = ident "maxBound"+      minEqn = mkEqn iMinBound c0+      maxEqn = mkEqn iMaxBound (last cs)+      inst = Instance hdr [BFcn iMinBound [minEqn], BFcn iMaxBound [maxEqn]]+  -- traceM $ showEDefs [inst]+  return [inst]+derBounded (c, _) _ e = tcError (getSLoc e) $ "Cannot derive Bounded " ++ show c++--------------------------------------------++-- XXX should use mkQIdent+derEnum :: Deriver+derEnum lhs cs@(_:_) enm | all isNullary cs = do+  hdr <- mkHdr lhs cs enm+  let loc = getSLoc enm++      mkFrom (Constr _ _ c _) i =+        eEqn [EVar c] $ ELit loc (LInt i)+      mkTo (Constr _ _ c _) i =+        eEqn [ELit loc (LInt i)] $ EVar c++      ident = mkIdentSLoc loc+      iFromEnum = ident "fromEnum"+      iToEnum = ident "toEnum"+      fromEqns = zipWith mkFrom cs [0..]+      toEqns   = zipWith mkTo   cs [0..]+      inst = Instance hdr [BFcn iFromEnum fromEqns, BFcn iToEnum toEqns]+  --traceM $ showEDefs [inst]+  return [inst]+derEnum (c, _) _ e = tcError (getSLoc e) $ "Cannot derive Enum " ++ show c++isNullary :: Constr -> Bool+isNullary (Constr _ _ _ flds) = either null null flds++--------------------------------------------++-- XXX should use mkQIdent derShow :: Deriver-derShow lhs cs eord = do-  hdr <- mkHdr lhs cs eord-  let loc = getSLoc eord+derShow lhs cs eshow = do+  hdr <- mkHdr lhs cs eshow+  let loc = getSLoc eshow       mkEqn c@(Constr _ _ nm flds) =         let (xp, xs) = mkPat c "x"         in  eEqn [varp, xp] $ showRHS nm xs flds
src/MicroHs/Desugar.hs view
@@ -48,11 +48,11 @@       in  zipWith dsConstr [0::Int ..] cs     Newtype _ (Constr _ _ c _) _ -> [ (qualIdent mn c, Lit (LPrim "I")) ]     Type _ _ -> []-    Fcn f eqns -> [(f,  wrapTick flags.useTicks f $ dsEqns (getSLoc f) eqns)]+    Fcn f eqns -> [(f,  wrapTick (useTicks flags) f $ dsEqns (getSLoc f) eqns)]     Sign _ _ -> []     KindSign _ _ -> []     Import _ -> []-    ForImp ie i _ -> [(i, Lit $ LForImp ie)]+    ForImp ie i t -> [(i, Lit $ LForImp (fromMaybe (unIdent (unQualIdent i)) ie)  (CType t))]     Infix _ _ -> []     Class ctx (c, _) _ bs ->       let f = mkIdent "$f"@@ -98,7 +98,7 @@         mkArm (Eqn ps alts) =           let ps' = map dsPat ps           in  (ps', dsAlts alts)-        ex = runS loc (vs ++ xs) (map Var xs) (map mkArm eqns)+        ex = dsCaseExp loc (vs ++ xs) (map Var xs) (map mkArm eqns)       in foldr Lam ex xs     _ -> impossible @@ -123,6 +123,12 @@  dsBinds :: [EBind] -> Exp -> Exp dsBinds [] ret = ret+dsBinds ads@(BPat (ELazy False p) e : ds) ret =+  -- Turn a strict let/where into a case.+  -- XXX This does no reordering of bindings.+  let rest = dsBinds ds ret+      used = allVarsExp ret ++ allVarsExpr (ELet ads (ETuple []))+  in  dsCaseExp (getSLoc p) used [dsExpr e] [([dsPat p], const rest)] dsBinds ads ret =   let     avs = concatMap allVarsBind ads@@ -131,7 +137,7 @@     ds = concat $ zipWith dsBind pvs ads     node ie@(i, e) = (ie, i, freeVars e)     gr = map node $ checkDup ds-    asccs = stronglyConnComp (<=) gr+    asccs = stronglyConnComp gr     loop _ [] = ret     loop vs (AcyclicSCC (i, e) : sccs) =       letE i e $ loop vs sccs@@ -141,8 +147,8 @@           | i' `elem` freeVars e' -> letRecE i' e' $ loop vs sccs           | otherwise -> letE i' e' $ loop vs sccs     loop vvs (CyclicSCC ies : sccs) =-      let (v:vs) = vvs-      in mutualRec v ies (loop vs sccs)+      let (v:vs) = vvs in+      mutualRec v ies (loop vs sccs)   in loop mvs asccs  letE :: Ident -> Exp -> Exp -> Exp@@ -167,7 +173,7 @@ --    in  body mutualRec :: Ident -> [LDef] -> Exp -> Exp mutualRec v ies body =-  let (is, es) = unzip ies+  let !(is, es) = unzip ies       n = length is       ev = Var v       one m i = letE i (mkTupleSelE m n ev)@@ -245,7 +251,7 @@     xs = [mkIdent ("x" ++ show i) | i <- [1 .. n] ]   in App tup (foldr Lam (Var (xs !! m)) xs) --- Handle special syntax for lists and tuples+-- Handle special syntax for lists and tuples. dsPat :: HasCallStack =>          EPat -> EPat dsPat apat =@@ -260,6 +266,7 @@     ELit _ _ -> apat     ENegApp _ -> apat     EViewPat _ _ -> apat+    ELazy _ pat -> dsPat pat   -- XXX for now, just ignore ~ and !     _ -> impossible  iNil :: Ident@@ -296,10 +303,12 @@  ---------------- -dsCase :: SLoc -> Expr -> [ECaseArm] -> Exp+dsCase :: HasCallStack => SLoc -> Expr -> [ECaseArm] -> Exp dsCase loc ae as =-  runS loc (allVarsExpr (ECase ae as)) [dsExpr ae] (map mkArm as)+  dsCaseExp loc usedVars [dsExpr ae] (map mkArm as)   where+    usedVars = allVarsExpr (ECase ae as)+    mkArm :: ECaseArm -> Arm     mkArm (p, alts) =       let p' = dsPat p       in  ([p'], dsAlts alts)@@ -307,7 +316,7 @@ type MState = [Ident]  -- supply of unused variables.  type M a = State MState a-type Arm = ([EPat], Exp -> Exp)  -- boolean indicates that the arm has guards, i.e., it uses the default+type Arm = ([EPat], Exp -> Exp)  -- Patterns, and a function that expects the default (which might be ignored). type Matrix = [Arm]  newIdents :: Int -> M [Ident]@@ -322,8 +331,8 @@   put (tail is)   return (head is) -runS :: SLoc -> [Ident] -> [Exp] -> Matrix -> Exp-runS loc used ss mtrx =+dsCaseExp :: HasCallStack => SLoc -> [Ident] -> [Exp] -> Matrix -> Exp+dsCaseExp loc used ss mtrx =   let     supply = newVars "$x" used     ds xs aes =@@ -350,7 +359,7 @@   case leftMost aarm of     EVar _ -> do       -- Find all variables, substitute with i, and proceed-      let (vars, nvars) = span (isPVar . leftMost) aarms+      let !(vars, nvars) = span (isPVar . leftMost) aarms           vars' = map (sub . unAt i) vars           sub (EVar x : ps, rhs) = (ps, substAlpha x i . rhs)           sub _ = impossible
src/MicroHs/EncodeData.hs view
@@ -55,8 +55,8 @@       let         arm (c, k) =           let-            (vs, rhs) = head $ [ (xs, e) | (SPat (ConData _ i _) xs, e) <- pes, c == i ] ++-                               [ (replicate k dummyIdent, dflt) ]+            !(vs, rhs) = head $ [ (xs, e) | (SPat (ConData _ i _) xs, e) <- pes, c == i ] +++                                [ (replicate k dummyIdent, dflt) ]           in lams vs rhs       in  apps var (map arm cs)     _ -> undefined@@ -133,7 +133,7 @@     [(i, xs, e)] | hi - lo == 1 -> match tup xs e                  | otherwise    -> encIf (eqInt n i) (match tup xs e) dflt     _ ->-      let (pesl, pesh@((i, _, _):_)) = splitAt (length pes `quot` 2) pes+      let !(pesl, pesh@((i, _, _):_)) = splitAt (length pes `quot` 2) pes       in  encIf (ltInt n i) (caseTree n tup lo i pesl dflt) (caseTree n tup i hi pesh dflt)  where    eqInt :: Exp -> Int -> Exp
src/MicroHs/Expr.hs view
@@ -8,6 +8,7 @@   Expr(..), eLam, eEqn, eEqns, showExpr, eqExpr,   Listish(..),   Lit(..), showLit,+  CType(..),   EBind(..), showEBind, showEBinds,   Eqn(..),   EStmt(..),@@ -31,7 +32,7 @@   eApps,   lhsToType,   subst,-  allVarsExpr, allVarsBind,+  allVarsExpr, allVarsBind, allVarsEqns,   setSLocExpr,   errorMessage,   Assoc(..), Fixity,@@ -40,12 +41,14 @@   eForall,   eDummy,   impossible, impossibleShow,+  getArrow, getArrows,   ) where import Prelude hiding ((<>))+import Control.Arrow(first) import Data.List import Data.Maybe import MicroHs.Ident-import Text.PrettyPrint.HughesPJ+import Text.PrettyPrint.HughesPJ hiding(first) import GHC.Stack  type IdentModule = Ident@@ -70,7 +73,7 @@   | Sign [Ident] EType   | KindSign Ident EKind   | Import ImportSpec-  | ForImp String Ident EType+  | ForImp (Maybe String) Ident EType   | Infix Fixity [Ident]   | Class [EConstraint] LHS [FunDep] [EBind]  -- XXX will probable need initial forall with FD   | Instance EConstraint [EBind]  -- no deriving yet@@ -100,7 +103,6 @@   | EListish Listish   | EDo (Maybe Ident) [EStmt]   | ESectL Expr Ident-  -- NOTE: (- e) is not a section, it's a negation.  So we reuse ESect to mean negation in this case.   | ESectR Ident Expr   | EIf Expr Expr Expr   | ESign Expr EType@@ -108,13 +110,15 @@   | EUpdate Expr [EField]   | ESelect [Ident]   -- only in patterns-  | EAt Ident Expr+  | EAt Ident EPat   | EViewPat Expr EPat-  -- Only while type checking+  | ELazy Bool EPat           -- True indicates ~p, False indicates !p+  -- only in types+  | EForall [IdKind] EType+  -- only while type checking   | EUVar Int-  -- Constructors after type checking+  -- only after type checking   | ECon Con-  | EForall [IdKind] Expr -- only in types --DEBUG  deriving (Show)  data EField@@ -181,11 +185,16 @@   | LStr String   | LUStr String            -- UTF-8 encoded string   | LPrim String-  | LForImp String+  | LForImp String CType   | LTick String --DEBUG  deriving (Show)   deriving (Eq) +-- A type of a C FFI function+newtype CType = CType EType+instance Eq CType where+  _ == _  =  True    -- Just ignore the CType+ type ECaseArm = (EPat, EAlts)  data EStmt = SBind EPat Expr | SThen Expr | SLet [EBind]@@ -227,6 +236,7 @@     ESign p _ -> patVars p     EAt i p -> i `add` patVars p     EViewPat _ p -> patVars p+    ELazy _ p -> patVars p     ECon _ -> []     EUpdate _ fs -> concatMap field fs     ENegApp _ -> []@@ -328,6 +338,7 @@   getSLoc (ESelect is) = getSLoc (head is)   getSLoc (EAt i _) = getSLoc i   getSLoc (EViewPat e _) = getSLoc e+  getSLoc (ELazy _ e) = getSLoc e   getSLoc (EUVar _) = error "getSLoc EUVar"   getSLoc (ECon c) = getSLoc c   getSLoc (EForall [] e) = getSLoc e@@ -412,9 +423,8 @@           Expr -> Expr -> Bool eqExpr (EVar i) (EVar i') = i == i' eqExpr (ELit _ l) (ELit _ l') = l == l'-eqExpr (EVar _) (EApp _ _) = False eqExpr (EApp f a) (EApp f' a') = eqExpr f f' && eqExpr a a'-eqExpr (EApp _ _) (EVar _) = False+eqExpr (EUVar r) (EUVar r') = r == r' eqExpr _ _ = False -- XXX good enough for instances --eqExpr e1 e2 = error $ "eqExpr: unimplemented " ++ showExpr e1 ++ " == " ++ showExpr e2 @@ -436,6 +446,9 @@     BPat p e -> allVarsPat p . allVarsExpr' e     BSign i _ -> (i:) +allVarsEqns :: [Eqn] -> [Ident]+allVarsEqns eqns = composeMap allVarsEqn eqns []+ allVarsEqn :: Eqn -> DList Ident allVarsEqn eqn =   case eqn of@@ -476,6 +489,7 @@     ESelect _ -> id     EAt i e -> (i :) . allVarsExpr' e     EViewPat e p -> allVarsExpr' e . allVarsExpr' p+    ELazy _ p -> allVarsExpr' p     EUVar _ -> id     ECon c -> (conIdent c :)     EForall iks e -> (map (\ (IdKind i _) -> i) iks ++) . allVarsExpr' e@@ -529,6 +543,9 @@ instance Show Eqn where   show eqn = render $ ppEqns (text "_") (text "=") [eqn] +instance Show EDef where+  show d = showEDefs [d]+ showExpr :: Expr -> String showExpr = render . ppExpr @@ -565,7 +582,7 @@       case mis of         Nothing -> empty         Just (h, is) -> text (if h then " hiding" else "") <> parens (hsep $ punctuate (text ",") (map ppImportItem is))-    ForImp ie i t -> text ("foreign import ccall " ++ show ie) <+> ppIdent i <+> text "::" <+> ppEType t+    ForImp ie i t -> text "foreign import ccall" <+> maybe empty (text . show) ie <+> ppIdent i <+> text "::" <+> ppEType t     Infix (a, p) is -> text ("infix" ++ f a) <+> text (show p) <+> hsep (punctuate (text ", ") (map ppIdent is))       where f AssocLeft = "l"; f AssocRight = "r"; f AssocNone = ""     Class sup lhs fds bs -> ppWhere (text "class" <+> ppCtx sup <+> ppLHS lhs <+> ppFunDeps fds) bs@@ -650,7 +667,9 @@     ESelect is -> parens $ hcat $ map (\ i -> text "." <> ppIdent i) is     EAt i e -> ppIdent i <> text "@" <> ppExpr e     EViewPat e p -> parens $ ppExpr e <+> text "->" <+> ppExpr p-    EUVar i -> text ("a" ++ show i)+    ELazy True p -> text "~" <> ppExpr p+    ELazy False p -> text "!" <> ppExpr p+    EUVar i -> text ("_a" ++ show i)     ECon c -> ppCon c     EForall iks e -> ppForall iks <+> ppEType e --  where@@ -703,7 +722,7 @@     LStr s     -> show s     LUStr s    -> show s     LPrim s    -> s-    LForImp s  -> '^' : s+    LForImp s _-> '^' : last (words s)  -- XXX needs improvement     LTick s    -> '!' : s  ppEStmt :: EStmt -> Doc@@ -763,3 +782,17 @@                   HasCallStack =>                   (Show a, HasLoc a) => a -> b impossibleShow a = error $ "impossible: " ++ show (getSLoc a) ++ " " ++ show a++-----------++-- Probably belongs somewhere else+getArrow :: EType -> Maybe (EType, EType)+getArrow (EApp (EApp (EVar n) a) b) =+  if isIdent "->" n || isIdent "Primitives.->" n then Just (a, b) else Nothing+getArrow _ = Nothing++getArrows :: EType -> ([EType], EType)+getArrows at = +  case getArrow at of+    Nothing -> ([], at)+    Just (t, r) -> first (t:) (getArrows r)
+ src/MicroHs/FFI.hs view
@@ -0,0 +1,175 @@+module MicroHs.FFI(makeFFI) where+import Data.Function+import Data.List+import Data.Maybe+import MicroHs.Desugar(LDef)+import MicroHs.Exp+import MicroHs.Expr+import MicroHs.Ident+import MicroHs.Flags++makeFFI :: Flags -> [LDef] -> String+makeFFI _ ds =+  let ffiImports = [ (parseImpEnt (getSLoc t) f, t) | (_, Lit (LForImp f (CType t))) <- ds ]+      wrappers = [ t | (ImpWrapper, t) <- ffiImports]+      dynamics = [ t | (ImpDynamic, t) <- ffiImports]+      includes = "mhsffi.h" : catMaybes [ inc | (ImpStatic inc _addr _name, _) <- ffiImports ]+      addrs    = [ (name, t) | (ImpStatic _inc True  name, t) <- ffiImports ]+      funcs    = [ (name, t) | (ImpStatic _inc False name, t) <- ffiImports, name `notElem` runtimeFFI ]+      funcs'   = uniqFst funcs+      addrs'   = uniqFst addrs+  in+    if not (null wrappers) || not (null dynamics) then error "Unimplemented FFI feature" else+    unlines $+      map (\ fn -> "#include \"" ++ fn ++ "\"") includes +++      map mkStatic funcs' +++      map mkAddr   addrs' +++      ["static struct ffi_entry table[] = {"] +++      map (mkFuncEntry . fst) funcs' +++      map (mkAddrEntry . fst) addrs' +++      ["{ 0,0 }",+       "};",+       "struct ffi_entry *xffi_table = table;"+      ]++uniqFst :: [(String, EType)] -> [(String, EType)]+uniqFst = map head . groupBy ((==) `on` fst) . sortBy (compare `on` fst)++data ImpEnt = ImpStatic (Maybe String) Bool String | ImpDynamic | ImpWrapper++-- "[static] [name.h] [&] [name]"+-- "dynamic"+-- "wrapper"+parseImpEnt :: SLoc -> String -> ImpEnt+parseImpEnt loc s =+  case words s of+    ["dynamic"] -> ImpDynamic+    ["wrapper"] -> ImpWrapper+    "static" : r -> rest r+    r            -> rest r+ where rest (inc : r) | isSuffixOf ".h" inc = rest' (ImpStatic (Just inc)) r+       rest r                               = rest' (ImpStatic Nothing)    r+       rest' c ("&" : r) = rest'' (c  True) r+       rest' c ['&' : r] = rest'' (c  True) [r]+       rest' c r         = rest'' (c False) r+       rest'' c [n] = c n+       rest'' _ _ = errorMessage loc $ "bad foreign import " ++ show s++mkFuncEntry :: String -> String+mkFuncEntry f = "{ \"" ++ f ++ "\", mhs_" ++ f ++ "},"++mkAddrEntry :: String -> String+mkAddrEntry f = "{ \"&" ++ f ++ "\", mhs_addr_" ++ f ++ "},"++iIO :: Ident+iIO = mkIdent "Primitives.IO"++iUnit :: Ident+iUnit = mkIdent "Primitives.()"++iPtr :: Ident+iPtr = mkIdent "Primitives.Ptr"++iFunPtr :: Ident+iFunPtr = mkIdent "Primitives.FunPtr"++mkStatic :: (String, EType) -> String+mkStatic (fn, t) =+  let !(as, ior) = getArrows t+      r = checkIO ior+      n = length as+      call = fn ++ "(" ++ intercalate ", " (zipWith mkArg as [0..]) ++ ")"+      fcall =+        if isUnit r then+          call ++ "; mhs_from_Unit(s, " ++ show n ++ ")"+        else+          mkRet r n call+  in  mkMhsFun fn fcall++mkMhsFun :: String -> String -> String+mkMhsFun fn body = "void mhs_" ++ fn ++ "(int s) { " ++ body ++ "; }"++checkIO :: EType -> EType+checkIO iot =+  case getApp iIO iot of+    Nothing -> errorMessage (getSLoc iot) $ "foreign return type must be IO"+    Just t  -> t++getApp :: Ident -> EType -> Maybe EType+getApp i (EApp (EVar i') t) | i == i' = Just t+getApp _ _ = Nothing++isUnit :: EType -> Bool+isUnit (EVar unit) = unit == iUnit+isUnit _ = False++mkRet :: EType -> Int -> String -> String+mkRet t n call = "mhs_from_" ++ cTypeName t ++ "(s, " ++ show n ++ ", " ++ call ++ ")"++mkArg :: EType -> Int -> String+mkArg t i = "mhs_to_" ++ cTypeName t ++ "(s, " ++ show i ++ ")"++mkAddr :: (String, EType) -> String+mkAddr (fn, iot) =+  let r = checkIO iot+      (s, _) =+        case getApp iPtr r of+          Just t  -> ("", t)+          Nothing ->+            case getApp iFunPtr r of+              Just t  -> ("(HsFunPtr)", t)+              Nothing -> errorMessage (getSLoc r) $ "foreign & must be Ptr/FunPtr"+      body = mkRet r 0 (s ++ "&" ++ fn)+  in  mkMhsFun ("addr_" ++ fn) body++cTypeName :: EType -> String+cTypeName (EApp (EVar ptr) _t) | ptr == iPtr = "Ptr"+                               | ptr == iFunPtr = "FunPtr"+cTypeName (EVar i) | Just c <- lookup (unIdent i) cTypes = c+cTypeName t = errorMessage (getSLoc t) $ "Not a valid C type: " ++ showEType t++cTypes :: [(String, String)]+cTypes =+  -- These are temporary+  [ ("Primitives.FloatW", "FloatW")+  , ("Primitives.Int",    "Int")+  , ("Primitives.Word",   "Word")+  , ("Data.Word.Word8",   "Word8")+  , ("Primitives.()",     "Unit")+  , ("System.IO.Handle",  "Ptr")+  ] ++ map (\ t -> ("Foreign.C.Types." ++ t, t))+  [ "CChar",+    "CSChar",+    "CUChar",+    "CShort",+    "CUShort",+    "CInt",+    "CUInt",+    "CLong",+    "CULong",+    "CPtrdiff",+    "CSize",+    "CSSize",+    "CLLong",+    "CULLong"+  ]++-- These are already in the runtime+runtimeFFI :: [String]+runtimeFFI = [+  "GETRAW", "GETTIMEMILLI", "acos", "add_FILE", "add_utf8", "asin", "atan", "atan2", "calloc", "closeb",+  "cos", "exp", "flushb", "fopen", "free", "getb", "getenv", "iswindows", "log", "lz77c", "malloc",+  "md5Array", "md5BFILE", "md5String", "memcpy", "memmove", +  "putb", "sin", "sqrt", "system", "tan", "tmpname", "ungetb", "unlink",+  "peekPtr", "pokePtr", "pokeWord", "peekWord",+  "add_lz77_compressor", "add_lz77_decompressor",+  "peek_uint8", "poke_uint8", "peek_uint16", "poke_uint16", "peek_uint32", "poke_uint32", "peek_uint64", "poke_uint64",+  "peek_int8", "poke_int8", "peek_int16", "poke_int16", "peek_int32", "poke_int32", "peek_int64", "poke_int64",+  "peek_ushort", "poke_ushort", "peek_short", "poke_short",+  "peek_uint", "poke_uint", "peek_int", "poke_int",+  "peek_ulong", "poke_ulong", "peek_long", "poke_long",+  "peek_ullong", "poke_ullong", "peek_llong", "poke_llong",+  "peek_flt", "poke_flt",+  "sizeof_int", "sizeof_long", "sizeof_llong",+  "opendir", "closedir", "readdir", "c_d_name", "chdir"+  ]
src/MicroHs/Flags.hs view
@@ -1,17 +1,36 @@-module MicroHs.Flags(Flags(..), verbosityGT) where-import Prelude+module MicroHs.Flags(Flags(..), verbosityGT, defaultFlags) where  data Flags = Flags {   verbose    :: Int,        -- verbosity level   runIt      :: Bool,       -- run instead of compile-  paths      :: [String],   -- module search path+  mhsdir     :: FilePath,   -- where MHS files live+  paths      :: [FilePath], -- module search path   output     :: String,     -- output file   loading    :: Bool,       -- show loading message   readCache  :: Bool,       -- read and use cache   writeCache :: Bool,       -- generate cache-  useTicks   :: Bool        -- emit ticks+  useTicks   :: Bool,       -- emit ticks+  doCPP      :: Bool,       -- run ccphs on input files+  cppArgs    :: [String],   -- flags for CPP+  compress   :: Bool        -- compress generated combinators   }   --deriving (Show)  verbosityGT :: Flags -> Int -> Bool-verbosityGT flags v = flags.verbose > v+verbosityGT flags v = verbose flags > v++defaultFlags :: FilePath -> Flags+defaultFlags dir = Flags {+  verbose    = 0,+  runIt      = False,+  mhsdir     = dir,+  paths      = [".", dir ++ "/lib"],+  output     = "out.comb",+  loading    = False,+  readCache  = False,+  writeCache = False,+  useTicks   = False,+  doCPP      = False,+  cppArgs    = [],+  compress   = False+  }
src/MicroHs/Graph.hs view
@@ -35,15 +35,15 @@  stronglyConnComp         :: forall key node .-           (key -> key -> Bool)-        -> [(node, key, [key])]+           Ord key+        => [(node, key, [key])]                 -- ^ The graph: a list of nodes uniquely identified by keys,                 -- with a list of keys of nodes this node has edges to.                 -- The out-list may contain keys that don't correspond to                 -- nodes of the graph; such edges are ignored.         -> [SCC node]-stronglyConnComp le edges0-  = map get_node (stronglyConnCompR le edges0)+stronglyConnComp edges0+  = map get_node (stronglyConnCompR (<=) edges0)   where     get_node (AcyclicSCC (n, _, _)) = AcyclicSCC n     get_node (CyclicSCC triples)    = CyclicSCC [n | (n,_,_) <- triples]
src/MicroHs/Ident.hs view
@@ -1,9 +1,9 @@ -- Copyright 2023 Lennart Augustsson -- See LICENSE file for full license. module MicroHs.Ident(-  Line, Col, Loc,+  Line, Col,   Ident(..),-  mkIdent, mkIdentLoc, unIdent, isIdent,+  mkIdent, unIdent, isIdent,   qualIdent, showIdent, setSLocIdent,   ppIdent,   mkIdentSLoc,@@ -12,7 +12,7 @@   unQualIdent,   unQualString,   addIdentSuffix,-  SLoc(..), noSLoc, isNoSLoc,+  SLoc(..), noSLoc,   showSLoc,   ) where import Data.Eq@@ -23,7 +23,6 @@  type Line = Int type Col  = Int-type Loc  = (Line, Col)  data SLoc = SLoc !FilePath !Line !Col --  deriving (Eq)@@ -50,19 +49,12 @@ noSLoc :: SLoc noSLoc = SLoc "" 0 0 -isNoSLoc :: SLoc -> Bool-isNoSLoc (SLoc _ 0 0) = True-isNoSLoc _ = False- mkIdent :: String -> Ident mkIdent = Ident noSLoc  mkIdentSLoc :: SLoc -> String -> Ident mkIdentSLoc = Ident -mkIdentLoc :: FilePath -> Loc -> String -> Ident-mkIdentLoc fn (l, c) s = Ident (SLoc fn l c) s- unIdent :: Ident -> String unIdent (Ident _ s) = s @@ -107,8 +99,10 @@   in isUpper c || c == ':' || c == ',' || i == "[]"  || i == "()"  isOperChar :: Char -> Bool-isOperChar c = elem c "@\\=+-:<>.!#$%^&*/|~?\x2237\x21d2\x2192\x2190\x2200"---                                             ::    =>    ->    <- forall+isOperChar c = elem c operChars+  where operChars :: String+        operChars = "@\\=+-:<>.!#$%^&*/|~?\x2237\x21d2\x2192\x2190\x2200"+--                                           ::    =>    ->    <- forall  isIdentChar :: Char -> Bool isIdentChar c = isLower_ c || isUpper c || isDigit c || c == '\''
src/MicroHs/IdentMap.hs view
@@ -29,6 +29,11 @@     (Map a)        -- right subtree --  deriving(Show) +{-+instance Show a => Show (Map a) where+  show m = show (toList m)+-}+ empty :: forall a . Map a empty = Nil 
src/MicroHs/Interactive.hs view
@@ -3,12 +3,17 @@ import Data.List import Control.Exception import MicroHs.Compile+import MicroHs.CompileCache import MicroHs.Desugar(LDef)+import MicroHs.Expr(EType, showEType) import MicroHs.Flags-import MicroHs.Ident(mkIdent)+import MicroHs.Ident(mkIdent, Ident)+import qualified MicroHs.IdentMap as M import MicroHs.Parse import MicroHs.StateIO+import MicroHs.SymTab(Entry(..)) import MicroHs.Translate+import MicroHs.TypeCheck(ValueExport(..), TypeExport(..), TModule(..)) import Unsafe.Coerce import System.Console.SimpleReadline import Compat@@ -30,7 +35,7 @@  preamble :: String preamble = "module " ++ interactiveName ++ "(module " ++ interactiveName ++-           ") where\nimport Prelude\nimport System.IO.PrintOrRun\ndefault (Integer, Double)\n"+           ") where\nimport Prelude\nimport System.IO.PrintOrRun\ndefault (Integer, Double, String)\n"  start :: I () start = do@@ -89,6 +94,14 @@       updateLines (unlines . filter (not . isPrefixOf del) . lines)       return True     )+  , ("type", \ line -> do+      showType line+      return True+    )+  , ("kind", \ line -> do+      showKind line+      return True+    )   , ("help", \ _ -> do       liftIO $ putStrLn helpText       return True@@ -104,20 +117,53 @@     Right _  -> return ()  helpText :: String-helpText = "Commands:\n  :quit      quit MicroHs\n  :reload    reload modules\n  :clear     clear all definitions\n  :delete d  delete definition(s) d\n  :help      this text\n  expr       evaluate expression\n  defn       add top level definition\n"+helpText = "\+  \Commands:\n\+  \:quit      quit MicroHs\n\+  \:reload    reload modules\n\+  \:clear     clear all definitions\n\+  \:delete d  delete definition(s) d\n\+  \:type e    show type of e\n\+  \:kind t    show type of t\n\+  \:help      this text\n\+  \expr       evaluate expression\n\+  \defn       add top level definition\n\+  \"  updateLines :: (String -> String) -> I ()-updateLines f = modify $ \ (ls, flgs, cache) -> (f ls, flgs, cache)+updateLines f = modify $ \ (ls, flgs, cash) -> (f ls, flgs, cash) +updateCache :: (Cache -> Cache) -> I ()+updateCache f = modify $ \ (ls, flgs, cash) -> (ls, flgs, f cash)+ interactiveName :: String interactiveName = "Interactive" +interactiveId :: Ident+interactiveId = mkIdent interactiveName+ itName :: String itName = "_it" +itTypeName :: String+itTypeName = "Type_it"++itIOName :: String+itIOName = "_itIO"+ mkIt :: String -> String-mkIt l = itName ++ " :: IO ()\n" ++ itName ++ " = printOrRun (" ++ l ++ ")\n"+mkIt l =+  itName ++ " = " ++ l ++ "\n" +mkItIO :: String -> String+mkItIO l =+  mkIt l +++  itIOName ++ " = printOrRun " ++ itName ++ "\n"++mkTypeIt :: String -> String+mkTypeIt l =+  "type " ++ itTypeName ++ " = " ++ l ++ "\n"+ err :: Exn -> IO () err e = err' $ exnToString e @@ -127,45 +173,44 @@ oneline :: String -> I () oneline line = do   (ls, _, _) <- get-  -- Try adding the line as a definition   let lls = ls ++ line ++ "\n"-  case parse pTop "" lls of-    Right _ -> do---      liftIO $ putStrLn "pTop succeeded"-      -- Can parse as a definition, so compile it and report any errors.-      defTest <- tryCompile lls-      case defTest of-        Right _ -> updateLines (const lls)-        Left  e -> liftIO $ err e-    Left  _ -> do---      liftIO $ putStrLn "pTop failed"-      -- Cannot parse as a definition.-      -- Try parsing it as an expression, and make it a definition-      case parse pExprTop "" line of-        Right _ -> do---          liftIO $  putStrLn "pExprTop succeeded"-          exprTest <- tryCompile (ls ++ "\n" ++ mkIt line)-          case exprTest of-            Right m -> evalExpr m-            Left  e -> liftIO $ err e-        Left  e -> liftIO $ err' e+      def = do+        defTest <- tryCompile lls+        case defTest of+          Right _ -> updateLines (const lls)+          Left  e -> liftIO $ err e+      expr = do+        exprTest <- tryCompile (ls ++ "\n" ++ mkItIO line)+        case exprTest of+          Right m -> evalExpr m+          Left  e -> liftIO $ err e+  -- First try to parse as a definition,+  tryParse pTopModule lls def $ \ _ ->+    -- if that fails, parse as an expression.+    tryParse pExprTop line expr $+      liftIO . err' +tryParse :: forall a . Show a => P a -> String -> I () -> (String -> I ()) -> I ()+tryParse p s ok bad =+  case parse p "" s of+    Right _ -> ok+    Left  e -> bad e+ tryCompile :: String -> I (Either Exn [LDef]) tryCompile file = do-  (ls, flgs, cache) <- get-  let-    iid = mkIdent interactiveName+  updateCache (deleteFromCache interactiveId)+  (_, flgs, cash) <- get   liftIO $ writeFile (interactiveName ++ ".hs") file-  res <- liftIO $ try $ compileCacheTop flgs iid cache+  res <- liftIO $ try $ compileCacheTop flgs interactiveId cash   case res of     Left e -> return (Left e)-    Right (m, cache') -> do-      put (ls, flgs, deleteFromCache iid cache')+    Right ((_, m), cash') -> do+      updateCache (const cash')       return (Right m)  evalExpr :: [LDef] -> I () evalExpr cmdl = do-  let ares = translate (mkIdent (interactiveName ++ "." ++ itName), cmdl)+  let ares = translate (mkIdent (interactiveName ++ "." ++ itIOName), cmdl)       res = unsafeCoerce ares :: IO ()   mval <- liftIO $ try (seq res (return res))   liftIO $@@ -176,3 +221,45 @@         case mio of           Left  e -> err e           Right _ -> return ()++showType :: String -> I ()+showType line = do+  (ls, _, _) <- get+  res <- tryCompile (ls ++ "\n" ++ mkIt line)+  case res of+    Right _ -> do+      (_, _, cash) <- get+      let t = getTypeInCache cash (mkIdent itName)+      liftIO $ putStrLn $ showEType t+    Left  e ->+      liftIO $ err e++showKind :: String -> I ()+showKind line = do+  (ls, _, _) <- get+  res <- tryCompile (ls ++ "\n" ++ mkTypeIt line)+  case res of+    Right _ -> do+      (_, _, cash) <- get+      let t = getKindInCache cash (mkIdent itTypeName)+      liftIO $ putStrLn $ showEType t+    Left  e ->+      liftIO $ err e++getCModule :: Cache -> CModule+getCModule cash =+  case M.lookup interactiveId (cache cash) of+    Nothing -> undefined   -- this cannot happen+    Just cm -> cm++getTypeInCache :: Cache -> Ident -> EType+getTypeInCache cash i =+  case tModuleOf (getCModule cash) of+    TModule _ _ _ _ _ _ vals _ ->+      head $ [ t | ValueExport i' (Entry _ t) <- vals, i == i' ] ++ [undefined]++getKindInCache :: Cache -> Ident -> EType+getKindInCache cash i =+  case tModuleOf (getCModule cash) of+    TModule _ _ tys _ _ _ _ _ ->+      head $ [ k | TypeExport i' (Entry _ k) _ <- tys, i == i' ] ++ [undefined]
src/MicroHs/Lex.hs view
@@ -12,17 +12,20 @@ import Compat  data Token-  = TIdent  Loc [String] String  -- identifier-  | TString Loc String           -- String literal-  | TChar   Loc Char             -- Char literal-  | TInt    Loc Integer          -- Integer literal-  | TRat    Loc Rational         -- Rational literal (i.e., decimal number)-  | TSpec   Loc Char             -- one of ()[]{},`;-                                 -- for synthetic {} we use <>-  | TError  Loc String           -- lexical error-  | TBrace  Loc                  -- {n} in the Haskell report-  | TIndent Loc                  -- <n> in the Haskell report-  | TSelect Loc String           -- special '.foo' token+  = TIdent  SLoc [String] String  -- identifier+  | TString SLoc String           -- String literal+  | TChar   SLoc Char             -- Char literal+  | TInt    SLoc Integer          -- Integer literal+  | TRat    SLoc Rational         -- Rational literal (i.e., decimal number)+  | TSpec   SLoc Char             -- one of ()[]{},`;+                                  -- for synthetic {} we use <>, also+                                  --  .  for record selection+                                  --  ~  for lazy+                                  --  !  for strict+                                  --  NOT YET  @  for type app+  | TError  SLoc String           -- lexical error+  | TBrace  SLoc                  -- {n} in the Haskell report+  | TIndent SLoc                  -- <n> in the Haskell report   | TEnd   | TRaw [Token]   deriving (Show)@@ -39,55 +42,28 @@ showToken (TError _ s) = s showToken (TBrace _) = "TBrace" showToken (TIndent _) = "TIndent"-showToken (TSelect _ s) = "." ++ s showToken TEnd = "EOF" showToken (TRaw _) = "TRaw" -incrLine :: Loc -> Loc-incrLine (l, _) = (l+1, 1)--addCol :: Loc -> Int -> Loc-addCol (l, c) i = (l, c + i)--tabCol :: Loc -> Loc-tabCol (l, c) = (l, ((c + 7) `quot` 8) * 8)--mkLoc :: Line -> Col -> Loc-mkLoc l c = (l, c)--mkLocEOF :: Loc-mkLocEOF = (-1,0)--getCol :: Loc -> Col-getCol (_, c) = c----getLin :: Loc -> Col---getLin (l, _) = l--{-  This is slower and allocates more.-    It needs some strictness, probably-type Loc = Int--incrLine :: Loc -> Loc-incrLine l = (quot l 1000000 + 1) * 1000000 + 1+incrLine :: SLoc -> SLoc+incrLine (SLoc f l _) = SLoc f (l+1) 1 -addCol :: Loc -> Int -> Loc-addCol loc i = loc + i+addCol :: SLoc -> Int -> SLoc+addCol (SLoc f l c) i = SLoc f l (c + i) -mkLoc :: Line -> Col -> Loc-mkLoc l c = l * 1000000 + c+tabCol :: SLoc -> SLoc+tabCol (SLoc f l c) = SLoc f l (((c + 7) `quot` 8) * 8) -getCol :: Loc -> Col-getCol loc = rem loc 1000000+mkLocEOF :: SLoc+mkLocEOF = SLoc "" (-1) 0 -getLin :: Loc -> Line-getLin loc = quot loc 1000000--}+getCol :: SLoc -> Col+getCol (SLoc _ _ c) = c  ---------  -- | Take a location and string and produce a list of tokens-lex :: Loc -> String -> [Token]+lex :: SLoc -> String -> [Token] lex loc (' ':cs)  = lex (addCol loc 1) cs lex loc ('\n':cs) = tIndent (lex (incrLine loc) cs) lex loc ('\r':cs) = lex loc cs@@ -104,30 +80,31 @@ lex loc cs@(d:_) | isUpper d = upperIdent loc loc [] cs lex loc ('0':x:cs) | toLower x == 'x' = hexNumber loc cs lex loc cs@(d:_) | isDigit d = number loc cs-lex loc ('.':d:cs) | isLower_ d =-  case span isIdentChar cs of-    (ds, rs) -> TSelect loc (d:ds) : lex (addCol loc $ 1 + length ds) rs-lex loc (d:cs) | isOperChar d  =+lex loc ('.':cs@(d:_)) | isLower_ d =+  TSpec loc '.' : lex (addCol loc 1) cs+lex loc (c:cs@(d:_)) | (c == '!' || c == '~') && (d == '(' || isIdentChar d) =+  TSpec loc c : lex (addCol loc 1) cs+lex loc (d:cs) | isOperChar d =   case span isOperChar cs of     (ds, rs) -> TIdent loc [] (d:ds) : lex (addCol loc $ 1 + length ds) rs lex loc (d:cs) | isSpec d  = TSpec loc d : lex (addCol loc 1) cs lex loc ('"':cs) =-  case takeChars loc (TString loc) '"' 0 [] cs of-    (t, n, rs) -> t : lex (addCol loc $ 2 + n) rs+  case takeChars loc (TString loc) '"' (addCol loc 1) [] cs of+    (t, loc', rs) -> t : lex loc' rs lex loc ('\'':cs) =   let tchar [c] = TChar loc c       tchar _ = TError loc "Illegal Char literal"-  in  case takeChars loc tchar '\'' 0 [] cs of  -- XXX head of-        (t, n, rs) -> t : lex (addCol loc $ 2 + n) rs+  in  case takeChars loc tchar '\'' (addCol loc 1) [] cs of  -- XXX head of+        (t, loc', rs) -> t : lex loc' rs lex loc (d:_) = [TError loc $ "Unrecognized input: " ++ show d] lex _ [] = [] -hexNumber :: Loc -> String -> [Token]+hexNumber :: SLoc -> String -> [Token] hexNumber loc cs =   case span isHexDigit cs of     (ds, rs) -> TInt loc (readHex ds) : lex (addCol loc $ length ds + 2) rs -number :: Loc -> String -> [Token]+number :: SLoc -> String -> [Token] number loc cs =   case span isDigit cs of     (ds, rs) | null rs || not (head rs == '.') || (take 2 rs) == ".." ->@@ -148,17 +125,18 @@     expo _ = Nothing  -- Skip a {- -} style comment-skipNest :: Loc -> Int -> String -> [Token]+skipNest :: SLoc -> Int -> String -> [Token] skipNest loc 0 cs           = lex loc cs skipNest loc n ('{':'-':cs) = skipNest (addCol loc 2) (n + 1) cs skipNest loc n ('-':'}':cs) = skipNest (addCol loc 2) (n - 1) cs skipNest loc n ('\n':cs)    = skipNest (incrLine loc)  n      cs+skipNest loc n ('\t':cs)    = skipNest (tabCol loc)    n      cs skipNest loc n ('\r':cs)    = skipNest loc             n      cs skipNest loc n (_:cs)       = skipNest (addCol loc 1)  n      cs skipNest loc _ []           = [TError loc "Unclosed {- comment"]  -- Skip a -- style comment-skipLine :: Loc -> String -> [Token]+skipLine :: SLoc -> String -> [Token] skipLine loc cs@('\n':_) = lex loc cs skipLine loc (_:cs)      = skipLine loc cs skipLine   _ []          = []@@ -170,40 +148,65 @@ tIndent ts@(TIndent _ : _) = ts tIndent ts = TIndent (tokensLoc ts) : ts -takeChars :: Loc -> (String -> Token) -> Char -> Int -> String -> String -> (Token, Int, String)-takeChars loc _ c n _ [] = (TError loc ("Unmatched " ++ [c]), n, [])-takeChars loc fn c n str ('\\':cs) =+takeChars :: SLoc -> (String -> Token) -> Char -> SLoc -> String -> String -> (Token, SLoc, String)+takeChars oloc  _ c loc _ [] = (TError oloc ("Unmatched " ++ [c]), loc, [])+takeChars oloc fn c loc str ('\\':cs) =+  let skipGap l (' ' :rs) = skipGap (addCol l 1) rs+      skipGap l ('\n':rs) = skipGap (incrLine l) rs+      skipGap l ('\r':rs) = skipGap l rs+      skipGap l ('\t':rs) = skipGap (tabCol l) rs+      skipGap l ('\\':rs) = takeChars oloc fn c (addCol l 1) str rs+      skipGap l       rs  = (TError oloc "Bad string gap", l, rs)+  in   case cs of-    '&':rs -> takeChars loc fn c (n+2) str rs+    '&':rs -> takeChars oloc fn c (addCol loc 2) str rs+    d:_ | isSpace d -> skipGap loc cs     _ ->-      case decodeChar (n+1) cs of-        (d, m, rs) -> takeChars loc fn c m (d:str) rs-takeChars   _ fn c n str (d:cs) | c == d = (fn (reverse str), n, cs)-takeChars loc fn c n str (d:cs) = takeChars loc fn c (n+1) (d:str) cs+      case decodeChar cs of+        (d, m, rs) -> takeChars oloc fn c (addCol loc m) (d:str) rs+takeChars   _  fn c loc str (d:cs) | c == d = (fn (reverse str), addCol loc 1, cs)+takeChars oloc fn c loc str (d:cs) = takeChars oloc fn c (addCol loc 1) (d:str) cs -decodeChar :: Int -> String -> (Char, Int, String)-decodeChar n ('n':cs) = ('\n', n+1, cs)-decodeChar n ('a':cs) = ('\a', n+1, cs)-decodeChar n ('b':cs) = ('\b', n+1, cs)-decodeChar n ('f':cs) = ('\f', n+1, cs)-decodeChar n ('r':cs) = ('\r', n+1, cs)-decodeChar n ('t':cs) = ('\t', n+1, cs)-decodeChar n ('v':cs) = ('\v', n+1, cs)-decodeChar n ('x':cs) = conv 16 (n+1) 0 cs-decodeChar n ('o':cs) = conv 8 (n+1) 0 cs-decodeChar n ('^':c:cs) | '@' <= c && c <= '_' = (chr (ord c - ord '@'), n+2, cs)-decodeChar n (cs@(c:_)) | isDigit c = conv 10 n 0 cs-decodeChar n (c  :cs) = (c,    n+1, cs)-decodeChar n []       = ('X',  n,   [])+decodeChar :: String -> (Char, Int, String)+decodeChar ('n':cs) = ('\n', 1, cs)+decodeChar ('a':cs) = ('\a', 1, cs)+decodeChar ('b':cs) = ('\b', 1, cs)+decodeChar ('f':cs) = ('\f', 1, cs)+decodeChar ('r':cs) = ('\r', 1, cs)+decodeChar ('t':cs) = ('\t', 1, cs)+decodeChar ('v':cs) = ('\v', 1, cs)+decodeChar ('x':cs) = conv 16 1 0 cs+decodeChar ('o':cs) = conv 8 1 0 cs+decodeChar ('^':c:cs) | '@' <= c && c <= '_' = (chr (ord c - ord '@'), 2, cs)+decodeChar (cs@(c:_)) | isDigit c = conv 10 0 0 cs+decodeChar (c1:c2:c3:cs) | Just c <- lookup [c1,c2,c3] ctlCodes = (c, 3, cs)+decodeChar (c1:c2:cs) | Just c <- lookup [c1,c2] ctlCodes = (c, 2, cs)+decodeChar (c  :cs) = (c,    1, cs)+decodeChar []       = ('X',  0,   []) +-- Nobody uses these, but it's part of the Haskell Report so...+ctlCodes :: [(String, Char)]+ctlCodes =+  [("NUL", '\NUL'), ("SOH", '\SOH'), ("STX", '\STX'), ("ETX", '\ETX'),+   ("EOT", '\EOT'), ("ENQ", '\ENQ'), ("ACK", '\ACK'), ("BEL", '\BEL'),+   ("BS",  '\BS'),  ("HT",  '\HT'),  ("LF",  '\LF'),  ("VT", '\VT'),+   ("FF",  '\FF'),  ("CR",  '\CR'),  ("SO",  '\SO'),  ("SI", '\SI'), +   ("DLE", '\DLE'), ("DC1", '\DC1'), ("DC2", '\DC2'), ("DC3", '\DC3'),+   ("DC4", '\DC4'), ("NAK", '\NAK'), ("SYN", '\SYN'), ("ETB", '\ETB'),+   ("CAN", '\CAN'), ("EM",  '\EM'),  ("SUB", '\SUB'), ("ESC", '\ESC'),+   ("FS",  '\FS'),  ("GS",  '\GS'),  ("RS",  '\RS'),  ("US",  '\US'), +   ("SP",  '\SP'),  ("DEL", '\DEL')]+ conv :: Int -> Int -> Int -> String -> (Char, Int, String) conv b k r (c:ds) | isHexDigit c, let { n = digitToInt c }, n < b = conv b (k+1) (r * b + n) ds conv _ k r ds = (chr r, k, ds)  isSpec :: Char -> Bool-isSpec c = elem c "()[],{}`;"+isSpec c = elem c specChars+  where specChars :: String+        specChars = "()[],{}`;" -upperIdent :: Loc -> Loc -> [String] -> String -> [Token]+upperIdent :: SLoc -> SLoc -> [String] -> String -> [Token] --upperIdent l c qs acs | trace (show (l, c, qs, acs)) False = undefined upperIdent loc sloc qs acs =   case span isIdentChar acs of@@ -219,7 +222,7 @@            }       _ -> TIdent sloc (reverse qs) ds : lex (addCol loc $ length ds) rs -tIdent :: Loc -> [String] -> String -> [Token] -> [Token]+tIdent :: SLoc -> [String] -> String -> [Token] -> [Token] tIdent loc qs kw ats | elem kw ["let", "where", "do", "of"]                                  = ti : tBrace ats                      | otherwise = ti : ats@@ -231,7 +234,7 @@     tBrace (TIndent _ : ts) = TBrace (tokensLoc ts) : ts     tBrace ts = TBrace (tokensLoc ts) : ts -tokensLoc :: [Token] -> Loc+tokensLoc :: [Token] -> SLoc tokensLoc (TIdent  loc _ _:_) = loc tokensLoc (TString loc _  :_) = loc tokensLoc (TChar   loc _  :_) = loc@@ -241,7 +244,6 @@ tokensLoc (TError  loc _  :_) = loc tokensLoc (TBrace  loc    :_) = loc tokensLoc (TIndent loc    :_) = loc-tokensLoc (TSelect loc _  :_) = loc tokensLoc _                   = mkLocEOF  readHex :: String -> Integer@@ -294,5 +296,15 @@ popLayout :: LexState -> LexState popLayout (LS f) = snd (f Pop) -lexTopLS :: String -> LexState-lexTopLS s = LS $ layoutLS (lex (mkLoc 1 1) s) []+-- Insert TBrace if no 'module'/'{'+lexStart :: [Token] -> [Token]+lexStart ts =+  case skip ts of+    TIdent _ [] "module" : _ -> ts+    TSpec _ '{'          : _ -> ts+    rs                       -> TBrace (tokensLoc ts) : rs+  where skip (TIndent _ : rs) = rs+        skip rs = rs++lexTopLS :: FilePath -> String -> LexState+lexTopLS f s = LS $ layoutLS (lexStart $ lex (SLoc f 1 1) s) []
src/MicroHs/Main.hs view
@@ -11,6 +11,7 @@ import MicroHs.Compile import MicroHs.CompileCache import MicroHs.ExpPrint+import MicroHs.FFI import MicroHs.Flags import MicroHs.Ident import MicroHs.Translate@@ -23,59 +24,71 @@ import MicroHs.Instances(getMhsDir) -- for GHC  mhsVersion :: String-mhsVersion = "0.9.5.0"+mhsVersion = "0.9.8.0"  main :: IO () main = do-  aargs <- getArgs-  mdir <- getMhsDir-  let dir = fromMaybe "." mdir-  let-    args = takeWhile (/= "--") aargs-    ss = filter ((/= "-") . take 1) args-    flags = Flags {-      verbose    = length (filter (== "-v") args),-      runIt      = elem "-r" args,-      paths      = "." : (dir ++ "/lib") : catMaybes (map (stripPrefix "-i") args),-      output     = head $ catMaybes (map (stripPrefix "-o") args) ++ ["out.comb"],-      loading    = elem "-l" args,-      readCache  = usingMhs && (elem "-C" args || elem "-CR" args),-      writeCache = usingMhs && (elem "-C" args || elem "-CW" args),-      useTicks   = elem "-T" args-      }-  if "--version" `elem` args then+  args <- getArgs+  dir <- fromMaybe "." <$> getMhsDir+  if take 1 args == ["--version"] then     putStrLn $ "MicroHs, version " ++ mhsVersion ++ ", combinator file version " ++ combVersion-   else-    case ss of-      []  -> mainInteractive flags-      [s] -> mainCompile dir flags (mkIdentSLoc (SLoc "command-line" 0 0) s)-      _   -> error "Usage: mhs [-v] [-l] [-r] [-C] [-T] [-iPATH] [-oFILE] [ModuleName]"+   else do+    let (flags, mdls, rargs) = decodeArgs (defaultFlags dir) [] args+    withArgs rargs $              -- leave arguments after -- for any program we run+      case mdls of+        []  -> mainInteractive flags+        [s] -> mainCompile flags (mkIdentSLoc (SLoc "command-line" 0 0) s)+        _   -> error usage -mainCompile :: FilePath -> Flags -> Ident -> IO ()-mainCompile mhsdir flags mn = do-  ds <- if flags.writeCache then do-          cash <- getCached flags-          (ds, cash') <- compileCacheTop flags mn cash-          when (verbosityGT flags 0) $-            putStrLn $ "Saving cache " ++ show mhsCacheName-          () <- seq (rnfNoErr cash) (return ())-          saveCache mhsCacheName cash'-          return ds-        else do-          cash <- getCached flags-          fst <$> compileCacheTop flags mn cash+usage :: String+usage = "Usage: mhs [--version] [-v] [-l] [-r] [-C[R|W]] [-XCPP] [-Ddef] [-T] [-z] [-iPATH] [-oFILE] [ModuleName]" +decodeArgs :: Flags -> [String] -> [String] -> (Flags, [String], [String])+decodeArgs f mdls [] = (f, mdls, [])+decodeArgs f mdls (arg:args) =+  case arg of+    "--"        -> (f, mdls, args)+    "-v"        -> decodeArgs f{verbose = verbose f + 1} mdls args+    "-r"        -> decodeArgs f{runIt = True} mdls args+    "-l"        -> decodeArgs f{loading = True} mdls args+    "-CR"       -> decodeArgs f{readCache = True} mdls args+    "-CW"       -> decodeArgs f{writeCache = True} mdls args+    "-C"        -> decodeArgs f{readCache=True, writeCache = True} mdls args+    "-T"        -> decodeArgs f{useTicks = True} mdls args+    "-XCPP"     -> decodeArgs f{doCPP = True} mdls args+    "-z"        -> decodeArgs f{compress = True} mdls args+    '-':'i':s   -> decodeArgs f{paths = paths f ++ [s]} mdls args+    '-':'o':s   -> decodeArgs f{output = s} mdls args+    '-':'D':s   -> decodeArgs f{cppArgs = cppArgs f ++ [s]} mdls args+    '-':_       -> error $ "Unknown flag: " ++ arg ++ "\n" ++ usage+    _           -> decodeArgs f (mdls ++ [arg]) args++mainCompile :: Flags -> Ident -> IO ()+mainCompile flags mn = do+  (rmn, allDefs) <-+    if writeCache flags then do+      cash <- getCached flags+      (rds, cash') <- compileCacheTop flags mn cash+      when (verbosityGT flags 0) $+        putStrLn $ "Saving cache " ++ show mhsCacheName+      () <- seq (rnfNoErr cash) (return ())+      saveCache mhsCacheName cash'+      return rds+    else do+      cash <- getCached flags+      fst <$> compileCacheTop flags mn cash+   t1 <- getTimeMilli   let-    mainName = qualIdent mn (mkIdent "main")-    cmdl = (mainName, ds)+    mainName = qualIdent rmn (mkIdent "main")+    cmdl = (mainName, allDefs)     outData = toStringCMdl cmdl-    numDefs = length ds+    numDefs = length allDefs   when (verbosityGT flags 0) $     putStrLn $ "top level defns: " ++ show numDefs   when (verbosityGT flags 1) $-    mapM_ (\ (i, e) -> putStrLn $ showIdent i ++ " = " ++ toStringP e "") ds-  if flags.runIt then do+    mapM_ (\ (i, e) -> putStrLn $ showIdent i ++ " = " ++ toStringP e "") allDefs+  if runIt flags then do     let       prg = translateAndRun cmdl --    putStrLn "Run:"@@ -88,24 +101,27 @@     when (verbosityGT flags 0) $       putStrLn $ "final pass            " ++ padLeft 6 (show (t2-t1)) ++ "ms" +    let cCode = makeCArray flags outData ++ makeFFI flags allDefs+     -- Decode what to do:     --  * file ends in .comb: write combinator file     --  * file ends in .c: write C version of combinator     --  * otherwise, write C file and compile to a binary with cc-    let outFile = flags.output+    let outFile = output flags     if ".comb" `isSuffixOf` outFile then       writeFile outFile outData      else if ".c" `isSuffixOf` outFile then-      writeFile outFile $ makeCArray outData+      writeFile outFile cCode      else do        (fn, h) <- openTmpFile "mhsc.c"-       hPutStr h $ makeCArray outData+       hPutStr h cCode        hClose h        ct1 <- getTimeMilli        mcc <- lookupEnv "MHSCC"        compiler <- fromMaybe "cc" <$> lookupEnv "CC"-       let conf = "unix-" ++ show _wordSize-           cc = fromMaybe (compiler ++ " -w -Wall -O3 " ++ mhsdir ++ "/src/runtime/eval-" ++ conf ++ ".c " ++ " $IN -lm -o $OUT") mcc+       let dir = mhsdir flags+           conf = "unix-" ++ show _wordSize+           cc = fromMaybe (compiler ++ " -w -Wall -O3 -I" ++ dir ++ "/src/runtime " ++ dir ++ "/src/runtime/eval-" ++ conf ++ ".c " ++ " $IN -lm -o $OUT") mcc            cmd = substString "$IN" fn $ substString "$OUT" outFile cc        when (verbosityGT flags 0) $          putStrLn $ "Execute: " ++ show cmd
src/MicroHs/MakeCArray.hs view
@@ -3,6 +3,8 @@ module MicroHs.MakeCArray(makeCArray) where import Prelude import Data.Char+import MicroHs.Flags+import qualified System.Compress as C  chunkify :: Int -> String -> [String] chunkify _ [] = []@@ -13,8 +15,15 @@ showChunk :: [Char] -> String showChunk = concatMap (\ c -> show (ord c) ++ ",") -makeCArray :: String -> String-makeCArray file =+makeCArray :: Flags -> String -> String+makeCArray flags file =+  if compress flags then+    makeCArray' ('z' : C.compress file)  -- stick a 'z' in front to indicate compressed+  else+    makeCArray' file++makeCArray' :: String -> String+makeCArray' file =   let chunks = chunkify 20 file   in  unlines $ ["static unsigned char data[] = {"] ++                 map showChunk chunks ++
src/MicroHs/Parse.hs view
@@ -1,20 +1,19 @@ -- Copyright 2023 Lennart Augustsson -- See LICENSE file for full license. {-# OPTIONS_GHC -Wno-incomplete-uni-patterns -Wno-unused-do-bind #-}-module MicroHs.Parse(pTop, parseDie, parse, pExprTop) where+module MicroHs.Parse(P, pTop, pTopModule, parseDie, parse, pExprTop) where import Prelude+import Control.Applicative+import Control.Monad import Data.Char import Data.List import Text.ParserComb as P import MicroHs.Lex-import MicroHs.Expr+import MicroHs.Expr hiding (getSLoc) import MicroHs.Ident --import Debug.Trace -type P a = Prsr FilePath LexState Token a--getFileName :: P FilePath-getFileName = get+type P a = Prsr LexState Token a  parseDie :: forall a . (Show a) =>             P a -> FilePath -> String -> a@@ -26,15 +25,15 @@ parse :: forall a . (Show a) =>          P a -> FilePath -> String -> Either String a parse p fn file =-  let { ts = lexTopLS file } in-  case runPrsr fn p ts of-    Left lf -> Left $ formatFailed fn (tmRawTokens ts) lf-    Right [(a, _)] -> Right a+  let { ts = lexTopLS fn file } in+  case runPrsr p ts of+    Left lf -> Left $ formatFailed lf+    Right [a] -> Right a     Right as -> Left $ "Ambiguous:"-                       ++ unlines (map (show . fst) as)+                       ++ unlines (map show  as) -getLoc :: P Loc-getLoc = do+getSLoc :: P SLoc+getSLoc = do   t <- nextToken   pure (tokensLoc [t]) @@ -46,31 +45,43 @@     _    -> fail "eof"  pTop :: P EModule-pTop = pModule <* eof+pTop = (pModule <|< pModuleEmpty) <* eof +pTopModule :: P EModule+pTopModule = pModule <* eof+ pExprTop :: P Expr-pExprTop = pExpr <* eof+pExprTop = pBraces pExpr <* eof  pModule :: P EModule-pModule = EModule <$> (pKeyword "module" *> pUQIdentA) <*>-                      (pSpec '(' *> esepEndBy pExportItem (pSpec ',') <* pSpec ')') <*>-                      (pKeyword "where" *> pBlock pDef)+pModule = do+  pKeyword "module"+  mn <- pUQIdentA+  exps <- (pSpec '(' *> esepEndBy pExportItem (pSpec ',') <* pSpec ')')+      <|< pure [ExpModule mn]+  pKeyword "where"+  defs <- pBlock pDef+  pure $ EModule mn exps defs +pModuleEmpty :: P EModule+pModuleEmpty = do+  defs <- pBlock pDef+  --let loc = getSLoc defs+  pure $ EModule (mkIdent "Main") [ExpValue $ mkIdent "main"] defs+ -- Possibly qualified alphanumeric identifier pQIdent :: P Ident pQIdent = do-  fn <- getFileName   let-    is (TIdent loc qs s) | isAlpha_ (head s) = Just (qualName fn loc qs s)+    is (TIdent loc qs s) | isAlpha_ (head s) = Just (qualName loc qs s)     is _ = Nothing   satisfyM "QIdent" is  -- Upper case, unqualified, alphanumeric identifier pUIdentA :: P Ident pUIdentA = do-  fn <- getFileName   let-    is (TIdent loc [] s) | isUpper (head s) = Just (mkIdentLoc fn loc s)+    is (TIdent loc [] s) | isUpper (head s) = Just (mkIdentSLoc loc s)     is _ = Nothing   satisfyM "UIdent" is @@ -87,10 +98,9 @@ -- Special "identifiers": () [] (,) ... pUIdentSpecial :: P Ident pUIdentSpecial = do-  fn <- getFileName-  loc <- getLoc+  loc <- getSLoc   let-    mk = mkIdentLoc fn loc+    mk = mkIdentSLoc loc      (mk . map (const ',') <$> (pSpec '(' *> esome (pSpec ',') <* pSpec ')'))     <|< (mk "()" <$ (pSpec '(' *> pSpec ')'))  -- Allow () as a constructor name@@ -99,9 +109,8 @@ -- Upper case, possibly qualified, alphanumeric identifier pUQIdentA :: P Ident pUQIdentA = do-  fn <- getFileName   let-    is (TIdent loc qs s) | isUpper (head s) = Just (qualName fn loc qs s)+    is (TIdent loc qs s) | isUpper (head s) = Just (qualName loc qs s)     is _ = Nothing   satisfyM "UQIdent" is @@ -114,18 +123,16 @@ -- Lower case, unqualified identifier pLIdent :: P Ident pLIdent = do-  fn <- getFileName   let-    is (TIdent loc [] s) | isLower_ (head s) && not (elem s keywords) = Just (mkIdentLoc fn loc s)+    is (TIdent loc [] s) | isLower_ (head s) && not (elem s keywords) = Just (mkIdentSLoc loc s)     is _ = Nothing   satisfyM "LIdent" is  -- Lower case, possibly qualified identifier pLQIdent :: P Ident pLQIdent = do-  fn <- getFileName   let-    is (TIdent loc qs s) | isLower_ (head s) && not (elem s keywords) = Just (qualName fn loc qs s)+    is (TIdent loc qs s) | isLower_ (head s) && not (elem s keywords) = Just (qualName loc qs s)     is _ = Nothing   satisfyM "LQIdent" is @@ -140,7 +147,7 @@    "let", "module", "newtype", "of", "primitive", "then", "type", "where"]  pSpec :: Char -> P ()-pSpec c = () <$ satisfy [c] is+pSpec c = () <$ satisfy (showToken $ TSpec (SLoc "" 0 0) c) is   where     is (TSpec _ d) = c == d     is _ = False@@ -159,17 +166,15 @@  pQSymOper :: P Ident pQSymOper = do-  fn <- getFileName   let-    is (TIdent loc qs s) | not (isAlpha_ (head s)) && not (elem s reservedOps) = Just (qualName fn loc qs s)+    is (TIdent loc qs s) | not (isAlpha_ (head s)) && not (elem s reservedOps) = Just (qualName loc qs s)     is _ = Nothing   satisfyM "QSymOper" is  pSymOper :: P Ident pSymOper = do-  fn <- getFileName   let-    is (TIdent loc [] s) | not (isAlpha_ (head s)) && not (elem s reservedOps) = Just (mkIdentLoc fn loc s)+    is (TIdent loc [] s) | not (isAlpha_ (head s)) && not (elem s reservedOps) = Just (mkIdentSLoc loc s)     is _ = Nothing   satisfyM "SymOper" is @@ -201,10 +206,9 @@ -- Parse ->, possibly qualified pQArrow :: P Ident pQArrow = do-  fn <- getFileName   let-    is (TIdent loc qs s@"->") = Just (qualName fn loc qs s)-    is (TIdent loc qs s@"\x2192") = Just (qualName fn loc qs s)+    is (TIdent loc qs s@"->") = Just (qualName loc qs s)+    is (TIdent loc qs s@"\x2192") = Just (qualName loc qs s)     is _ = Nothing   satisfyM "->" is @@ -232,12 +236,11 @@  pLit :: P Expr pLit = do-  fn <- getFileName   let-    is (TString (l, c) s) = Just (ELit (SLoc fn l c) (LStr s))-    is (TChar   (l, c) a) = Just (ELit (SLoc fn l c) (LChar a))-    is (TInt    (l, c) i) = Just (ELit (SLoc fn l c) (LInteger i))-    is (TRat    (l, c) d) = Just (ELit (SLoc fn l c) (LRat d))+    is (TString loc s) = Just (ELit loc (LStr s))+    is (TChar   loc a) = Just (ELit loc (LChar a))+    is (TInt    loc i) = Just (ELit loc (LInteger i))+    is (TRat    loc d) = Just (ELit loc (LRat d))     is _ = Nothing   satisfyM "literal" is @@ -268,17 +271,17 @@     is (TIdent _ [] s) = kw == s     is _ = False -pBlock :: forall a . P a -> P [a]-pBlock p =+pBraces :: forall a . P a -> P a+pBraces p =   do     pSpec '{'-    as <- body+    as <- p     pSpec '}'     pure as  <|>   do     pSpec '<'-    as <- body+    as <- p     -- If we are at a '>' token (i.e., synthetic '}') then     -- all is well, if not then there is a parse error and we try     -- recovering by popping they layout stack.@@ -289,6 +292,9 @@       TSpec _ '>' -> pSpec '>'       _           -> mapTokenState popLayout     pure as++pBlock :: forall a . P a -> P [a]+pBlock p = pBraces body   where body = esepBy p (esome (pSpec ';')) <* eoptional (pSpec ';')  @@ -301,7 +307,7 @@   <|< uncurry Fcn <$> pEqns   <|< Sign        <$> ((esepBy1 pLIdentSym (pSpec ',')) <* dcolon) <*> pType   <|< Import      <$> (pKeyword "import"  *> pImportSpec)-  <|< ForImp      <$> (pKeyword "foreign" *> pKeyword "import" *> pKeyword "ccall" *> pString) <*> pLIdent <*> (pSymbol "::" *> pType)+  <|< ForImp      <$> (pKeyword "foreign" *> pKeyword "import" *> pKeyword "ccall" *> eoptional pString) <*> pLIdent <*> (pSymbol "::" *> pType)   <|< Infix       <$> ((,) <$> pAssoc <*> pPrec) <*> esepBy1 pTypeOper (pSpec ',')   <|< Class       <$> (pKeyword "class"    *> pContext) <*> pLHS <*> pFunDeps     <*> pWhere pClsBind   <|< Instance    <$> (pKeyword "instance" *> pType) <*> pWhere pClsBind@@ -348,14 +354,14 @@ pFields :: P (Either [SType] [(Ident, SType)]) pFields = Left  <$> emany pSAType       <|> Right <$> (pSpec '{' *> (concatMap flat <$> esepBy ((,) <$> (esepBy1 pLIdentSym (pSpec ',') <* pSymbol "::") <*> pSType) (pSpec ',') <* pSpec '}'))-  where flat (is, t) = map (,t) is+  where flat (is, t) = [ (i, t) | i <- is ]  pSAType :: P (Bool, EType) pSAType = (,) <$> pStrict <*> pAType pSType :: P (Bool, EType) pSType  = (,) <$> pStrict <*> pType pStrict :: P Bool-pStrict = (True <$ pSymbol "!") <|< pure False+pStrict = (True <$ pSpec '!') <|< pure False  pLHS :: P LHS pLHS = (,) <$> pTypeIdentSym <*> emany pIdKind@@ -447,6 +453,8 @@   <|< (eTuple <$> (pSpec '(' *> esepBy1 pPat (pSpec ',') <* pSpec ')'))   <|< (EListish . LList <$> (pSpec '[' *> esepBy1 pPat (pSpec ',') <* pSpec ']'))   <|< (EViewPat <$> (pSpec '(' *> pAExpr) <*> (pSRArrow *> pAPat <* pSpec ')'))+  <|< (ELazy True  <$> (pSpec '~' *> pAPat))+  <|< (ELazy False <$> (pSpec '!' *> pAPat))   where evar v Nothing = EVar v         evar v (Just upd) = EUpdate (EVar v) upd @@ -464,7 +472,10 @@   f <- pAPat   as <- emany pAPat   guard (null as || isPConApp f)-  pure $ foldl EApp f as+  mt <- eoptional (pSymbol "::" *> pType)+  let+    r = foldl EApp f as+  pure $ maybe r (ESign r) mt  pPatNotVar :: P EPat pPatNotVar = do@@ -569,16 +580,15 @@  pQualDo :: P Ident pQualDo = do-  fn <- getFileName   let-    is (TIdent loc qs@(_:_) "do") = Just (mkIdentLoc fn loc (intercalate "." qs))+    is (TIdent loc qs@(_:_) "do") = Just (mkIdentSLoc loc (intercalate "." qs))     is _ = Nothing   satisfyM "QualDo" is  pOperComma :: P Ident pOperComma = pOper <|< pComma   where-    pComma = mkIdentLoc <$> getFileName <*> getLoc <*> ("," <$ pSpec ',')+    pComma = mkIdentSLoc <$> getSLoc <*> ("," <$ pSpec ',')  -- No right section for '-'. pOperCommaNoMinus :: P Ident@@ -607,11 +617,7 @@       (EFieldWild <$ pSymbol "..")  pSelect :: P Ident-pSelect = do-  fn <- getFileName-  let is (TSelect loc s) = Just (mkIdentLoc fn loc s)-      is _ = Nothing-  satisfyM "select" is+pSelect = pSpec '.' *> pLIdent  pAExpr' :: P Expr pAExpr' = (@@ -680,16 +686,15 @@ isAlpha_ :: Char -> Bool isAlpha_ c = isLower_ c || isUpper c -qualName :: FilePath -> Loc -> [String] -> String -> Ident-qualName fn loc qs s = mkIdentLoc fn loc (intercalate "." (qs ++ [s]))+qualName :: SLoc -> [String] -> String -> Ident+qualName loc qs s = mkIdentSLoc loc (intercalate "." (qs ++ [s]))  ------------- -formatFailed :: String -> [Token] -> LastFail Token -> String-formatFailed fn _fs (LastFail _ ts msgs) =+formatFailed :: LastFail Token -> String+formatFailed (LastFail _ ts msgs) =   let-    (line, col) = tokensLoc ts-    sloc = SLoc fn line col+    sloc = tokensLoc ts   in     showSLoc sloc ++ ":\n"       ++ "  found:    " ++ head (map showToken ts ++ ["EOF"]) ++ "\n"
src/MicroHs/StateIO.hs view
@@ -44,8 +44,10 @@     runStateIO (k a) ss   (>>) = (*>) +{- instance forall s . MonadFail (StateIO s) where   fail = error+-}  gets :: forall s a . (s -> a) -> StateIO s a gets f = S $ \ s -> return (f s, s)
+ src/MicroHs/SymTab.hs view
@@ -0,0 +1,103 @@+module MicroHs.SymTab(+  Entry(..), entryType,+  SymTab,+  stLookup,+  stFromList,+  stInsertGlbU,+  stInsertGlbQ,+  stElemsLcl,+  stKeysLcl,+  stInsertLcl,+  mapMSymTab,+  ) where+import Control.Applicative+import Data.List+import MicroHs.Expr(Expr(..), EType, conIdent)+import MicroHs.Ident(Ident, showIdent)+import qualified MicroHs.IdentMap as M+import Compat++-- Symbol table+-- ++-- Symbol table entry for symbol i.+data Entry = Entry+  Expr             -- convert (EVar i) to this expression; sometimes just (EVar i)+  EType            -- type/kind of identifier+--  deriving(Show)++instance Show Entry where+  showsPrec _ (Entry e t) = showsPrec 0 e . showString " :: " . showsPrec 0 t++instance Eq Entry where+  Entry x _ == Entry y _  =  getIdent x == getIdent y++getIdent :: Expr -> Ident+getIdent ae =+  case ae of+    EVar i -> i+    ECon c -> conIdent c+    EApp f _ -> getIdent f+    _ -> error "getIdent"++entryType :: Entry -> EType+entryType (Entry _ t) = t++-----------------------------------------------++-- The symbol table is split into 3 parts+--  * locals        there is usually only a few of these,+--                  so linear search is faster than a tree map+--  * unqualified   most identifiers are used unqualified, so+--        globals   it's better not to keep a globals in one table+--  * qualified     as a last resort, look among the qualified globals+--      globals+data SymTab = SymTab {+  _lcl  :: [(Ident, Entry)],     -- locals+  _uglb :: M.Map [Entry],        -- unqualified globals+  _qglb :: M.Map [Entry]         -- qualified globals+  }+--  deriving(Show)++instance Show SymTab where+  show (SymTab l ug qg) = unlines $+    ("Locals:"  : map (("  " ++) . show) l) +++    ("UGlobals:" : map (("  " ++) . show) (M.toList ug)) +++    ("QGlobals:" : map (("  " ++) . show) (M.toList qg))+  +mapMSymTab :: forall m . Monad m => (Entry -> m Entry) -> SymTab -> m SymTab+mapMSymTab f (SymTab l ug qg) = do+  l' <- mapM (\ (i, a) -> (,) i <$> f a) l+  ug' <- M.mapM (mapM f) ug+  qg' <- M.mapM (mapM f) qg+  return $ SymTab l' ug' qg'++stLookup :: String -> Ident -> SymTab -> Either String Entry+stLookup msg i (SymTab l ug qg) =+  case lookup i l of+    Just e -> Right e+    Nothing ->+      case M.lookup i ug <|> M.lookup i qg of+        Just [e] -> Right e+        Just es  -> Left $ "ambiguous " ++ msg ++ ": " ++ showIdent i ++ " " +++                           showListS showIdent [ getIdent e | Entry e _ <- es ]+        Nothing  -> Left $ "undefined " ++ msg ++ ": " ++ showIdent i+                           -- ++ "\n" ++ show lenv ++ "\n" ++ show genv++stFromList :: [(Ident, [Entry])] -> [(Ident, [Entry])] -> SymTab+stFromList us qs = SymTab [] (M.fromListWith union us) (M.fromListWith union qs)++stElemsLcl :: SymTab -> [Entry]+stElemsLcl (SymTab l _ _) = map snd l++stKeysLcl :: SymTab -> [Ident]+stKeysLcl (SymTab l _ _) = map fst l++stInsertLcl :: Ident -> Entry -> SymTab -> SymTab+stInsertLcl i a (SymTab l ug qg) = SymTab ((i, a) : l) ug qg++stInsertGlbU :: Ident -> [Entry] -> SymTab -> SymTab+stInsertGlbU i as (SymTab l ug qg) = SymTab l (M.insertWith union i as ug) qg++stInsertGlbQ :: Ident -> [Entry] -> SymTab -> SymTab+stInsertGlbQ i as (SymTab l ug qg) = SymTab l ug (M.insertWith union i as qg)
src/MicroHs/TCMonad.hs view
@@ -11,9 +11,10 @@ import Data.Functor import qualified Data.IntMap as IM import Data.List(nub)+import MicroHs.Expr import MicroHs.Ident import qualified MicroHs.IdentMap as M-import MicroHs.Expr+import MicroHs.SymTab import Compat  -----------------------------------------------@@ -32,79 +33,11 @@ instance MonadFail Identity where fail = error  -------------------------------------------------- Symtab--data SymTab a = SymTab (M.Map [a]) [(Ident, a)]---  deriving(Show)--instance forall a . Show a => Show (SymTab a) where-  show (SymTab g l) = unlines $-    ("Locals:"  : map (("  " ++) . show) l) ++-    ("Globals:" : map (("  " ++) . show) (M.toList g))-  -mapMSymTab :: forall a . (a -> T a) -> SymTab a -> T (SymTab a)-mapMSymTab f (SymTab g l) = do-  g' <- M.mapM (mapM f) g-  l' <- mapM (\ (i, a) -> (i,) <$> f a) l-  return $ SymTab g' l'--stLookup :: String -> Ident -> SymTab Entry -> Either String Entry-stLookup msg i (SymTab genv lenv) =-  case lookup i lenv of-    Just e -> Right e-    Nothing ->-      case nub <$> M.lookup i genv of-        Just [e] -> Right e-        Just es  -> Left $ "ambiguous " ++ msg ++ ": " ++ showIdent i ++ " " ++ showListS (showIdent . getAppCon) [ e | Entry e _ <- es ]-        Nothing  -> Left $ "undefined " ++ msg ++ ": " ++ showIdent i-                           -- ++ "\n" ++ show lenv ++ "\n" ++ show genv--stFromListWith :: forall a . ([a] -> [a] -> [a]) -> [(Ident, [a])] -> SymTab a-stFromListWith comb ias = SymTab (M.fromListWith comb ias) []--stFromList :: forall a . [(Ident, [a])] -> SymTab a-stFromList ias = SymTab (M.fromList ias) []--stElemsLcl :: forall a . SymTab a -> [a]-stElemsLcl (SymTab _genv lenv) = map snd lenv--stKeysLcl :: forall a . SymTab a -> [Ident]-stKeysLcl (SymTab _genv lenv) = map fst lenv--stInsertLcl :: forall a . Ident -> a -> SymTab a -> SymTab a-stInsertLcl i a (SymTab genv lenv) = SymTab genv ((i,a) : lenv)---- XXX Use insertWith to follow Haskell semantics.-stInsertGlb :: forall a . Eq a => Ident -> [a] -> SymTab a -> SymTab a-stInsertGlb i as (SymTab genv lenv) = SymTab (M.insertWith (++) i as genv) lenv---------------------------------------------------- Entry---- Symbol table entry for symbol i.-data Entry = Entry-  Expr             -- convert (EVar i) to this expression; sometimes just (EVar i)-  EType            -- type/kind of identifier---  deriving(Show)--instance Show Entry where-  showsPrec _ (Entry e t) = showsPrec 0 e . showString " :: " . showsPrec 0 t--instance Eq Entry where-  Entry x _ == Entry y _  =  getIdent x == getIdent y---entryType :: Entry -> EType-entryType (Entry _ t) = t-------------------------------------------------------------------------------------------------- -- Tables -type ValueTable = SymTab Entry     -- type of value identifiers, used during type checking values-type TypeTable  = SymTab Entry     -- kind of type  identifiers, used during kind checking types-type KindTable  = SymTab Entry     -- sort of kind  identifiers, used during sort checking kinds+type ValueTable = SymTab           -- type of value identifiers, used during type checking values+type TypeTable  = SymTab           -- kind of type  identifiers, used during kind checking types+type KindTable  = SymTab           -- sort of kind  identifiers, used during sort checking kinds type SynTable   = M.Map EType      -- body of type synonyms type FixTable   = M.Map Fixity     -- precedence and associativity of operators type AssocTable = M.Map [Ident]    -- maps a type identifier to its associated constructors/selectors/methods@@ -112,6 +45,7 @@ type InstTable  = M.Map InstInfo   -- indexed by class name type MetaTable  = [(Ident, EConstraint)]  -- instances with unification variables type Constraints= [(Ident, EConstraint)]+type ArgDicts   = [(Ident, EConstraint)]  -- dictionary arguments type Defaults   = [EType]          -- Current defaults  -- To make type checking fast it is essential to solve constraints fast.@@ -159,21 +93,26 @@   classTable  :: ClassTable,            -- class info, indexed by QIdent   ctxTables   :: (InstTable,            -- instances                   MetaTable,            -- instances with unification variables-                  TypeEqTable),         -- type equalities+                  TypeEqTable,          -- type equalities+                  ArgDicts              -- dictionary arguments+                 ),                constraints :: Constraints,           -- constraints that have to be solved   defaults    :: Defaults               -- current defaults   }  instTable :: TCState -> InstTable-instTable = (.ctxTables._1)+instTable tc = case ctxTables tc of (x,_,_,_) -> x  metaTable :: TCState -> MetaTable-metaTable = (.ctxTables._2)+metaTable tc = case ctxTables tc of (_,x,_,_) -> x  typeEqTable :: TCState -> TypeEqTable-typeEqTable = (.ctxTables._3)+typeEqTable tc = case ctxTables tc of (_,_,x,_) -> x +argDicts :: TCState -> ArgDicts+argDicts tc = case ctxTables tc of (_,_,_,x) -> x + putValueTable :: ValueTable -> T () putValueTable venv = modify $ \ ts -> ts{ valueTable = venv } @@ -191,20 +130,25 @@  putInstTable :: InstTable -> T () putInstTable is = do-  (_,ms,eqs) <- gets (.ctxTables)-  modify $ \ ts -> ts{ ctxTables = (is,ms,eqs) }+  (_,ms,eqs,ads) <- gets ctxTables+  modify $ \ ts -> ts{ ctxTables = (is,ms,eqs,ads) }  putMetaTable :: MetaTable -> T () putMetaTable ms = do-  (is,_,eqs) <- gets (.ctxTables)-  modify $ \ ts -> ts{ ctxTables = (is,ms,eqs) }+  (is,_,eqs,ads) <- gets ctxTables+  modify $ \ ts -> ts{ ctxTables = (is,ms,eqs,ads) }  putTypeEqTable :: TypeEqTable -> T () putTypeEqTable eqs = do-  (is,ms,_) <- gets (.ctxTables)-  modify $ \ ts -> ts{ ctxTables = (is,ms,eqs) }+  (is,ms,_,ads) <- gets ctxTables+  modify $ \ ts -> ts{ ctxTables = (is,ms,eqs,ads) } -putCtxTables :: (InstTable, MetaTable, TypeEqTable) -> T ()+putArgDicts :: ArgDicts -> T ()+putArgDicts ads = do+  (is,ms,eqs,_) <- gets ctxTables+  modify $ \ ts -> ts{ ctxTables = (is,ms,eqs,ads) }++putCtxTables :: (InstTable, MetaTable, TypeEqTable, ArgDicts) -> T () putCtxTables ct = modify $ \ ts -> ts{ ctxTables = ct }  putConstraints :: Constraints -> T ()@@ -220,7 +164,7 @@ newUniq = do   ts <- get   let n' = n + 1-      n = ts.unique+      n = unique ts   put $ seq n' $ ts{ unique = n' }   return n @@ -254,13 +198,6 @@ type T a = TC TCState a  type Typed a = (a, EType)--getIdent :: Expr -> Ident-getIdent ae =-  case ae of-    EVar i -> i-    ECon c -> conIdent c-    _ -> error "getIdent"  getAppCon :: HasCallStack => EType -> Ident getAppCon (EVar i) = i
src/MicroHs/Translate.hs view
@@ -6,7 +6,6 @@ import Prelude import Data.Maybe import qualified MicroHs.IdentMap as M-import System.Environment import Unsafe.Coerce import PrimTable @@ -17,17 +16,11 @@ import MicroHs.Ident  translateAndRun :: (Ident, [LDef]) -> IO ()---translateAndRun :: (Ident, [(Ident, Exp)]) -> IO () translateAndRun defs = do-  -- Drop all argument up to '--'-  args <- getArgs   let prog = unsafeCoerce $ translate defs-      nargs = drop 1 $ dropWhile (/= "--") args-  withArgs nargs $-    prog+  prog  translate :: (Ident, [LDef]) -> AnyType---translate :: (Ident, [(Ident, Exp)]) -> AnyType translate (mainName, ds) =   let     look m n = fromMaybe (error $ "translate: not found " ++ showIdent n) $ M.lookup n m@@ -44,7 +37,7 @@     Lit (LStr s) -> trans r (encodeString s)     Lit (LPrim p) -> fromMaybe (error $ "trans: no primop " ++ p) $ lookup p primTable     Lit (LInteger i) -> trans r (encodeInteger i)-    Lit (LForImp s) -> trans r (App (Lit (LPrim "dynsym")) (Lit (LStr s)))+    Lit (LForImp s _) -> trans r (App (Lit (LPrim "dynsym")) (Lit (LStr s)))     _ -> error $ "trans: impossible: " ++ show ae  -- Use linear search in this table.@@ -130,7 +123,7 @@   ("IO.stdin", primitive "IO.stdin"),   ("IO.stdout", primitive "IO.stdout"),   ("IO.stderr", primitive "IO.stderr"),-  ("IO.getArgs", primitive "IO.getArgs"),+  ("IO.getArgRef", primitive "IO.getArgRef"),   ("IO.performIO", primitive "IO.performIO"),   ("IO.catch", primitive "IO.catch"),   ("dynsym", primitive "dynsym"),
src/MicroHs/TypeCheck.hs view
@@ -11,6 +11,7 @@   bindingsOf,   boolPrefix,   listPrefix,+  ValueExport(..), TypeExport(..),   ) where import Prelude import Control.Applicative@@ -21,12 +22,14 @@ import Data.List import Data.Maybe import qualified Data.IntMap as IM-import MicroHs.TCMonad as T-import qualified MicroHs.IdentMap as M-import MicroHs.Ident import MicroHs.Deriving import MicroHs.Expr import MicroHs.Fixity+import MicroHs.Graph+import MicroHs.Ident+import qualified MicroHs.IdentMap as M+import MicroHs.SymTab+import MicroHs.TCMonad import Compat import GHC.Stack import Debug.Trace@@ -37,14 +40,17 @@ listPrefix :: String listPrefix = "Data.List_Type." +nameList :: String+nameList = listPrefix ++ "[]"+ nameInt :: String nameInt = "Primitives.Int"  nameWord :: String nameWord = "Primitives.Word" -nameDouble :: String-nameDouble = "Primitives.Double"+nameFloatW :: String+nameFloatW = "Primitives.FloatW"  nameChar :: String nameChar = "Primitives.Char"@@ -217,7 +223,7 @@ getTVExps _ _ vals _ _ (ExpValue i) =     ([], [], [ValueExport i (expLookup i vals)]) -expLookup :: Ident -> SymTab Entry -> Entry+expLookup :: Ident -> SymTab -> Entry expLookup i m = either (errorMessage (getSLoc i)) id $ stLookup "export" i m  tyQIdent :: Entry -> Ident@@ -293,18 +299,19 @@             (FixTable, TypeTable, SynTable, ClassTable, InstTable, ValueTable, AssocTable) mkTables mdls =   let-    qns (ImportSpec q _ mas _) mn i =-      let-        m = fromMaybe mn mas-      in  if q || isInternalId i then [qualIdent m i] else [i, qualIdent m i]     allValues :: ValueTable     allValues =       let-        syms (is, TModule mn _ tes _ cls _ ves _) =-          [ (v, [e]) | ValueExport i e    <- ves,                        v <- qns is mn i ] ++-          [ (v, [e]) | TypeExport  _ _ cs <- tes, ValueExport i e <- cs, v <- qns is mn i ] +++        usyms (ImportSpec qual _ _ _, TModule _ _ tes _ _ _ ves _) =+          if qual then [] else+          [ (i, [e]) | ValueExport i e    <- ves, not (isInternalId i)  ] +++          [ (i, [e]) | TypeExport  _ _ cs <- tes, ValueExport i e <- cs ]+        qsyms (ImportSpec _ _ mas _, TModule mn _ tes _ cls _ ves _) =+          let m = fromMaybe mn mas in+          [ (v, [e]) | ValueExport i e    <- ves,                        let { v = qualIdent m i } ] +++          [ (v, [e]) | TypeExport  _ _ cs <- tes, ValueExport i e <- cs, let { v = qualIdent m i } ] ++           [ (v, [Entry (EVar v) t]) | (i, (_, _, t, _, _)) <- cls, let { v = mkClassConstructor i } ]-      in  stFromListWith union $ concatMap syms mdls+      in  stFromList (concatMap usyms mdls) (concatMap qsyms mdls)     allSyns =       let         syns (_, TModule _ _ _ ses _ _ _ _) = ses@@ -312,8 +319,12 @@     allTypes :: TypeTable     allTypes =       let-        types (is, TModule mn _ tes _ _ _ _ _) = [ (v, [e]) | TypeExport i e _ <- tes, v <- qns is mn i ]-      in stFromListWith union $ concatMap types mdls+        usyms (ImportSpec qual _ _ _, TModule _ _ tes _ _ _ _ _) =+          if qual then [] else [ (i, [e]) | TypeExport i e _ <- tes ]+        qsyms (ImportSpec _ _ mas _, TModule mn _ tes _ _ _ _ _) =+          let m = fromMaybe mn mas in+          [ (qualIdent m i, [e]) | TypeExport i e _ <- tes ]+      in stFromList (concatMap usyms mdls) (concatMap qsyms mdls)     allFixes =       let         fixes (_, TModule _ fes _ _ _ _ _ _) = fes@@ -381,10 +392,10 @@   return a    addAssocTable :: Ident -> [Ident] -> T ()-addAssocTable i ids = modify $ \ ts -> ts { assocTable = M.insert i ids ts.assocTable }+addAssocTable i ids = modify $ \ ts -> ts { assocTable = M.insert i ids (assocTable ts) }  addClassTable :: Ident -> ClassInfo -> T ()-addClassTable i x = modify $ \ ts -> ts { classTable = M.insert i x ts.classTable }+addClassTable i x = modify $ \ ts -> ts { classTable = M.insert i x (classTable ts) }  addInstTable :: [InstDictC] -> T () addInstTable ics = do@@ -411,7 +422,7 @@ addConstraint d ctx = do --  traceM $ "addConstraint: " ++ showIdent d ++ " :: " ++ showEType ctx   ctx' <- expandSyn ctx-  modify $ \ ts -> ts{ constraints = (d, ctx') : ts.constraints }+  modify $ \ ts -> ts{ constraints = (d, ctx') : constraints ts }  withDicts :: forall a . HasCallStack => [(Ident, EConstraint)] -> T a -> T a withDicts ds ta = do@@ -448,6 +459,7 @@   c' <- expandSyn c   ics <- expandDict (EVar i) c'   addInstTable ics+  addArgDict i c  addEqDict :: Ident -> EType -> EType -> T () addEqDict _i t1 t2 = do@@ -460,15 +472,20 @@   ms <- gets metaTable   putMetaTable ((i,c) : ms) +addArgDict :: HasCallStack => Ident -> EConstraint -> T ()+addArgDict i c = do+  ads <- gets argDicts+  putArgDicts ((i,c) : ads)+ initTC :: IdentModule -> FixTable -> TypeTable -> SynTable -> ClassTable -> InstTable -> ValueTable -> AssocTable -> TCState initTC mn fs ts ss cs is vs as = --  trace ("**** initTC " ++ showIdent mn ++ ": " ++ showListS (showPairS showIdent showEType) (M.toList ss)) $   let-    xts = foldr (uncurry stInsertGlb) ts primTypes-    xvs = foldr (uncurry stInsertGlb) vs primValues+    xts = foldr (uncurry stInsertGlbU) ts primTypes+    xvs = foldr (uncurry stInsertGlbU) vs primValues   in TC { moduleName = mn, unique = 1, fixTable = addPrimFixs fs, typeTable = xts,           synTable = ss, valueTable = xvs, assocTable = as, uvarSubst = IM.empty,-          tcMode = TCExpr, classTable = cs, ctxTables = (is,[],[]), constraints = [], defaults = [] }+          tcMode = TCExpr, classTable = cs, ctxTables = (is,[],[],[]), constraints = [], defaults = [] }  addPrimFixs :: FixTable -> FixTable addPrimFixs =@@ -504,12 +521,12 @@ primSortTable :: KindTable primSortTable =   let-    entry i = Entry (EVar (mkIdentB i))-  in stFromList [+    entry i s = Entry (EVar (mkIdentB i)) s+    qsorts = [        -- The kinds are wired in (for now)-       (mkIdentB nameKind,       [entry nameKind rSort]),-       (mkIdentB "Kind",         [entry nameKind rSort])-     ]+       (mkIdentB nameKind,       [entry nameKind rSort])+       ]+  in stFromList (map (first unQualIdent) qsorts) qsorts  -- E.g. --  Type       :: Kind@@ -518,20 +535,16 @@ primKindTable :: KindTable primKindTable =   let-    entry i = Entry (EVar (mkIdentB i))-  in stFromList [+    entry i k = Entry (EVar (mkIdentB i)) k+    qkinds = [        -- The kinds are wired in (for now)        (mkIdentB nameType,       [entry nameType sKind]),-       (mkIdentB "Type",         [entry nameType sKind]),        (mkIdentB nameConstraint, [entry nameConstraint sKind]),-       (mkIdentB "Constraint",   [entry nameConstraint sKind]),        (mkIdentB nameSymbol,     [entry nameSymbol sKind]),-       (mkIdentB "Symbol",       [entry nameSymbol sKind]),        (mkIdentB nameNat,        [entry nameNat sKind]),-       (mkIdentB "Nat",          [entry nameNat sKind]),-       (mkIdentB nameArrow,      [entry nameArrow sKindKindKind]),-       (mkIdentB "->",           [entry nameArrow sKindKindKind])+       (mkIdentB nameArrow,      [entry nameArrow sKindKindKind])        ]+  in stFromList (map (first unQualIdent) qkinds) qkinds  -- E.g. --  Bool  :: Type@@ -561,7 +574,7 @@        (mkIdentB "~",            [entry nameTypeEq   kTypeTypeConstraintS]),        -- Primitives.hs uses the type [], and it's annoying to fix that.        -- XXX should not be needed-       (mkIdentB (listPrefix ++ "[]"), [entry (listPrefix ++ "[]") kTypeTypeS]),+       (mkIdentB nameList,       [entry nameList     kTypeTypeS]),        (mkIdentB "\x2192",       [entry nameArrow    kTypeTypeTypeS]),  -- ->        (mkIdentB "\x21d2",       [entry nameImplies  kImplies])         -- =>       ] ++@@ -590,11 +603,6 @@ sArrow :: ESort -> ESort -> ESort sArrow = tArrow -getArrow :: EType -> Maybe (EType, EType)-getArrow (EApp (EApp (EVar n) a) b) =-  if isIdent "->" n || isIdent "Primitives.->" n then Just (a, b) else Nothing-getArrow _ = Nothing- getImplies :: EType -> Maybe (EType, EType) getImplies (EApp (EApp (EVar n) a) b) =   if isIdent "=>" n || isIdent "Primitives.=>" n then Just (a, b) else Nothing@@ -609,7 +617,7 @@ -}  setUVar :: TRef -> EType -> T ()-setUVar i t = modify $ \ ts -> ts{ uvarSubst = IM.insert i t ts.uvarSubst }+setUVar i t = modify $ \ ts -> ts{ uvarSubst = IM.insert i t (uvarSubst ts) }  getUVar :: Int -> T (Maybe EType) getUVar i = gets (IM.lookup i . uvarSubst)@@ -784,14 +792,14 @@   tcm <- gets tcMode   tLookup (msgTCMode tcm) i -tInst :: HasCallStack => (Expr, EType) -> T (Expr, EType)-tInst (ae, EForall vks t) = tInstForall ae vks t >>= tInst-tInst (ae, at) | Just (ctx, t) <- getImplies at = do+tInst :: HasCallStack => Expr -> EType -> T (Expr, EType)+tInst ae (EForall vks t) = tInstForall ae vks t >>= uncurry tInst+tInst ae at | Just (ctx, t) <- getImplies at = do   d <- newDictIdent (getSLoc ae)   --traceM $ "tInst: addConstraint: " ++ show ae ++ ", " ++ show d ++ " :: " ++ show ctx   addConstraint d ctx-  tInst (EApp ae (EVar d), t)-tInst at = return at+  tInst (EApp ae (EVar d)) t+tInst ae at = return (ae, at)  tInstForall :: Expr -> [IdKind] -> EType -> T (Expr, EType) tInstForall ae vks t =@@ -820,8 +828,8 @@   mn <- gets moduleName   venv <- gets valueTable   let qi = qualIdent mn i-      venv'  = stInsertGlb qi [Entry e t] venv-      venv'' = stInsertGlb  i [Entry e t] venv'+      venv'  = stInsertGlbQ qi [Entry e t] venv+      venv'' = stInsertGlbU  i [Entry e t] venv'   putValueTable venv''  -- Extend symbol table with i::t.@@ -855,7 +863,7 @@   putSynTable (M.insert i t senv)  extFix :: Ident -> Fixity -> T ()-extFix i fx = modify $ \ ts -> ts{ fixTable = M.insert i fx ts.fixTable }+extFix i fx = modify $ \ ts -> ts{ fixTable = M.insert i fx (fixTable ts) }  withExtVal :: forall a . HasCallStack =>               Ident -> EType -> T a -> T a@@ -897,8 +905,10 @@   tcDefsValue dst'  setDefault :: [EDef] -> T ()-setDefault defs =-  putDefaults $ last $ [] : [ ts | Default ts <- defs ]+setDefault defs = do+  let ds = last $ [] : [ ts | Default ts <- defs ]+  ds' <- mapM expandSyn ds+  putDefaults ds'  tcAddInfix :: EDef -> T () tcAddInfix (Infix fx is) = do@@ -927,7 +937,7 @@ getKindSigns :: HasCallStack => [EDef] -> T (M.Map EKind) getKindSigns ds = do   let iks = [ (i, k) | KindSign i k <- ds ]-      kind (i, k) = (i,) <$> tcKind (Check sKind) k+      kind (i, k) = (,) i <$> tcKind (Check sKind) k   multCheck (map fst iks)   iks' <- mapM kind iks   return $ M.fromList iks'@@ -1007,14 +1017,14 @@ tcDefType def = do   --tcReset   case def of-    Data    lhs cs ds      -> withLHS lhs $ \ lhs' -> (,kType)       <$> (Data    lhs'  <$> mapM tcConstr cs <*> mapM tcDerive ds)-    Newtype lhs c  ds      -> withLHS lhs $ \ lhs' -> (,kType)       <$> (Newtype lhs'  <$> tcConstr c       <*> mapM tcDerive ds)-    Type    lhs t          -> withLHS lhs $ \ lhs' -> first              (Type    lhs') <$> tInferTypeT t-    Class   ctx lhs fds ms -> withLHS lhs $ \ lhs' -> (,kConstraint) <$> (Class         <$> tcCtx ctx <*> return lhs' <*> mapM tcFD fds <*> mapM tcMethod ms)-    Sign      is t         ->                                             Sign      is  <$> tCheckTypeTImpl kType t-    ForImp ie i t          ->                                             ForImp ie i   <$> tCheckTypeTImpl kType t-    Instance ct m          ->                                             Instance      <$> tCheckTypeTImpl kConstraint ct <*> return m-    Default ts             ->                                             Default       <$> mapM (tCheckTypeT kType) ts+    Data    lhs cs ds      -> withLHS lhs $ \ lhs' -> flip (,) kType       <$> (Data    lhs'  <$> mapM tcConstr cs <*> mapM tcDerive ds)+    Newtype lhs c  ds      -> withLHS lhs $ \ lhs' -> flip (,) kType       <$> (Newtype lhs'  <$> tcConstr c       <*> mapM tcDerive ds)+    Type    lhs t          -> withLHS lhs $ \ lhs' -> first                    (Type    lhs') <$> tInferTypeT t+    Class   ctx lhs fds ms -> withLHS lhs $ \ lhs' -> flip (,) kConstraint <$> (Class         <$> tcCtx ctx <*> return lhs' <*> mapM tcFD fds <*> mapM tcMethod ms)+    Sign      is t         ->                                                  Sign      is  <$> tCheckTypeTImpl kType t+    ForImp ie i t          ->                                                  ForImp ie i   <$> tCheckTypeTImpl kType t+    Instance ct m          ->                                                  Instance      <$> tCheckTypeTImpl kConstraint ct <*> return m+    Default ts             ->                                                  Default       <$> mapM (tCheckTypeT kType) ts     _                      -> return def  where    tcMethod (BSign i t) = BSign i <$> tCheckTypeTImpl kType t@@ -1041,8 +1051,8 @@   assertTCMode (==TCType) $   withVks iks $ \ iks' ->     Constr iks' <$> tcCtx ct <*> pure c <*>-      either (\ x -> Left  <$> mapM (\ (s,t)     ->         (s,)  <$> tcTypeT (Check kType) t) x)-             (\ x -> Right <$> mapM (\ (i,(s,t)) -> ((i,) . (s,)) <$> tcTypeT (Check kType) t) x) ets+      either (\ x -> Left  <$> mapM (\ (s,t)     ->         (,)s  <$> tcTypeT (Check kType) t) x)+             (\ x -> Right <$> mapM (\ (i,(s,t)) -> ((,)i . (,)s) <$> tcTypeT (Check kType) t) x) ets  -- Expand a class defintion to --  * a "data" type for the dictionary, with kind Constraint@@ -1105,13 +1115,16 @@               def (Just eqns) = Fcn iDflt eqns               iDflt = mkDefaultMethodId methId               -- XXX This isn't right, "Prelude._nodefault" might not be in scope-              noDflt = EApp noDefaultE (ELit noSLoc (LStr (unIdent iCls ++ "." ++ unIdent methId)))+              noDflt = EApp noDefaultE (mkEStr (getSLoc iCls) (unIdent iCls ++ "." ++ unIdent methId))       mkDflt _ = impossible       dDflts = concatMap mkDflt meths   addClassTable (qualIdent mn iCls) (vks, ctx, EUVar 0, methIds, mkIFunDeps (map idKindIdent vks) fds)   -- Initial entry, no type needed.   return $ dcls : dDflts expandClass d = return [d] +mkEStr :: SLoc -> String -> Expr+mkEStr loc str = ESign (ELit loc (LStr str)) $ EListish $ LList [tConI loc "Char"]+ simpleEqn :: Expr -> [Eqn] simpleEqn e = [Eqn [] $ simpleAlts e] @@ -1172,10 +1185,66 @@ ---------------------  tcDefsValue :: [EDef] -> T [EDef]-tcDefsValue ds = do-  mapM_ addValueType ds-  mapM (\ d -> do { tcReset; tcDefValue d}) ds+tcDefsValue defs = do+--  traceM $ "tcDefsValue: ------------ start"+  -- Gather up all type signatures, and put them in the environment.+  mapM_ addValueType defs+  let smap = M.fromList [ (i, ()) | Sign is _ <- defs, i <- is ]+      -- Split Fcn into those without and with type signatures+      unsigned = filter noSign defs+        where noSign (Fcn i _) = isNothing $ M.lookup i smap+              noSign _ = False+      -- split the unsigned defs into strongly connected components+      sccs = stronglyConnComp $ map node unsigned+        where node d@(Fcn i e) = (d, i, allVarsEqns e)+              node _ = undefined+      tcSCC (AcyclicSCC d) = tInferDefs [d]+      tcSCC (CyclicSCC ds) = tInferDefs ds+  -- type infer and enter each SCC in the symbol table+  -- return inferred Sign+  signDefs <- mapM tcSCC sccs+  --  type check all definitions (the inferred ones will be rechecked)+--  traceM $ "tcDefsValue: ------------ check"+  defs' <- mapM (\ d -> do { tcReset; tcDefValue d}) defs+  return $ concat signDefs ++ defs' +-- Infer a type for a definition+tInferDefs :: [EDef] -> T [EDef]+tInferDefs fcns = do+  tcReset+  -- Invent type variables for the definitions+  xts <- mapM (\ (Fcn i _) -> (,) i <$> newUVar) fcns+  --traceM $ "tInferDefs: " ++ show (map fst xts)+  -- Temporarily extend the local environment with the type variables+  withExtVals xts $ do+    -- Infer types for all the Fcns, ignore the new bodies.+    -- The bodies will be re-typecked in tcDefsValues.+    zipWithM_ (\ (Fcn _ eqns) (_, t) -> tcEqns False t eqns) fcns xts+  -- Get the unsolved constraints+  ctx <- getUnsolved+  -- For each definition, quantify over the free meta variables, and include+  -- context mentioning them.+  let genTop :: (Ident, EType) -> T EDef+      genTop (i, t) = do+        t' <- derefUVar t+        let vs = metaTvs [t']+            ctx' = filter (\ c -> not (null (intersect vs (metaTvs [c])))) ctx+            t'' = addConstraints ctx' t'+            vs' = metaTvs [t'']+        t''' <- quantify vs' t''+        --traceM $ "tInferDefs: " ++ showIdent i ++ " :: " ++ showEType t'''+        extValQTop i t'''+        return $ Sign [i] t'''+  mapM genTop xts++getUnsolved :: T [EConstraint]+getUnsolved = do+  _ <- solveConstraints+  ctx <- gets (map snd . constraints)+  ctx' <- mapM derefUVar ctx+  putConstraints []+  return $ nubBy eqEType ctx'+ addValueType :: EDef -> T () addValueType adef = do   mn <- gets moduleName@@ -1245,9 +1314,12 @@ --      traceM $ "tcDefValue: " ++ showIdent i ++ " :: " ++ showExpr t' --      traceM $ "tcDefValue:      " ++ showEDefs [adef]       teqns <- tcEqns True t' eqns---      traceM ("tcDefValue: after " ++ showEDefs [adef, Fcn i teqns])+--      traceM ("tcDefValue: after\n" ++ showEDefs [adef, Fcn i teqns])+--      cs <- gets constraints+--      traceM $ "tcDefValue: constraints: " ++ show cs       checkConstraints       mn <- gets moduleName+--      traceM $ "tcDefValue: " ++ showIdent i ++ " done"       return $ Fcn (qualIdent mn i) teqns     ForImp ie i t -> do       mn <- gets moduleName@@ -1384,7 +1456,7 @@                case t of                  EUVar r -> fmap (fromMaybe t) (getUVar r)                  _ -> return t---             traceM $ "EVar: " ++ showIdent i ++ " :: " ++ showExpr t ++ " = " ++ showExpr t' ++ " mt=" ++ show mt+             --traceM $ "EVar: " ++ showIdent i ++ " :: " ++ showExpr t ++ " = " ++ showExpr t' ++ " mt=" ++ show mt              instSigma loc e t' mt      EApp f a -> do@@ -1398,47 +1470,55 @@      EOper e ies -> do e' <- tcOper e ies; tcExpr mt e'     ELam qs -> tcExprLam mt qs-    ELit loc' l -> do+    ELit _ lit -> do       tcm <- gets tcMode       case tcm of         TCType ->-          case l of-            LStr _ -> instSigma loc' (ELit loc' l) (tConI loc' nameSymbol) mt-            LInteger _ -> instSigma loc' (ELit loc' l) (tConI loc' nameNat) mt+          case lit of+            LStr _ -> instSigma loc (ELit loc lit) (tConI loc nameSymbol) mt+            LInteger _ -> instSigma loc (ELit loc lit) (tConI loc nameNat) mt             _      -> impossible         TCExpr -> do           let getExpected (Infer _) = pure Nothing-              getExpected (Check t) = do-                t' <- derefUVar t >>= expandSyn-                case t' of-                  EVar v -> pure (Just v)-                  _      -> pure Nothing-          case l of+              getExpected (Check t) = Just <$> (derefUVar t >>= expandSyn)+          case lit of             LInteger i -> do               mex <- getExpected mt               case mex of                 -- Convert to Int in the compiler, that way (99::Int) will never involve fromInteger                 -- (which is not always in scope).-                Just v | v == mkIdent nameInt     -> tcLit  mt loc' (LInt (fromInteger i))-                       | v == mkIdent nameWord    -> tcLit' mt loc' (LInt (fromInteger i)) (tConI loc' nameWord)-                       | v == mkIdent nameDouble  -> tcLit  mt loc' (LDouble (fromInteger i))-                       | v == mkIdent nameInteger -> tcLit  mt loc' l+                Just (EVar v) | v == mkIdent nameInt     -> tcLit  mt loc (LInt (fromInteger i))+                              | v == mkIdent nameWord    -> tcLit' mt loc (LInt (fromInteger i)) (tConI loc nameWord)+                              | v == mkIdent nameFloatW  -> tcLit  mt loc (LDouble (fromInteger i))+                              | v == mkIdent nameInteger -> tcLit  mt loc lit                 _ -> do-                  (f, ft) <- tInferExpr (EVar (mkIdentSLoc loc' "fromInteger"))  -- XXX should have this qualified somehow+                  (f, ft) <- tInferExpr (EVar (mkIdentSLoc loc "fromInteger"))  -- XXX should have this qualified somehow                   (_at, rt) <- unArrow loc ft                   -- We don't need to check that _at is Integer, it's part of the fromInteger type.                   instSigma loc (EApp f ae) rt mt             LRat r -> do               mex <- getExpected mt               case mex of-                Just v | v == mkIdent nameDouble -> tcLit  mt loc' (LDouble (fromRational r))+                Just (EVar v) | v == mkIdent nameFloatW -> tcLit mt loc (LDouble (fromRational r))                 _ -> do-                  (f, ft) <- tInferExpr (EVar (mkIdentSLoc loc' "fromRational"))  -- XXX should have this qualified somehow+                  (f, ft) <- tInferExpr (EVar (mkIdentSLoc loc "fromRational"))  -- XXX should have this qualified somehow                   (_at, rt) <- unArrow loc ft                   -- We don't need to check that _at is Rational, it's part of the fromRational type.                   instSigma loc (EApp f ae) rt mt-            -- Not LInteger, LRat-            _ -> tcLit mt loc' l+            -- This implements OverloadedStrings.  It causes a small slowdown (2%)+            LStr _ -> do+              mex <- getExpected mt+              case mex of+                Just (EApp (EVar lst) (EVar c))+                 | lst == mkIdent nameList, c == mkIdent nameChar -> tcLit mt loc lit+                _ -> do+                  (f, ft) <- tInferExpr (EVar (mkIdentSLoc loc $ "fromString"))  -- XXX should have this qualified somehow+                  (_at, rt) <- unArrow loc ft+                  -- We don't need to check that _at is String, it's part of the fromString type.+                  --traceM ("LStr " ++ show (loc, r))+                  instSigma loc (EApp f ae) rt mt+            -- Not LInteger, LRat, LStr+            _ -> tcLit mt loc lit         _ -> impossible     ECase a arms -> do       -- XXX should look more like EIf@@ -1611,13 +1691,14 @@   case apat of     EVar _ -> return apat     EApp p1 p2 -> EApp <$> dsEFields p1 <*> dsEFields p2-    EOper p1 ips -> EOper <$> dsEFields p1 <*> mapM (\ (i, p2) -> (i,) <$> dsEFields p2) ips+    EOper p1 ips -> EOper <$> dsEFields p1 <*> mapM (\ (i, p2) -> (,) i <$> dsEFields p2) ips     ELit _ _ -> return apat     ETuple ps -> ETuple <$> mapM dsEFields ps     EListish (LList ps) -> EListish . LList <$> mapM dsEFields ps     ESign p t -> ESign <$> dsEFields p <*> pure t     EAt i p -> EAt i <$> dsEFields p     EViewPat e p -> EViewPat e <$> dsEFields p+    ELazy z p -> ELazy z <$> dsEFields p     ECon _ -> return apat     EUpdate c fs -> EUpdate c . concat <$> mapM (dsEField c) fs     ENegApp _ -> return apat@@ -1650,14 +1731,14 @@ enum :: SLoc -> String -> [Expr] -> Expr enum loc f = eApps (EVar (mkIdentSLoc loc ("enum" ++ f))) -tcLit :: Expected -> SLoc -> Lit -> T Expr+tcLit :: HasCallStack => Expected -> SLoc -> Lit -> T Expr tcLit mt loc l@(LPrim _) = newUVar >>= tcLit' mt loc l tcLit mt loc l = do   let t =         case l of           LInt _     -> tConI loc nameInt           LInteger _ -> tConI loc nameInteger-          LDouble _  -> tConI loc nameDouble+          LDouble _  -> tConI loc nameFloatW           LChar _    -> tConI loc nameChar           LStr _     -> tApp (tList loc) (tConI loc nameChar)           _          -> impossible@@ -1676,7 +1757,7 @@     opfix :: (Ident, Expr) -> T ((Expr, Fixity), Expr)     opfix (i, e) = do       (ei, _) <- tLookupV i-      let fx = getFixity fixs (getIdent ei)+      let fx = getFixity fixs (getAppCon ei)       return ((EVar i, fx), e)    ites <- mapM opfix aies@@ -1839,7 +1920,7 @@   app' <- dsEFields app   let vs = patVars app'   multCheck vs-  env <- mapM (\ v -> (v,) <$> newUVar) vs+  env <- mapM (\ v -> (,) v <$> newUVar) vs   withExtVals env $ do     (_sks, ds, pp) <- tCheckPat t app' --    traceM ("tCheckPatC: " ++ show pp)@@ -1860,7 +1941,11 @@ -- XXX Has some duplication with tcExpr tcPat :: Expected -> EPat -> T EPatRet tcPat mt ae =-  let { loc = getSLoc ae } in+  let loc = getSLoc ae+      lit = tcPat mt (EViewPat (EApp (EVar (mkIdentSLoc loc "==")) ae) (EVar (mkIdentSLoc loc "True")))+      isNeg (EVar i) = i == mkIdent "negate"+      isNeg _ = False+  in   case ae of     EVar i | isDummyIdent i -> do                -- _ can be anything, so just ignore it@@ -1901,7 +1986,9 @@      EOper e ies -> do e' <- tcOper e ies; tcPat mt e' -    EApp f a -> do+    EApp f a+      | isNeg f -> lit       -- if it's (negate e) it must have been a negative literal+      | otherwise -> do       ((skf, df, f'), ft) <- tInferPat f --      traceM $ "tcPat: EApp f=" ++ showExpr f ++ "; e'=" ++ showExpr f' ++ " :: " ++ showEType ft       (at, rt) <- unArrow loc ft@@ -1924,11 +2011,10 @@       te <- newUVar       munify loc mt (tApp (tList loc) te)       xs <- mapM (tCheckPat te) es-      let (sks, ds, es') = unzip3 xs+      let !(sks, ds, es') = unzip3 xs       return (concat sks, concat ds, EListish (LList es')) -    ELit _ _ ->-      tcPat mt (EViewPat (EApp (EVar (mkIdentSLoc loc "==")) ae) (EVar (mkIdentSLoc loc "True")))+    ELit _ _ -> lit      ESign e t -> do       t' <- tcType (Check kType) t@@ -1951,6 +2037,10 @@       (sk, d, p') <- tcPat (Check ter) p       return (sk, d, EViewPat e' p') +    ELazy z p -> do+      (sk, d, p') <- tcPat mt p+      return (sk, d, ELazy z p')+     -- Allow C{} syntax even for non-records     EUpdate p [] -> do       (p', _) <- tInferExpr p@@ -1984,6 +2074,7 @@       else         return () checkArity n (EAt _ p) = checkArity n p+checkArity n (ELazy _ p) = checkArity n p checkArity n (ESign p _) = checkArity n p checkArity n p =   case p of@@ -2050,7 +2141,7 @@     _ -> impossible  tListI :: SLoc -> Ident-tListI loc = mkIdentSLoc loc $ listPrefix ++ "[]"+tListI loc = mkIdentSLoc loc nameList  tList :: SLoc -> EType tList = tCon . tListI@@ -2078,23 +2169,24 @@ getEnvTypes :: T [EType] getEnvTypes = gets (map entryType . stElemsLcl . valueTable) -{--quantify :: [MetaTv] -> Rho -> T Sigma--- Quantify over the specified type variables (all flexible)+-- Quantify over the specified type variables.+-- The type should be zonked.+quantify :: [TRef] -> Rho -> T Sigma+quantify [] ty = return ty quantify tvs ty = do-   mapM_ bind (tvs `zip` new_bndrs) -- 'bind' is just a cunning way-   ty' <- zonkType ty               -- of doing the substitution-   return (EForall new_bndrs_kind ty')-  where-    used_bndrs = tyVarBndrs ty -- Avoid quantified type variables in use-    new_bndrs = allBinders \\ used_bndrs-    bind (tv, name) = writeTcRef tv (EVar name)-    new_bndrs_kind = map (\ i -> IdKind i undefined) new_bndrs+  let usedVars = allVarsExpr ty -- Avoid used type variables+      newVars = take (length tvs) (allBinders \\ usedVars)+      newVarsK = map (\ i -> IdKind i noKind) newVars+      noKind = EVar dummyIdent+  osubst <- gets uvarSubst+  zipWithM_ (\ tv n -> setUVar tv (EVar n)) tvs newVars+  ty' <- derefUVar ty+  putUvarSubst osubst  -- reset the setUVar we did above+  return (EForall newVarsK ty')  allBinders :: [Ident] -- a,b,..z, a1, b1,... z1, a2, b2,...-allBinders = [ mkIdent [chr x] | x <- [ord 'a' .. ord 'z'] ] ++-             [ mkIdent (chr x : show i) | i <- [1 ..], x <- [ord 'a' .. ord 'z']]--}+allBinders = [ mkIdent [x] | x <- ['a' .. 'z'] ] +++             [ mkIdent (x : show i) | i <- [1::Int ..], x <- ['a' .. 'z']]  -- Skolemize the given variables shallowSkolemise :: [IdKind] -> EType -> T ([TyVar], EType)@@ -2140,16 +2232,6 @@     go _ _ = impossible  {--tyVarBndrs :: Rho -> [TyVar]--- Get all the binders used in ForAlls in the type, so that--- when quantifying an outer for-all we can avoid these inner ones-tyVarBndrs ty = nub (bndrs ty)-  where-    bndrs (EForall tvs body) = map idKindIdent tvs ++ bndrs body-    bndrs (EApp arg res) = bndrs arg ++ bndrs res-    bndrs (EVar _) = []-    bndrs _ = undefined- inferSigma :: Expr -> T (Expr, Sigma) inferSigma e = do   (e', exp_ty) <- inferRho e@@ -2182,10 +2264,10 @@                 SLoc -> Expr -> Sigma -> Rho -> T Expr --subsCheckRho _ e1 t1 t2 | trace ("subsCheckRho: " ++ show e1 ++ " :: " ++ show t1 ++ " = " ++ show t2) False = undefined subsCheckRho loc exp1 sigma1@(EForall _ _) rho2 = do -- Rule SPEC-  (exp1', rho1) <- tInst (exp1, sigma1)+  (exp1', rho1) <- tInst exp1 sigma1   subsCheckRho loc exp1' rho1 rho2 subsCheckRho loc exp1 arho1 rho2 | Just _ <- getImplies arho1 = do-  (exp1', rho1) <- tInst (exp1, arho1)+  (exp1', rho1) <- tInst exp1 arho1   subsCheckRho loc exp1' rho1 rho2 subsCheckRho loc exp1 rho1 rho2 | Just (a2, r2) <- getArrow rho2 = do -- Rule FUN   (a1, r1) <- unArrow loc rho1@@ -2210,8 +2292,8 @@ --  traceM ("instSigma: Check " ++ showEType t1 ++ " = " ++ showEType t2)   subsCheckRho loc e1 t1 t2 instSigma loc e1 t1 (Infer r) = do-  (e1', t1') <- tInst (e1, t1)---  traceM ("instSigma: Infer " ++ showEType t1 ++ " ==> " ++ showEType t1')+  (e1', t1') <- tInst e1 t1+  --traceM ("instSigma: Infer " ++ showEType t1 ++ " ==> " ++ showEType t1')   tSetRefType loc r t1'   return e1' @@ -2343,13 +2425,13 @@     return []    else do     addMetaDicts---    traceM "------------------------------------------\nsolveConstraints"+    --traceM "------------------------------------------\nsolveConstraints"     cs' <- mapM (\ (i,t) -> do { t' <- derefUVar t; return (i,t') }) cs---    traceM ("constraints:\n" ++ unlines (map showConstraint cs'))+    --traceM ("constraints:\n" ++ unlines (map showConstraint cs'))     (unsolved, solved, improves) <- solveMany cs' [] [] []     putConstraints unsolved---    traceM ("solved:\n"   ++ unlines [ showIdent i ++ " = "  ++ showExpr  e | (i, e) <- solved ])---    traceM ("unsolved:\n" ++ unlines [ showIdent i ++ " :: " ++ showEType t | (i, t) <- unsolved ])+    --traceM ("solved:\n"   ++ unlines [ showIdent i ++ " = "  ++ showExpr  e | (i, e) <- solved ])+    --traceM ("unsolved:\n" ++ unlines [ showIdent i ++ " :: " ++ showEType t | (i, t) <- unsolved ])     if null improves then       return solved      else do@@ -2377,15 +2459,24 @@ -- Examine each goal, either solve it (possibly producing new goals) or let it remain unsolved. solveMany :: [Goal] -> [UGoal] -> [Soln] -> [Improve] -> T ([UGoal], [Soln], [Improve]) solveMany [] uns sol imp = return (uns, sol, imp)+-- Need to handle ct of the form C => T, and forall a . T solveMany (cns@(di, ct) : cnss) uns sol imp = do --  traceM ("trying " ++ showEType ct)   let loc = getSLoc di-      (iCls, cts) = getApp ct+      !(iCls, cts) = getApp ct       solver = head [ s | (p, s) <- solvers, p iCls ]-  msol <- solver loc iCls cts-  case msol of-    Nothing           -> solveMany        cnss  (cns : uns)            sol         imp-    Just (de, gs, is) -> solveMany (gs ++ cnss)        uns ((di, de) : sol) (is ++ imp)+  ads <- gets argDicts+  -- Check if we have an exact match among the arguments dictionaries.+  -- This is importand to find tupled dictionaries in recursive calls.+  case [ ai | (ai, act) <- ads, ct `eqEType` act ] of+    ai : _ -> do+      --traceM $ "solve with arg " ++ show ct+      solveMany cnss uns ((di, EVar ai) : sol) imp+    [] -> do+      msol <- solver loc iCls cts+      case msol of+        Nothing           -> solveMany        cnss  (cns : uns)            sol         imp+        Just (de, gs, is) -> solveMany (gs ++ cnss)        uns ((di, de) : sol) (is ++ imp)  solveInst :: SolveOne solveInst loc iCls cts = do@@ -2405,7 +2496,7 @@  solveGen :: [IFunDep] -> [InstDict] -> SolveOne solveGen fds insts loc iCls cts = do---  traceM ("solveGen " ++ showEType ct)+--  traceM ("solveGen " ++ show (iCls, cts))   let matches = getBestMatches $ findMatches loc fds insts cts --  traceM ("matches " ++ showListS show (findMatches loc fds insts cts)) --  traceM ("matches " ++ showListS showMatch matches)@@ -2543,9 +2634,9 @@ getBestMatches :: [(Int, (Expr, [EConstraint], [Improve]))] -> [(Expr, [EConstraint], [Improve])] getBestMatches [] = [] getBestMatches ams =-  let (args, insts) = partition (\ (_, (ei, _, _)) -> isDictArg ei) ams-      isDictArg (EVar i) = (adictPrefix ++ uniqIdentSep) `isPrefixOf` unIdent i+  let isDictArg (EVar i) = (adictPrefix ++ uniqIdentSep) `isPrefixOf` unIdent i       isDictArg _ = True+      !(args, insts) = partition (\ (_, (ei, _, _)) -> isDictArg ei) ams       pick ms =         let b = minimum (map fst ms)         -- minimum substitution size         in  [ ec | (s, ec) <- ms, s == b ]   -- pick out the smallest@@ -2606,7 +2697,7 @@  ----------------------------- {--showSymTab :: SymTab Entry -> String+showSymTab :: SymTab -> String showSymTab (SymTab im ies) = showListS showIdent (map fst (M.toList im) ++ map fst ies)  showTModuleExps :: TModule a -> String@@ -2628,4 +2719,3 @@   showIdent i ++ " :: " ++ showEType cc ++     " has " ++ showListS showIdent ms -}-
src/Text/ParserComb.hs view
@@ -3,13 +3,9 @@ {-# OPTIONS_GHC -Wno-type-defaults #-} {-# LANGUAGE FunctionalDependencies #-} module Text.ParserComb(-  (>>=), (>>), pure,-  (<*), (*>), (<*>), (<$), (<$>),-  (<|>),-  fail, guard,-  get, put, modify,   Prsr, runPrsr,   satisfy, satisfyM,+  satisfyMany,   choice,   many, emany, optional, eoptional,   some, esome,@@ -17,7 +13,7 @@   esepEndBy, esepEndBy1,   (<?>), (<|<),   --notFollowedBy,-  lookAhead,+  --lookAhead,   nextToken,   LastFail(..),   TokenMachine(..),@@ -27,11 +23,10 @@ import Prelude import Control.Applicative import Control.Monad-import Compat  data LastFail t   = LastFail Int [t] [String]-  --Xderiving (Show)+  deriving (Show)  maxInt :: Int maxInt = 1000000000@@ -63,44 +58,43 @@   case tmNextToken tm of     (t, _) -> [t] -type Res :: Type -> Type -> Type -> Type -> Type-data Res s tm t a = Many [(a, (tm, s))] (LastFail t)+data Res tm t a = Many [(a, tm)] (LastFail t)   --deriving (Show) -type Prsr :: Type -> Type -> Type -> Type -> Type-data Prsr s tm t a = P ((tm, s) -> Res s tm t a)+data Prsr tm t a = P (tm -> Res tm t a) --instance Show (Prsr s t a) where show _ = "<<Prsr>>" -runP :: forall s tm t a . Prsr s tm t a -> ((tm, s) -> Res s tm t a)+runP :: forall tm t a . Prsr tm t a -> (tm -> Res tm t a) runP (P p) = p -mapTokenState :: forall s tm t . (tm -> tm) -> Prsr s tm t ()-mapTokenState f = P (\ (tm, s) -> Many [((), (f tm, s))] noFail)+mapTokenState :: forall tm t . (tm -> tm) -> Prsr tm t ()+mapTokenState f = P (\ tm -> Many [((), f tm)] noFail) -instance forall s tm t . Functor (Prsr s tm t) where+instance forall tm t . Functor (Prsr tm t) where   fmap f p = P $ \ t ->     case runP p t of       Many aus lf -> Many [ (f a, u) | (a, u) <- aus ] lf -instance forall s tm t . Applicative (Prsr s tm t) where+instance forall tm t . Applicative (Prsr tm t) where   pure a = P $ \ t -> Many [(a, t)] noFail   (<*>) = ap   (*>) p k = p >>= \ _ -> k -instance forall s tm t . Monad (Prsr s tm t) where+instance forall tm t . Monad (Prsr tm t) where   (>>=) p k = P $ \ t ->     case runP p t of       Many aus plf ->-        let { xss = [ runP (k a) u | (a, u) <- aus ] }-        in  case unzip [ (rs, lf) | Many rs lf <- xss ] of-              (rss, lfs) -> Many (concat rss) (longests (plf : lfs))+        let ms = map (\ (a, u) -> runP (k a) u) aus+            lfs = map (\ (Many _ lf) -> lf) ms+            rrs = [ r | Many rs _ <- ms, r <- rs ]+        in  Many rrs (longests (plf : lfs))   return = pure -instance forall s t tm . TokenMachine tm t => MonadFail (Prsr s tm t) where-  fail m = P $ \ (ts, _) -> Many [] (LastFail (tmLeft ts) (firstToken ts) [m])+instance forall t tm . TokenMachine tm t => MonadFail (Prsr tm t) where+  fail m = P $ \ ts -> Many [] (LastFail (tmLeft ts) (firstToken ts) [m]) -instance forall s t tm . TokenMachine tm t => Alternative (Prsr s tm t) where-  empty = P $ \ (ts, _) -> Many [] (LastFail (tmLeft ts) (firstToken ts) [])+instance forall t tm . TokenMachine tm t => Alternative (Prsr tm t) where+  empty = P $ \ ts -> Many [] (LastFail (tmLeft ts) (firstToken ts) ["empty"])    (<|>) p q = P $ \ t ->     case runP p t of@@ -108,18 +102,9 @@         case runP q t of           Many b lfb -> Many (a ++ b) (longest lfa lfb) -get :: forall s tm t . Prsr s tm t s-get = P $ \ t@(_, s) -> Many [(s, t)] noFail--put :: forall s tm t . s -> Prsr s tm t ()-put s = P $ \ (ts, _) -> Many [((), (ts, s))] noFail--modify :: forall s tm t . (s -> s) -> Prsr s tm t ()-modify f = get >>= \ s -> put (f s)- -- Left biased choice infixl 3 <|<-(<|<) :: forall s tm t a . Prsr s tm t a -> Prsr s tm t a -> Prsr s tm t a+(<|<) :: forall tm t a . Prsr tm t a -> Prsr tm t a -> Prsr tm t a (<|<) p q = P $ \ t ->   case runP p t of     Many [] lfa ->@@ -127,84 +112,95 @@          Many b lfb -> Many b (longest lfa lfb)     r -> r -emany :: forall s tm t a . Prsr s tm t a -> Prsr s tm t [a]-emany p = esome p <|< pure []--esome :: forall s tm t a . Prsr s tm t a -> Prsr s tm t [a]-esome p = (:) <$> p <*> emany p--eoptional :: forall s tm t a . Prsr s tm t a -> Prsr s tm t (Maybe a)-eoptional p = (Just <$> p) <|< pure Nothing--runPrsr :: forall s tm t a . --X(Show a, Show s) =>-           s -> Prsr s tm t a -> tm -> Either (LastFail t) [(a, s)]-runPrsr s (P p) f =-  case p (f, s) of-    Many [] lf -> Left lf-    Many xs _  -> Right [(a, snd x) | (a, x) <- xs ]--choice :: forall s tm t a . TokenMachine tm t => [Prsr s tm t a] -> Prsr s tm t a-choice [] = empty-choice ps = foldr1 (<|>) ps--satisfy :: forall s tm t . TokenMachine tm t => String -> (t -> Bool) -> Prsr s tm t t-satisfy msg f = P $ \ (acs, s) ->+satisfy :: forall tm t . TokenMachine tm t => String -> (t -> Bool) -> Prsr tm t t+satisfy msg f = P $ \ acs ->   case tmNextToken acs of-    (c, cs) | f c -> Many [(c, (cs, s))] noFail+    r@(c, _) | f c -> Many [r] noFail     _ -> Many [] (LastFail (tmLeft acs) (firstToken acs) [msg]) -satisfyM :: forall s tm t a . TokenMachine tm t => String -> (t -> Maybe a) -> Prsr s tm t a-satisfyM msg f = P $ \ (acs, s) ->+satisfyM :: forall tm t a . TokenMachine tm t => String -> (t -> Maybe a) -> Prsr tm t a+satisfyM msg f = P $ \ acs ->   case tmNextToken acs of-    (c, cs) | Just a <- f c -> Many [(a, (cs, s))] noFail+    (c, cs) | Just a <- f c -> Many [(a, cs)] noFail     _ -> Many [] (LastFail (tmLeft acs) (firstToken acs) [msg]) -{--eof :: forall s tm t . TokenMachine tm t => Prsr s tm t ()-eof = P $ \ t@(cs, _) ->-  case tmNextToken cs of-    Nothing -> Many [((), t)] noFail-    Just _  -> Many [] (LastFail (tmLeft cs) (firstToken cs) ["eof"])--}+satisfyMany :: forall tm t . TokenMachine tm t => (t -> Bool) -> Prsr tm t [t]+satisfyMany f = P $ loop []+  where loop res acs =+          case tmNextToken acs of+            (c, cs) | f c -> loop (c:res) cs+                    | otherwise -> Many [(reverse res, acs)] noFail  infixl 9 <?>-(<?>) :: forall s tm t a . Prsr s tm t a -> String -> Prsr s tm t a+(<?>) :: forall tm t a . Prsr tm t a -> String -> Prsr tm t a (<?>) p e = P $ \ t -> --  trace ("<?> " ++ show e) $   case runP p t of     Many rs (LastFail l ts _) -> Many rs (LastFail l ts [e])  {--notFollowedBy :: forall s t a . Prsr s t a -> Prsr s t ()+lookAhead :: forall tm t a . TokenMachine tm t => Prsr tm t a -> Prsr tm t ()+lookAhead p = P $ \ t ->+  case runP p t of+    Many [] (LastFail l ts xs) -> Many [] (LastFail l (take 1 ts) xs)+    _                          -> Many [((), t)] noFail+-}++nextToken :: forall tm t . TokenMachine tm t => Prsr tm t t+nextToken = P $ \ cs ->+  case tmNextToken cs of+    (c, _) -> Many [(c, cs)] noFail++{-+eof :: forall tm t . TokenMachine tm t => Prsr tm t ()+eof = P $ \ t@(cs, _) ->+  case tmNextToken cs of+    Nothing -> Many [((), t)] noFail+    Just _  -> Many [] (LastFail (tmLeft cs) (firstToken cs) ["eof"])+-}++{-+notFollowedBy :: forall t a . Prsr t a -> Prsr t () notFollowedBy p = P $ \ t@(ts,_) ->   case runP p t of     Many [] _ -> Many [((), t)] noFail     _         -> Many [] (LastFail (length ts) (take 1 ts) ["!"]) -} -lookAhead :: forall s tm t a . TokenMachine tm t => Prsr s tm t a -> Prsr s tm t ()-lookAhead p = P $ \ t ->-  case runP p t of-    Many [] (LastFail l ts xs) -> Many [] (LastFail l (take 1 ts) xs)-    _                          -> Many [((), t)] noFail+runPrsr :: forall tm t a . --X(Show a, Show s) =>+           Prsr tm t a -> tm -> Either (LastFail t) [a]+runPrsr (P p) f =+  case p f of+    Many [] lf -> Left lf+    Many xs _  -> Right [a | (a, _) <- xs ] -nextToken :: forall s tm t . TokenMachine tm t => Prsr s tm t t-nextToken = P $ \ t@(cs, _) ->-  case tmNextToken cs of-    (c, _) -> Many [(c, t)] noFail+------------------------------- -sepBy1 :: forall s tm t a sep . TokenMachine tm t => Prsr s tm t a -> Prsr s tm t sep -> Prsr s tm t [a]+emany :: forall tm t a . Prsr tm t a -> Prsr tm t [a]+emany p = esome p <|< pure []++esome :: forall tm t a . Prsr tm t a -> Prsr tm t [a]+esome p = (:) <$> p <*> emany p++eoptional :: forall tm t a . Prsr tm t a -> Prsr tm t (Maybe a)+eoptional p = (Just <$> p) <|< pure Nothing++choice :: forall tm t a . TokenMachine tm t => [Prsr tm t a] -> Prsr tm t a+choice [] = empty+choice ps = foldr1 (<|>) ps++sepBy1 :: forall tm t a sep . TokenMachine tm t => Prsr tm t a -> Prsr tm t sep -> Prsr tm t [a] sepBy1 p sep = (:) <$> p <*> many (sep *> p) -esepBy1 :: forall s tm t a sep . Prsr s tm t a -> Prsr s tm t sep -> Prsr s tm t [a]+esepBy1 :: forall tm t a sep . Prsr tm t a -> Prsr tm t sep -> Prsr tm t [a] esepBy1 p sep = (:) <$> p <*> emany (sep *> p) -esepBy :: forall s tm t a sep . Prsr s tm t a -> Prsr s tm t sep -> Prsr s tm t [a]+esepBy :: forall tm t a sep . Prsr tm t a -> Prsr tm t sep -> Prsr tm t [a] esepBy p sep = esepBy1 p sep <|< pure [] -esepEndBy :: forall s tm t a sep . Prsr s tm t a -> Prsr s tm t sep -> Prsr s tm t [a]+esepEndBy :: forall tm t a sep . Prsr tm t a -> Prsr tm t sep -> Prsr tm t [a] esepEndBy p sep = esepEndBy1 p sep <|< pure [] -esepEndBy1 :: forall s tm t a sep . Prsr s tm t a -> Prsr s tm t sep -> Prsr s tm t [a]+esepEndBy1 :: forall tm t a sep . Prsr tm t a -> Prsr tm t sep -> Prsr tm t [a] esepEndBy1 p sep = (:) <$> p <*> ((sep *> esepEndBy p sep) <|< pure []) 
src/runtime/bfile.c view
@@ -217,167 +217,142 @@ } #endif -/***************** BFILE via simple LZW decompression *******************/ -#define DICTSIZE 4096-#define ASCIISIZE 96            /* ' ' - '~', '\n' */--struct BFILE_lzw {+#if WANT_LZ77+/***************** BFILE via simple LZ77 decompression *******************/+struct BFILE_lz77 {   BFILE    mets;   BFILE    *bfile;              /* underlying BFILE */-  int      unget;               /* storage for a single ungetb */-  char     *table[DICTSIZE];    /* dictionary */-  int      table_size;          /* next dictionary slot */-  char     *ptr;                /* pointer into output string */-  int      old;                 /* previous code word */-  int      ch;                  /* previous first character */-  char     buf[DICTSIZE+1];     /* buffer holding output string */-  int      rdstate;             /* state of 3 bytes to 2 codewords transducer */-  int      rdres;               /* saved transducer bits */+  uint8_t  *buf;+  size_t   len;+  size_t   pos;+  int      read; }; -/* Get a code word.  It's 12 bits, so 2 codewords are spread over 3 bytes.- * XXX This has 4096 hardcoded.-*/ int-getcode_lzw(struct BFILE_lzw *p)+getb_lz77(BFILE *bp) {-  int r;--  if (p->rdstate == 0) {-    r = getb(p->bfile);-    if (r < 0)-      return -1;-    r |= getb(p->bfile) << 8;-    p->rdres = r >> 12;         /* save 4 bits */-    p->rdstate = 1;-    return r & 0xfff;-  } else {-    r = p->rdres;-    r |= getb(p->bfile) << 4;-    p->rdstate = 0;-    return r;-  }+  struct BFILE_lz77 *p = (struct BFILE_lz77*)bp;+  CHECKBFILE(bp, getb_lz77);+  if (p->pos >= p->len)+    return -1;+  return p->buf[p->pos++]; } -char *-str_lzw(const char *s, int c)+void+ungetb_lz77(int c, BFILE *bp) {-  int l = strlen(s);-  char *p = MALLOC(l + 1 + 1);-  if (!p)-    memerr();-  strcpy(p, s);-  p[l] = c;-  p[l+1] = '\0';-  return p;+  struct BFILE_lz77 *p = (struct BFILE_lz77*)bp;+  CHECKBFILE(bp, getb_lz77);+  p->pos--; } -int-getb_lzw(BFILE *bp)+void+putb_lz77(int b, BFILE *bp) {-  struct BFILE_lzw *p = (struct BFILE_lzw*)bp;-  CHECKBFILE(bp, getb_lzw);-  char *s;-  int c, n, l;+  struct BFILE_lz77 *p = (struct BFILE_lz77*)bp;+  CHECKBFILE(bp, getb_lz77); -  /* Do we have an ungetb character? */-  if (p->unget >= 0) {-    c = p->unget;-    p->unget = -1;-    return c;-  }-  /* Are we in the middle of emitting a string? */-  if (p->ptr) {-    c = *p->ptr++;-    if (c) {-      //PRINT("c='%c'\n", c);-      return c;-    }-    p->ptr = 0;-  }-  n = getcode_lzw(p);-  if (n < 0)-    return -1;-  if (n >= DICTSIZE)-    ERR("getcode_lzw 1");-  s = p->table[n];-  if (!s) {-    char *os = p->table[p->old];-    strcpy(p->buf, os);-    l = strlen(os);-    p->buf[l++] = p->ch;-    p->buf[l] = '\0';-  } else {-    strcpy(p->buf, s);-  }-  p->ptr = p->buf;-  p->ch = p->buf[0];-  if (p->table_size < DICTSIZE) {-    p->table[p->table_size++] = str_lzw(p->table[p->old], p->ch);+  if (p->pos >= p->len) {+    p->len *= 2;+    p->buf = realloc(p->buf, p->len);+    if (!p->buf)+      memerr();   }-  p->old = n;-  return *p->ptr++;-}--void-ungetb_lzw(int c, BFILE *bp)-{-  struct BFILE_lzw *p = (struct BFILE_lzw*)bp;-  CHECKBFILE(bp, getb_lzw);-  if (p->unget >= 0)-    ERR("ungetb_lzw");-  p->unget = c;+  p->buf[p->pos++] = b; }  void-closeb_lzw(BFILE *bp)+closeb_lz77(BFILE *bp) {-  struct BFILE_lzw *p = (struct BFILE_lzw*)bp;-  CHECKBFILE(bp, getb_lzw);-  int i;+  struct BFILE_lz77 *p = (struct BFILE_lz77*)bp;+  CHECKBFILE(bp, getb_lz77); -  for (i = 0; i < DICTSIZE; i++) {-    if (p->table[i])-      FREE(p->table[i]);+  if (!p->read) {+    /* We are in write mode, so compress and push it down */+    uint8_t *obuf;+    size_t olen = lz77c(p->buf, p->pos, &obuf);+    FREE(p->buf);+    for (size_t i = 0; i < olen; i++) {+      putb(obuf[i], p->bfile);+    }+    FREE(obuf);   }+   closeb(p->bfile);   FREE(p); } +void+flushb_lz77(BFILE *bp)+{+  /* There is nothing we can do */+}+ BFILE *-add_lzw_decompressor(BFILE *file)+add_lz77_decompressor(BFILE *file) {-  struct BFILE_lzw *p = MALLOC(sizeof(struct BFILE_lzw));-  int i;-  +  struct BFILE_lz77 *p = MALLOC(sizeof(struct BFILE_lz77));+   if (!p)     memerr();-  memset(p, 0, sizeof(struct BFILE_lzw));-  p->mets.getb = getb_lzw;-  p->mets.ungetb = ungetb_lzw;-  p->mets.putb = 0;             /* no compressor yet. */+  memset(p, 0, sizeof(struct BFILE_lz77));+  p->mets.getb = getb_lz77;+  p->mets.ungetb = ungetb_lz77;+  p->mets.putb = 0;   p->mets.flushb = 0;-  p->mets.closeb = closeb_lzw;+  p->mets.closeb = closeb_lz77;+  p->read = 1;   p->bfile = file;-  p->unget = -1; -  /* initialize dictionary with printable ASCII */-  for(i = 0; i < ASCIISIZE-1; i++) {-    p->table[i] = str_lzw("", i + ' ');+  size_t size = 25000;+  uint8_t *buf = MALLOC(size);+  size_t i;+  if (!buf)+    memerr();+  for(i = 0;;) {+    int b = getb(file);+    if (b < 0)+      break;+    if (i >= size) {+      size *= 2;+      buf = realloc(buf, size);+      if (!buf)+        memerr();+    }+    buf[i++] = b;   }-  p->table[i++] = str_lzw("", '\n');-  p->table_size = i;+  p->len = lz77d(buf, i, &p->buf);+  FREE(buf);+  p->pos = 0;+  return (BFILE*)p;+} -  /* set up decompressore state */-  p->old = getcode_lzw(p);-  strcpy(p->buf, p->table[p->old]);-  p->ch = p->buf[0];-  p->ptr = p->buf;-  -  return (BFILE *)p;+BFILE *+add_lz77_compressor(BFILE *file)+{+  struct BFILE_lz77 *p = MALLOC(sizeof(struct BFILE_lz77));++  if (!p)+    memerr();+  memset(p, 0, sizeof(struct BFILE_lz77));+  p->mets.getb = getb_lz77;+  p->mets.ungetb = 0;+  p->mets.putb = putb_lz77;+  p->mets.flushb = flushb_lz77;+  p->mets.closeb = closeb_lz77;+  p->read = 0;+  p->bfile = file;++  p->len = 25000;+  p->buf = MALLOC(p->len);+  if (!p->buf)+    memerr();+  p->pos = 0;+  return (BFILE*)p; } +#endif  /* WANT_LZ77 */ /***************** BFILE with UTF8 encode/decode *******************/  struct BFILE_utf8 {
src/runtime/comb.c view
@@ -1,2 +1,3 @@ unsigned char *combexpr = 0; int combexprlen = 0;+struct ffi_entry *xffi_table = 0;
src/runtime/config-c64.h view
@@ -38,7 +38,7 @@ /*  * Number of bits in a word.  Only 32 and 64 are supported.  */-#define WORD_SIZE 16+//#define WORD_SIZE 16  /*  * Find First Set
+ src/runtime/config-esp32.h view
@@ -0,0 +1,179 @@+/*+ * Various platform specific configuration.+ */++/*+ * Include stdio functions.+ * Without this none of the file I/O in System.IO is available.+ */+#define WANT_STDIO 0++/*+ * Include ops for floating point arithmetic.+ * Without this +,-,* etc will not be available for the Double type.+ */+#define WANT_FLOAT 1++/*+ * Include <math.h>+ * Without this, exp,sin, etc are not available.+ */+#define WANT_MATH 0++/*+ * Include MD5 checksumming code+ */+#define WANT_MD5 0++/*+ * Include profiling code+ */+#define WANT_TICK 0++/*+ * Process argc, argv+ */+#define WANT_ARGS 0++/*+ * Number of bits in a word.  Only 32 and 64 are supported.+ */+//#define WORD_SIZE 32++/*+ * Find First Set+ * This macro must be defined.+ * It return the number of the least significant bit that is set.+ * Numberings starts from 1.  If no bit is set, it should return 0.+ */+// #define FFS++/*+ * This is the character used for comma-separation in printf.+ * Defaults to "'".+ */+/* #define PCOMMA "'" */+++/*+ * Get a raw input character.+ * If undefined, the default always returns -1+ */+/* #define GETRAW */+++/*+ * Get time since some epoch in milliseconds.+ */+/* #define GETTIMEMILLI */+++/*+ * The ERR macro should report an error and exit.+ * If not defined, a generic one will be used.+ */+/* #define ERR(s) */+/* #define ERR1(s,a) */++#define GCRED    0              /* do some reductions during GC */+#define FASTTAGS 1              /* compute tag by pointer subtraction */+#define INTTABLE 1              /* use fixed table of small INT nodes */+#define SANITY   1              /* do some sanity checks */+#define STACKOVL 1              /* check for stack overflow */++#define HEAP_CELLS 4000+#define STACK_SIZE 500++#define MAIN void app_main(void)++#define INITIALIZATION++++#include <stdio.h>+#include "freertos/FreeRTOS.h"+#include "freertos/task.h"+#include "driver/gpio.h"+#include "esp_log.h"+#include "led_strip.h"+#include "sdkconfig.h"++#define BLINK_GPIO CONFIG_BLINK_GPIO++static led_strip_handle_t led_strip;++void led_strip_set_pixel(led_strip_handle_t, int, int, int, int);++#if 0+static void blink_led(void)+{+#if 1+    static int state = 0;+    static int br = 16;+    switch (state) {+    case 0:+      led_strip_set_pixel(led_strip, 0, br, 16-br, 0);+      br--;+      if (br == 0) { br = 16; state++; }+      break;+    case 1:+      led_strip_set_pixel(led_strip, 0, 0, br, 16-br);+      br--;+      if (br == 0) { br = 16; state++; }+      break;+    case 2:+      led_strip_set_pixel(led_strip, 0, 16-br, 0, br);+      br--;+      if (br == 0) { br = 16; state = 0; }+      break;+    }+    led_strip_refresh(led_strip);+      +#else+    /* If the addressable LED is enabled */+    if (s_led_state) {+        /* Set the LED pixel using RGB from 0 (0%) to 255 (100%) for each color */+        led_strip_set_pixel(led_strip, 0, 16, 16, 16);+        /* Refresh the strip to send data */+        led_strip_refresh(led_strip);+    } else {+        /* Set all LED off to clear all pixels */+        led_strip_clear(led_strip);+    }+#endif+}+#endif++void+main_setup(void)+{+    ESP_LOGI(TAG, "Example configured to blink addressable LED!");+    /* LED strip initialization with the GPIO and pixels number*/+    led_strip_config_t strip_config = {+        .strip_gpio_num = BLINK_GPIO,+        .max_leds = 1, // at least one LED on board+    };+#if CONFIG_BLINK_LED_STRIP_BACKEND_RMT+    led_strip_rmt_config_t rmt_config = {+        .resolution_hz = 10 * 1000 * 1000, // 10MHz+        .flags.with_dma = false,+    };+    ESP_ERROR_CHECK(led_strip_new_rmt_device(&strip_config, &rmt_config, &led_strip));+#elif CONFIG_BLINK_LED_STRIP_BACKEND_SPI+    led_strip_spi_config_t spi_config = {+        .spi_bus = SPI2_HOST,+        .flags.with_dma = true,+    };+    ESP_ERROR_CHECK(led_strip_new_spi_device(&strip_config, &spi_config, &led_strip));+#else+#error "unsupported LED strip backend"+#endif+    /* Set all LED off to clear all pixels */+    led_strip_clear(led_strip);+}++void delay(int t)+{+  vTaskDelay(t / portTICK_PERIOD_MS);+}+
src/runtime/config-micro-64.h view
@@ -38,7 +38,7 @@ /*  * Number of bits in a word.  Only 32 and 64 are supported.  */-#define WORD_SIZE 64+//#define WORD_SIZE 64  /*  * Find First Set
src/runtime/config-mingw-64.h view
@@ -33,7 +33,7 @@ /*  * Number of bits in a word.  Only 32 and 64 are supported.  */-#define WORD_SIZE 64+//#define WORD_SIZE 64  /*  * Find First Set
src/runtime/config-stm32f4.h view
@@ -38,7 +38,7 @@ /*  * Number of bits in a word.  Only 32 and 64 are supported.  */-#define WORD_SIZE 32+//#define WORD_SIZE 32  /*  * Find First Set
src/runtime/config-unix-32.h view
@@ -1,7 +1,7 @@ #include "config-unix-64.h" -#undef WORD_SIZE-#define WORD_SIZE 32+//#undef WORD_SIZE+//#define WORD_SIZE 32  #undef FFS #define FFS ffs
src/runtime/config-unix-64.h view
@@ -34,9 +34,14 @@ #define WANT_TICK 1  /*+ * Include directory manipulation+ */+#define WANT_DIR 1++/*  * Number of bits in a word.  Only 32 and 64 are supported.  */-#define WORD_SIZE 64+//#define WORD_SIZE 64  /*  * Find First Set
src/runtime/config-windows-64.h view
@@ -33,7 +33,7 @@ /*  * Number of bits in a word.  Only 32 and 64 are supported.  */-#define WORD_SIZE 64+//#define WORD_SIZE 64  /*  * This is Windows
+ src/runtime/eval-esp32.c view
@@ -0,0 +1,6 @@+/* Copyright 2023 Lennart Augustsson+ * See LICENSE file for full license.+ */+#include "config-esp32.h"++#include "eval.c"
src/runtime/eval.c view
@@ -13,3048 +13,3740 @@ #if WANT_MATH #include <math.h> #endif  /* WANT_MATH */--#if WANT_MD5-#include "md5.h"-#endif--//#include "config.h"--#define VERSION "v7.0\n"--typedef intptr_t value_t;       /* Make value the same size as pointers, since they are in a union */-#define PRIvalue PRIdPTR-typedef uintptr_t uvalue_t;     /* Make unsigned value the same size as pointers, since they are in a union */-#define PRIuvalue PRIuPTR-typedef uintptr_t heapoffs_t;   /* Heap offsets */-#define PRIheap PRIuPTR-typedef uintptr_t tag_t;        /* Room for tag, low order bit indicates AP/not-AP */-typedef intptr_t stackptr_t;    /* Index into stack */--typedef uintptr_t counter_t;    /* Statistics counter, can be smaller since overflow doesn't matter */-#define PRIcounter PRIuPTR-typedef uintptr_t bits_t;       /* One word of bits */-#if WORD_SIZE == 64-typedef double flt_t;-#elif WORD_SIZE == 32-typedef float flt_t;-#elif WORD_SIZE == 16-typedef uint16_t flt_t;         /* No floats, but we need something */-#else-#error Unknown WORD_SIZE-#endif--/* We cast all FFI functions to this type.  It's reasonably portable */-typedef void (*funptr_t)(void);--#if !defined(MALLOC)-#define MALLOC malloc-#endif--#if !defined(FREE)-#define FREE free-#endif--#if !defined(EXIT)-#define EXIT exit-#endif--#if !defined(PRINT)-#define PRINT printf-#endif--#if !defined(MAIN)-#define MAIN int main(int argc, char **argv)-#endif--#if !defined(PCOMMA)-#define PCOMMA "'"-#endif  /* !defined(PCOMMA) */--#if !defined(GETRAW)-int GETRAW(void) { return -1; }-#endif  /* !defined(getraw) */--#if !defined(GETTIMEMILLI)-value_t GETTIMEMILLI(void) { return 0; }-#endif  /* !define(GETTIMEMILLI) */--#if !defined(TMPNAME)-char* TMPNAME(const char* pre, const char* post) {-  char *s = MALLOC(strlen(pre) + 3 + strlen(post) + 1);-  strcpy(s, pre);-  strcat(s, "TMP");-  strcat(s, post);-  return s;-}-#endif--#if !defined(FFS)-/* This is pretty bad, could use deBruijn multiplication instead. */-int-FFS(bits_t x)-{-  int i;-  if (!x)-    return 0;-  for(i = 1; !(x & 1); x >>= 1, i++)-    ;-  return i;-}-#endif  /* !defined(FFS) */--#if !defined(WANT_ARGS)-#define WANT_ARGS 1-#endif--#if !defined(INLINE)-#define INLINE inline-#endif  /* !define(INLINE) */--#if !defined(NORETURN)-#define NORETURN __attribute__ ((noreturn))-#endif /* !defined(NORETURN) */--#if !defined(COUNT)-#define COUNT(n) ++(n)-#endif--value_t-iswindows(void)-{-#if defined(ISWINDOWS)-  return 1;-#else-  return 0;-#endif-}--/***************************************/--/* Keep permanent nodes for LOW_INT <= i < HIGH_INT */-#define LOW_INT (-10)-#define HIGH_INT 256--#if !defined(HEAP_CELLS)-#define HEAP_CELLS 50000000-#endif--#if !defined(STACK_SIZE)-#define STACK_SIZE 100000-#endif--#if !defined(ERR)-#if WANT_STDIO-#define ERR(s)    do { fprintf(stderr,"ERR: "s"\n");   EXIT(1); } while(0)-#define ERR1(s,a) do { fprintf(stderr,"ERR: "s"\n",a); EXIT(1); } while(0)-#else  /* WANT_STDIO */-#define ERR(s) EXIT(1)-#define ERR1(s,a) EXIT(1)-#endif  /* WANT_STDIO */-#endif  /* !define(ERR) */--enum node_tag { T_FREE, T_IND, T_AP, T_INT, T_DBL, T_PTR, T_BADDYN, T_ARR,-                T_S, T_K, T_I, T_B, T_C,-                T_A, T_Y, T_SS, T_BB, T_CC, T_P, T_R, T_O, T_U, T_Z,-                T_K2, T_K3, T_K4, T_CCB,-                T_ADD, T_SUB, T_MUL, T_QUOT, T_REM, T_SUBR, T_UQUOT, T_UREM, T_NEG,-                T_AND, T_OR, T_XOR, T_INV, T_SHL, T_SHR, T_ASHR,-                T_EQ, T_NE, T_LT, T_LE, T_GT, T_GE, T_ULT, T_ULE, T_UGT, T_UGE,-                T_PEQ, T_PNULL, T_PADD, T_PSUB,-                T_TOPTR, T_TOINT, T_TODBL,-#if WANT_FLOAT-                T_FADD, T_FSUB, T_FMUL, T_FDIV, T_FNEG, T_ITOF,-                T_FEQ, T_FNE, T_FLT, T_FLE, T_FGT, T_FGE, T_FSHOW, T_FREAD,-#endif-                T_ARR_ALLOC, T_ARR_SIZE, T_ARR_READ, T_ARR_WRITE, T_ARR_EQ,-                T_ERROR, T_NODEFAULT, T_NOMATCH, T_SEQ, T_EQUAL, T_COMPARE, T_RNF,-                T_TICK,-                T_IO_BIND, T_IO_THEN, T_IO_RETURN,-                T_IO_CCBIND,-                T_IO_SERIALIZE, T_IO_DESERIALIZE,-                T_IO_STDIN, T_IO_STDOUT, T_IO_STDERR, T_IO_GETARGS,-                T_IO_PERFORMIO, T_IO_GETTIMEMILLI, T_IO_PRINT, T_IO_CATCH,-                T_IO_CCALL, T_DYNSYM,-                T_NEWCASTRINGLEN, T_PEEKCASTRING, T_PEEKCASTRINGLEN,-                T_FROMUTF8,-                T_STR,-                T_LAST_TAG,-};-#if 0-static const char* tag_names[] = {-  "FREE", "IND", "AP", "INT", "DBL", "PTR", "BADDYN", "ARR",-  "S", "K", "I", "B", "C",-  "A", "Y", "SS", "BB", "CC", "P", "R", "O", "U", "Z",-  "K2", "K3", "K4", "CCB",-  "ADD", "SUB", "MUL", "QUOT", "REM", "SUBR", "UQUOT", "UREM", "NEG",-  "AND", "OR", "XOR", "INV", "SHL", "SHR", "ASHR",-  "EQ", "NE", "LT", "LE", "GT", "GE", "ULT", "ULE", "UGT", "UGE",-  "PEQ", "PNULL", "PADD", "PSUB",-  "TOPTR", "TOINT", "TODBL",-#if WANT_FLOAT-  "FADD", "FSUB", "FMUL", "FDIV", "FNEG", "ITOF",-  "FEQ", "FNE", "FLT", "FLE", "FGT", "FGE", "FSHOW", "FREAD",-#endif-  "ARR_ALLOC", "ARR_SIZE", "ARR_READ", "ARR_WRITE", "ARR_EQ",-  "ERROR", "NODEFAULT", "NOMATCH", "SEQ", "EQUAL", "COMPARE", "RNF",-  "TICK",-  "IO_BIND", "IO_THEN", "IO_RETURN",-  "C'BIND",-  "IO_SERIALIZE", "IO_DESERIALIZE",-  "IO_STDIN", "IO_STDOUT", "IO_STDERR", "IO_GETARGS",-  "IO_PERFORMIO", "IO_GETTIMEMILLI", "IO_PRINT", "IO_CATCH",-  "IO_CCALL", "DYNSYM",-  "NEWCASTRINGLEN", "PEEKCASTRING", "PEEKCASTRINGLEN",-  "FROMUTF8",-  "STR",-  "LAST_TAG",-};-#endif--struct ioarray;-struct ustring;--typedef struct node {-  union {-    struct node *uufun;-    tag_t        uutag;             /* LSB=1 indicates that this is a tag, LSB=0 that this is a T_AP node */-  } ufun;-  union {-    struct node    *uuarg;-    value_t         uuvalue;-    flt_t           uufloatvalue;-    struct ustring *uustring;-    const char     *uucstring;-    void           *uuptr;-    struct ioarray *uuarray;-  } uarg;-} node;-typedef struct node* NODEPTR;-#define NIL 0-#define HEAPREF(i) &cells[(i)]-#define GETTAG(p) ((p)->ufun.uutag & 1 ? (int)((p)->ufun.uutag >> 1) : T_AP)-#define SETTAG(p,t) do { if (t != T_AP) (p)->ufun.uutag = ((t) << 1) + 1; } while(0)-#define GETVALUE(p) (p)->uarg.uuvalue-#define GETDBLVALUE(p) (p)->uarg.uufloatvalue-#define SETVALUE(p,v) (p)->uarg.uuvalue = v-#define SETDBLVALUE(p,v) (p)->uarg.uufloatvalue = v-#define FUN(p) (p)->ufun.uufun-#define ARG(p) (p)->uarg.uuarg-#define STR(p) (p)->uarg.uustring-#define CSTR(p) (p)->uarg.uucstring-#define PTR(p) (p)->uarg.uuptr-#define ARR(p) (p)->uarg.uuarray-#define INDIR(p) ARG(p)-#define NODE_SIZE sizeof(node)-#define ALLOC_HEAP(n) do { cells = MALLOC(n * sizeof(node)); memset(cells, 0x55, n * sizeof(node)); } while(0)-#define LABEL(n) ((heapoffs_t)((n) - cells))-node *cells;                 /* All cells */--/*- * UTF-8 encoded strings- */-struct ustring {-  size_t size;-  unsigned char string[1];-};--/*- * Arrays are allocated with MALLOC()/FREE().- * During GC they are marked, and all elements in the array are- * recursively marked.- * At the end of the the mark phase there is a scan of all- * arrays, and the unmarked ones are freed.- */-struct ioarray {-  struct ioarray *next;         /* all ioarrays are linked together */-  size_t marked;               /* marked during GC */-  size_t size;                  /* number of elements in the array */-  NODEPTR array[1];             /* actual size may be bigger */-};-struct ioarray *array_root = 0;--counter_t num_reductions = 0;-counter_t num_alloc = 0;-counter_t num_gc = 0;-uintptr_t gc_mark_time = 0;-uintptr_t run_time = 0;--NODEPTR *topnode;-NODEPTR atptr;--NODEPTR *stack;-stackptr_t stack_ptr = -1;-#if STACKOVL-#define PUSH(x) do { if (stack_ptr >= stack_size-1) ERR("stack overflow"); stack[++stack_ptr] = (x); } while(0)-#else  /* STACKOVL */-#define PUSH(x) do {                                                       stack[++stack_ptr] = (x); } while(0)-#endif  /* STACKOVL */-#define TOP(n) stack[stack_ptr - (n)]-#define POP(n) stack_ptr -= (n)-#define POPTOP() stack[stack_ptr--]-#define GCCHECK(n) gc_check((n))--heapoffs_t heap_size = HEAP_CELLS; /* number of heap cells */-heapoffs_t heap_start;             /* first location in heap that needs GC */-stackptr_t stack_size = STACK_SIZE;--counter_t num_marked;-counter_t max_num_marked = 0;-counter_t num_free;-counter_t num_arr_alloc;-counter_t num_arr_free;--#define BITS_PER_WORD (sizeof(bits_t) * 8)-bits_t *free_map;             /* 1 bit per node, 0=free, 1=used */-heapoffs_t free_map_nwords;-heapoffs_t next_scan_index;--int want_gc_red = 0;--NORETURN-void-memerr(void)-{-  ERR("Out of memory");-  EXIT(1);-}--/***************************************/--#include "bfile.c"--/***************************************/--struct ioarray*-arr_alloc(size_t sz, NODEPTR e)-{-  struct ioarray *arr = MALLOC(sizeof(struct ioarray) + (sz-1) * sizeof(NODEPTR));-  size_t i;--  if (!arr)-    memerr();-  arr->next = array_root;-  array_root = arr;-  arr->marked = 0;-  arr->size = sz;-  for(i = 0; i < sz; i++)-    arr->array[i] = e;-  //PRINT("arr_alloc(%d, %p) = %p\n", (int)sz, e, arr);-  num_arr_alloc++;-  return arr;-}--/*****************************************************************************/--#if WANT_TICK-struct tick_entry {-  struct ustring *tick_name;-  counter_t tick_count;-} *tick_table = 0;-size_t tick_table_size;-size_t tick_index;--/* Allocate a new tick table entry and return the index. */-size_t-add_tick_table(struct ustring *name)-{-  if (!tick_table) {-    tick_table_size = 100;-    tick_table = malloc(tick_table_size * sizeof(struct tick_entry));-    if (!tick_table)-      memerr();-    tick_index = 0;-  }-  if (tick_index >= tick_table_size) {-    tick_table_size *= 2;-    tick_table = realloc(tick_table, tick_table_size * sizeof(struct tick_entry));-    if (!tick_table)-      memerr();-  }-  tick_table[tick_index].tick_name = name;-  tick_table[tick_index].tick_count = 0;-  return tick_index++;-}--/* Called with the tick index. */-static inline void-dotick(value_t i)-{-  tick_table[i].tick_count++;-}--void-dump_tick_table(FILE *f)-{-  if (!tick_table) {-    fprintf(f, "Tick table empty\n");-    return;-  }-  for (size_t i = 0; i < tick_index; i++) {-    counter_t n = tick_table[i].tick_count;-    if (n)-      fprintf(f, "%-60s %10"PRIcounter"\n", tick_table[i].tick_name->string, n);-  }-}-#endif--/*****************************************************************************/--struct handler {-  jmp_buf         hdl_buf;      /* env storage */-  struct handler *hdl_old;      /* old handler */-  stackptr_t      hdl_stack;    /* old stack pointer */-  NODEPTR         hdl_exn;      /* used temporarily to pass the exception value */-} *cur_handler = 0;--/* Set FREE bit to 0 */-static INLINE void mark_used(NODEPTR n)-{-  heapoffs_t i = LABEL(n);-  if (i < heap_start)-    return;-#if SANITY-  if (i >= free_map_nwords * BITS_PER_WORD) ERR("mark_used");-#endif-  free_map[i / BITS_PER_WORD] &= ~(1ULL << (i % BITS_PER_WORD));-}--/* Set FREE bit to 1, used to undo marking in GC */-static INLINE void mark_unused(NODEPTR n)-{-  heapoffs_t i = LABEL(n);-#if SANITY-  if (i < heap_start)-    ERR("Unmarking invalid heap address.");-  if (i >= free_map_nwords * BITS_PER_WORD) ERR("mark_used");-#endif-  free_map[i / BITS_PER_WORD] |= 1ULL << (i % BITS_PER_WORD);-}--/* Test if FREE bit is 0 */-static INLINE int is_marked_used(NODEPTR n)-{-  heapoffs_t i = LABEL(n);-  if (i < heap_start)-    return 1;-#if SANITY-  if (i >= free_map_nwords * BITS_PER_WORD)-    ERR("is_marked_used");-#endif-  return (free_map[i / BITS_PER_WORD] & (1ULL << (i % BITS_PER_WORD))) == 0;-}--static INLINE void mark_all_free(void)-{-  memset(free_map, ~0, free_map_nwords * sizeof(bits_t));-  next_scan_index = heap_start;-}--#if WANT_ARGS-int glob_argc;-char **glob_argv;-#endif--int verbose = 0;--static INLINE NODEPTR-alloc_node(enum node_tag t)-{-  heapoffs_t i = next_scan_index / BITS_PER_WORD;-  int k;                        /* will contain bit pos + 1 */-  heapoffs_t pos;-  NODEPTR n;--#if SANITY-  if (num_free <= 0)-    ERR("alloc_node");-#endif--  for(;;) {-    heapoffs_t word = free_map[i];-    k = FFS(word);-    if (k)-      break;-    i++;-#if SANITY-    if (i >= free_map_nwords) {-#if 0-      fprintf(stderr, "wordsize=%u, num_free=%u next_scan_index=%u i=%u free_map_nwords=%u\n", (uint)BITS_PER_WORD,-              (uint)num_free, (uint)next_scan_index, (uint)i, (uint)free_map_nwords);-#endif-      ERR("alloc_node: free_map");-    }-#endif-  }-  pos = i * BITS_PER_WORD + k - 1; /* first free node */-  n = HEAPREF(pos);-  mark_used(n);-  next_scan_index = pos;--  SETTAG(n, t);-  COUNT(num_alloc);-  num_free--;-  return n;-}--static INLINE NODEPTR-new_ap(NODEPTR f, NODEPTR a)-{-  NODEPTR n = alloc_node(T_AP);-  FUN(n) = f;-  ARG(n) = a;-  return n;-}--/* Needed during reduction */-NODEPTR intTable[HIGH_INT - LOW_INT];-NODEPTR combFalse, combTrue, combUnit, combCons, combPair;-NODEPTR combCC, combZ, combIOBIND, combIORETURN, combIOCCBIND;-NODEPTR combLT, combEQ, combGT;--/* One node of each kind for primitives, these are never GCd. */-/* We use linear search in this, because almost all lookups- * are among the combinators.- */-struct {-  const char *name;-  const enum node_tag tag;-  const enum node_tag flipped;        /* What should (C op) reduce to? defaults to T_FREE */-  NODEPTR node;-} primops[] = {-  /* combinators */-  /* sorted by frequency in a typical program */-  { "B", T_B },-  { "O", T_O },-  { "K", T_K },-  { "C'", T_CC },-  { "C", T_C },-  { "A", T_A },-  { "S'", T_SS },-  { "P", T_P },-  { "R", T_R },-  { "I", T_I },-  { "S", T_S },-  { "U", T_U },-  { "Y", T_Y },-  { "B'", T_BB },-  { "Z", T_Z },-  { "K2", T_K2 },-  { "K3", T_K3 },-  { "K4", T_K4 },-  { "C'B", T_CCB },-/* primops */-  { "+", T_ADD, T_ADD },-  { "-", T_SUB, T_SUBR },-  { "*", T_MUL, T_MUL },-  { "quot", T_QUOT },-  { "rem", T_REM },-  { "uquot", T_UQUOT },-  { "urem", T_UREM },-  { "subtract", T_SUBR, T_SUB },-  { "neg", T_NEG },-  { "and", T_AND, T_AND },-  { "or", T_OR, T_OR },-  { "xor", T_XOR, T_XOR },-  { "inv", T_INV },-  { "shl", T_SHL },-  { "shr", T_SHR },-  { "ashr", T_ASHR },-#if WANT_FLOAT-  { "f+" , T_FADD, T_FADD},-  { "f-" , T_FSUB, T_FSUB},-  { "f*" , T_FMUL, T_FMUL},-  { "f/", T_FDIV},-  { "fneg", T_FNEG},-  { "itof", T_ITOF},-  { "f==", T_FEQ, T_FEQ},-  { "f/=", T_FNE, T_FNE},-  { "f<", T_FLT},-  { "f<=", T_FLE},-  { "f>", T_FGT},-  { "f>=", T_FGE},-  { "fshow", T_FSHOW},-  { "fread", T_FREAD},-#endif  /* WANT_FLOAT */-  { "ord", T_I },-  { "chr", T_I },-  { "==", T_EQ, T_EQ },-  { "/=", T_NE, T_NE },-  { "<", T_LT, T_GT },-  { "u<", T_ULT, T_UGT },-  { "u<=", T_ULE, T_UGE },-  { "u>", T_UGT, T_ULT },-  { "u>=", T_UGE, T_ULE },-  { "<=", T_LE, T_GE },-  { ">", T_GT, T_LT },-  { ">=", T_GE, T_LE },-  { "p==", T_PEQ, T_PEQ },-  { "pnull", T_PNULL },-  { "pcast", T_I },-  { "p+", T_PADD },-  { "p-", T_PSUB },-  { "seq", T_SEQ },-  { "error", T_ERROR },-  { "noDefault", T_NODEFAULT },-  { "noMatch", T_NOMATCH },-  { "equal", T_EQUAL, T_EQUAL },-  { "sequal", T_EQUAL, T_EQUAL },-  { "compare", T_COMPARE },-  { "scmp", T_COMPARE },-  { "icmp", T_COMPARE },-  { "rnf", T_RNF },-  { "fromUTF8", T_FROMUTF8 },-  /* IO primops */-  { "IO.>>=", T_IO_BIND },-  { "IO.>>", T_IO_THEN },-  { "IO.return", T_IO_RETURN },-  { "IO.C'BIND", T_IO_CCBIND },-  { "IO.serialize", T_IO_SERIALIZE },-  { "IO.print", T_IO_PRINT },-  { "IO.deserialize", T_IO_DESERIALIZE },-  { "IO.stdin", T_IO_STDIN },-  { "IO.stdout", T_IO_STDOUT },-  { "IO.stderr", T_IO_STDERR },-  { "IO.getArgs", T_IO_GETARGS },-  { "IO.getTimeMilli", T_IO_GETTIMEMILLI },-  { "IO.performIO", T_IO_PERFORMIO },-  { "IO.catch", T_IO_CATCH },-  { "A.alloc", T_ARR_ALLOC },-  { "A.size", T_ARR_SIZE },-  { "A.read", T_ARR_READ },-  { "A.write", T_ARR_WRITE },-  { "A.==", T_ARR_EQ },-  { "dynsym", T_DYNSYM },-  { "newCAStringLen", T_NEWCASTRINGLEN },-  { "peekCAString", T_PEEKCASTRING },-  { "peekCAStringLen", T_PEEKCASTRINGLEN },-  { "toPtr", T_TOPTR },-  { "toInt", T_TOINT },-  { "toDbl", T_TODBL },-};--#if GCRED-enum node_tag flip_ops[T_LAST_TAG];-#endif--void-init_nodes(void)-{-  enum node_tag t;-  size_t j;-  NODEPTR n;--  ALLOC_HEAP(heap_size);-  free_map_nwords = (heap_size + BITS_PER_WORD - 1) / BITS_PER_WORD; /* bytes needed for free map */-  free_map = MALLOC(free_map_nwords * sizeof(bits_t));-  if (!free_map)-    memerr();--  /* Set up permanent nodes */-  heap_start = 0;-#if !FASTTAGS-  for (int j = 0; j < sizeof primops / sizeof primops[0]; j++) {-    NODEPTR n = HEAPREF(heap_start++);-    primops[j].node = n;-    //MARK(n) = MARKED;-    SETTAG(n, primops[j].tag);-    switch (primops[j].tag) {-    case T_K: combFalse = n; break;-    case T_A: combTrue = n; break;-    case T_I: combUnit = n; break;-    case T_O: combCons = n; break;-    case T_P: combPair = n; break;-    case T_CC: combCC = n; break;-    case T_Z: combZ = n; break;-    case T_IO_BIND: combIOBIND = n; break;-    case T_IO_RETURN: combIORETURN = n; break;-    case T_IO_CCBIND: combIOCCBIND = n; break;-#if WANT_STDIO-    case T_IO_STDIN:  SETTAG(n, T_PTR); PTR(n) = stdin;  break;-    case T_IO_STDOUT: SETTAG(n, T_PTR); PTR(n) = stdout; break;-    case T_IO_STDERR: SETTAG(n, T_PTR); PTR(n) = stderr; break;-#endif  /* WANT_STDIO */-    default:-      break;-    }-  }-#else-  for(t = T_FREE; t < T_LAST_TAG; t++) {-    NODEPTR n = HEAPREF(heap_start++);-    SETTAG(n, t);-    switch (t) {-    case T_K: combFalse = n; break;-    case T_A: combTrue = n; break;-    case T_I: combUnit = n; break;-    case T_O: combCons = n; break;-    case T_P: combPair = n; break;-    case T_CC: combCC = n; break;-    case T_Z: combZ = n; break;-    case T_IO_BIND: combIOBIND = n; break;-    case T_IO_RETURN: combIORETURN = n; break;-    case T_IO_CCBIND: combIOCCBIND = n; break;-#if WANT_STDIO-    case T_IO_STDIN:  SETTAG(n, T_PTR); PTR(n) = stdin;  break;-    case T_IO_STDOUT: SETTAG(n, T_PTR); PTR(n) = stdout; break;-    case T_IO_STDERR: SETTAG(n, T_PTR); PTR(n) = stderr; break;-#endif-    default:-      break;-    }-    for (j = 0; j < sizeof primops / sizeof primops[0];j++) {-      if (primops[j].tag == t) {-        primops[j].node = n;-      }-    }-  }-#endif-#if GCRED-  for (j = 0; j < sizeof primops / sizeof primops[0]; j++) {-    flip_ops[primops[j].tag] = primops[j].flipped;-  }-#endif--  /* The representation of the constructors of-   *  data Ordering = LT | EQ | GT-   * do not have single constructors.-   * But we can make compound one, since they are irreducible.-   */-#define NEWAP(c, f, a) do { n = HEAPREF(heap_start++); SETTAG(n, T_AP); FUN(n) = (f); ARG(n) = (a); (c) = n;} while(0)-  NEWAP(combLT, combZ,     combFalse);  /* Z B */-  NEWAP(combEQ, combFalse, combFalse);  /* K K */-  NEWAP(combGT, combFalse, combTrue);   /* K A */-#undef NEWAP--#if INTTABLE-  /* Allocate permanent Int nodes */-  for (int i = LOW_INT; i < HIGH_INT; i++) {-    NODEPTR n = HEAPREF(heap_start++);-    intTable[i - LOW_INT] = n;-    SETTAG(n, T_INT);-    SETVALUE(n, i);-  }-#endif--  /* Round up heap_start to the next bitword boundary to avoid the permanent nodes. */-  heap_start = (heap_start + BITS_PER_WORD - 1) / BITS_PER_WORD * BITS_PER_WORD;--  mark_all_free();--  num_free = heap_size - heap_start;-}--#if GCRED-int red_a, red_k, red_i, red_int, red_flip;-#endif--//counter_t mark_depth;-//counter_t max_mark_depth = 0;--/* Mark all used nodes reachable from *np, updating *np. */-void-mark(NODEPTR *np)-{-  stackptr_t stk = stack_ptr;-  NODEPTR n;-  NODEPTR *to_push = 0;         /* silence warning by initializing */-#if GCRED-  value_t val;-#endif-  enum node_tag tag;--  //  mark_depth++;-  //  if (mark_depth % 10000 == 0)-  //    PRINT("mark depth %"PRIcounter"\n", mark_depth);-  top:-  n = *np;-  tag = GETTAG(n);-  if (tag == T_IND) {-#if SANITY-    int loop = 0;-    /* Skip indirections, and redirect start pointer */-    while ((tag = GETTAG(n)) == T_IND) {-      //      PRINT("*"); fflush(stdout);-      n = INDIR(n);-      if (loop++ > 10000000) {-        //PRINT("%p %p %p\n", n, INDIR(n), INDIR(INDIR(n)));-        ERR("IND loop");-      }-    }-    //    if (loop)-    //      PRINT("\n");-#else  /* SANITY */-    while ((tag = GETTAG(n)) == T_IND) {-      n = INDIR(n);-    }-#endif  /* SANITY */-    *np = n;-  }-  if (n < cells || n > cells + heap_size)-    ERR("bad n");-  if (is_marked_used(n)) {-    goto fin;-  }-  num_marked++;-  mark_used(n);-  switch (tag) {-#if GCRED-   case T_INT:-#if INTTABLE-    if (LOW_INT <= (val = GETVALUE(n)) && val < HIGH_INT) {-      SETTAG(n, T_IND);-      INDIR(n) = intTable[val - LOW_INT];-      red_int++;-      goto top;-    }-    break;-#endif  /* INTTABLE */-   case T_AP:-      if (want_gc_red) {-        /* This is really only fruitful just after parsing.  It can be removed. */-        if (GETTAG(FUN(n)) == T_AP && GETTAG(FUN(FUN(n))) == T_A) {-          /* Do the A x y --> y reduction */-          NODEPTR y = ARG(n);-          SETTAG(n, T_IND);-          INDIR(n) = y;-          red_a++;-          goto top;-        }-#if 0-        /* This never seems to happen */-        if (GETTAG(FUN(n)) == T_AP && GETTAG(FUN(FUN(n))) == T_K) {-          /* Do the K x y --> x reduction */-          NODEPTR x = ARG(FUN(n));-          SETTAG(n, T_IND);-          INDIR(n) = x;-          red_k++;-          goto top;-        }-#endif  /* 0 */-        if (GETTAG(FUN(n)) == T_I) {-          /* Do the I x --> x reduction */-          NODEPTR x = ARG(n);-          SETTAG(n, T_IND);-          INDIR(n) = x;-          red_i++;-          goto top;-        }-#if 1-        /* This is broken.-         * Probably because it can happen in the middle of the C reduction code.-         */-        if (GETTAG(FUN(n)) == T_C) {-          NODEPTR q = ARG(n);-          enum node_tag tt, tf;-          while ((tt = GETTAG(q)) == T_IND)-            q = INDIR(q);-          if ((tf = flip_ops[tt])) {-            /* Do the C op --> flip_op reduction */-            // PRINT("%s -> %s\n", tag_names[tt], tag_names[tf]);-            SETTAG(n, T_IND);-            INDIR(n) = HEAPREF(tf);-            red_flip++;-            goto fin;-          }-        }-      }-#endif-#else   /* GCRED */-   case T_AP:-#endif  /* GCRED */-    /* Avoid tail recursion */-    np = &FUN(n);-    to_push = &ARG(n);-    break;-   case T_ARR:-    {-      struct ioarray *arr = ARR(n);--      // arr->marked records marking progress through arr.-      if (arr->marked >= arr->size) {-        goto fin;-      }-      // We unmark the array as a whole and push it as long-      // as there's more entries to scan.-      mark_unused(n);-      to_push = np;-      np = &arr->array[arr->marked++];-      break;-    }-   default: goto fin;-  }-  if (!is_marked_used(*to_push)) {-    //  mark_depth++;-    PUSH((NODEPTR)to_push);-  }-  goto top;- fin:-  //  if (mark_depth > max_mark_depth) {-  //    max_mark_depth = mark_depth;-  //  }-  //  mark_depth--;-  if (stack_ptr > stk) {-    np = (NODEPTR *)POPTOP();-    goto top;-  }-  return;-}--/* Perform a garbage collection:-   - First mark from all roots; roots are on the stack.-*/-void-gc(void)-{-  stackptr_t i;-  struct ioarray **arrp, *arr;--  num_gc++;-  num_marked = 0;-#if WANT_STDIO-  if (verbose > 1)-    PRINT("gc mark\n");-#endif-  gc_mark_time -= GETTIMEMILLI();-  mark_all_free();-  //  mark_depth = 0;-  for (i = 0; i <= stack_ptr; i++)-    mark(&stack[i]);-  gc_mark_time += GETTIMEMILLI();--  if (num_marked > max_num_marked)-    max_num_marked = num_marked;-  num_free = heap_size - heap_start - num_marked;-  if (num_free < heap_size / 50)-    ERR("heap exhausted");--  for (arrp = &array_root; *arrp; ) {-    arr = *arrp;-    if (arr->marked) {-      arr->marked = 0;-      arrp = &arr->next;-    } else {-      *arrp = arr->next;        /* unlink */-      num_arr_free++;-      FREE(arr);                /* and FREE */-    }-  }--#if WANT_STDIO-  if (verbose > 1) {-    PRINT("gc done, %"PRIcounter" free\n", num_free);-    //PRINT(" GC reductions A=%d, K=%d, I=%d, int=%d flip=%d\n", red_a, red_k, red_i, red_int, red_flip);-  }-#endif  /* !WANT_STDIO */-}--/* Check that there are k nodes available, if not then GC. */-static INLINE void-gc_check(size_t k)-{-  if (k < num_free)-    return;-#if WANT_STDIO-  if (verbose > 1)-    PRINT("gc_check: %d\n", (int)k);-#endif-  gc();-}--value_t-peekWord(value_t *p)-{-  return *p;-}--void-pokeWord(value_t *p, value_t w)-{-  *p = w;-}--value_t-peekByte(uint8_t *p)-{-  return *p;-}--void-pokeByte(uint8_t *p, value_t w)-{-  *p = (uint8_t)w;-}--/*- * Table of FFI callable functions.- * (For a more flexible solution use dlopen()/dlsym()/dlclose())- * The table contains the information needed to do the actual call.- *   V    void- *   I    value_t- *   i    int- *   D    flt_t- *   P    void*- * The types are- *   V    void    name(void)- *   i    int     name(void)- *   I    value_t name(voi)- *   IV   void    name(value_t)- *   II   value_t name(value_t)- *   IIV  void    name(value_t, value_t)- *   III  value_t name(value_t, value_t)- *   DD   flt_t  name(flt_t)- *   Pi   int     name(void*)- *   PI   value_t name(void*)- *   PP   void*   name(void*)- *   iPi  int     name(int, void*)- *   PPI  value_t name(void*, void*)- *   PPP  void*   name(void*, void*)- * more can easily be added.- */-struct ffi_info {-  const char *ffi_name;-  const funptr_t ffi_fun;-  const enum { FFI_V, FFI_I, FFI_IV, FFI_II, FFI_IIV, FFI_III, FFI_DD, FFI_DDD, FFI_PI,-               FFI_i, FFI_Pi, FFI_iPi, FFI_PIIPI, FFI_PIV, FFI_IIP,-               FFI_PPI, FFI_PP, FFI_PPP, FFI_IPI, FFI_PV, FFI_IP, FFI_PPV, FFI_PPzV,-               FFI_iPV,-  } ffi_how;-};-const struct ffi_info ffi_table[] = {-#if WORD_SIZE == 64-  { "llabs",    (funptr_t)llabs,   FFI_II },-#elif WORD_SIZE == 32  /* WORD_SIZE */-  { "llabs",    (funptr_t)labs,    FFI_II },-#elif WORD_SIZE == 16  /* WORD_SIZE */-  { "llabs",    (funptr_t)abs,    FFI_II },-#else-#error Unknown WORD_SIZE-#endif  /* WORD_SIZE */-#if WANT_MATH-#if WORD_SIZE == 64-  { "log",      (funptr_t)log,     FFI_DD },-  { "exp",      (funptr_t)exp,     FFI_DD },-  { "sqrt",     (funptr_t)sqrt,    FFI_DD },-  { "sin",      (funptr_t)sin,     FFI_DD },-  { "cos",      (funptr_t)cos,     FFI_DD },-  { "tan",      (funptr_t)tan,     FFI_DD },-  { "asin",     (funptr_t)asin,    FFI_DD },-  { "acos",     (funptr_t)acos,    FFI_DD },-  { "atan",     (funptr_t)atan,    FFI_DD },-  { "atan2",    (funptr_t)atan2,   FFI_DDD },-#elif WORD_SIZE == 32  /* WORD_SIZE */-  { "log",      (funptr_t)logf,    FFI_DD },-  { "exp",      (funptr_t)expf,    FFI_DD },-  { "sqrt",     (funptr_t)sqrtf,   FFI_DD },-  { "sin",      (funptr_t)sinf,    FFI_DD },-  { "cos",      (funptr_t)cosf,    FFI_DD },-  { "tan",      (funptr_t)tanf,    FFI_DD },-  { "asin",     (funptr_t)asinf,   FFI_DD },-  { "acos",     (funptr_t)acosf,   FFI_DD },-  { "atan",     (funptr_t)atanf,   FFI_DD },-  { "atan2",    (funptr_t)atan2f,  FFI_DDD },  -#else-#error Unknown WORD_SIZE-#endif  /* WORD_SIZE */-#endif  /* WANT_MATH */-  { "getenv",   (funptr_t)getenv,  FFI_PP },--  { "getRaw",   (funptr_t)GETRAW,  FFI_i },-#if WANT_STDIO-  { "fgetc",    (funptr_t)fgetc,   FFI_Pi },-  { "fputc",    (funptr_t)fputc,   FFI_iPi },-  //  { "cprint",   (funptr_t)cprint,  FFI_PAV },-  //  { "serialize",(funptr_t)serialize,  FFI_PAV },-  //  { "deserialize",(funptr_t)deserialize,  FFI_PA },-  { "fclose",   (funptr_t)fclose,  FFI_Pi },-  { "fflush",   (funptr_t)fflush,  FFI_Pi },-  { "fopen",    (funptr_t)fopen,   FFI_PPP },-  { "fread",    (funptr_t)fread,   FFI_PIIPI },-  { "fwrite",   (funptr_t)fwrite,  FFI_PIIPI },-  { "tmpname",  (funptr_t)TMPNAME, FFI_PPP },-  { "unlink",   (funptr_t)unlink,  FFI_Pi },-  { "system",   (funptr_t)system,  FFI_Pi },--  /* BFILE stuff */-  { "add_FILE", (funptr_t)add_FILE,FFI_PP },-  { "getb",     (funptr_t)getb,    FFI_Pi },-  { "putb",     (funptr_t)putb,    FFI_iPV },-  { "closeb",   (funptr_t)closeb,  FFI_PV },-  { "flushb",   (funptr_t)flushb,  FFI_PV },-  { "putsb",    (funptr_t)putsb,   FFI_PPV },-  { "add_utf8", (funptr_t)add_utf8,FFI_PP },-#endif  /* WANT_STDIO */--#if WANT_MD5-  { "md5BFILE", (funptr_t)md5BFILE, FFI_PPV },-  { "md5String",(funptr_t)md5String, FFI_PPV },-  { "md5Array", (funptr_t)md5Array, FFI_PPzV },-#endif--  { "iswindows",(funptr_t)iswindows, FFI_I },--  //  { "getArgs",   (funptr_t)getArgs,  FFI_A },-  { "getTimeMilli",(funptr_t)GETTIMEMILLI,  FFI_I },-  { "free",     (funptr_t)FREE,    FFI_PV },-  { "malloc",   (funptr_t)MALLOC,  FFI_IP }, /* The I is really a size_t */-  { "calloc",   (funptr_t)MALLOC,  FFI_IIP },-  { "peekWord", (funptr_t)peekWord,FFI_PI },-  { "pokeWord", (funptr_t)pokeWord,FFI_PIV },-  { "peekByte", (funptr_t)peekByte,FFI_PI },-  { "pokeByte", (funptr_t)pokeByte,FFI_PIV },-  { "memcpy",   (funptr_t)memcpy,  FFI_PPzV },-  { "memmove",  (funptr_t)memmove, FFI_PPzV },-#if defined(FFI_EXTRA)-FFI_EXTRA-#endif  /* defined(FFI_EXTRA) */-};--/* Look up an FFI function by name */-value_t-lookupFFIname(const char *name)-{-  size_t i;--  for(i = 0; i < sizeof(ffi_table) / sizeof(ffi_table[0]); i++)-    if (strcmp(ffi_table[i].ffi_name, name) == 0)-      return (value_t)i;-  return -1;-}--NODEPTR-ffiNode(const char *buf)-{-  NODEPTR r;-  value_t i = lookupFFIname(buf);-  char *fun;--  if (i < 0) {-    /* lookup failed, generate a node that will dynamically generate an error */-    r = alloc_node(T_BADDYN);-    fun = MALLOC(strlen(buf) + 1);-    strcpy(fun, buf);-    CSTR(r) = fun;-  } else {-    r = alloc_node(T_IO_CCALL);-    SETVALUE(r, i);-  }-  return r;-}--/* If the next input character is c, then consume it, else leave it alone. */-int-gobble(BFILE *f, int c)-{-  int d = getb(f);-  if (c == d) {-    return 1;-  } else {-    ungetb(d, f);-    return 0;-  }-}--/* Get a non-terminating character.  ' ' and '\n' terminates a token. */-int-getNT(BFILE *f)-{-  int c;-  -  c = getb(f);-  if (c == ' ' || c == '\n') {-    return 0;-  } else {-    return c;-  }-}--value_t-parse_int(BFILE *f)-{-  // Parse using uvalue_t, which wraps on overflow.-  uvalue_t i = 0;-  int neg = 1;-  int c = getb(f);-  if (c == '-') {-    neg = -1;-    c = getb(f);-  }-  for(;;) {-    i = i * 10 + (c - '0');-    c = getb(f);-    if (c < '0' || c > '9') {-      ungetb(c, f);-      break;-    }-  }-  // Multiply by neg without triggering undefined behavior.-  return (value_t)(((uvalue_t)neg) * i);-}--#if WANT_FLOAT-flt_t-parse_double(BFILE *f)-{-  // apparently longest float, when rendered, takes up 24 characters. We add one more for a potential-  // minus sign, and another one for the final null terminator.-  // https://stackoverflow.com/questions/1701055/what-is-the-maximum-length-in-chars-needed-to-represent-any-double-value-  char buf[26];-  for(int j = 0; (buf[j] = getNT(f)); j++)-    ;--  return strtod(buf, NULL);-}-#endif--NODEPTR-mkStrNode(struct ustring *str)-{-  NODEPTR n = alloc_node(T_STR);-  STR(n) = str;-  return n;-}--NODEPTR mkInt(value_t i);-NODEPTR mkFlt(flt_t d);-NODEPTR mkPtr(void* p);--/* Table of labelled nodes for sharing during parsing. */-struct shared_entry {-  heapoffs_t label;-  NODEPTR node;                 /* NIL indicates unused */-} *shared_table;-heapoffs_t shared_table_size;--/* Look for the label in the table.- * If it's found, return the node.- * If not found, return the first empty entry.-*/-NODEPTR *-find_label(heapoffs_t label)-{-  int i;--  for(i = (int)label; ; i++) {-    i %= shared_table_size;-    if (shared_table[i].node == NIL) {-      /* The slot is empty, so claim and return it */-      shared_table[i].label = label;-      return &shared_table[i].node;-    } else if (shared_table[i].label == label) {-      /* Found the label, so return it. */-      return &shared_table[i].node;-    }-    /* Not empty and not found, try next. */-  }-}--struct ustring *-parse_string(BFILE *f)-{-  size_t sz = 20;-  struct ustring *buffer = MALLOC(sizeof(struct ustring) + sz);-  size_t i;-  int c;--  if (!buffer)-    memerr();-  for(i = 0;;) {-    c = getb(f);-    if (c == '"')-      break;-    if (i >= sz) {-      sz *= 2;-      buffer = realloc(buffer, sizeof(struct ustring) + sz);-      if (!buffer)-        memerr();-    }-    if (c == '\\') {-      buffer->string[i++] = (char)parse_int(f);-      if (!gobble(f, '&'))-        ERR("parse string");-    } else {-      buffer->string[i++] = c;-    }-  }-  buffer->size = i;-  buffer->string[i++] = 0;-  return realloc(buffer, sizeof(struct ustring) + i);-}--NODEPTR-parse(BFILE *f)-{-  stackptr_t stk = stack_ptr;-  NODEPTR r, x, y;-  NODEPTR *nodep;-  heapoffs_t l;-  value_t i;-  int c;-  size_t j;-  char buf[80];                 /* store names of primitives. */--  for(;;) {-    c = getb(f);-    if (c < 0) ERR("parse EOF");-    switch (c) {-    case ' ':-    case '\n':-      continue;-    }-    GCCHECK(1);-    switch(c) {-    case '@':-      x = TOP(0);-      y = TOP(1);-      POP(2);-      PUSH(new_ap(y, x));-      break;-    case '}':-      x = TOP(0);-      POP(1);-      if (stack_ptr != stk)-        ERR("parse: stack");-      return x;-    case '&':-#if WANT_FLOAT-      r = mkFlt(parse_double(f));-#else-      while (getNT(f))          /* skip the float constant */-        ;-      r = alloc_node(T_DBL);-      SETVALUE(r, 0);-#endif-      PUSH(r);-      break;-    case '#':-      i = parse_int(f);-      r = mkInt(i);-      PUSH(r);-      break;-    case '[':-      {-        size_t sz;-        struct ioarray *arr;-        size_t i;-        sz = (size_t)parse_int(f);-        if (!gobble(f, ']')) ERR("parse arr 1");-        arr = arr_alloc(sz, NIL);-        for (i = 0; i < sz; i++) {-          arr->array[i] = TOP(sz - i - 1);-        }-        r = alloc_node(T_ARR);-        ARR(r) = arr;-        POP(sz);-        PUSH(r);-        break;-      }-    case '_' :-      /* Reference to a shared value: _label */-      l = parse_int(f);  /* The label */-      nodep = find_label(l);-      if (*nodep == NIL) {-        /* Not yet defined, so make it an indirection */-        *nodep = alloc_node(T_IND);-        INDIR(*nodep) = NIL;-      }-      PUSH(*nodep);-      break;-    case ':' :-      /* Define a shared expression: :label e */-      l = parse_int(f);  /* The label */-      if (!gobble(f, ' ')) ERR("parse ' '");-      nodep = find_label(l);-      x = TOP(0);-      if (*nodep == NIL) {-        /* not referenced yet, so add a direct reference */-        *nodep = x;-      } else {-        /* Sanity check */-        if (INDIR(*nodep) != NIL) ERR("shared != NIL");-        INDIR(*nodep) = x;-      }-      break;-    case '"' :-      /* Everything up to the next " is a string.-       * Special characters are encoded as \NNN&,-       * where NNN is the decimal value of the character */-      PUSH(mkStrNode(parse_string(f)));-      break;-#if WANT_TICK-    case '!':-      if (!gobble(f, '"'))-        ERR("parse !");-      i = add_tick_table(parse_string(f));-      r = alloc_node(T_TICK);-      SETVALUE(r, (value_t)i);-      PUSH(r);-      break;-#endif-    case '^':-      /* An FFI name */-      for (j = 0; (buf[j] = getNT(f)); j++)-        ;-      r = ffiNode(buf);-      PUSH(r);-      break;-    default:-      buf[0] = c;-      /* A primitive, keep getting char's until end */-      for (j = 1; (buf[j] = getNT(f)); j++)-        ;-      /* Look up the primop and use the preallocated node. */-      for (j = 0; j < sizeof primops / sizeof primops[0]; j++) {-        if (strcmp(primops[j].name, buf) == 0) {-          r = primops[j].node;-          goto found;-        }-      }-      ERR1("no primop %s", buf);-    found:-      PUSH(r);-      break;-    }-  }-}--void-checkversion(BFILE *f)-{-  char *p = VERSION;-  int c;--  while ((c = *p++)) {-    if (c != getb(f))-      ERR("version mismatch");-  }-  (void)gobble(f, '\r');                 /* allow extra CR */-}--/* Parse a file */-NODEPTR-parse_top(BFILE *f)-{-  heapoffs_t numLabels, i;-  NODEPTR n;-  checkversion(f);-  numLabels = parse_int(f);-  if (!gobble(f, '\n'))-    ERR("size parse");-  gobble(f, '\r');                 /* allow extra CR */-  shared_table_size = 3 * numLabels; /* sparsely populated hashtable */-  shared_table = MALLOC(shared_table_size * sizeof(struct shared_entry));-  if (!shared_table)-    memerr();-  for(i = 0; i < shared_table_size; i++)-    shared_table[i].node = NIL;-  n = parse(f);-  FREE(shared_table);-  return n;-}--#if WANT_STDIO-NODEPTR-parse_file(const char *fn, size_t *psize)-{-  FILE *f = fopen(fn, "r");-  if (!f)-    ERR1("file not found %s", fn);--  /* And parse it */-  BFILE *p = add_FILE(f);-  NODEPTR n = parse_top(p);-  *psize = ftell(f);-  closeb(p);-  return n;-}-#endif  /* WANT_STDIO */--counter_t num_shared;--/* Two bits per node: marked, shared- * 0, 0   -- not visited- * 1, 0   -- visited once- * 1, 1   -- visited more than once- * 0, 1   -- printed- */-bits_t *marked_bits;-bits_t *shared_bits;-static INLINE void set_bit(bits_t *bits, NODEPTR n)-{-  heapoffs_t i = LABEL(n);-  bits[i / BITS_PER_WORD] |= (1ULL << (i % BITS_PER_WORD));-}-#if WANT_STDIO-static INLINE void clear_bit(bits_t *bits, NODEPTR n)-{-  heapoffs_t i = LABEL(n);-  bits[i / BITS_PER_WORD] &= ~(1ULL << (i % BITS_PER_WORD));-}-#endif-static INLINE int test_bit(bits_t *bits, NODEPTR n)-{-  heapoffs_t i = LABEL(n);-  return (bits[i / BITS_PER_WORD] & (1ULL << (i % BITS_PER_WORD))) != 0;-}--size_t strNodes(size_t len);-NODEPTR mkStringC(const char *str);--#if WANT_STDIO-void-convdbl(char *str, flt_t x)-{-  /* Using 16 decimals will lose some precision.-   * 17 would keep the precision, but it frequently looks very ugly.-   */-  (void)snprintf(str, 25, "%.16g", x);-  if (strcmp(str, "nan") != 0 && strcmp(str, "-nan") != 0 &&-      strcmp(str, "inf") != 0 && strcmp(str, "-inf") != 0 &&-      !strchr(str, '.') && !strchr(str, 'e') && !strchr(str, 'E')) {-    /* There is no decimal point and no exponent, so add a decimal point */-    strcat(str, ".0");-  }-}--NODEPTR-dblToString(flt_t x)-{-  char str[30];-  convdbl(str, x);-  // turn it into a mhs string-  GCCHECK(strNodes(strlen(str)));-  return mkStringC(str);-}--void-putdblb(flt_t x, BFILE *p)-{-  char str[30];-  convdbl(str, x);-  putsb(str, p);-}--void printrec(BFILE *f, NODEPTR n, int prefix);--/* Mark all reachable nodes, when a marked node is reached, mark it as shared. */-void-find_sharing(NODEPTR n)-{- top:-  while (GETTAG(n) == T_IND) {-    n = INDIR(n);-  }-  if (n < cells || n >= cells + heap_size) abort();-  //PRINT("find_sharing %p %llu ", n, LABEL(n));-  if (GETTAG(n) == T_AP) {-    if (test_bit(shared_bits, n)) {-      /* Alread marked as shared */-      //PRINT("shared\n");-      ;-    } else if (test_bit(marked_bits, n)) {-      /* Already marked, so now mark as shared */-      //PRINT("marked\n");-      set_bit(shared_bits, n);-      num_shared++;-    } else {-      /* Mark as visited, and recurse */-      //PRINT("unmarked\n");-      set_bit(marked_bits, n);-      find_sharing(FUN(n));-      n = ARG(n);-      goto top;-    }-  } else {-    /* Not an application, so do nothing */-    //PRINT("not T_AP\n");-    ;-  }-}--void-print_string(BFILE *f, struct ustring *p)-{-  putb('"', f);-  for (size_t i = 0; i < p->size; i++) {-    int c = p->string[i];-    if (c == '"' || c == '\\' || c < ' ' || c > '~') {-      putb('\\', f);-      putdecb(c, f);-      putb('&', f);-    } else {-      putb(c, f);-    }-  }-  putb('"', f);-}--/* Recursively print an expression.-   This assumes that the shared nodes has been marked as such.-*/-void-printrec(BFILE *f, NODEPTR n, int prefix)-{-  int share = 0;--  while (GETTAG(n) == T_IND) {-    //putb('*', f);-    n = INDIR(n);-  }--  if (test_bit(shared_bits, n)) {-    /* The node is shared */-    if (test_bit(marked_bits, n)) {-      /* Not yet printed, so emit a label */-      if (prefix) {-        putb(':', f);-        putdecb((value_t)LABEL(n), f);-        putb(' ', f);-      } else {-        share = 1;-      }-      clear_bit(marked_bits, n);  /* mark as printed */-    } else {-      /* This node has already been printed, so just use a reference. */-      putb('_', f);-      putdecb((value_t)LABEL(n), f);-      if (!prefix)-        putb(' ', f);-      return;-    }-  }--  //if (n == atptr) putb('@', f);-  switch (GETTAG(n)) {-  case T_AP:-    if (prefix) {-      putb('(', f);-      printrec(f, FUN(n), prefix);-      putb(' ', f);-      printrec(f, ARG(n), prefix);-      putb(')', f);-    } else {-      printrec(f, FUN(n), prefix);-      printrec(f, ARG(n), prefix);-      putb('@', f);-    }-    break;-  case T_INT: putb('#', f); putdecb(GETVALUE(n), f); break;-  case T_DBL: putb('&', f); putdblb(GETDBLVALUE(n), f); break;-  case T_ARR:-    if (prefix) {-      /* Arrays serialize as '[sz] e_1 ... e_sz' */-      putb('[', f);-      putdecb((value_t)ARR(n)->size, f);-      putb(']', f);-      for(size_t i = 0; i < ARR(n)->size; i++) {-        putb(' ', f);-        printrec(f, ARR(n)->array[i], prefix);-      }-    } else {-      /* Arrays serialize as 'e_1 ... e_sz [sz]' */-      for(size_t i = 0; i < ARR(n)->size; i++) {-        printrec(f, ARR(n)->array[i], prefix);-      }-      putb('[', f);-      putdecb((value_t)ARR(n)->size, f);-      putb(']', f);-    }-    break;-  case T_PTR:-    if (PTR(n) == stdin)-      putsb("IO.stdin", f);-    else if (PTR(n) == stdout)-      putsb("IO.stdout", f);-    else if (PTR(n) == stderr)-      putsb("IO.stderr", f);-    else-      ERR("Cannot serialize pointers");-    break;-  case T_STR:-    print_string(f, STR(n));-    break;-  case T_IO_CCALL: putb('^', f); putsb(ffi_table[GETVALUE(n)].ffi_name, f); break;-  case T_BADDYN: putb('^', f); putsb(CSTR(n), f); break;-  case T_S: putsb("S", f); break;-  case T_K: putsb("K", f); break;-  case T_I: putsb("I", f); break;-  case T_C: putsb("C", f); break;-  case T_B: putsb("B", f); break;-  case T_A: putsb("A", f); break;-  case T_U: putsb("U", f); break;-  case T_Y: putsb("Y", f); break;-  case T_P: putsb("P", f); break;-  case T_R: putsb("R", f); break;-  case T_O: putsb("O", f); break;-  case T_SS: putsb("S'", f); break;-  case T_BB: putsb("B'", f); break;-  case T_Z: putsb("Z", f); break;-  case T_K2: putsb("K2", f); break;-  case T_K3: putsb("K3", f); break;-  case T_K4: putsb("K4", f); break;-  case T_CC: putsb("C'", f); break;-  case T_CCB: putsb("C'B", f); break;-  case T_ADD: putsb("+", f); break;-  case T_SUB: putsb("-", f); break;-  case T_MUL: putsb("*", f); break;-  case T_QUOT: putsb("quot", f); break;-  case T_REM: putsb("rem", f); break;-  case T_UQUOT: putsb("uquot", f); break;-  case T_UREM: putsb("urem", f); break;-  case T_SUBR: putsb("subtract", f); break;-  case T_NEG: putsb("neg", f); break;-  case T_AND: putsb("and", f); break;-  case T_OR: putsb("or", f); break;-  case T_XOR: putsb("xor", f); break;-  case T_INV: putsb("inv", f); break;-  case T_SHL: putsb("shl", f); break;-  case T_SHR: putsb("shr", f); break;-  case T_ASHR: putsb("ashr", f); break;-#if WANT_FLOAT-  case T_FADD: putsb("f+", f); break;-  case T_FSUB: putsb("f-", f); break;-  case T_FMUL: putsb("f*", f); break;-  case T_FDIV: putsb("f/", f); break;-  case T_FNEG: putsb("fneg", f); break;-  case T_ITOF: putsb("itof", f); break;-  case T_FEQ: putsb("f==", f); break;-  case T_FNE: putsb("f/=", f); break;-  case T_FLT: putsb("f<", f); break;-  case T_FLE: putsb("f<=", f); break;-  case T_FGT: putsb("f>", f); break;-  case T_FGE: putsb("f>=", f); break;-  case T_FSHOW: putsb("fshow", f); break;-  case T_FREAD: putsb("fread", f); break;-#endif-  case T_EQ: putsb("==", f); break;-  case T_NE: putsb("/=", f); break;-  case T_LT: putsb("<", f); break;-  case T_LE: putsb("<=", f); break;-  case T_GT: putsb(">", f); break;-  case T_GE: putsb(">=", f); break;-  case T_ULT: putsb("u<", f); break;-  case T_ULE: putsb("u<=", f); break;-  case T_UGT: putsb("u>", f); break;-  case T_UGE: putsb("u>=", f); break;-  case T_PEQ: putsb("p==", f); break;-  case T_PNULL: putsb("pnull", f); break;-  case T_PADD: putsb("p+", f); break;-  case T_PSUB: putsb("p-", f); break;-  case T_ERROR: putsb("error", f); break;-  case T_NODEFAULT: putsb("noDefault", f); break;-  case T_NOMATCH: putsb("noMatch", f); break;-  case T_EQUAL: putsb("equal", f); break;-  case T_COMPARE: putsb("compare", f); break;-  case T_RNF: putsb("rnf", f); break;-  case T_SEQ: putsb("seq", f); break;-  case T_IO_BIND: putsb("IO.>>=", f); break;-  case T_IO_THEN: putsb("IO.>>", f); break;-  case T_IO_RETURN: putsb("IO.return", f); break;-  case T_IO_CCBIND: putsb("IO.C'BIND", f); break;-  case T_IO_SERIALIZE: putsb("IO.serialize", f); break;-  case T_IO_PRINT: putsb("IO.print", f); break;-  case T_IO_DESERIALIZE: putsb("IO.deserialize", f); break;-  case T_IO_GETARGS: putsb("IO.getArgs", f); break;-  case T_IO_GETTIMEMILLI: putsb("IO.getTimeMilli", f); break;-  case T_IO_PERFORMIO: putsb("IO.performIO", f); break;-  case T_IO_CATCH: putsb("IO.catch", f); break;-  case T_ARR_ALLOC: putsb("A.alloc", f); break;-  case T_ARR_SIZE: putsb("A.size", f); break;-  case T_ARR_READ: putsb("A.read", f); break;-  case T_ARR_WRITE: putsb("A.write", f); break;-  case T_ARR_EQ: putsb("A.==", f); break;-  case T_DYNSYM: putsb("dynsym", f); break;-  case T_NEWCASTRINGLEN: putsb("newCAStringLen", f); break;-  case T_PEEKCASTRING: putsb("peekCAString", f); break;-  case T_PEEKCASTRINGLEN: putsb("peekCAStringLen", f); break;-  case T_TOINT: putsb("toInt", f); break;-  case T_TOPTR: putsb("toPtr", f); break;-  case T_TODBL: putsb("toDbl", f); break;-  case T_FROMUTF8: putsb("fromUTF8", f); break;-  case T_TICK:-    putb('!', f);-    print_string(f, tick_table[GETVALUE(n)].tick_name);-    break;-  default: ERR("print tag");-  }-  if (!prefix) {-    putb(' ', f);-    if (share) {-      putb(':', f);-      putdecb((value_t)LABEL(n), f);-      putb(' ', f);-    }-  }-}--/* Serialize a graph to file. */-void-printb(BFILE *f, NODEPTR n, int header)-{-  num_shared = 0;-  marked_bits = calloc(free_map_nwords, sizeof(bits_t));-  if (!marked_bits)-    memerr();-  shared_bits = calloc(free_map_nwords, sizeof(bits_t));-  if (!shared_bits)-    memerr();-  find_sharing(n);-  if (header) {-    putsb(VERSION, f);-    putdecb(num_shared, f);-    putb('\n', f);-  }-  printrec(f, n, !header);-  if (header) {-    putb('}', f);-  }-  FREE(marked_bits);-  FREE(shared_bits);-}--/* Show a graph. */-void-pp(FILE *f, NODEPTR n)-{-  BFILE *bf = add_FILE(f);-  printb(bf, n, 0);-  putb('\n', bf);-  freeb_file(bf);-}--void-ppmsg(const char *msg, NODEPTR n)-{-#if 0-  printf("%s", msg);-  pp(stdout, n);-  printf("\n");-#endif-}--void-dump(const char *msg, NODEPTR at)-{-#if 0-  atptr = at;-  printf("dump: %s\n", msg);-  pp(stdout, *topnode);-#endif-}--#else  /* WANT_STDIO */-NODEPTR-dblToString(flt_t x)-{-  return mkStringC("no dblToString");-}--#endif  /* WANT_STDIO */--NODEPTR-mkInt(value_t i)-{-#if INTTABLE-  if (LOW_INT <= i && i < HIGH_INT) {-    return intTable[i - LOW_INT];-  }-#endif--  NODEPTR n;-  n = alloc_node(T_INT);-  SETVALUE(n, i);-  return n;-}--NODEPTR-mkFlt(flt_t d)-{-  NODEPTR n;-  n = alloc_node(T_DBL);-  SETDBLVALUE(n, d);-  return n;-}--NODEPTR-mkPtr(void* p)-{-  NODEPTR n;-  n = alloc_node(T_PTR);-  PTR(n) = p;-  return n;-}--static INLINE NODEPTR-mkNil(void)-{-  return combFalse;-}--static INLINE NODEPTR-mkCons(NODEPTR x, NODEPTR xs)-{-  return new_ap(new_ap(combCons, x), xs);-}--size_t-strNodes(size_t len)-{-  /* Each character will need a CHAR node and a CONS node, a CONS uses 2 T_AP nodes */-  len *= (1 + 2);-  /* And each string will need a NIL */-  len += 1;-  return len;-}--/* Turn a C string into a combinator string */-NODEPTR-mkString(const char *astr, size_t len)-{-  NODEPTR n, nc;-  size_t i;-  const unsigned char *str = (unsigned char*)astr; /* no sign bits, please */--  n = mkNil();-  for(i = len; i > 0; i--) {-    nc = mkInt(str[i-1]);-    n = mkCons(nc, n);-  }-  return n;-}--NODEPTR-mkStringC(const char *str)-{-  return mkString(str, strlen(str));-}--NODEPTR-mkStringU(struct ustring *str)-{-  BFILE *ubuf = add_utf8(openb_buf(str->string, str->size));-  NODEPTR n, *np, nc;--  n = mkNil();-  np = &n;-  for(;;) {-    int c = getb(ubuf);-    if (c < 0)-      break;-    nc = mkInt(c);-    *np = mkCons(nc, *np);-    np = &ARG(*np);-  }-  closeb(ubuf);-  return n;-}--NODEPTR evali(NODEPTR n);--/* Follow indirections */-static INLINE NODEPTR-indir(NODEPTR *np)-{-  NODEPTR n = *np;-  while (GETTAG(n) == T_IND)-    n = INDIR(n);-  *np = n;-  return n;-}--/* Evaluate to an INT */-static INLINE value_t-evalint(NODEPTR n)-{-  n = evali(n);-#if SANITY-  if (GETTAG(n) != T_INT) {-    ERR1("evalint, bad tag %d", GETTAG(n));-  }-#endif-  return GETVALUE(n);-}--/* Evaluate to a Flt_T */-static INLINE flt_t-evaldbl(NODEPTR n)-{-  n = evali(n);-#if SANITY-  if (GETTAG(n) != T_DBL) {-    ERR1("evaldbl, bad tag %d", GETTAG(n));-  }-#endif-  return GETDBLVALUE(n);-}--/* Evaluate to a T_PTR */-void *-evalptr(NODEPTR n)-{-  n = evali(n);-#if SANITY-  if (GETTAG(n) != T_PTR) {-    ERR1("evalptr, bad tag %d", GETTAG(n));-  }-#endif-  return PTR(n);-}--/* Evaluate a string, returns a newly allocated buffer. */-/* XXX this is cheating, should use continuations */-/* XXX the malloc()ed string is leaked if we yield in here. */-char *-evalstring(NODEPTR n, value_t *lenp)-{-  size_t sz = 100;-  char *name = MALLOC(sz);-  size_t offs;-  uvalue_t c;-  NODEPTR x;--  if (!name)-    memerr();-  for (offs = 0;;) {-    if (offs >= sz - 4) {-      sz *= 2;-      name = realloc(name, sz);-      if (!name)-        memerr();-    }-    n = evali(n);-    if (GETTAG(n) == T_K)            /* Nil */-      break;-    else if (GETTAG(n) == T_AP && GETTAG(x = indir(&FUN(n))) == T_AP && GETTAG(indir(&FUN(x))) == T_O) { /* Cons */-      PUSH(n);                  /* protect from GC */-      c = (uvalue_t)evalint(ARG(x));-      n = POPTOP();-      /* XXX Encode as UTF8 */-      if (c < 0x80) {-        name[offs++] = (char)c;-      } else if (c < 0x800) {-        name[offs++] = ((c >> 6 )       ) | 0xc0;-        name[offs++] = ((c      ) & 0x3f) | 0x80;-      } else if (c < 0x10000) {-        name[offs++] = ((c >> 12)       ) | 0xe0;-        name[offs++] = ((c >> 6 ) & 0x3f) | 0x80;-        name[offs++] = ((c      ) & 0x3f) | 0x80;-      } else if (c < 0x110000) {-        name[offs++] = ((c >> 18)       ) | 0xf0;-        name[offs++] = ((c >> 12) & 0x3f) | 0x80;-        name[offs++] = ((c >> 6 ) & 0x3f) | 0x80;-        name[offs++] = ((c      ) & 0x3f) | 0x80;-      } else {-	ERR("invalid char");-      }-      n = ARG(n);-    } else {-      ERR("evalstring not Nil/Cons");-    }-  }-  name[offs] = 0;-  if (lenp)-    *lenp = (value_t)offs;-  return name;-}--/* Compares anything, but really only works well on strings.- * if p < q  return -1- * if p > q  return 1- * if p == q return 0- *- * As we compare we update the argument pointers with any- * progress we make, in case we are interruped and resume from the top.- *- * XXX This is a rather dodgy comparison, since we are comparing- * functions, and the same data type could plausibly get different- * functions in the Scott encoding.- * But we only use it for lists, and it seems to work fine.- */-int-compare(NODEPTR cmp)-{-  stackptr_t stk = stack_ptr;-#define CRET(x) do { stack_ptr = stk; return (x); } while(0)-  value_t x, y;-  flt_t xd, yd;-  void *f, *g;-  NODEPTR p, q;-  NODEPTR *ap, *aq;-  enum node_tag ptag, qtag;--  /* Since FUN(cmp) can be shared, allocate a copy for it. */-  GCCHECK(1);-  FUN(cmp) = new_ap(FUN(FUN(cmp)), ARG(FUN(cmp)));-  aq = &ARG(cmp);-  ap = &ARG(FUN(cmp));--  PUSH(*ap);-  PUSH(*aq);-  for(;;) {-    if (stk == stack_ptr)-      return 0;-    q = evali(TOP(0));-    p = evali(TOP(1));-    POP(2);-    if (stk == stack_ptr) {-      /* We have made some progress, save this in the compare node. */-      *ap = p;-      *aq = q;-    }--    ptag = GETTAG(p);-    qtag = GETTAG(q);-    if (ptag != qtag) {-      /* Hack to make Nil < Cons */-      if (ptag == T_K && qtag == T_AP)-        CRET(-1);-      if (ptag == T_AP && qtag == T_K)-        CRET(1);-      CRET(ptag < qtag ? -1 : 1);-    }-    switch (ptag) {-    case T_AP:-      PUSH(ARG(p));             /* compare arg part later */-      PUSH(ARG(q));-      PUSH(FUN(p));             /* compare fun part now */-      PUSH(FUN(q));-      break;-    case T_INT:-    case T_IO_CCALL:-      x = GETVALUE(p);-      y = GETVALUE(q);-      if (x < y)-        CRET(-1);-      if (x > y)-        CRET(1);-      break;-    case T_DBL:-      xd = GETDBLVALUE(p);-      yd = GETDBLVALUE(q);-      if (xd < yd)-        CRET(-1);-      if (xd > yd)-        CRET(1);-      break;-    case T_PTR:-      f = PTR(p);-      g = PTR(q);-      if (f < g)-        CRET(-1);-      if (f > g)-        CRET(1);-      break;-    case T_ARR:-      if (ARR(p) < ARR(q))-        CRET(-1);-      if (ARR(p) > ARR(q))-        CRET(1);-      break;-    default:-      break;-    }-  }-#undef CRET-}--bits_t *rnf_bits;--void-rnf_rec(NODEPTR n)-{- top:-  if (test_bit(rnf_bits, n))-    return;-  set_bit(rnf_bits, n);-  n = evali(n);-  if (GETTAG(n) == T_AP) {-    PUSH(ARG(n));               /* protect from GC */-    rnf_rec(FUN(n));-    n = POPTOP();-    goto top;-  }-}--/* This is a yucky hack */-int doing_rnf = 0;--void-rnf(value_t noerr, NODEPTR n)-{-  /* Mark visited nodes to avoid getting stuck in loops. */-  rnf_bits = calloc(free_map_nwords, sizeof(bits_t));-  if (!rnf_bits)-    memerr();-  if (doing_rnf)-    ERR("recursive rnf()");-  doing_rnf = (int)noerr;-  rnf_rec(n);-  doing_rnf = 0;-  FREE(rnf_bits);-}--void execio(NODEPTR *);--/* Evaluate a node, returns when the node is in WHNF. */-NODEPTR-evali(NODEPTR an)-{-  NODEPTR n = an;-  stackptr_t stk = stack_ptr;-  NODEPTR x, y, z, w;-  value_t xi, yi, r;-  void *xp, *yp;-#if WANT_FLOAT-  flt_t xd, yd, rd;-#endif  /* WANT_FLOAT */-  char *msg;-#if FASTTAGS-  heapoffs_t l;-#endif--/* Reset stack pointer and return. */-#define RET do { goto ret; } while(0)-/* Check that there are at least n arguments, return if not. */-#define CHECK(n) do { if (stack_ptr - stk < (n)) RET; } while(0)--#define SETIND(n, x) do { SETTAG((n), T_IND); INDIR((n)) = (x); } while(0)-#define GOIND(x) do { SETIND(n, (x)); goto ind; } while(0)-#define GOAP(f,a) do { FUN((n)) = (f); ARG((n)) = (a); goto ap; } while(0)-/* CHKARGN checks that there are at least N arguments.- * It also- *  - sets n to the "top" node- *  - set x, y, ... to the arguments- *  - pops N stack elements- * NOTE: No GC is allowed after these, since the stack has been popped.- */-#define CHKARG0 do { } while(0)-#define CHKARG1 do { CHECK(1); POP(1); n = TOP(-1); x = ARG(n); } while(0)-#define CHKARG2 do { CHECK(2); POP(2); n = TOP(-1); y = ARG(n); x = ARG(TOP(-2)); } while(0)-#define CHKARG3 do { CHECK(3); POP(3); n = TOP(-1); z = ARG(n); y = ARG(TOP(-2)); x = ARG(TOP(-3)); } while(0)-#define CHKARG4 do { CHECK(4); POP(4); n = TOP(-1); w = ARG(n); z = ARG(TOP(-2)); y = ARG(TOP(-3)); x = ARG(TOP(-4)); } while(0)--/* Alloc a possible GC action, e, between setting x and popping */-#define CHKARGEV1(e)   do { CHECK(1); x = ARG(TOP(0)); e; POP(1); n = TOP(-1); } while(0)--#define SETINT(n,r)    do { SETTAG((n), T_INT); SETVALUE((n), (r)); } while(0)-#define SETDBL(n,d)    do { SETTAG((n), T_DBL); SETDBLVALUE((n), (d)); } while(0)-#define SETPTR(n,r)    do { SETTAG((n), T_PTR); PTR(n) = (r); } while(0)-#define OPINT1(e)      do { CHECK(1); xi = evalint(ARG(TOP(0)));                            e; POP(1); n = TOP(-1); } while(0);-#define OPINT2(e)      do { CHECK(2); xi = evalint(ARG(TOP(0))); yi = evalint(ARG(TOP(1))); e; POP(2); n = TOP(-1); } while(0);-#define OPDBL1(e)      do { CHECK(1); xd = evaldbl(ARG(TOP(0)));                            e; POP(1); n = TOP(-1); } while(0);-#define OPDBL2(e)      do { CHECK(2); xd = evaldbl(ARG(TOP(0))); yd = evaldbl(ARG(TOP(1))); e; POP(2); n = TOP(-1); } while(0);-#define OPPTR2(e)      do { CHECK(2); xp = evalptr(ARG(TOP(0))); yp = evalptr(ARG(TOP(1))); e; POP(2); n = TOP(-1); } while(0);-#define ARITHUNU(op)    do { OPINT1(r = (value_t)(op (uvalue_t)xi)); SETINT(n, r); RET; } while(0)-#define ARITHBIN(op)   do { OPINT2(r = xi op yi); SETINT(n, r); RET; } while(0)-#define ARITHBINU(op)  do { OPINT2(r = (value_t)((uvalue_t)xi op (uvalue_t)yi)); SETINT(n, r); RET; } while(0)-#define FARITHUN(op)   do { OPDBL1(rd = op xd); SETDBL(n, rd); RET; } while(0)-#define FARITHBIN(op)  do { OPDBL2(rd = xd op yd); SETDBL(n, rd); RET; } while(0)-#define CMP(op)        do { OPINT2(r = xi op yi); GOIND(r ? combTrue : combFalse); } while(0)-#define CMPF(op)       do { OPDBL2(r = xd op yd); GOIND(r ? combTrue : combFalse); } while(0)-#define CMPU(op)       do { OPINT2(r = (uvalue_t)xi op (uvalue_t)yi); GOIND(r ? combTrue : combFalse); } while(0)-#define CMPP(op)       do { OPPTR2(r = xp op yp); GOIND(r ? combTrue : combFalse); } while(0)--  for(;;) {-    enum node_tag tag;-    struct ioarray *arr;-    int sz;-    char *res;--    COUNT(num_reductions);-#if FASTTAGS-    l = LABEL(n);-    tag = l < T_IO_BIND ? l : GETTAG(n);-#else   /* FASTTAGS */-    tag = GETTAG(n);-#endif  /* FASTTAGS */-    switch (tag) {-    ind:-    case T_IND:  n = INDIR(n); break;--    ap:-    case T_AP:   PUSH(n); n = FUN(n); break;--    case T_STR:  RET;-    case T_INT:  RET;-    case T_DBL:  RET;-    case T_PTR:  RET;-    case T_ARR:  RET;-    case T_BADDYN: ERR1("FFI unknown %s", CSTR(n));--    case T_S:    GCCHECK(2); CHKARG3; GOAP(new_ap(x, z), new_ap(y, z));                     /* S x y z = x z (y z) */-    case T_SS:   GCCHECK(3); CHKARG4; GOAP(new_ap(x, new_ap(y, w)), new_ap(z, w));          /* S' x y z w = x (y w) (z w) */-    case T_K:                CHKARG2; GOIND(x);                                             /* K x y = *x */-    case T_A:                CHKARG2; GOIND(y);                                             /* A x y = *y */-    case T_U:                CHKARG2; GOAP(y, x);                                           /* U x y = y x */-    case T_I:                CHKARG1; GOIND(x);                                             /* I x = *x */-    case T_Y:                CHKARG1; GOAP(x, n);                                           /* n@(Y x) = x n */-    case T_B:    GCCHECK(1); CHKARG3; GOAP(x, new_ap(y, z));                                /* B x y z = x (y z) */-    case T_BB:   GCCHECK(2); CHKARG4; GOAP(new_ap(x, y), new_ap(z, w));                     /* B' x y z w = x y (z w) */-    case T_Z:                CHKARG3; GOAP(x, y);                                           /* Z x y z = x y */-    case T_C:    GCCHECK(1); CHKARG3; GOAP(new_ap(x, z), y);                                /* C x y z = x z y */-    case T_CC:   GCCHECK(2); CHKARG4; GOAP(new_ap(x, new_ap(y, w)), z);                     /* C' x y z w = x (y w) z */-    case T_P:    GCCHECK(1); CHKARG3; GOAP(new_ap(z, x), y);                                /* P x y z = z x y */-    case T_R:    GCCHECK(1); CHKARG3; GOAP(new_ap(y, z), x);                                /* R x y z = y z x */-    case T_O:    GCCHECK(1); CHKARG4; GOAP(new_ap(w, x), y);                                /* O x y z w = w x y */-    case T_K2:               CHKARG3; GOIND(x);                                             /* K2 x y z = *x */-    case T_K3:               CHKARG4; GOIND(x);                                             /* K3 x y z w = *x */-    case T_K4:               CHECK(5); POP(5); n = TOP(-1); x = ARG(TOP(-5)); GOIND(x);     /* K4 x y z w v = *x */-    case T_CCB:  GCCHECK(2); CHKARG4; GOAP(new_ap(x, z), new_ap(y, w));                     /* C'B x y z w = x z (y w) */--    case T_ADD:  ARITHBINU(+);-    case T_SUB:  ARITHBINU(-);-    case T_MUL:  ARITHBINU(*);-    case T_QUOT: ARITHBIN(/);-    case T_REM:  ARITHBIN(%);-    case T_SUBR: OPINT2(r = yi - xi); SETINT(n, r); RET;-    case T_UQUOT: ARITHBINU(/);-    case T_UREM:  ARITHBINU(%);-    case T_NEG:  ARITHUNU(-);-    case T_AND:  ARITHBIN(&);-    case T_OR:   ARITHBIN(|);-    case T_XOR:  ARITHBIN(^);-    case T_INV:  ARITHUNU(~);-    case T_SHL:  ARITHBIN(<<);-    case T_SHR:  ARITHBINU(>>);-    case T_ASHR: ARITHBIN(>>);--#if WANT_FLOAT-    case T_FADD: FARITHBIN(+);-    case T_FSUB: FARITHBIN(-);-    case T_FMUL: FARITHBIN(*);-    case T_FDIV: FARITHBIN(/);-    case T_FNEG: FARITHUN(-);-    case T_ITOF: OPINT1(rd = (flt_t)xi); SETDBL(n, rd); RET;-    case T_FEQ: CMPF(==);-    case T_FNE: CMPF(!=);-    case T_FLT: CMPF(<);-    case T_FLE: CMPF(<=);-    case T_FGT: CMPF(>);-    case T_FGE: CMPF(>=);-    case T_FREAD:-      CHECK(1);-      msg = evalstring(ARG(TOP(0)), 0);-#if WORD_SIZE == 64-      xd = strtod(msg, NULL);-#elif WORD_SIZE == 32-      xd = strtof(msg, NULL);-#else-#error Unknown WORD_SIZE-#endif-      FREE(msg);-      POP(1);-      n = TOP(-1);-      SETDBL(n, xd);-      RET;--    case T_FSHOW:-      CHECK(1);-      xd = evaldbl(ARG(TOP(0)));-      POP(1);-      n = TOP(-1);-      GOIND(dblToString(xd));-#endif  /* WANT_FLOAT */--    /* Retag a word sized value, keeping the value bits */-#define CONV(t) do { CHECK(1); x = evali(ARG(TOP(0))); n = POPTOP(); SETTAG(n, t); SETVALUE(n, GETVALUE(x)); RET; } while(0)-    case T_TODBL: CONV(T_DBL);-    case T_TOINT: CONV(T_INT);-    case T_TOPTR: CONV(T_PTR);-#undef CONV--    case T_EQ:   CMP(==);-    case T_NE:   CMP(!=);-    case T_LT:   CMP(<);-    case T_LE:   CMP(<=);-    case T_GT:   CMP(>);-    case T_GE:   CMP(>=);-    case T_ULT:  CMPU(<);-    case T_ULE:  CMPU(<=);-    case T_UGT:  CMPU(>);-    case T_UGE:  CMPU(>=);--    case T_PEQ:  CMPP(==);-    case T_PNULL: SETTAG(n, T_PTR); PTR(n) = 0; RET;-    case T_PADD: CHECK(2); xp = evalptr(ARG(TOP(0))); yi = evalint(ARG(TOP(1))); POP(2); n = TOP(-1); SETPTR(n, (char*)xp + yi); RET;-    case T_PSUB: CHECK(2); xp = evalptr(ARG(TOP(0))); yp = evalptr(ARG(TOP(1))); POP(2); n = TOP(-1); SETINT(n, (char*)xp - (char*)yp); RET;--    case T_ARR_EQ:-      {-        CHECK(2);-        x = evali(ARG(TOP(0)));-        arr = ARR(x);-        y = evali(ARG(TOP(1)));-        POP(2);-        n = TOP(-1);-        GOIND(arr == ARR(y) ? combTrue : combFalse);-      }--    case T_FROMUTF8:-      if (doing_rnf) RET;-      CHECK(1);-      x = evali(ARG(TOP(0)));-      if (GETTAG(x) != T_STR) ERR("FROMUTF8");-      POP(1);-      n = TOP(-1);-      GCCHECK(strNodes(STR(x)->size));-      GOIND(mkStringU(STR(x)));--    case T_NOMATCH:-      if (doing_rnf) RET;-      {-      CHECK(3);-      msg = evalstring(ARG(TOP(0)), 0);-      xi = evalint(ARG(TOP(1)));-      yi = evalint(ARG(TOP(2)));-      sz = strlen(msg) + 100;-      res = MALLOC(sz);-#if WANT_STDIO-      snprintf(res, sz, "no match at %s, line %"PRIvalue", col %"PRIvalue, msg, xi, yi);-#else  /* WANT_STDIO */-      strcpy(res, "no match");-#endif  /* WANT_STDIO */-      POP(2);-      GCCHECK(strNodes(strlen(res)));-      ARG(TOP(0)) = mkStringC(res);-      FREE(res);-      FREE(msg);-      goto err;                 /* XXX not right message if the error is caught */-      }-    case T_NODEFAULT:-      if (doing_rnf) RET;-      {-      CHECK(1);-      msg = evalstring(ARG(TOP(0)), 0);-      sz = strlen(msg) + 100;-      res = MALLOC(sz);--#if WANT_STDIO-      snprintf(res, sz, "no default for %s", msg);-#else  /* WANT_STDIO */-      strcpy(res, "no default");-#endif  /* WANT_STDIO */-      GCCHECK(strNodes(strlen(res)));-      ARG(TOP(0)) = mkStringC(res);-      FREE(res);-      FREE(msg);-      goto err;                 /* XXX not right message if the error is caught */-      }-    case T_ERROR:-      if (doing_rnf) RET;-    err:-      if (cur_handler) {-        /* Pass the string to the handler */-        CHKARG1;-        cur_handler->hdl_exn = x;-        longjmp(cur_handler->hdl_buf, 1);-      } else {-        /* No handler, so just die. */-        CHKARGEV1(msg = evalstring(x, 0));-#if WANT_STDIO-        ERR1("mhs: %s\n", msg);-        EXIT(1);-#else  /* WANT_STDIO */-        ERR1("error: %s", msg);-#endif  /* WANT_STDIO */-      }-    case T_SEQ:  CHECK(2); evali(ARG(TOP(0))); POP(2); n = TOP(-1); y = ARG(n); GOIND(y); /* seq x y = eval(x); y */--    case T_EQUAL:-      CHECK(2); r = compare(TOP(1)); POP(2); n = TOP(-1); GOIND(r==0 ? combTrue : combFalse);-    case T_COMPARE:-      CHECK(2); r = compare(TOP(1)); POP(2); n = TOP(-1); GOIND(r < 0 ? combLT : r > 0 ? combGT : combEQ);--    case T_RNF:-      if (doing_rnf) RET;-      CHECK(2);-      xi = evalint(ARG(TOP(0)));-      rnf(xi, ARG(TOP(1))); POP(2); n = TOP(-1); GOIND(combUnit);--    case T_IO_PERFORMIO:-      CHECK(1);-      if (doing_rnf) RET;-      execio(&ARG(TOP(0)));       /* run IO action */-      x = ARG(TOP(0));           /* should be RETURN e */-      if (GETTAG(x) != T_AP || GETTAG(FUN(x)) != T_IO_RETURN)-        ERR("PERFORMIO");-      POP(1);-      n = TOP(-1);-      GOIND(ARG(x));--    case T_IO_CCBIND:           /* We should never have to reduce this */-    case T_IO_BIND:-    case T_IO_THEN:-    case T_IO_RETURN:-    case T_IO_SERIALIZE:-    case T_IO_PRINT:-    case T_IO_DESERIALIZE:-    case T_IO_GETARGS:-    case T_IO_GETTIMEMILLI:-    case T_IO_CCALL:-    case T_IO_CATCH:-    case T_NEWCASTRINGLEN:-    case T_PEEKCASTRING:-    case T_PEEKCASTRINGLEN:-    case T_ARR_ALLOC:-    case T_ARR_SIZE:-    case T_ARR_READ:-    case T_ARR_WRITE:-      RET;--    case T_DYNSYM:-      /* A dynamic FFI lookup */-      CHECK(1);-      msg = evalstring(ARG(TOP(0)), 0);-      GCCHECK(1);-      x = ffiNode(msg);-      FREE(msg);-      POP(1);-      n = TOP(-1);-      GOIND(x);--#if WANT_TICK-    case T_TICK:-      xi = GETVALUE(n);-      CHKARG1;-      dotick(xi);-      GOIND(x);-#endif--    default:-      ERR1("eval tag %d", GETTAG(n));-    }-  }- ret:-  if (stack_ptr != stk) {-    // In this case, n was an AP that got pushed and potentially-    // updated.-    stack_ptr = stk;-    n = TOP(-1);-  }-  return n;-}--/* This is the interpreter for the IO monad operations.- * - * Assuming every graph rewrite is atomic we want the graph- * to always represent the rest of the program to run.- * To this end, we need to mutate the graph every time- * an IO operation has been performed to make sure we don't- * execute it again.- * To have a cell that is safe to mutate, we allocate a new- * application on entry to execio().- * Given the call execio(np) we allocate this graph, top,:- *   BIND (*np) RETURN- * and make np point to it.- * This graph will be updated continuously as we execite IO action.- * Invariant: the second argument to this BIND is always either RETURN- * or a C'BIND.  The second argument to C'BIND has the same invariant.- * This is the cycle:- *   given top = BIND n q- *   eval(n)- *   case n- *     BIND r s:  rewrite to top := BIND r (C'BIND s q)  -- (r >>= s) >>= q  -->  r >>= (\ x -> s x >>= q)- *     THEN r s:  ... K s ...- *     otherwise: res = execute n- *       case q- *         RETURN:     rewrite to  top := RETURN res;  return to caller- *         C'BIND r s: rewrite to  top := BIND (r res) s; goto top- */-void-execio(NODEPTR *np)-{-  stackptr_t stk = stack_ptr;-  NODEPTR f, x, n, q, r, s, res, top1;-  char *name;-  value_t len;-  struct handler *h;-#if WANT_STDIO-  void *ptr;-  int hdr;-#endif  /* WANT_STDIO */-  NODEPTR top;--/* IO operations need all arguments, anything else should not happen. */-#define CHECKIO(n) do { if (stack_ptr - stk != (n+1)) {ERR("CHECKIO");}; } while(0)-  /* #define RETIO(p) do { stack_ptr = stk; return (p); } while(0)*/-#define GCCHECKSAVE(p, n) do { PUSH(p); GCCHECK(n); (p) = TOP(0); POP(1); } while(0)-#define RETIO(p) do { stack_ptr = stk; res = p; goto rest; } while(0)-#define IOASSERT(p,s) do { if (!(p)) ERR("IOASSERT " s); } while(0)--  GCCHECK(2);-  top = new_ap(new_ap(combIOBIND, *np), combIORETURN);-  *np = top;-- start:-  //dump("start", top);-  IOASSERT(stack_ptr == stk, "start");-  //ppmsg("n before = ", ARG(FUN(top)));-  n = evali(ARG(FUN(top)));     /* eval(n) */-  //ppmsg("n after  = ", n);-  if (GETTAG(n) == T_AP && GETTAG(top1 = indir(&FUN(n))) == T_AP) {-    switch (GETTAG(indir(&FUN(top1)))) {-    case T_IO_BIND:-      GCCHECKSAVE(n, 2);-      s = ARG(n);-    bind:-      q = ARG(top);-      r = ARG(top1);-      ARG(FUN(top)) = r;-      ARG(top) = x = new_ap(new_ap(combIOCCBIND, s), q);-      goto start;-    case T_IO_THEN:-      GCCHECKSAVE(n, 3);-      s = new_ap(combFalse, ARG(n));-      goto bind;-    default:-      break;-    }-  }-  goto execute;-- rest:                          /* result is in res */-  //ppmsg("res=", res);-  q = ARG(top);-  //ppmsg("q=", q);-  if (GETTAG(q) == T_IO_RETURN) {-    /* execio is done */-    FUN(top) = combIORETURN;-    ARG(top) = res;-    IOASSERT(stack_ptr == stk, "stk");-    return;-  }-  /* not done, it must be a C'BIND */-  GCCHECK(1);-  IOASSERT(GETTAG(q) == T_AP && GETTAG(FUN(q)) == T_AP && GETTAG(FUN(FUN(q))) == T_IO_CCBIND, "rest-AP");-  r = ARG(FUN(q));-  s = ARG(q);-  ARG(FUN(top)) = new_ap(r, res);-  ARG(top) = s;-  goto start;-- execute:-  PUSH(n);-  for(;;) {-    COUNT(num_reductions);-    //printf("execute switch %s\n", tag_names[GETTAG(n)]);-    switch (GETTAG(n)) {-    case T_IND:-      n = INDIR(n);-      TOP(0) = n;-      break;-    case T_AP:-      n = FUN(n);-      PUSH(n);-      break;-    case T_IO_BIND:-      ERR("T_IO_BIND");-    case T_IO_THEN:-      ERR("T_IO_THEN");-    case T_IO_CCBIND:-      ERR("T_IO_CCBIND");-    case T_IO_RETURN:-      CHECKIO(1);-      n = ARG(TOP(1));-      RETIO(n);-#if WANT_STDIO-    case T_IO_PRINT:-      hdr = 0;-      goto ser;-    case T_IO_SERIALIZE:-      hdr = 1;-    ser:-      CHECKIO(2);-      gc();                     /* DUBIOUS: do a GC to get possible GC reductions */-      ptr = (struct BFILE*)evalptr(ARG(TOP(1)));-      x = evali(ARG(TOP(2)));-      //x = ARG(TOP(1));-      printb(ptr, x, hdr);-      putb('\n', ptr);-      RETIO(combUnit);-    case T_IO_DESERIALIZE:-      CHECKIO(1);-      ptr = (struct BFILE*)evalptr(ARG(TOP(1)));-      n = parse_top(ptr);-      RETIO(n);-#endif-#if WANT_ARGS-    case T_IO_GETARGS:-      CHECKIO(0);-      {-      /* compute total number of characters */-        size_t size = 0;-        for(int i = 0; i < glob_argc; i++) {-          size += strNodes(strlen(glob_argv[i]));-        }-        /* The returned list will need a CONS for each string, and a NIL */-        size += glob_argc * 2 + 1;-        GCCHECK(size);-        /*-        PRINT("total size %d:", size);-        for(int i = 0; i < glob_argc; i++)-          PRINT(" %s", glob_argv[i]);-        PRINT("\n");-        */-        n = mkNil();-        for(int i = glob_argc-1; i >= 0; i--) {-          n = mkCons(mkString(glob_argv[i], strlen(glob_argv[i])), n);-        }-      }-      RETIO(n);-#endif--    case T_IO_CCALL:-      {-        int a = (int)GETVALUE(n);-        funptr_t f = ffi_table[a].ffi_fun;-        value_t ri, xi, yi, zi;-#if WANT_FLOAT-        flt_t rd, xd, yd;-#endif  /* WANT_FLOAT */-        void *xp, *yp, *wp, *rp;-#define INTARG(n) evalint(ARG(TOP(n)))-#define PTRARG(n) evalptr(ARG(TOP(n)))-#define DBLARG(n) evaldbl(ARG(TOP(n)))-#define FFIV(n) CHECKIO(n)-#define FFI(n)  CHECKIO(n); GCCHECK(1)-        /* This isn't great, but this is MicroHs, so it's good enough. */-        switch (ffi_table[a].ffi_how) {-        case FFI_V:   FFIV(0);                                      (*                               f)();                     RETIO(combUnit);-        case FFI_I:   FFI (0);                                 ri = (*(value_t (*)(void            ))f)();      n = mkInt(ri); RETIO(n);-        case FFI_i:   FFI (0);                                 ri = (*(int     (*)(void            ))f)();      n = mkInt(ri); RETIO(n);-        case FFI_IV:  FFIV(1); xi = INTARG(1);                      (*(void    (*)(value_t         ))f)(xi);                   RETIO(combUnit);-        case FFI_II:  FFI (1); xi = INTARG(1);                 ri = (*(value_t (*)(value_t         ))f)(xi);    n = mkInt(ri); RETIO(n);-        case FFI_IIV: FFIV(2); xi = INTARG(1); yi = INTARG(2);      (*(void    (*)(value_t, value_t))f)(xi,yi);                RETIO(combUnit);-        case FFI_III: FFI (2); xi = INTARG(1); yi = INTARG(2); ri = (*(value_t (*)(value_t, value_t))f)(xi,yi); n = mkInt(ri); RETIO(n);-#if WANT_FLOAT-        case FFI_DD:  FFI (1); xd = DBLARG(1);                 rd = (*(flt_t   (*)(flt_t           ))f)(xd);    n = mkFlt(rd); RETIO(n);-        case FFI_DDD: FFI (2); xd = DBLARG(1); yd = DBLARG(2); rd = (*(flt_t   (*)(flt_t,   flt_t  ))f)(xd,yd); n = mkFlt(rd); RETIO(n);-#endif  /* WANT_FLOAT */-        case FFI_PI:  FFI (1); xp = PTRARG(1);                 ri = (*(value_t (*)(void*           ))f)(xp);    n = mkInt(ri); RETIO(n);-        case FFI_Pi:  FFI (1); xp = PTRARG(1);                 ri = (*(int     (*)(void*           ))f)(xp);    n = mkInt(ri); RETIO(n);-        case FFI_IP:  FFI (1); xi = INTARG(1);                 rp = (*(void*   (*)(value_t         ))f)(xi);    n = mkPtr(rp); RETIO(n);-        case FFI_PP:  FFI (1); xp = PTRARG(1);                 rp = (*(void*   (*)(void*           ))f)(xp);    n = mkPtr(rp); RETIO(n);-        case FFI_PV:  FFI (1); xp = PTRARG(1);                      (*(void    (*)(void*           ))f)(xp);                   RETIO(combUnit);-        case FFI_PPI: FFI (2); xp = PTRARG(1);yp = PTRARG(2);  ri = (*(value_t (*)(void*, void*    ))f)(xp,yp); n = mkInt(ri); RETIO(n);-        case FFI_PIV: FFI (2); xp = PTRARG(1);yi = INTARG(2);       (*(void    (*)(void*, value_t  ))f)(xp,yi);                RETIO(combUnit);-        case FFI_PPV: FFI (2); xp = PTRARG(1);yp = PTRARG(2);       (*(void    (*)(void*, void*    ))f)(xp,yp);                RETIO(combUnit);-        case FFI_IIP: FFI (2); xi = INTARG(1);yi = INTARG(2);  rp = (*(void*   (*)(value_t,value_t ))f)(xi,yi); n = mkPtr(rp); RETIO(n);-        case FFI_PPP: FFI (2); xp = PTRARG(1);yp = PTRARG(2);  rp = (*(void*   (*)(void*, void*    ))f)(xp,yp); n = mkPtr(rp); RETIO(n);-        case FFI_IPI: FFI (2); xi = INTARG(1);yp = PTRARG(2);  ri = (*(value_t (*)(value_t, void*  ))f)(xi,yp); n = mkInt(ri); RETIO(n);-        case FFI_iPi: FFI (2); xi = INTARG(1);yp = PTRARG(2);  ri = (*(int     (*)(int,   void*    ))f)(xi,yp); n = mkInt(ri); RETIO(n);-        case FFI_iPV: FFI (2); xi = INTARG(1);yp = PTRARG(2);       (*(void    (*)(int,   void*    ))f)(xi,yp);                RETIO(combUnit);-        case FFI_PPzV:FFI (3); xp = PTRARG(1);yp = PTRARG(2); zi = INTARG(3); (*(void    (*)(void*, void*, size_t))f)(xp,yp,zi); RETIO(combUnit);-        case FFI_PIIPI:FFI (4);xp = PTRARG(1);yi = INTARG(2); zi = INTARG(3); wp = PTRARG(4);-          ri = (*(int     (*)(void*, int, int, void*    ))f)(xp,yi,zi,wp); n = mkInt(ri); RETIO(n);-        default: ERR("T_IO_CCALL");-        }-      }--    case T_IO_CATCH:-      {-        h = MALLOC(sizeof *h);-        if (!h)-          memerr();-        CHECKIO(2);-        h->hdl_old = cur_handler;-        h->hdl_stack = stack_ptr;-        cur_handler = h;-        if (setjmp(h->hdl_buf)) {-          /* An exception occurred: */-          stack_ptr = h->hdl_stack;-          x = h->hdl_exn;       /* exception value */-          GCCHECKSAVE(x, 1);-          f = ARG(TOP(2));      /* second argument, handler */-          n = new_ap(f, x);-          cur_handler = h->hdl_old;-          FREE(h);-          POP(3);-          ARG(FUN(top)) = n;-          goto start;-        } else {-          /* Normal execution: */-          execio(&ARG(TOP(1))); /* execute first argument */-          cur_handler = h->hdl_old; /* restore old handler */-          FREE(h);-          n = ARG(TOP(1));-          IOASSERT(GETTAG(n) == T_AP && GETTAG(FUN(n)) == T_IO_RETURN, "CATCH");-          RETIO(ARG(n));             /* return result */-        }-      }--    case T_NEWCASTRINGLEN:-      CHECKIO(1);-      name = evalstring(ARG(TOP(1)), &len);-      GCCHECK(4);-      n = new_ap(new_ap(combPair, x = alloc_node(T_PTR)), mkInt(len));-      PTR(x) = name;-      RETIO(n);--    case T_PEEKCASTRING:-      {-      size_t size;-      CHECKIO(1);-      name = evalptr(ARG(TOP(1)));-      size = strlen(name);-      GCCHECK(strNodes(size));-      RETIO(mkString(name, size));-      }--    case T_PEEKCASTRINGLEN:-      {-      size_t size;-      CHECKIO(2);-      size = evalint(ARG(TOP(2)));-      name = evalptr(ARG(TOP(1)));-      GCCHECK(strNodes(size));-      RETIO(mkString(name, size));-      }--    case T_ARR_ALLOC:-      {-      size_t size;-      NODEPTR elem;-      struct ioarray *arr;-      CHECKIO(2);-      size = evalint(ARG(TOP(1)));-      elem = ARG(TOP(2));-      arr = arr_alloc(size, elem);-      n = alloc_node(T_ARR);-      ARR(n) = arr;-      RETIO(n);-      }-    case T_ARR_SIZE:-      CHECKIO(1);-      n = evali(ARG(TOP(1)));-      if (GETTAG(n) != T_ARR)-        ERR("bad ARR tag");-      RETIO(mkInt(ARR(n)->size));-    case T_ARR_READ:-      {-      size_t i;-      CHECKIO(2);-      i = evalint(ARG(TOP(2)));-      n = evali(ARG(TOP(1)));-      if (GETTAG(n) != T_ARR)-        ERR("bad ARR tag");-      if (i >= ARR(n)->size)-        ERR("ARR_READ");-      RETIO(ARR(n)->array[i]);-      }-    case T_ARR_WRITE:-      {-      size_t i;-      CHECKIO(3);-      i = evalint(ARG(TOP(2)));-      n = evali(ARG(TOP(1)));-      if (GETTAG(n) != T_ARR)-        ERR("bad ARR tag");-      if (i >= ARR(n)->size) {-        //PRINT("%d %p %d\n", (int)i, ARR(n), (int)ARR(n)->size);-        ERR("ARR_WRITE");-      }-      ARR(n)->array[i] = ARG(TOP(3));-      RETIO(combUnit);-      }--    default:-      //printf("bad tag %s\n", tag_names[GETTAG(n)]);-      ERR1("execio tag %d", GETTAG(n));-    }-  }-}--#if WANT_ARGS-heapoffs_t-memsize(const char *p)-{-  heapoffs_t n = atoi(p);-  while (isdigit(*p))-    p++;-  switch (*p) {-  case 'k': case 'K': n *= 1000; break;-  case 'm': case 'M': n *= 1000000; break;-  case 'g': case 'G': n *= 1000000000; break;-  default: break;-  }-  return n;-}-#endif--extern uint8_t *combexpr;-extern int combexprlen;--MAIN-{-  NODEPTR prog;-#if WANT_ARGS-  char *inname = 0;-  char **av;-  int inrts;-#if WANT_TICK-  int dump_ticks = 0;-#endif-#endif-#if WANT_STDIO-  char *outname = 0;-  size_t file_size = 0;-#endif-  -#if 0-  /* MINGW doesn't do buffering right */-  setvbuf(stdout, NULL, _IOLBF, BUFSIZ);-  setvbuf(stderr, NULL, _IONBF, BUFSIZ);-#endif--#ifdef INITIALIZATION-  main_setup(); /* Do platform specific start-up. */-#endif--#if WANT_ARGS-  argc--, argv++;-  glob_argv = argv;-  for (av = argv, inrts = 0; argc--; argv++) {-    char *p = *argv;-    if (inrts) {-      if (strcmp(p, "-RTS") == 0) {-        inrts = 0;-      } else {-        if (strcmp(p, "-v") == 0)-          verbose++;-#if WANT_TICKS-        else if (strcmp(p, "-T") == 0)-          dump_ticks = 1;-#endif-        else if (strncmp(p, "-H", 2) == 0)-          heap_size = memsize(&p[2]);-        else if (strncmp(p, "-K", 2) == 0)-          stack_size = memsize(&p[2]);-        else if (strncmp(p, "-r", 2) == 0)-          inname = &p[2];-#if WANT_STDIO-        else if (strncmp(p, "-o", 2) == 0)-          outname = &p[2];-#endif  /* WANT_STDIO */-        else-          ERR("Usage: eval [+RTS [-v] [-Hheap-size] [-Kstack-size] [-rFILE] [-oFILE] -RTS] arg ...");-      }-    } else {-      if (strcmp(p, "+RTS") == 0) {-        inrts = 1;-      } else {-        *av++ = p;-      }-    }-  }-  glob_argc = av - glob_argv;--  if (inname == 0)-    inname = "out.comb";-#endif--  init_nodes();-  stack = MALLOC(sizeof(NODEPTR) * stack_size);-  if (!stack)-    memerr();--  if (combexpr) {-    int c;-    BFILE *bf = openb_buf(combexpr, combexprlen);-    c = getb(bf);-    /* Compressed combinators start with a 'Z', otherwise 'v' (for version) */-    if (c == 'Z') {-      /* add compressor transducer */-      bf = add_lzw_decompressor(bf);-    } else {-      /* put it back, we need it */-      ungetb(c, bf);-    }-    prog = parse_top(bf);-    closeb(bf);-  } else {-#if WANT_STDIO-    prog = parse_file(inname, &file_size);-#else-    ERR("no stdio");-#endif-  }--  /* GC unused stuff, nice for -o */-  PUSH(prog);-  want_gc_red = 1;-  gc();-  want_gc_red = 0;-  prog = POPTOP();--#if WANT_STDIO-  heapoffs_t start_size = num_marked;-  if (outname) {-    /* Save GCed file (smaller), and exit. */-    FILE *out = fopen(outname, "w");-    if (!out)-      ERR1("cannot open output file %s", outname);-    struct BFILE *bf = add_FILE(out);-    printb(bf, prog, 1);-    closeb(bf);-    EXIT(0);-  }-  if (verbose > 2) {-    pp(stdout, prog);-  }-#endif-  run_time -= GETTIMEMILLI();-  PUSH(prog);-  topnode = &TOP(0);-  execio(&TOP(0));-  prog = TOP(0);-  POP(1);-#if SANITY-  if (GETTAG(prog) != T_AP || GETTAG(FUN(prog)) != T_IO_RETURN)-    ERR("main execio");-#endif-#if WANT_STDIO-  NODEPTR res = evali(ARG(prog));-#else-  (void)evali(ARG(prog));-#endif-  run_time += GETTIMEMILLI();-#if WANT_STDIO-  if (verbose) {-    if (verbose > 1) {-      PRINT("\nmain returns ");-      pp(stdout, res);-      PRINT("node size=%"PRIheap", heap size bytes=%"PRIheap"\n", (heapoffs_t)NODE_SIZE, heap_size * NODE_SIZE);-    }-    setlocale(LC_NUMERIC, "");  /* Make %' work on platforms that support it */-    PRINT("%"PCOMMA"15"PRIheap" combinator file size\n", (heapoffs_t)file_size);-    PRINT("%"PCOMMA"15"PRIheap" cells at start\n", start_size);-    PRINT("%"PCOMMA"15"PRIheap" cells heap size (%"PCOMMA""PRIheap" bytes)\n", heap_size, heap_size * NODE_SIZE);-    PRINT("%"PCOMMA"15"PRIcounter" cells allocated (%"PCOMMA".1f Mbyte/s)\n", num_alloc, num_alloc * NODE_SIZE / ((double)run_time / 1000) / 1000000);-    PRINT("%"PCOMMA"15"PRIcounter" GCs\n", num_gc);-    PRINT("%"PCOMMA"15"PRIcounter" max cells used\n", max_num_marked);-    PRINT("%"PCOMMA"15"PRIcounter" reductions (%"PCOMMA".1f Mred/s)\n", num_reductions, num_reductions / ((double)run_time / 1000) / 1000000);-    PRINT("%"PCOMMA"15"PRIcounter" array alloc\n", num_arr_alloc);-    PRINT("%"PCOMMA"15"PRIcounter" array free\n", num_arr_free);-    // PRINT("%"PCOMMA"15"PRIcounter" max mark depth\n", max_mark_depth);-    PRINT("%15.2fs total expired time\n", (double)run_time / 1000);-    PRINT("%15.2fs total gc time\n", (double)gc_mark_time / 1000);-#if GCRED-    PRINT(" GC reductions A=%d, K=%d, I=%d, int=%d flip=%d\n", red_a, red_k, red_i, red_int, red_flip);-#endif-  }-#endif  /* WANT_STDIO */--#if WANT_TICK-  if (dump_ticks) {-    dump_tick_table(stdout);-  }-#endif--#ifdef TEARDOWN-  main_teardown(); /* do some platform specific teardown */-#endif-  EXIT(0);-}--#if WANT_MD5-#include "md5.c"-#endif  /* WANT_MD5 */+#if WANT_DIR+#include <dirent.h>+#include <unistd.h>+#endif  /* WANT_DIR */++#if WANT_MD5+#include "md5.h"+#endif++#if !defined(WANT_LZ77)+#define WANT_LZ77 1+#endif++#if WANT_LZ77+size_t lz77d(uint8_t *src, size_t srclen, uint8_t **bufp);+size_t lz77c(uint8_t *src, size_t srclen, uint8_t **bufp);+#endif++#include "mhsffi.h"+struct ffi_entry ffi_table[];+int num_ffi;+#define FFI_IX(i) ((i) < num_ffi ? ffi_table[i] : xffi_table[i - num_ffi])++//#include "config.h"++#define VERSION "v7.0\n"++typedef intptr_t value_t;       /* Make value the same size as pointers, since they are in a union */+#define PRIvalue PRIdPTR+typedef uintptr_t uvalue_t;     /* Make unsigned value the same size as pointers, since they are in a union */+#define PRIuvalue PRIuPTR+typedef uintptr_t heapoffs_t;   /* Heap offsets */+#define PRIheap PRIuPTR+typedef uintptr_t tag_t;        /* Room for tag, low order bit indicates AP/not-AP */+typedef intptr_t stackptr_t;    /* Index into stack */++typedef uintptr_t counter_t;    /* Statistics counter, can be smaller since overflow doesn't matter */+#define PRIcounter PRIuPTR+typedef uintptr_t bits_t;       /* One word of bits */++#if !defined(MALLOC)+#define MALLOC malloc+#endif++#if !defined(FREE)+#define FREE free+#endif++#if !defined(EXIT)+#define EXIT exit+#endif++#if !defined(PRINT)+#define PRINT printf+#endif++#if !defined(MAIN)+#define MAIN int main(int argc, char **argv)+#endif++#if !defined(PCOMMA)+#define PCOMMA "'"+#endif  /* !defined(PCOMMA) */++#if !defined(GETRAW)+int GETRAW(void) { return -1; }+#endif  /* !defined(getraw) */++#if !defined(GETTIMEMILLI)+value_t GETTIMEMILLI(void) { return 0; }+#endif  /* !define(GETTIMEMILLI) */++#if !defined(TMPNAME)+/* This is a really bad implementation, since it doesn't check for anything. */+char* TMPNAME(const char* pre, const char* post) {+  char *s = MALLOC(strlen(pre) + 3 + strlen(post) + 1);+  strcpy(s, pre);+  strcat(s, "TMP");+  strcat(s, post);+  return s;+}+#endif++#if !defined(FFS)+/* This is pretty bad, could use deBruijn multiplication instead. */+int+FFS(bits_t x)+{+  int i;+  if (!x)+    return 0;+  for(i = 1; !(x & 1); x >>= 1, i++)+    ;+  return i;+}+#endif  /* !defined(FFS) */++#if !defined(WANT_ARGS)+#define WANT_ARGS 1+#endif++#if !defined(INLINE)+#define INLINE inline+#endif  /* !define(INLINE) */++#if !defined(NORETURN)+#define NORETURN __attribute__ ((noreturn))+#endif /* !defined(NORETURN) */++#if !defined(COUNT)+#define COUNT(n) ++(n)+#endif++value_t+iswindows(void)+{+#if defined(ISWINDOWS)+  return 1;+#else+  return 0;+#endif+}++/***************************************/++/* Keep permanent nodes for LOW_INT <= i < HIGH_INT */+#define LOW_INT (-10)+#define HIGH_INT 256++#if !defined(HEAP_CELLS)+#define HEAP_CELLS 50000000+#endif++#if !defined(STACK_SIZE)+#define STACK_SIZE 100000+#endif++#if !defined(ERR)+#if WANT_STDIO+#define ERR(s)    do { fprintf(stderr,"ERR: "s"\n");   EXIT(1); } while(0)+#define ERR1(s,a) do { fprintf(stderr,"ERR: "s"\n",a); EXIT(1); } while(0)+#else  /* WANT_STDIO */+#define ERR(s) EXIT(1)+#define ERR1(s,a) EXIT(1)+#endif  /* WANT_STDIO */+#endif  /* !define(ERR) */++enum node_tag { T_FREE, T_IND, T_AP, T_INT, T_DBL, T_PTR, T_FUNPTR, T_BADDYN, T_ARR,+                T_S, T_K, T_I, T_B, T_C,+                T_A, T_Y, T_SS, T_BB, T_CC, T_P, T_R, T_O, T_U, T_Z,+                T_K2, T_K3, T_K4, T_CCB,+                T_ADD, T_SUB, T_MUL, T_QUOT, T_REM, T_SUBR, T_UQUOT, T_UREM, T_NEG,+                T_AND, T_OR, T_XOR, T_INV, T_SHL, T_SHR, T_ASHR,+                T_EQ, T_NE, T_LT, T_LE, T_GT, T_GE, T_ULT, T_ULE, T_UGT, T_UGE,+                T_PEQ, T_PNULL, T_PADD, T_PSUB,+                T_TOPTR, T_TOINT, T_TODBL,+                T_BININT2, T_BININT1, T_UNINT1,+                T_BINDBL2, T_BINDBL1, T_UNDBL1,+#if WANT_FLOAT+                T_FADD, T_FSUB, T_FMUL, T_FDIV, T_FNEG, T_ITOF,+                T_FEQ, T_FNE, T_FLT, T_FLE, T_FGT, T_FGE, T_FSHOW, T_FREAD,+#endif+                T_ARR_ALLOC, T_ARR_SIZE, T_ARR_READ, T_ARR_WRITE, T_ARR_EQ,+                T_ERROR, T_NODEFAULT, T_NOMATCH, T_SEQ, T_EQUAL, T_COMPARE, T_RNF,+                T_TICK,+                T_IO_BIND, T_IO_THEN, T_IO_RETURN,+                T_IO_CCBIND,+                T_IO_SERIALIZE, T_IO_DESERIALIZE,+                T_IO_STDIN, T_IO_STDOUT, T_IO_STDERR, T_IO_GETARGREF,+                T_IO_PERFORMIO, T_IO_GETTIMEMILLI, T_IO_PRINT, T_IO_CATCH,+                T_IO_CCALL, T_DYNSYM,+                T_NEWCASTRINGLEN, T_PEEKCASTRING, T_PEEKCASTRINGLEN,+                T_FROMUTF8,+                T_STR,+                T_LAST_TAG,+};+#if 0+static const char* tag_names[] = {+  "FREE", "IND", "AP", "INT", "DBL", "PTR", "BADDYN", "ARR",+  "S", "K", "I", "B", "C",+  "A", "Y", "SS", "BB", "CC", "P", "R", "O", "U", "Z",+  "K2", "K3", "K4", "CCB",+  "ADD", "SUB", "MUL", "QUOT", "REM", "SUBR", "UQUOT", "UREM", "NEG",+  "AND", "OR", "XOR", "INV", "SHL", "SHR", "ASHR",+  "EQ", "NE", "LT", "LE", "GT", "GE", "ULT", "ULE", "UGT", "UGE",+  "PEQ", "PNULL", "PADD", "PSUB",+  "TOPTR", "TOINT", "TODBL",+#if WANT_FLOAT+  "FADD", "FSUB", "FMUL", "FDIV", "FNEG", "ITOF",+  "FEQ", "FNE", "FLT", "FLE", "FGT", "FGE", "FSHOW", "FREAD",+#endif+  "ARR_ALLOC", "ARR_SIZE", "ARR_READ", "ARR_WRITE", "ARR_EQ",+  "ERROR", "NODEFAULT", "NOMATCH", "SEQ", "EQUAL", "COMPARE", "RNF",+  "TICK",+  "IO_BIND", "IO_THEN", "IO_RETURN",+  "C'BIND",+  "IO_SERIALIZE", "IO_DESERIALIZE",+  "IO_STDIN", "IO_STDOUT", "IO_STDERR", "IO_GETARGREF",+  "IO_PERFORMIO", "IO_GETTIMEMILLI", "IO_PRINT", "IO_CATCH",+  "IO_CCALL", "DYNSYM",+  "NEWCASTRINGLEN", "PEEKCASTRING", "PEEKCASTRINGLEN",+  "FROMUTF8",+  "STR",+  "LAST_TAG",+};+#endif++struct ioarray;+struct ustring;++typedef struct node {+  union {+    struct node *uufun;+    tag_t        uutag;             /* LSB=1 indicates that this is a tag, LSB=0 that this is a T_AP node */+  } ufun;+  union {+    struct node    *uuarg;+    value_t         uuvalue;+    flt_t           uufloatvalue;+    struct ustring *uustring;+    const char     *uucstring;+    void           *uuptr;+    HsFunPtr        uufunptr;+    struct ioarray *uuarray;+  } uarg;+} node;+typedef struct node* NODEPTR;+#define NIL 0+#define HEAPREF(i) &cells[(i)]+#define GETTAG(p) ((p)->ufun.uutag & 1 ? (int)((p)->ufun.uutag >> 1) : T_AP)+#define SETTAG(p,t) do { if (t != T_AP) (p)->ufun.uutag = ((t) << 1) + 1; } while(0)+#define GETVALUE(p) (p)->uarg.uuvalue+#define GETDBLVALUE(p) (p)->uarg.uufloatvalue+#define SETVALUE(p,v) (p)->uarg.uuvalue = v+#define SETDBLVALUE(p,v) (p)->uarg.uufloatvalue = v+#define FUN(p) (p)->ufun.uufun+#define ARG(p) (p)->uarg.uuarg+#define STR(p) (p)->uarg.uustring+#define CSTR(p) (p)->uarg.uucstring+#define PTR(p) (p)->uarg.uuptr+#define FUNPTR(p) (p)->uarg.uufunptr+#define ARR(p) (p)->uarg.uuarray+#define INDIR(p) ARG(p)+#define NODE_SIZE sizeof(node)+#define ALLOC_HEAP(n) do { cells = MALLOC(n * sizeof(node)); memset(cells, 0x55, n * sizeof(node)); } while(0)+#define LABEL(n) ((heapoffs_t)((n) - cells))+node *cells;                 /* All cells */++/*+ * UTF-8 encoded strings+ */+struct ustring {+  size_t size;+  unsigned char string[1];+};++/*+ * Arrays are allocated with MALLOC()/FREE().+ * During GC they are marked, and all elements in the array are+ * recursively marked.+ * At the end of the the mark phase there is a scan of all+ * arrays, and the unmarked ones are freed.+ */+struct ioarray {+  struct ioarray *next;         /* all ioarrays are linked together */+  int permanent;                /* this array should never be GC-ed */+  size_t marked;                /* marked during GC */+  size_t size;                  /* number of elements in the array */+  NODEPTR array[1];             /* actual size may be bigger */+};+struct ioarray *array_root = 0;++counter_t num_reductions = 0;+counter_t num_alloc = 0;+counter_t num_gc = 0;+uintptr_t gc_mark_time = 0;+uintptr_t run_time = 0;++#define MAXSTACKDEPTH 0+#if MAXSTACKDEPTH+stackptr_t max_stack_depth = 0;+counter_t max_c_stack = 0;+counter_t cur_c_stack = 0;+#define MAXSTACK if (stack_ptr > max_stack_depth) max_stack_depth = stack_ptr+#else+#define MAXSTACK+#endif++NODEPTR *topnode;+NODEPTR atptr;++NODEPTR *stack;+stackptr_t stack_ptr = -1;+#if STACKOVL+#define PUSH(x) do { if (stack_ptr >= stack_size-1) ERR("stack overflow"); stack[++stack_ptr] = (x); MAXSTACK; } while(0)+#else  /* STACKOVL */+#define PUSH(x) do {                                                       stack[++stack_ptr] = (x); MAXSTACK; } while(0)+#endif  /* STACKOVL */+#define TOP(n) stack[stack_ptr - (n)]+#define POP(n) stack_ptr -= (n)+#define POPTOP() stack[stack_ptr--]+#define GCCHECK(n) gc_check((n))++heapoffs_t heap_size = HEAP_CELLS; /* number of heap cells */+heapoffs_t heap_start;             /* first location in heap that needs GC */+stackptr_t stack_size = STACK_SIZE;++counter_t num_marked;+counter_t max_num_marked = 0;+counter_t num_free;+counter_t num_arr_alloc;+counter_t num_arr_free;++#define BITS_PER_WORD (sizeof(bits_t) * 8)+bits_t *free_map;             /* 1 bit per node, 0=free, 1=used */+heapoffs_t free_map_nwords;+heapoffs_t next_scan_index;++int want_gc_red = 0;++NORETURN+void+memerr(void)+{+  ERR("Out of memory");+  EXIT(1);+}++/***************************************/++#include "bfile.c"++/***************************************/++struct ioarray*+arr_alloc(size_t sz, NODEPTR e)+{+  struct ioarray *arr = MALLOC(sizeof(struct ioarray) + (sz-1) * sizeof(NODEPTR));+  size_t i;++  if (!arr)+    memerr();+  arr->next = array_root;+  array_root = arr;+  arr->marked = 0;+  arr->permanent = 0;+  arr->size = sz;+  for(i = 0; i < sz; i++)+    arr->array[i] = e;+  //PRINT("arr_alloc(%d, %p) = %p\n", (int)sz, e, arr);+  num_arr_alloc++;+  return arr;+}++/*****************************************************************************/++#if WANT_TICK+struct tick_entry {+  struct ustring *tick_name;+  counter_t tick_count;+} *tick_table = 0;+size_t tick_table_size;+size_t tick_index;++/* Allocate a new tick table entry and return the index. */+size_t+add_tick_table(struct ustring *name)+{+  if (!tick_table) {+    tick_table_size = 100;+    tick_table = malloc(tick_table_size * sizeof(struct tick_entry));+    if (!tick_table)+      memerr();+    tick_index = 0;+  }+  if (tick_index >= tick_table_size) {+    tick_table_size *= 2;+    tick_table = realloc(tick_table, tick_table_size * sizeof(struct tick_entry));+    if (!tick_table)+      memerr();+  }+  tick_table[tick_index].tick_name = name;+  tick_table[tick_index].tick_count = 0;+  return tick_index++;+}++/* Called with the tick index. */+static inline void+dotick(value_t i)+{+  tick_table[i].tick_count++;+}++void+dump_tick_table(FILE *f)+{+  if (!tick_table) {+    fprintf(f, "Tick table empty\n");+    return;+  }+  for (size_t i = 0; i < tick_index; i++) {+    counter_t n = tick_table[i].tick_count;+    if (n)+      fprintf(f, "%-60s %10"PRIcounter"\n", tick_table[i].tick_name->string, n);+  }+}+#endif++/*****************************************************************************/++struct handler {+  jmp_buf         hdl_buf;      /* env storage */+  struct handler *hdl_old;      /* old handler */+  stackptr_t      hdl_stack;    /* old stack pointer */+  NODEPTR         hdl_exn;      /* used temporarily to pass the exception value */+} *cur_handler = 0;++/* Set FREE bit to 0 */+static INLINE void mark_used(NODEPTR n)+{+  heapoffs_t i = LABEL(n);+  if (i < heap_start)+    return;+#if SANITY+  if (i >= free_map_nwords * BITS_PER_WORD) ERR("mark_used");+#endif+  free_map[i / BITS_PER_WORD] &= ~(1ULL << (i % BITS_PER_WORD));+}++/* Set FREE bit to 1, used to undo marking in GC */+static INLINE void mark_unused(NODEPTR n)+{+  heapoffs_t i = LABEL(n);+#if SANITY+  if (i < heap_start)+    ERR("Unmarking invalid heap address.");+  if (i >= free_map_nwords * BITS_PER_WORD) ERR("mark_used");+#endif+  free_map[i / BITS_PER_WORD] |= 1ULL << (i % BITS_PER_WORD);+}++/* Test if FREE bit is 0 */+static INLINE int is_marked_used(NODEPTR n)+{+  heapoffs_t i = LABEL(n);+  if (i < heap_start)+    return 1;+#if SANITY+  if (i >= free_map_nwords * BITS_PER_WORD)+    ERR("is_marked_used");+#endif+  return (free_map[i / BITS_PER_WORD] & (1ULL << (i % BITS_PER_WORD))) == 0;+}++static INLINE void mark_all_free(void)+{+  memset(free_map, ~0, free_map_nwords * sizeof(bits_t));+  next_scan_index = heap_start;+}++#if WANT_ARGS+/* This single element array hold a list of the program arguments. */+struct ioarray *argarray;+#endif  /* WANT_ARGS */++int verbose = 0;++static INLINE NODEPTR+alloc_node(enum node_tag t)+{+  heapoffs_t i = next_scan_index / BITS_PER_WORD;+  int k;                        /* will contain bit pos + 1 */+  heapoffs_t pos;+  NODEPTR n;++#if 1+  /* This can happen if we run out of memory when parsing. */+  if (num_free <= 0)+    ERR("alloc_node");+#endif++  for(;;) {+    heapoffs_t word = free_map[i];+    k = FFS(word);+    if (k)+      break;+    i++;+#if SANITY+    if (i >= free_map_nwords) {+#if 0+      fprintf(stderr, "wordsize=%u, num_free=%u next_scan_index=%u i=%u free_map_nwords=%u\n", (uint)BITS_PER_WORD,+              (uint)num_free, (uint)next_scan_index, (uint)i, (uint)free_map_nwords);+#endif+      ERR("alloc_node: free_map");+    }+#endif+  }+  pos = i * BITS_PER_WORD + k - 1; /* first free node */+  n = HEAPREF(pos);+  mark_used(n);+  next_scan_index = pos;++  SETTAG(n, t);+  COUNT(num_alloc);+  num_free--;+  return n;+}++static INLINE NODEPTR+new_ap(NODEPTR f, NODEPTR a)+{+  NODEPTR n = alloc_node(T_AP);+  FUN(n) = f;+  ARG(n) = a;+  return n;+}++/* Needed during reduction */+NODEPTR intTable[HIGH_INT - LOW_INT];+NODEPTR combFalse, combTrue, combUnit, combCons, combPair;+NODEPTR combCC, combZ, combIOBIND, combIORETURN, combIOCCBIND;+NODEPTR combLT, combEQ, combGT;+NODEPTR combBININT1, combBININT2, combUNINT1;+NODEPTR combBINDBL1, combBINDBL2, combUNDBL1;++/* One node of each kind for primitives, these are never GCd. */+/* We use linear search in this, because almost all lookups+ * are among the combinators.+ */+struct {+  const char *name;+  const enum node_tag tag;+  const enum node_tag flipped;        /* What should (C op) reduce to? defaults to T_FREE */+  NODEPTR node;+} primops[] = {+  /* combinators */+  /* sorted by frequency in a typical program */+  { "B", T_B },+  { "O", T_O },+  { "K", T_K },+  { "C'", T_CC },+  { "C", T_C },+  { "A", T_A },+  { "S'", T_SS },+  { "P", T_P },+  { "R", T_R },+  { "I", T_I },+  { "S", T_S },+  { "U", T_U },+  { "Y", T_Y },+  { "B'", T_BB },+  { "Z", T_Z },+  { "K2", T_K2 },+  { "K3", T_K3 },+  { "K4", T_K4 },+  { "C'B", T_CCB },+/* primops */+  { "+", T_ADD, T_ADD },+  { "-", T_SUB, T_SUBR },+  { "*", T_MUL, T_MUL },+  { "quot", T_QUOT },+  { "rem", T_REM },+  { "uquot", T_UQUOT },+  { "urem", T_UREM },+  { "subtract", T_SUBR, T_SUB },+  { "neg", T_NEG },+  { "and", T_AND, T_AND },+  { "or", T_OR, T_OR },+  { "xor", T_XOR, T_XOR },+  { "inv", T_INV },+  { "shl", T_SHL },+  { "shr", T_SHR },+  { "ashr", T_ASHR },+#if WANT_FLOAT+  { "f+" , T_FADD, T_FADD},+  { "f-" , T_FSUB, T_FSUB},+  { "f*" , T_FMUL, T_FMUL},+  { "f/", T_FDIV},+  { "fneg", T_FNEG},+  { "itof", T_ITOF},+  { "f==", T_FEQ, T_FEQ},+  { "f/=", T_FNE, T_FNE},+  { "f<", T_FLT},+  { "f<=", T_FLE},+  { "f>", T_FGT},+  { "f>=", T_FGE},+  { "fshow", T_FSHOW},+  { "fread", T_FREAD},+#endif  /* WANT_FLOAT */+  { "ord", T_I },+  { "chr", T_I },+  { "==", T_EQ, T_EQ },+  { "/=", T_NE, T_NE },+  { "<", T_LT, T_GT },+  { "u<", T_ULT, T_UGT },+  { "u<=", T_ULE, T_UGE },+  { "u>", T_UGT, T_ULT },+  { "u>=", T_UGE, T_ULE },+  { "<=", T_LE, T_GE },+  { ">", T_GT, T_LT },+  { ">=", T_GE, T_LE },+  { "p==", T_PEQ, T_PEQ },+  { "pnull", T_PNULL },+  { "pcast", T_I },+  { "p+", T_PADD },+  { "p-", T_PSUB },+  { "seq", T_SEQ },+  { "error", T_ERROR },+  { "noDefault", T_NODEFAULT },+  { "noMatch", T_NOMATCH },+  { "equal", T_EQUAL, T_EQUAL },+  { "sequal", T_EQUAL, T_EQUAL },+  { "compare", T_COMPARE },+  { "scmp", T_COMPARE },+  { "icmp", T_COMPARE },+  { "rnf", T_RNF },+  { "fromUTF8", T_FROMUTF8 },+  /* IO primops */+  { "IO.>>=", T_IO_BIND },+  { "IO.>>", T_IO_THEN },+  { "IO.return", T_IO_RETURN },+  { "IO.C'BIND", T_IO_CCBIND },+  { "IO.serialize", T_IO_SERIALIZE },+  { "IO.print", T_IO_PRINT },+  { "IO.deserialize", T_IO_DESERIALIZE },+  { "IO.stdin", T_IO_STDIN },+  { "IO.stdout", T_IO_STDOUT },+  { "IO.stderr", T_IO_STDERR },+  { "IO.getArgRef", T_IO_GETARGREF },+  { "IO.getTimeMilli", T_IO_GETTIMEMILLI },+  { "IO.performIO", T_IO_PERFORMIO },+  { "IO.catch", T_IO_CATCH },+  { "A.alloc", T_ARR_ALLOC },+  { "A.size", T_ARR_SIZE },+  { "A.read", T_ARR_READ },+  { "A.write", T_ARR_WRITE },+  { "A.==", T_ARR_EQ },+  { "dynsym", T_DYNSYM },+  { "newCAStringLen", T_NEWCASTRINGLEN },+  { "peekCAString", T_PEEKCASTRING },+  { "peekCAStringLen", T_PEEKCASTRINGLEN },+  { "toPtr", T_TOPTR },+  { "toInt", T_TOINT },+  { "toDbl", T_TODBL },+};++#if GCRED+enum node_tag flip_ops[T_LAST_TAG];+#endif++void+init_nodes(void)+{+  enum node_tag t;+  size_t j;+  NODEPTR n;++  ALLOC_HEAP(heap_size);+  free_map_nwords = (heap_size + BITS_PER_WORD - 1) / BITS_PER_WORD; /* bytes needed for free map */+  free_map = MALLOC(free_map_nwords * sizeof(bits_t));+  if (!free_map)+    memerr();++  /* Set up permanent nodes */+  heap_start = 0;+#if !FASTTAGS+  for (int j = 0; j < sizeof primops / sizeof primops[0]; j++) {+    NODEPTR n = HEAPREF(heap_start++);+    primops[j].node = n;+    //MARK(n) = MARKED;+    SETTAG(n, primops[j].tag);+    switch (primops[j].tag) {+    case T_K: combFalse = n; break;+    case T_A: combTrue = n; break;+    case T_I: combUnit = n; break;+    case T_O: combCons = n; break;+    case T_P: combPair = n; break;+    case T_CC: combCC = n; break;+    case T_Z: combZ = n; break;+    case T_IO_BIND: combIOBIND = n; break;+    case T_IO_RETURN: combIORETURN = n; break;+    case T_IO_CCBIND: combIOCCBIND = n; break;+    case T_BININT1: combBININT1 = n; break;+    case T_BININT2: combBININT2 = n; break;+    case T_UNINT1: combUNINT1 = n; break;+    case T_BINDBL1: combBINDBL1 = n; break;+    case T_BINDBL2: combBINDBL2 = n; break;+    case T_UNDBL1: combUNDBL1 = n; break;+#if WANT_STDIO+    case T_IO_STDIN:  SETTAG(n, T_PTR); PTR(n) = stdin;  break;+    case T_IO_STDOUT: SETTAG(n, T_PTR); PTR(n) = stdout; break;+    case T_IO_STDERR: SETTAG(n, T_PTR); PTR(n) = stderr; break;+#endif  /* WANT_STDIO */+    default:+      break;+    }+  }+#else+  for(t = T_FREE; t < T_LAST_TAG; t++) {+    NODEPTR n = HEAPREF(heap_start++);+    SETTAG(n, t);+    switch (t) {+    case T_K: combFalse = n; break;+    case T_A: combTrue = n; break;+    case T_I: combUnit = n; break;+    case T_O: combCons = n; break;+    case T_P: combPair = n; break;+    case T_CC: combCC = n; break;+    case T_Z: combZ = n; break;+    case T_IO_BIND: combIOBIND = n; break;+    case T_IO_RETURN: combIORETURN = n; break;+    case T_IO_CCBIND: combIOCCBIND = n; break;+    case T_BININT1: combBININT1 = n; break;+    case T_BININT2: combBININT2 = n; break;+    case T_UNINT1: combUNINT1 = n; break;+    case T_BINDBL1: combBINDBL1 = n; break;+    case T_BINDBL2: combBINDBL2 = n; break;+    case T_UNDBL1: combUNDBL1 = n; break;+#if WANT_STDIO+    case T_IO_STDIN:  SETTAG(n, T_PTR); PTR(n) = stdin;  break;+    case T_IO_STDOUT: SETTAG(n, T_PTR); PTR(n) = stdout; break;+    case T_IO_STDERR: SETTAG(n, T_PTR); PTR(n) = stderr; break;+#endif+    default:+      break;+    }+    for (j = 0; j < sizeof primops / sizeof primops[0];j++) {+      if (primops[j].tag == t) {+        primops[j].node = n;+      }+    }+  }+#endif+#if GCRED+  for (j = 0; j < sizeof primops / sizeof primops[0]; j++) {+    flip_ops[primops[j].tag] = primops[j].flipped;+  }+#endif++  /* The representation of the constructors of+   *  data Ordering = LT | EQ | GT+   * do not have single constructors.+   * But we can make compound one, since they are irreducible.+   */+#define NEWAP(c, f, a) do { n = HEAPREF(heap_start++); SETTAG(n, T_AP); FUN(n) = (f); ARG(n) = (a); (c) = n;} while(0)+  NEWAP(combLT, combZ,     combFalse);  /* Z B */+  NEWAP(combEQ, combFalse, combFalse);  /* K K */+  NEWAP(combGT, combFalse, combTrue);   /* K A */+#undef NEWAP++#if INTTABLE+  /* Allocate permanent Int nodes */+  for (int i = LOW_INT; i < HIGH_INT; i++) {+    NODEPTR n = HEAPREF(heap_start++);+    intTable[i - LOW_INT] = n;+    SETTAG(n, T_INT);+    SETVALUE(n, i);+  }+#endif++  /* Round up heap_start to the next bitword boundary to avoid the permanent nodes. */+  heap_start = (heap_start + BITS_PER_WORD - 1) / BITS_PER_WORD * BITS_PER_WORD;++  mark_all_free();++  num_free = heap_size - heap_start;+}++#if GCRED+int red_a, red_k, red_i, red_int, red_flip;+#endif++//counter_t mark_depth;+//counter_t max_mark_depth = 0;++/* Mark all used nodes reachable from *np, updating *np. */+void+mark(NODEPTR *np)+{+  stackptr_t stk = stack_ptr;+  NODEPTR n;+  NODEPTR *to_push = 0;         /* silence warning by initializing */+#if GCRED+  value_t val;+#endif+  enum node_tag tag;++  //  mark_depth++;+  //  if (mark_depth % 10000 == 0)+  //    PRINT("mark depth %"PRIcounter"\n", mark_depth);+  top:+  n = *np;+  tag = GETTAG(n);+  if (tag == T_IND) {+#if SANITY+    int loop = 0;+    /* Skip indirections, and redirect start pointer */+    while ((tag = GETTAG(n)) == T_IND) {+      //      PRINT("*"); fflush(stdout);+      n = INDIR(n);+      if (loop++ > 10000000) {+        //PRINT("%p %p %p\n", n, INDIR(n), INDIR(INDIR(n)));+        ERR("IND loop");+      }+    }+    //    if (loop)+    //      PRINT("\n");+#else  /* SANITY */+    while ((tag = GETTAG(n)) == T_IND) {+      n = INDIR(n);+    }+#endif  /* SANITY */+    *np = n;+  }+  if (n < cells || n > cells + heap_size)+    ERR("bad n");+  if (is_marked_used(n)) {+    goto fin;+  }+  num_marked++;+  mark_used(n);+  switch (tag) {+#if GCRED+   case T_INT:+#if INTTABLE+    if (LOW_INT <= (val = GETVALUE(n)) && val < HIGH_INT) {+      SETTAG(n, T_IND);+      INDIR(n) = intTable[val - LOW_INT];+      red_int++;+      goto top;+    }+    break;+#endif  /* INTTABLE */+   case T_AP:+      if (want_gc_red) {+        /* This is really only fruitful just after parsing.  It can be removed. */+        if (GETTAG(FUN(n)) == T_AP && GETTAG(FUN(FUN(n))) == T_A) {+          /* Do the A x y --> y reduction */+          NODEPTR y = ARG(n);+          SETTAG(n, T_IND);+          INDIR(n) = y;+          red_a++;+          goto top;+        }+#if 0+        /* This never seems to happen */+        if (GETTAG(FUN(n)) == T_AP && GETTAG(FUN(FUN(n))) == T_K) {+          /* Do the K x y --> x reduction */+          NODEPTR x = ARG(FUN(n));+          SETTAG(n, T_IND);+          INDIR(n) = x;+          red_k++;+          goto top;+        }+#endif  /* 0 */+        if (GETTAG(FUN(n)) == T_I) {+          /* Do the I x --> x reduction */+          NODEPTR x = ARG(n);+          SETTAG(n, T_IND);+          INDIR(n) = x;+          red_i++;+          goto top;+        }+#if 1+        /* This is broken.+         * Probably because it can happen in the middle of the C reduction code.+         */+        if (GETTAG(FUN(n)) == T_C) {+          NODEPTR q = ARG(n);+          enum node_tag tt, tf;+          while ((tt = GETTAG(q)) == T_IND)+            q = INDIR(q);+          if ((tf = flip_ops[tt])) {+            /* Do the C op --> flip_op reduction */+            // PRINT("%s -> %s\n", tag_names[tt], tag_names[tf]);+            SETTAG(n, T_IND);+            INDIR(n) = HEAPREF(tf);+            red_flip++;+            goto fin;+          }+        }+      }+#endif+#else   /* GCRED */+   case T_AP:+#endif  /* GCRED */+    /* Avoid tail recursion */+    np = &FUN(n);+    to_push = &ARG(n);+    break;+   case T_ARR:+    {+      struct ioarray *arr = ARR(n);++      // arr->marked records marking progress through arr.+      if (arr->marked >= arr->size) {+        goto fin;+      }+      // We unmark the array as a whole and push it as long+      // as there's more entries to scan.+      mark_unused(n);+      to_push = np;+      np = &arr->array[arr->marked++];+      break;+    }+   default: goto fin;+  }+  if (!is_marked_used(*to_push)) {+    //  mark_depth++;+    PUSH((NODEPTR)to_push);+  }+  goto top;+ fin:+  //  if (mark_depth > max_mark_depth) {+  //    max_mark_depth = mark_depth;+  //  }+  //  mark_depth--;+  if (stack_ptr > stk) {+    np = (NODEPTR *)POPTOP();+    goto top;+  }+  return;+}++/* Perform a garbage collection:+   - First mark from all roots; roots are on the stack.+*/+void+gc(void)+{+  stackptr_t i;+  struct ioarray **arrp, *arr;++  num_gc++;+  num_marked = 0;+#if WANT_STDIO+  if (verbose > 1)+    PRINT("gc mark\n");+#endif+  gc_mark_time -= GETTIMEMILLI();+  mark_all_free();+  // mark everything reachable from the stack+  for (i = 0; i <= stack_ptr; i++)+    mark(&stack[i]);+  // mark everything reachable from permanent array nodes+  for (arr = array_root; arr; arr = arr->next) {+    if (arr->permanent) {+      for (i = 0; i < arr->size; i++)+        mark(&arr->array[i]);+    }+  }+  gc_mark_time += GETTIMEMILLI();++  if (num_marked > max_num_marked)+    max_num_marked = num_marked;+  num_free = heap_size - heap_start - num_marked;+  if (num_free < heap_size / 50)+    ERR("heap exhausted");++  for (arrp = &array_root; *arrp; ) {+    arr = *arrp;+    if (arr->marked || arr->permanent) {+      arr->marked = 0;+      arrp = &arr->next;+    } else {+      *arrp = arr->next;        /* unlink */+      num_arr_free++;+      FREE(arr);                /* and FREE */+    }+  }++#if WANT_STDIO+  if (verbose > 1) {+    PRINT("gc done, %"PRIcounter" free\n", num_free);+    //PRINT(" GC reductions A=%d, K=%d, I=%d, int=%d flip=%d\n", red_a, red_k, red_i, red_int, red_flip);+  }+#endif  /* !WANT_STDIO */+}++/* Check that there are k nodes available, if not then GC. */+static INLINE void+gc_check(size_t k)+{+  if (k < num_free)+    return;+#if WANT_STDIO+  if (verbose > 1)+    PRINT("gc_check: %d\n", (int)k);+#endif+  gc();+}++static INLINE+value_t+peekWord(value_t *p)+{+  return *p;+}++static INLINE+void+pokeWord(value_t *p, value_t w)+{+  *p = w;+}++static INLINE+void *+peekPtr(void **p)+{+  return *p;+}++static INLINE+void+pokePtr(void **p, void *w)+{+  *p = w;+}++static INLINE+uvalue_t+peek_uint8(uint8_t *p)+{+  return *p;+}++static INLINE+void+poke_uint8(uint8_t *p, value_t w)+{+  *p = (uint8_t)w;+}++static INLINE+uvalue_t+peek_uint16(uint16_t *p)+{+  return *p;+}++static INLINE+void+poke_uint16(uint16_t *p, value_t w)+{+  *p = (uint16_t)w;+}++#if WORD_SIZE >= 32+static INLINE+uvalue_t+peek_uint32(uint32_t *p)+{+  return *p;+}++static INLINE+void+poke_uint32(uint32_t *p, value_t w)+{+  *p = (uint32_t)w;+}+#endif  /* WORD_SIZE >= 32 */++#if WORD_SIZE >= 64+static INLINE+uvalue_t+peek_uint64(uint64_t *p)+{+  return *p;+}++static INLINE+void+poke_uint64(uint64_t *p, value_t w)+{+  *p = (uint64_t)w;+}+#endif  /* WORD_SIZE >= 64 */++static INLINE+value_t+peek_int8(int8_t *p)+{+  return *p;+}++static INLINE+void+poke_int8(int8_t *p, value_t w)+{+  *p = (int8_t)w;+}++static INLINE+value_t+peek_int16(int16_t *p)+{+  return *p;+}++static INLINE+void+poke_int16(int16_t *p, value_t w)+{+  *p = (int16_t)w;+}++#if WORD_SIZE >= 32+static INLINE+value_t+peek_int32(int32_t *p)+{+  return *p;+}++static INLINE+void+poke_int32(int32_t *p, value_t w)+{+  *p = (int32_t)w;+}+#endif  /* WORD_SIZE >= 32 */++#if WORD_SIZE >= 64+static INLINE+value_t+peek_int64(int64_t *p)+{+  return *p;+}++static INLINE+void+poke_int64(int64_t *p, value_t w)+{+  *p = (int64_t)w;+}+#endif  /* WORD_SIZE >= 64 */++static INLINE+value_t+peek_int(int *p)+{+  return *p;+}++static INLINE+void+poke_int(int *p, value_t w)+{+  *p = (int)w;+}++static INLINE+value_t+peek_uint(unsigned int *p)+{+  return *p;+}++static INLINE+void+poke_uint(unsigned int *p, value_t w)+{+  *p = (unsigned int)w;+}++static INLINE+value_t+peek_short(short *p)+{+  return *p;+}++static INLINE+void+poke_short(short *p, value_t w)+{+  *p = (short)w;+}++static INLINE+value_t+peek_ushort(unsigned short *p)+{+  return *p;+}++static INLINE+void+poke_ushort(unsigned short *p, value_t w)+{+  *p = (unsigned short)w;+}++static INLINE+value_t+peek_long(long *p)+{+  return *p;+}++static INLINE+void+poke_long(long *p, value_t w)+{+  *p = (long)w;+}++static INLINE+value_t+peek_ulong(unsigned long *p)+{+  return *p;+}++static INLINE+void+poke_ulong(unsigned long *p, value_t w)+{+  *p = (unsigned long)w;+}++static INLINE+value_t+peek_llong(long long *p)+{+  return *p;+}++static INLINE+void+poke_llong(long long *p, value_t w)+{+  *p = (long long)w;+}++static INLINE+value_t+peek_ullong(unsigned long long *p)+{+  return *p;+}++static INLINE+void+poke_ullong(unsigned long long *p, value_t w)+{+  *p = (unsigned long long)w;+}++#if WANT_FLOAT+static INLINE+flt_t+peek_flt(flt_t *p)+{+  return *p;+}++static INLINE+void+poke_flt(flt_t *p, flt_t w)+{+  *p = w;+}+#endif  /* WANT_FLOAT */++/* Look up an FFI function by name */+value_t+lookupFFIname(const char *name)+{+  size_t i;++  for(i = 0; ffi_table[i].ffi_name; i++)+    if (strcmp(ffi_table[i].ffi_name, name) == 0)+      return (value_t)i;+  if (xffi_table) {+    for(i = 0; xffi_table[i].ffi_name; i++)+      if (strcmp(xffi_table[i].ffi_name, name) == 0)+        return (value_t)(i + num_ffi);+  }+  return -1;+}++NODEPTR+ffiNode(const char *buf)+{+  NODEPTR r;+  value_t i = lookupFFIname(buf);+  char *fun;++  if (i < 0) {+    /* lookup failed, generate a node that will dynamically generate an error */+    r = alloc_node(T_BADDYN);+    fun = MALLOC(strlen(buf) + 1);+    strcpy(fun, buf);+    CSTR(r) = fun;+  } else {+    r = alloc_node(T_IO_CCALL);+    SETVALUE(r, i);+  }+  return r;+}++/* If the next input character is c, then consume it, else leave it alone. */+int+gobble(BFILE *f, int c)+{+  int d = getb(f);+  if (c == d) {+    return 1;+  } else {+    ungetb(d, f);+    return 0;+  }+}++/* Get a non-terminating character.  ' ' and '\n' terminates a token. */+int+getNT(BFILE *f)+{+  int c;+  +  c = getb(f);+  if (c == ' ' || c == '\n') {+    return 0;+  } else {+    return c;+  }+}++value_t+parse_int(BFILE *f)+{+  // Parse using uvalue_t, which wraps on overflow.+  uvalue_t i = 0;+  int neg = 1;+  int c = getb(f);+  if (c == '-') {+    neg = -1;+    c = getb(f);+  }+  for(;;) {+    i = i * 10 + (c - '0');+    c = getb(f);+    if (c < '0' || c > '9') {+      ungetb(c, f);+      break;+    }+  }+  // Multiply by neg without triggering undefined behavior.+  return (value_t)(((uvalue_t)neg) * i);+}++#if WANT_FLOAT+flt_t+parse_double(BFILE *f)+{+  // apparently longest float, when rendered, takes up 24 characters. We add one more for a potential+  // minus sign, and another one for the final null terminator.+  // https://stackoverflow.com/questions/1701055/what-is-the-maximum-length-in-chars-needed-to-represent-any-double-value+  char buf[26];+  for(int j = 0; (buf[j] = getNT(f)); j++)+    ;++  return strtod(buf, NULL);+}+#endif++NODEPTR+mkStrNode(struct ustring *str)+{+  NODEPTR n = alloc_node(T_STR);+  STR(n) = str;+  return n;+}++NODEPTR mkInt(value_t i);+NODEPTR mkFlt(flt_t d);+NODEPTR mkPtr(void* p);++/* Table of labelled nodes for sharing during parsing. */+struct shared_entry {+  heapoffs_t label;+  NODEPTR node;                 /* NIL indicates unused */+} *shared_table;+heapoffs_t shared_table_size;++/* Look for the label in the table.+ * If it's found, return the node.+ * If not found, return the first empty entry.+*/+NODEPTR *+find_label(heapoffs_t label)+{+  int i;++  for(i = (int)label; ; i++) {+    i %= shared_table_size;+    if (shared_table[i].node == NIL) {+      /* The slot is empty, so claim and return it */+      shared_table[i].label = label;+      return &shared_table[i].node;+    } else if (shared_table[i].label == label) {+      /* Found the label, so return it. */+      return &shared_table[i].node;+    }+    /* Not empty and not found, try next. */+  }+}++struct ustring *+parse_string(BFILE *f)+{+  size_t sz = 20;+  struct ustring *buffer = MALLOC(sizeof(struct ustring) + sz);+  size_t i;+  int c;++  if (!buffer)+    memerr();+  for(i = 0;;) {+    c = getb(f);+    if (c == '"')+      break;+    if (i >= sz) {+      sz *= 2;+      buffer = realloc(buffer, sizeof(struct ustring) + sz);+      if (!buffer)+        memerr();+    }+    if (c == '\\') {+      buffer->string[i++] = (char)parse_int(f);+      if (!gobble(f, '&'))+        ERR("parse string");+    } else {+      buffer->string[i++] = c;+    }+  }+  buffer->size = i;+  buffer->string[i++] = 0;+  return realloc(buffer, sizeof(struct ustring) + i);+}++NODEPTR+parse(BFILE *f)+{+  stackptr_t stk = stack_ptr;+  NODEPTR r, x, y;+  NODEPTR *nodep;+  heapoffs_t l;+  value_t i;+  int c;+  size_t j;+  char buf[80];                 /* store names of primitives. */++  for(;;) {+    c = getb(f);+    if (c < 0) ERR("parse EOF");+    switch (c) {+    case ' ':+    case '\n':+      continue;+    }+    GCCHECK(1);+    switch(c) {+    case '@':+      x = TOP(0);+      y = TOP(1);+      POP(2);+      PUSH(new_ap(y, x));+      break;+    case '}':+      x = TOP(0);+      POP(1);+      if (stack_ptr != stk)+        ERR("parse: stack");+      return x;+    case '&':+#if WANT_FLOAT+      r = mkFlt(parse_double(f));+#else+      while (getNT(f))          /* skip the float constant */+        ;+      r = alloc_node(T_DBL);+      SETVALUE(r, 0);+#endif+      PUSH(r);+      break;+    case '#':+      i = parse_int(f);+      r = mkInt(i);+      PUSH(r);+      break;+    case '[':+      {+        size_t sz;+        struct ioarray *arr;+        size_t i;+        sz = (size_t)parse_int(f);+        if (!gobble(f, ']')) ERR("parse arr 1");+        arr = arr_alloc(sz, NIL);+        for (i = 0; i < sz; i++) {+          arr->array[i] = TOP(sz - i - 1);+        }+        r = alloc_node(T_ARR);+        ARR(r) = arr;+        POP(sz);+        PUSH(r);+        break;+      }+    case '_' :+      /* Reference to a shared value: _label */+      l = parse_int(f);  /* The label */+      nodep = find_label(l);+      if (*nodep == NIL) {+        /* Not yet defined, so make it an indirection */+        *nodep = alloc_node(T_IND);+        INDIR(*nodep) = NIL;+      }+      PUSH(*nodep);+      break;+    case ':' :+      /* Define a shared expression: :label e */+      l = parse_int(f);  /* The label */+      if (!gobble(f, ' ')) ERR("parse ' '");+      nodep = find_label(l);+      x = TOP(0);+      if (*nodep == NIL) {+        /* not referenced yet, so add a direct reference */+        *nodep = x;+      } else {+        /* Sanity check */+        if (INDIR(*nodep) != NIL) ERR("shared != NIL");+        INDIR(*nodep) = x;+      }+      break;+    case '"' :+      /* Everything up to the next " is a string.+       * Special characters are encoded as \NNN&,+       * where NNN is the decimal value of the character */+      PUSH(mkStrNode(parse_string(f)));+      break;+#if WANT_TICK+    case '!':+      if (!gobble(f, '"'))+        ERR("parse !");+      i = add_tick_table(parse_string(f));+      r = alloc_node(T_TICK);+      SETVALUE(r, (value_t)i);+      PUSH(r);+      break;+#endif+    case '^':+      /* An FFI name */+      for (j = 0; (buf[j] = getNT(f)); j++)+        ;+      r = ffiNode(buf);+      PUSH(r);+      break;+    default:+      buf[0] = c;+      /* A primitive, keep getting char's until end */+      for (j = 1; (buf[j] = getNT(f)); j++)+        ;+      /* Look up the primop and use the preallocated node. */+      for (j = 0; j < sizeof primops / sizeof primops[0]; j++) {+        if (strcmp(primops[j].name, buf) == 0) {+          r = primops[j].node;+          goto found;+        }+      }+      ERR1("no primop %s", buf);+    found:+      PUSH(r);+      break;+    }+  }+}++void+checkversion(BFILE *f)+{+  char *p = VERSION;+  int c;++  while ((c = *p++)) {+    if (c != getb(f))+      ERR("version mismatch");+  }+  (void)gobble(f, '\r');                 /* allow extra CR */+}++/* Parse a file */+NODEPTR+parse_top(BFILE *f)+{+  heapoffs_t numLabels, i;+  NODEPTR n;+  checkversion(f);+  numLabels = parse_int(f);+  if (!gobble(f, '\n'))+    ERR("size parse");+  gobble(f, '\r');                 /* allow extra CR */+  shared_table_size = 3 * numLabels; /* sparsely populated hashtable */+  shared_table = MALLOC(shared_table_size * sizeof(struct shared_entry));+  if (!shared_table)+    memerr();+  for(i = 0; i < shared_table_size; i++)+    shared_table[i].node = NIL;+  n = parse(f);+  FREE(shared_table);+  return n;+}++#if WANT_STDIO+NODEPTR+parse_file(const char *fn, size_t *psize)+{+  FILE *f = fopen(fn, "r");+  if (!f)+    ERR1("file not found %s", fn);++  /* And parse it */+  BFILE *p = add_FILE(f);+  NODEPTR n = parse_top(p);+  *psize = ftell(f);+  closeb(p);+  return n;+}+#endif  /* WANT_STDIO */++counter_t num_shared;++/* Two bits per node: marked, shared+ * 0, 0   -- not visited+ * 1, 0   -- visited once+ * 1, 1   -- visited more than once+ * 0, 1   -- printed+ */+bits_t *marked_bits;+bits_t *shared_bits;+static INLINE void set_bit(bits_t *bits, NODEPTR n)+{+  heapoffs_t i = LABEL(n);+  bits[i / BITS_PER_WORD] |= (1ULL << (i % BITS_PER_WORD));+}+#if WANT_STDIO+static INLINE void clear_bit(bits_t *bits, NODEPTR n)+{+  heapoffs_t i = LABEL(n);+  bits[i / BITS_PER_WORD] &= ~(1ULL << (i % BITS_PER_WORD));+}+#endif+static INLINE int test_bit(bits_t *bits, NODEPTR n)+{+  heapoffs_t i = LABEL(n);+  return (bits[i / BITS_PER_WORD] & (1ULL << (i % BITS_PER_WORD))) != 0;+}++size_t strNodes(size_t len);+NODEPTR mkStringC(const char *str);++#if WANT_STDIO+void+convdbl(char *str, flt_t x)+{+  /* Using 16 decimals will lose some precision.+   * 17 would keep the precision, but it frequently looks very ugly.+   */+  (void)snprintf(str, 25, "%.16g", x);+  if (strcmp(str, "nan") != 0 && strcmp(str, "-nan") != 0 &&+      strcmp(str, "inf") != 0 && strcmp(str, "-inf") != 0 &&+      !strchr(str, '.') && !strchr(str, 'e') && !strchr(str, 'E')) {+    /* There is no decimal point and no exponent, so add a decimal point */+    strcat(str, ".0");+  }+}++NODEPTR+dblToString(flt_t x)+{+  char str[30];+  convdbl(str, x);+  // turn it into a mhs string+  GCCHECK(strNodes(strlen(str)));+  return mkStringC(str);+}++void+putdblb(flt_t x, BFILE *p)+{+  char str[30];+  convdbl(str, x);+  putsb(str, p);+}++void printrec(BFILE *f, NODEPTR n, int prefix);++/* Mark all reachable nodes, when a marked node is reached, mark it as shared. */+void+find_sharing(NODEPTR n)+{+ top:+  while (GETTAG(n) == T_IND) {+    n = INDIR(n);+  }+  if (n < cells || n >= cells + heap_size) abort();+  //PRINT("find_sharing %p %llu ", n, LABEL(n));+  if (GETTAG(n) == T_AP) {+    if (test_bit(shared_bits, n)) {+      /* Alread marked as shared */+      //PRINT("shared\n");+      ;+    } else if (test_bit(marked_bits, n)) {+      /* Already marked, so now mark as shared */+      //PRINT("marked\n");+      set_bit(shared_bits, n);+      num_shared++;+    } else {+      /* Mark as visited, and recurse */+      //PRINT("unmarked\n");+      set_bit(marked_bits, n);+      find_sharing(FUN(n));+      n = ARG(n);+      goto top;+    }+  } else {+    /* Not an application, so do nothing */+    //PRINT("not T_AP\n");+    ;+  }+}++void+print_string(BFILE *f, struct ustring *p)+{+  putb('"', f);+  for (size_t i = 0; i < p->size; i++) {+    int c = p->string[i];+    if (c == '"' || c == '\\' || c < ' ' || c > '~') {+      putb('\\', f);+      putdecb(c, f);+      putb('&', f);+    } else {+      putb(c, f);+    }+  }+  putb('"', f);+}++/* Recursively print an expression.+   This assumes that the shared nodes has been marked as such.+*/+void+printrec(BFILE *f, NODEPTR n, int prefix)+{+  int share = 0;++  while (GETTAG(n) == T_IND) {+    //putb('*', f);+    n = INDIR(n);+  }++  if (test_bit(shared_bits, n)) {+    /* The node is shared */+    if (test_bit(marked_bits, n)) {+      /* Not yet printed, so emit a label */+      if (prefix) {+        putb(':', f);+        putdecb((value_t)LABEL(n), f);+        putb(' ', f);+      } else {+        share = 1;+      }+      clear_bit(marked_bits, n);  /* mark as printed */+    } else {+      /* This node has already been printed, so just use a reference. */+      putb('_', f);+      putdecb((value_t)LABEL(n), f);+      if (!prefix)+        putb(' ', f);+      return;+    }+  }++  //if (n == atptr) putb('@', f);+  switch (GETTAG(n)) {+  case T_AP:+    if (prefix) {+      putb('(', f);+      printrec(f, FUN(n), prefix);+      putb(' ', f);+      printrec(f, ARG(n), prefix);+      putb(')', f);+    } else {+      printrec(f, FUN(n), prefix);+      printrec(f, ARG(n), prefix);+      putb('@', f);+    }+    break;+  case T_INT: putb('#', f); putdecb(GETVALUE(n), f); break;+  case T_DBL: putb('&', f); putdblb(GETDBLVALUE(n), f); break;+  case T_ARR:+    if (prefix) {+      /* Arrays serialize as '[sz] e_1 ... e_sz' */+      putb('[', f);+      putdecb((value_t)ARR(n)->size, f);+      putb(']', f);+      for(size_t i = 0; i < ARR(n)->size; i++) {+        putb(' ', f);+        printrec(f, ARR(n)->array[i], prefix);+      }+    } else {+      /* Arrays serialize as 'e_1 ... e_sz [sz]' */+      for(size_t i = 0; i < ARR(n)->size; i++) {+        printrec(f, ARR(n)->array[i], prefix);+      }+      putb('[', f);+      putdecb((value_t)ARR(n)->size, f);+      putb(']', f);+    }+    break;+  case T_PTR:+    if (PTR(n) == stdin)+      putsb("IO.stdin", f);+    else if (PTR(n) == stdout)+      putsb("IO.stdout", f);+    else if (PTR(n) == stderr)+      putsb("IO.stderr", f);+    else+      ERR("Cannot serialize pointers");+    break;+  case T_FUNPTR:+      ERR("Cannot serialize function pointers");+    break;+  case T_STR:+    print_string(f, STR(n));+    break;+  case T_IO_CCALL: putb('^', f); putsb(FFI_IX(GETVALUE(n)).ffi_name, f); break;+  case T_BADDYN: putb('^', f); putsb(CSTR(n), f); break;+  case T_S: putsb("S", f); break;+  case T_K: putsb("K", f); break;+  case T_I: putsb("I", f); break;+  case T_C: putsb("C", f); break;+  case T_B: putsb("B", f); break;+  case T_A: putsb("A", f); break;+  case T_U: putsb("U", f); break;+  case T_Y: putsb("Y", f); break;+  case T_P: putsb("P", f); break;+  case T_R: putsb("R", f); break;+  case T_O: putsb("O", f); break;+  case T_SS: putsb("S'", f); break;+  case T_BB: putsb("B'", f); break;+  case T_Z: putsb("Z", f); break;+  case T_K2: putsb("K2", f); break;+  case T_K3: putsb("K3", f); break;+  case T_K4: putsb("K4", f); break;+  case T_CC: putsb("C'", f); break;+  case T_CCB: putsb("C'B", f); break;+  case T_ADD: putsb("+", f); break;+  case T_SUB: putsb("-", f); break;+  case T_MUL: putsb("*", f); break;+  case T_QUOT: putsb("quot", f); break;+  case T_REM: putsb("rem", f); break;+  case T_UQUOT: putsb("uquot", f); break;+  case T_UREM: putsb("urem", f); break;+  case T_SUBR: putsb("subtract", f); break;+  case T_NEG: putsb("neg", f); break;+  case T_AND: putsb("and", f); break;+  case T_OR: putsb("or", f); break;+  case T_XOR: putsb("xor", f); break;+  case T_INV: putsb("inv", f); break;+  case T_SHL: putsb("shl", f); break;+  case T_SHR: putsb("shr", f); break;+  case T_ASHR: putsb("ashr", f); break;+#if WANT_FLOAT+  case T_FADD: putsb("f+", f); break;+  case T_FSUB: putsb("f-", f); break;+  case T_FMUL: putsb("f*", f); break;+  case T_FDIV: putsb("f/", f); break;+  case T_FNEG: putsb("fneg", f); break;+  case T_ITOF: putsb("itof", f); break;+  case T_FEQ: putsb("f==", f); break;+  case T_FNE: putsb("f/=", f); break;+  case T_FLT: putsb("f<", f); break;+  case T_FLE: putsb("f<=", f); break;+  case T_FGT: putsb("f>", f); break;+  case T_FGE: putsb("f>=", f); break;+  case T_FSHOW: putsb("fshow", f); break;+  case T_FREAD: putsb("fread", f); break;+#endif+  case T_EQ: putsb("==", f); break;+  case T_NE: putsb("/=", f); break;+  case T_LT: putsb("<", f); break;+  case T_LE: putsb("<=", f); break;+  case T_GT: putsb(">", f); break;+  case T_GE: putsb(">=", f); break;+  case T_ULT: putsb("u<", f); break;+  case T_ULE: putsb("u<=", f); break;+  case T_UGT: putsb("u>", f); break;+  case T_UGE: putsb("u>=", f); break;+  case T_PEQ: putsb("p==", f); break;+  case T_PNULL: putsb("pnull", f); break;+  case T_PADD: putsb("p+", f); break;+  case T_PSUB: putsb("p-", f); break;+  case T_ERROR: putsb("error", f); break;+  case T_NODEFAULT: putsb("noDefault", f); break;+  case T_NOMATCH: putsb("noMatch", f); break;+  case T_EQUAL: putsb("equal", f); break;+  case T_COMPARE: putsb("compare", f); break;+  case T_RNF: putsb("rnf", f); break;+  case T_SEQ: putsb("seq", f); break;+  case T_IO_BIND: putsb("IO.>>=", f); break;+  case T_IO_THEN: putsb("IO.>>", f); break;+  case T_IO_RETURN: putsb("IO.return", f); break;+  case T_IO_CCBIND: putsb("IO.C'BIND", f); break;+  case T_IO_SERIALIZE: putsb("IO.serialize", f); break;+  case T_IO_PRINT: putsb("IO.print", f); break;+  case T_IO_DESERIALIZE: putsb("IO.deserialize", f); break;+  case T_IO_GETARGREF: putsb("IO.getArgRef", f); break;+  case T_IO_GETTIMEMILLI: putsb("IO.getTimeMilli", f); break;+  case T_IO_PERFORMIO: putsb("IO.performIO", f); break;+  case T_IO_CATCH: putsb("IO.catch", f); break;+  case T_ARR_ALLOC: putsb("A.alloc", f); break;+  case T_ARR_SIZE: putsb("A.size", f); break;+  case T_ARR_READ: putsb("A.read", f); break;+  case T_ARR_WRITE: putsb("A.write", f); break;+  case T_ARR_EQ: putsb("A.==", f); break;+  case T_DYNSYM: putsb("dynsym", f); break;+  case T_NEWCASTRINGLEN: putsb("newCAStringLen", f); break;+  case T_PEEKCASTRING: putsb("peekCAString", f); break;+  case T_PEEKCASTRINGLEN: putsb("peekCAStringLen", f); break;+  case T_TOINT: putsb("toInt", f); break;+  case T_TOPTR: putsb("toPtr", f); break;+  case T_TODBL: putsb("toDbl", f); break;+  case T_FROMUTF8: putsb("fromUTF8", f); break;+  case T_TICK:+    putb('!', f);+    print_string(f, tick_table[GETVALUE(n)].tick_name);+    break;+  default: ERR("print tag");+  }+  if (!prefix) {+    putb(' ', f);+    if (share) {+      putb(':', f);+      putdecb((value_t)LABEL(n), f);+      putb(' ', f);+    }+  }+}++/* Serialize a graph to file. */+void+printb(BFILE *f, NODEPTR n, int header)+{+  num_shared = 0;+  marked_bits = calloc(free_map_nwords, sizeof(bits_t));+  if (!marked_bits)+    memerr();+  shared_bits = calloc(free_map_nwords, sizeof(bits_t));+  if (!shared_bits)+    memerr();+  find_sharing(n);+  if (header) {+    putsb(VERSION, f);+    putdecb(num_shared, f);+    putb('\n', f);+  }+  printrec(f, n, !header);+  if (header) {+    putb('}', f);+  }+  FREE(marked_bits);+  FREE(shared_bits);+}++/* Show a graph. */+void+pp(FILE *f, NODEPTR n)+{+  BFILE *bf = add_FILE(f);+  printb(bf, n, 0);+  putb('\n', bf);+  freeb_file(bf);+}++void+ppmsg(const char *msg, NODEPTR n)+{+#if 0+  printf("%s", msg);+  pp(stdout, n);+  printf("\n");+#endif+}++void+dump(const char *msg, NODEPTR at)+{+#if 0+  atptr = at;+  printf("dump: %s\n", msg);+  pp(stdout, *topnode);+#endif+}++#else  /* WANT_STDIO */+NODEPTR+dblToString(flt_t x)+{+  return mkStringC("no dblToString");+}++#endif  /* WANT_STDIO */++NODEPTR+mkInt(value_t i)+{+#if INTTABLE+  if (LOW_INT <= i && i < HIGH_INT) {+    return intTable[i - LOW_INT];+  }+#endif++  NODEPTR n;+  n = alloc_node(T_INT);+  SETVALUE(n, i);+  return n;+}++NODEPTR+mkFlt(flt_t d)+{+  NODEPTR n;+  n = alloc_node(T_DBL);+  SETDBLVALUE(n, d);+  return n;+}++NODEPTR+mkPtr(void* p)+{+  NODEPTR n;+  n = alloc_node(T_PTR);+  PTR(n) = p;+  return n;+}++NODEPTR+mkFunPtr(void (*p)(void))+{+  NODEPTR n;+  n = alloc_node(T_FUNPTR);+  FUNPTR(n) = p;+  return n;+}++static INLINE NODEPTR+mkNil(void)+{+  return combFalse;+}++static INLINE NODEPTR+mkCons(NODEPTR x, NODEPTR xs)+{+  return new_ap(new_ap(combCons, x), xs);+}++size_t+strNodes(size_t len)+{+  /* Each character will need a CHAR node and a CONS node, a CONS uses 2 T_AP nodes */+  len *= (1 + 2);+  /* And each string will need a NIL */+  len += 1;+  return len;+}++/* Turn a C string into a combinator string */+NODEPTR+mkString(const char *astr, size_t len)+{+  NODEPTR n, nc;+  size_t i;+  const unsigned char *str = (unsigned char*)astr; /* no sign bits, please */++  n = mkNil();+  for(i = len; i > 0; i--) {+    nc = mkInt(str[i-1]);+    n = mkCons(nc, n);+  }+  return n;+}++NODEPTR+mkStringC(const char *str)+{+  return mkString(str, strlen(str));+}++NODEPTR+mkStringU(struct ustring *str)+{+  BFILE *ubuf = add_utf8(openb_buf(str->string, str->size));+  NODEPTR n, *np, nc;++  n = mkNil();+  np = &n;+  for(;;) {+    int c = getb(ubuf);+    if (c < 0)+      break;+    nc = mkInt(c);+    *np = mkCons(nc, *np);+    np = &ARG(*np);+  }+  closeb(ubuf);+  return n;+}++NODEPTR evali(NODEPTR n);++/* Follow indirections */+static INLINE NODEPTR+indir(NODEPTR *np)+{+  NODEPTR n = *np;+  while (GETTAG(n) == T_IND)+    n = INDIR(n);+  *np = n;+  return n;+}++/* Evaluate to an INT */+static INLINE value_t+evalint(NODEPTR n)+{+  n = evali(n);+#if SANITY+  if (GETTAG(n) != T_INT) {+    ERR1("evalint, bad tag %d", GETTAG(n));+  }+#endif+  return GETVALUE(n);+}++/* Evaluate to a Flt_T */+static INLINE flt_t+evaldbl(NODEPTR n)+{+  n = evali(n);+#if SANITY+  if (GETTAG(n) != T_DBL) {+    ERR1("evaldbl, bad tag %d", GETTAG(n));+  }+#endif+  return GETDBLVALUE(n);+}++/* Evaluate to a T_PTR */+void *+evalptr(NODEPTR n)+{+  n = evali(n);+#if SANITY+  if (GETTAG(n) != T_PTR) {+    ERR1("evalptr, bad tag %d", GETTAG(n));+  }+#endif+  return PTR(n);+}++/* Evaluate to a T_PTR */+void *+evalfunptr(NODEPTR n)+{+  n = evali(n);+#if SANITY+  if (GETTAG(n) != T_FUNPTR) {+    ERR1("evalfunptr, bad tag %d", GETTAG(n));+  }+#endif+  return FUNPTR(n);+}++/* Evaluate a string, returns a newly allocated buffer. */+/* XXX this is cheating, should use continuations */+/* XXX the malloc()ed string is leaked if we yield in here. */+char *+evalstring(NODEPTR n, value_t *lenp)+{+  size_t sz = 100;+  char *name = MALLOC(sz);+  size_t offs;+  uvalue_t c;+  NODEPTR x;++  if (!name)+    memerr();+  for (offs = 0;;) {+    if (offs >= sz - 4) {+      sz *= 2;+      name = realloc(name, sz);+      if (!name)+        memerr();+    }+    n = evali(n);+    if (GETTAG(n) == T_K)            /* Nil */+      break;+    else if (GETTAG(n) == T_AP && GETTAG(x = indir(&FUN(n))) == T_AP && GETTAG(indir(&FUN(x))) == T_O) { /* Cons */+      PUSH(n);                  /* protect from GC */+      c = (uvalue_t)evalint(ARG(x));+      n = POPTOP();+      /* XXX Encode as UTF8 */+      if (c < 0x80) {+        name[offs++] = (char)c;+      } else if (c < 0x800) {+        name[offs++] = ((c >> 6 )       ) | 0xc0;+        name[offs++] = ((c      ) & 0x3f) | 0x80;+      } else if (c < 0x10000) {+        name[offs++] = ((c >> 12)       ) | 0xe0;+        name[offs++] = ((c >> 6 ) & 0x3f) | 0x80;+        name[offs++] = ((c      ) & 0x3f) | 0x80;+      } else if (c < 0x110000) {+        name[offs++] = ((c >> 18)       ) | 0xf0;+        name[offs++] = ((c >> 12) & 0x3f) | 0x80;+        name[offs++] = ((c >> 6 ) & 0x3f) | 0x80;+        name[offs++] = ((c      ) & 0x3f) | 0x80;+      } else {+	ERR("invalid char");+      }+      n = ARG(n);+    } else {+      ERR("evalstring not Nil/Cons");+    }+  }+  name[offs] = 0;+  if (lenp)+    *lenp = (value_t)offs;+  return name;+}++/* Compares anything, but really only works well on strings.+ * if p < q  return -1+ * if p > q  return 1+ * if p == q return 0+ *+ * As we compare we update the argument pointers with any+ * progress we make, in case we are interruped and resume from the top.+ *+ * XXX This is a rather dodgy comparison, since we are comparing+ * functions, and the same data type could plausibly get different+ * functions in the Scott encoding.+ * But we only use it for lists, and it seems to work fine.+ */+int+compare(NODEPTR cmp)+{+  stackptr_t stk = stack_ptr;+#define CRET(x) do { stack_ptr = stk; return (x); } while(0)+  value_t x, y;+  flt_t xd, yd;+  void *f, *g;+  void (*ff)(void), (*fg)(void);+  NODEPTR p, q;+  NODEPTR *ap, *aq;+  enum node_tag ptag, qtag;++  /* Since FUN(cmp) can be shared, allocate a copy for it. */+  GCCHECK(1);+  FUN(cmp) = new_ap(FUN(FUN(cmp)), ARG(FUN(cmp)));+  aq = &ARG(cmp);+  ap = &ARG(FUN(cmp));++  PUSH(*ap);+  PUSH(*aq);+  for(;;) {+    if (stk == stack_ptr)+      return 0;+    q = evali(TOP(0));+    p = evali(TOP(1));+    POP(2);+    if (stk == stack_ptr) {+      /* We have made some progress, save this in the compare node. */+      *ap = p;+      *aq = q;+    }++    ptag = GETTAG(p);+    qtag = GETTAG(q);+    if (ptag != qtag) {+      /* Hack to make Nil < Cons */+      if (ptag == T_K && qtag == T_AP)+        CRET(-1);+      if (ptag == T_AP && qtag == T_K)+        CRET(1);+      CRET(ptag < qtag ? -1 : 1);+    }+    switch (ptag) {+    case T_AP:+      PUSH(ARG(p));             /* compare arg part later */+      PUSH(ARG(q));+      PUSH(FUN(p));             /* compare fun part now */+      PUSH(FUN(q));+      break;+    case T_INT:+    case T_IO_CCALL:+      x = GETVALUE(p);+      y = GETVALUE(q);+      if (x < y)+        CRET(-1);+      if (x > y)+        CRET(1);+      break;+    case T_DBL:+      xd = GETDBLVALUE(p);+      yd = GETDBLVALUE(q);+      if (xd < yd)+        CRET(-1);+      if (xd > yd)+        CRET(1);+      break;+    case T_PTR:+      f = PTR(p);+      g = PTR(q);+      if (f < g)+        CRET(-1);+      if (f > g)+        CRET(1);+      break;+    case T_FUNPTR:+      ff = FUNPTR(p);+      fg = FUNPTR(q);+      if ((intptr_t)ff < (intptr_t)fg)+        CRET(-1);+      if ((intptr_t)ff > (intptr_t)fg)+        CRET(1);+      break;+    case T_ARR:+      if (ARR(p) < ARR(q))+        CRET(-1);+      if (ARR(p) > ARR(q))+        CRET(1);+      break;+    default:+      break;+    }+  }+#undef CRET+}++bits_t *rnf_bits;++void+rnf_rec(NODEPTR n)+{+ top:+  if (test_bit(rnf_bits, n))+    return;+  set_bit(rnf_bits, n);+  n = evali(n);+  if (GETTAG(n) == T_AP) {+    PUSH(ARG(n));               /* protect from GC */+    rnf_rec(FUN(n));+    n = POPTOP();+    goto top;+  }+}++/* This is a yucky hack */+int doing_rnf = 0;++void+rnf(value_t noerr, NODEPTR n)+{+  /* Mark visited nodes to avoid getting stuck in loops. */+  rnf_bits = calloc(free_map_nwords, sizeof(bits_t));+  if (!rnf_bits)+    memerr();+  if (doing_rnf)+    ERR("recursive rnf()");+  doing_rnf = (int)noerr;+  rnf_rec(n);+  doing_rnf = 0;+  FREE(rnf_bits);+}++void execio(NODEPTR *);++/* Evaluate a node, returns when the node is in WHNF. */+NODEPTR+evali(NODEPTR an)+{+  NODEPTR n = an;+  stackptr_t stk = stack_ptr;+  NODEPTR x, y, z, w;+  value_t xi, yi, r;+  void *xp, *yp;+#if WANT_FLOAT+  flt_t xd, rd;+#endif  /* WANT_FLOAT */+  char *msg;+#if FASTTAGS+  heapoffs_t l;+#endif+  enum node_tag tag;+  struct ioarray *arr;+  int sz;+  char *res;++#if MAXSTACKDEPTH+  counter_t old_cur_c_stack = cur_c_stack;+  if (++cur_c_stack > max_c_stack)+    max_c_stack = cur_c_stack;+#endif++/* Reset stack pointer and return. */+#define RET do { goto ret; } while(0)+/* Check that there are at least n arguments, return if not. */+#define CHECK(n) do { if (stack_ptr - stk < (n)) RET; } while(0)++#define SETIND(n, x) do { SETTAG((n), T_IND); INDIR((n)) = (x); } while(0)+#define GOIND(x) do { SETIND(n, (x)); goto ind; } while(0)+#define GOAP(f,a) do { FUN((n)) = (f); ARG((n)) = (a); goto ap; } while(0)+/* CHKARGN checks that there are at least N arguments.+ * It also+ *  - sets n to the "top" node+ *  - set x, y, ... to the arguments+ *  - pops N stack elements+ * NOTE: No GC is allowed after these, since the stack has been popped.+ */+#define CHKARG0 do { } while(0)+#define CHKARG1 do { CHECK(1); POP(1); n = TOP(-1); x = ARG(n); } while(0)+#define CHKARG2 do { CHECK(2); POP(2); n = TOP(-1); y = ARG(n); x = ARG(TOP(-2)); } while(0)+#define CHKARG3 do { CHECK(3); POP(3); n = TOP(-1); z = ARG(n); y = ARG(TOP(-2)); x = ARG(TOP(-3)); } while(0)+#define CHKARG4 do { CHECK(4); POP(4); n = TOP(-1); w = ARG(n); z = ARG(TOP(-2)); y = ARG(TOP(-3)); x = ARG(TOP(-4)); } while(0)++/* Alloc a possible GC action, e, between setting x and popping */+#define CHKARGEV1(e)   do { CHECK(1); x = ARG(TOP(0)); e; POP(1); n = TOP(-1); } while(0)++#define SETINT(n,r)    do { SETTAG((n), T_INT); SETVALUE((n), (r)); } while(0)+#define SETDBL(n,d)    do { SETTAG((n), T_DBL); SETDBLVALUE((n), (d)); } while(0)+#define SETPTR(n,r)    do { SETTAG((n), T_PTR); PTR(n) = (r); } while(0)+#define SETFUNPTR(n,r) do { SETTAG((n), T_FUNPTR); FUNPTR(n) = (r); } while(0)+#define OPINT1(e)      do { CHECK(1); xi = evalint(ARG(TOP(0)));                            e; POP(1); n = TOP(-1); } while(0);+#define OPPTR2(e)      do { CHECK(2); xp = evalptr(ARG(TOP(0))); yp = evalptr(ARG(TOP(1))); e; POP(2); n = TOP(-1); } while(0);+#define CMPP(op)       do { OPPTR2(r = xp op yp); GOIND(r ? combTrue : combFalse); } while(0)++ top:+  COUNT(num_reductions);+#if FASTTAGS+  l = LABEL(n);+  tag = l < T_IO_BIND ? l : GETTAG(n);+#else   /* FASTTAGS */+  tag = GETTAG(n);+#endif  /* FASTTAGS */+  switch (tag) {+  ind:+  case T_IND:  n = INDIR(n); goto top;++  ap:+  case T_AP:   PUSH(n); n = FUN(n); goto top;++  case T_STR:  RET;+  case T_INT:  RET;+  case T_DBL:  RET;+  case T_PTR:  RET;+  case T_FUNPTR: RET;+  case T_ARR:  RET;+  case T_BADDYN: ERR1("FFI unknown %s", CSTR(n));+    +  case T_S:    GCCHECK(2); CHKARG3; GOAP(new_ap(x, z), new_ap(y, z));                     /* S x y z = x z (y z) */+  case T_SS:   GCCHECK(3); CHKARG4; GOAP(new_ap(x, new_ap(y, w)), new_ap(z, w));          /* S' x y z w = x (y w) (z w) */+  case T_K:                CHKARG2; GOIND(x);                                             /* K x y = *x */+  case T_A:                CHKARG2; GOIND(y);                                             /* A x y = *y */+  case T_U:                CHKARG2; GOAP(y, x);                                           /* U x y = y x */+  case T_I:                CHKARG1; GOIND(x);                                             /* I x = *x */+  case T_Y:                CHKARG1; GOAP(x, n);                                           /* n@(Y x) = x n */+  case T_B:    GCCHECK(1); CHKARG3; GOAP(x, new_ap(y, z));                                /* B x y z = x (y z) */+  case T_BB:   GCCHECK(2); CHKARG4; GOAP(new_ap(x, y), new_ap(z, w));                     /* B' x y z w = x y (z w) */+  case T_Z:                CHKARG3; GOAP(x, y);                                           /* Z x y z = x y */+  case T_C:    GCCHECK(1); CHKARG3; GOAP(new_ap(x, z), y);                                /* C x y z = x z y */+  case T_CC:   GCCHECK(2); CHKARG4; GOAP(new_ap(x, new_ap(y, w)), z);                     /* C' x y z w = x (y w) z */+  case T_P:    GCCHECK(1); CHKARG3; GOAP(new_ap(z, x), y);                                /* P x y z = z x y */+  case T_R:    GCCHECK(1); CHKARG3; GOAP(new_ap(y, z), x);                                /* R x y z = y z x */+  case T_O:    GCCHECK(1); CHKARG4; GOAP(new_ap(w, x), y);                                /* O x y z w = w x y */+  case T_K2:               CHKARG3; GOIND(x);                                             /* K2 x y z = *x */+  case T_K3:               CHKARG4; GOIND(x);                                             /* K3 x y z w = *x */+  case T_K4:               CHECK(5); POP(5); n = TOP(-1); x = ARG(TOP(-5)); GOIND(x);     /* K4 x y z w v = *x */+  case T_CCB:  GCCHECK(2); CHKARG4; GOAP(new_ap(x, z), new_ap(y, w));                     /* C'B x y z w = x z (y w) */++    /*+     * Strict primitives require evaluating the arguments before we can proceed.+     * The easiest way to do this is to just recursively call evali() for each argument.+     * The drawback of this is that it uses a lot of C stack.  (E.g., recompiling MicroHs+     * uses a stack depth of 1800).+     * Instead we use the following scheme:+     *  When we find a strict binary (int) primitive we push T_BININT2,+     *  set n=second argument.+     *  Continue evaluation of n.+     *  When n is finally evaluated and we are about to return we check if the stack top is T_BININT2.+     *  If so, change the stack top to T_BININT1,+     *  set n=first argument.+     *  Continue evaluation of n.+     *  When n is finally evaluated and we are about to return we check if the stack top is T_BININT1.+     *  If so, we know that both arguments are now evaluated, and we perform the strict operation.+     *+     * On my desktop machine this is about 3% slower, on my laptop (Apple M1) it is about 3% faster.+     */+  case T_ADD:+  case T_SUB:+  case T_MUL:+  case T_QUOT:+  case T_REM:+  case T_SUBR:+  case T_UQUOT:+  case T_UREM:+  case T_AND:+  case T_OR:+  case T_XOR:+  case T_SHL:+  case T_SHR:+  case T_ASHR:+  case T_EQ:+  case T_NE:+  case T_LT:+  case T_LE:+  case T_GT:+  case T_GE:+  case T_ULT:+  case T_ULE:+  case T_UGT:+  case T_UGE:+    n = ARG(TOP(1));+    if (GETTAG(n) == T_INT) {+      n = ARG(TOP(0));+      PUSH(combBININT1);+      if (GETTAG(n) == T_INT)+        goto binint1;+    } else {+      PUSH(combBININT2);+    }+    goto top;+  case T_NEG:+  case T_INV:+    n = ARG(TOP(0));+    PUSH(combUNINT1);+    goto top;++#if WANT_FLOAT+  case T_FADD:+  case T_FSUB:+  case T_FMUL:+  case T_FDIV:+  case T_FEQ:+  case T_FNE:+  case T_FLT:+  case T_FLE:+  case T_FGT:+  case T_FGE:+    n = ARG(TOP(1));+    PUSH(combBINDBL2);+    goto top;+  case T_FNEG:+    n = ARG(TOP(0));+    PUSH(combUNDBL1);+    goto top;++  case T_ITOF: OPINT1(rd = (flt_t)xi); SETDBL(n, rd); RET;+  case T_FREAD:+    CHECK(1);+    msg = evalstring(ARG(TOP(0)), 0);+#if WORD_SIZE == 64+    xd = strtod(msg, NULL);+#elif WORD_SIZE == 32+    xd = strtof(msg, NULL);+#else  /* WORD_SIZE */+#error Unknown WORD_SIZE+#endif  /* WORD_SIZE */+    FREE(msg);+    POP(1);+    n = TOP(-1);+    SETDBL(n, xd);+    RET;++  case T_FSHOW:+    CHECK(1);+    xd = evaldbl(ARG(TOP(0)));+    POP(1);+    n = TOP(-1);+    GOIND(dblToString(xd));+#endif  /* WANT_FLOAT */++  /* Retag a word sized value, keeping the value bits */+#define CONV(t) do { CHECK(1); x = evali(ARG(TOP(0))); n = POPTOP(); SETTAG(n, t); SETVALUE(n, GETVALUE(x)); RET; } while(0)+  case T_TODBL: CONV(T_DBL);+  case T_TOINT: CONV(T_INT);+  case T_TOPTR: CONV(T_PTR);+#undef CONV++  case T_PEQ:  CMPP(==);+  case T_PNULL: SETTAG(n, T_PTR); PTR(n) = 0; RET;+  case T_PADD: CHECK(2); xp = evalptr(ARG(TOP(0))); yi = evalint(ARG(TOP(1))); POP(2); n = TOP(-1); SETPTR(n, (char*)xp + yi); RET;+  case T_PSUB: CHECK(2); xp = evalptr(ARG(TOP(0))); yp = evalptr(ARG(TOP(1))); POP(2); n = TOP(-1); SETINT(n, (char*)xp - (char*)yp); RET;++  case T_ARR_EQ:+    {+      CHECK(2);+      x = evali(ARG(TOP(0)));+      arr = ARR(x);+      y = evali(ARG(TOP(1)));+      POP(2);+      n = TOP(-1);+      GOIND(arr == ARR(y) ? combTrue : combFalse);+    }++  case T_FROMUTF8:+    if (doing_rnf) RET;+    CHECK(1);+    x = evali(ARG(TOP(0)));+    if (GETTAG(x) != T_STR) ERR("FROMUTF8");+    POP(1);+    n = TOP(-1);+    GCCHECK(strNodes(STR(x)->size));+    GOIND(mkStringU(STR(x)));++  case T_NOMATCH:+    if (doing_rnf) RET;+    {+      CHECK(3);+      msg = evalstring(ARG(TOP(0)), 0);+      xi = evalint(ARG(TOP(1)));+      yi = evalint(ARG(TOP(2)));+      sz = strlen(msg) + 100;+      res = MALLOC(sz);+#if WANT_STDIO+      snprintf(res, sz, "no match at %s, line %"PRIvalue", col %"PRIvalue, msg, xi, yi);+#else  /* WANT_STDIO */+      strcpy(res, "no match");+#endif  /* WANT_STDIO */+      POP(2);+      GCCHECK(strNodes(strlen(res)));+      ARG(TOP(0)) = mkStringC(res);+      FREE(res);+      FREE(msg);+      goto err;                 /* XXX not right message if the error is caught */+    }+  case T_NODEFAULT:+    if (doing_rnf) RET;+    {+      CHECK(1);+      msg = evalstring(ARG(TOP(0)), 0);+      sz = strlen(msg) + 100;+      res = MALLOC(sz);+      +#if WANT_STDIO+      snprintf(res, sz, "no default for %s", msg);+#else  /* WANT_STDIO */+      strcpy(res, "no default");+#endif  /* WANT_STDIO */+      GCCHECK(strNodes(strlen(res)));+      ARG(TOP(0)) = mkStringC(res);+      FREE(res);+      FREE(msg);+      goto err;                 /* XXX not right message if the error is caught */+    }+  case T_ERROR:+    if (doing_rnf) RET;+  err:+    if (cur_handler) {+      /* Pass the string to the handler */+      CHKARG1;+      cur_handler->hdl_exn = x;+      longjmp(cur_handler->hdl_buf, 1);+    } else {+      /* No handler, so just die. */+      CHKARGEV1(msg = evalstring(x, 0));+#if WANT_STDIO+      /* A horrible hack until we get proper exceptions */+      if (strcmp(msg, "ExitSuccess") == 0) {+        EXIT(0);+      } else {+        fprintf(stderr, "mhs: %s\n", msg);+        EXIT(1);+      }+#else  /* WANT_STDIO */+      ERR1("error: %s", msg);+#endif  /* WANT_STDIO */+    }+  case T_SEQ:  CHECK(2); evali(ARG(TOP(0))); POP(2); n = TOP(-1); y = ARG(n); GOIND(y); /* seq x y = eval(x); y */+    +  case T_EQUAL:+    CHECK(2); r = compare(TOP(1)); POP(2); n = TOP(-1); GOIND(r==0 ? combTrue : combFalse);+  case T_COMPARE:+    CHECK(2); r = compare(TOP(1)); POP(2); n = TOP(-1); GOIND(r < 0 ? combLT : r > 0 ? combGT : combEQ);++  case T_RNF:+    if (doing_rnf) RET;+    CHECK(2);+    xi = evalint(ARG(TOP(0)));+    rnf(xi, ARG(TOP(1))); POP(2); n = TOP(-1); GOIND(combUnit);++  case T_IO_PERFORMIO:+    CHECK(1);+    if (doing_rnf) RET;+    execio(&ARG(TOP(0)));       /* run IO action */+    x = ARG(TOP(0));           /* should be RETURN e */+    if (GETTAG(x) != T_AP || GETTAG(FUN(x)) != T_IO_RETURN)+      ERR("PERFORMIO");+    POP(1);+    n = TOP(-1);+    GOIND(ARG(x));++  case T_IO_CCBIND:           /* We should never have to reduce this */+  case T_IO_BIND:+  case T_IO_THEN:+  case T_IO_RETURN:+  case T_IO_SERIALIZE:+  case T_IO_PRINT:+  case T_IO_DESERIALIZE:+  case T_IO_GETARGREF:+  case T_IO_GETTIMEMILLI:+  case T_IO_CCALL:+  case T_IO_CATCH:+  case T_NEWCASTRINGLEN:+  case T_PEEKCASTRING:+  case T_PEEKCASTRINGLEN:+  case T_ARR_ALLOC:+  case T_ARR_SIZE:+  case T_ARR_READ:+  case T_ARR_WRITE:+    RET;++  case T_DYNSYM:+    /* A dynamic FFI lookup */+    CHECK(1);+    msg = evalstring(ARG(TOP(0)), 0);+    GCCHECK(1);+    x = ffiNode(msg);+    FREE(msg);+    POP(1);+    n = TOP(-1);+    GOIND(x);+    +#if WANT_TICK+  case T_TICK:+    xi = GETVALUE(n);+    CHKARG1;+    dotick(xi);+    GOIND(x);+#endif++  default:+    ERR1("eval tag %d", GETTAG(n));+  }+++ ret:+  if (stack_ptr != stk) {+    // In this case, n was an AP that got pushed and potentially+    // updated.+    uvalue_t xu, yu, ru;+#if WANT_FLOAT+    flt_t xd, yd, rd;+#endif  /* WANT_FLOAT */+    NODEPTR p;+    +    tag = GETTAG(TOP(0));+    switch (tag) {+    case T_BININT2:+      n = ARG(TOP(1));+      TOP(0) = combBININT1;+      goto top;++    case T_BININT1:+      /* First argument */+#if SANITY+      if (GETTAG(n) != T_INT)+        ERR("BININT 0");+#endif  /* SANITY */+    binint1:+      xu = (uvalue_t)GETVALUE(n);+      /* Second argument */+      y = ARG(TOP(2));+      while (GETTAG(y) == T_IND)+        y = INDIR(y);+#if SANITY+      if (GETTAG(y) != T_INT)+        ERR("BININT 1");+#endif  /* SANITY */+      yu = (uvalue_t)GETVALUE(y);+      p = FUN(TOP(1));+      POP(3);+      n = TOP(-1);+    binint:+      switch (GETTAG(p)) {+      case T_IND:   p = INDIR(p); goto binint;+      case T_ADD:   ru = xu + yu; break;+      case T_SUB:   ru = xu - yu; break;+      case T_MUL:   ru = xu * yu; break;+      case T_QUOT:  ru = (uvalue_t)((value_t)xu / (value_t)yu); break;+      case T_REM:   ru = (uvalue_t)((value_t)xu % (value_t)yu); break;+      case T_SUBR:  ru = yu - xu; break;+      case T_UQUOT: ru = xu / yu; break;+      case T_UREM:  ru = xu % yu; break;+      case T_AND:   ru = xu & yu; break;+      case T_OR:    ru = xu | yu; break;+      case T_XOR:   ru = xu ^ yu; break;+      case T_SHL:   ru = xu << yu; break;+      case T_SHR:   ru = xu >> yu; break;+      case T_ASHR:  ru = (uvalue_t)((value_t)xu >> yu); break;++      case T_EQ:    GOIND(xu == yu ? combTrue : combFalse);+      case T_NE:    GOIND(xu != yu ? combTrue : combFalse);+      case T_ULT:   GOIND(xu <  yu ? combTrue : combFalse);+      case T_ULE:   GOIND(xu <= yu ? combTrue : combFalse);+      case T_UGT:   GOIND(xu >  yu ? combTrue : combFalse);+      case T_UGE:   GOIND(xu >= yu ? combTrue : combFalse);+      case T_LT:    GOIND((value_t)xu <  (value_t)yu ? combTrue : combFalse);+      case T_LE:    GOIND((value_t)xu <= (value_t)yu ? combTrue : combFalse);+      case T_GT:    GOIND((value_t)xu >  (value_t)yu ? combTrue : combFalse);+      case T_GE:    GOIND((value_t)xu >= (value_t)yu ? combTrue : combFalse);++      default:+        //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));+        ERR("BININT");+      }+      SETINT(n, (value_t)ru);+      goto ret;++    case T_UNINT1:+      /* The argument */+#if SANITY+      if (GETTAG(n) != T_INT)+        ERR("UNINT 0");+#endif+      xu = (uvalue_t)GETVALUE(n);+      p = FUN(TOP(1));+      POP(2);+      n = TOP(-1);+    unint:+      switch (GETTAG(p)) {+      case T_IND:   p = INDIR(p); goto unint;+      case T_NEG:   ru = -xu; break;+      case T_INV:   ru = ~xu; break;+      default:+        //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));+        ERR("UNINT");+      }+      SETINT(n, (value_t)ru);+      goto ret;++#if WANT_FLOAT+    case T_BINDBL2:+      n = ARG(TOP(1));+      TOP(0) = combBINDBL1;+      goto top;++    case T_BINDBL1:+      /* First argument */+#if SANITY+      if (GETTAG(n) != T_DBL)+        ERR("BINDBL 0");+#endif  /* SANITY */+      xd = GETDBLVALUE(n);+      /* Second argument */+      y = ARG(TOP(2));+      while (GETTAG(y) == T_IND)+        y = INDIR(y);+#if SANITY+      if (GETTAG(y) != T_DBL)+        ERR("BINDBL 1");+#endif  /* SANITY */+      yd = GETDBLVALUE(y);+      p = FUN(TOP(1));+      POP(3);+      n = TOP(-1);+    bindbl:+      switch (GETTAG(p)) {+      case T_IND:   p = INDIR(p); goto bindbl;+      case T_FADD:  rd = xd + yd; break;+      case T_FSUB:  rd = xd - yd; break;+      case T_FMUL:  rd = xd * yd; break;+      case T_FDIV:  rd = xd / yd; break;++      case T_FEQ:   GOIND(xd == yd ? combTrue : combFalse);+      case T_FNE:   GOIND(xd != yd ? combTrue : combFalse);+      case T_FLT:   GOIND(xd <  yd ? combTrue : combFalse);+      case T_FLE:   GOIND(xd <= yd ? combTrue : combFalse);+      case T_FGT:   GOIND(xd >  yd ? combTrue : combFalse);+      case T_FGE:   GOIND(xd >= yd ? combTrue : combFalse);++      default:+        //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));+        ERR("BINDBL");+      }+      SETDBL(n, rd);+      goto ret;++    case T_UNDBL1:+      /* The argument */+#if SANITY+      if (GETTAG(n) != T_DBL)+        ERR("UNDBL 0");+#endif+      xd = GETDBLVALUE(n);+      p = FUN(TOP(1));+      POP(2);+      n = TOP(-1);+    undbl:+      switch (GETTAG(p)) {+      case T_IND:   p = INDIR(p); goto undbl;+      case T_FNEG:  rd = -xd; break;+      default:+        //fprintf(stderr, "tag=%d\n", GETTAG(FUN(TOP(0))));+        ERR("UNDBL");+      }+      SETDBL(n, rd);+      goto ret;+#endif  /* WANT_FLOAT */++    default:+      stack_ptr = stk;+      n = TOP(-1);+    }+  }+#if MAXSTACKDEPTH+  cur_c_stack = old_cur_c_stack; /* reset rather than counting down, in case of longjump */+#endif+  return n;+}++/* This is the interpreter for the IO monad operations.+ * + * Assuming every graph rewrite is atomic we want the graph+ * to always represent the rest of the program to run.+ * To this end, we need to mutate the graph every time+ * an IO operation has been performed to make sure we don't+ * execute it again.+ * To have a cell that is safe to mutate, we allocate a new+ * application on entry to execio().+ * Given the call execio(np) we allocate this graph, top,:+ *   BIND (*np) RETURN+ * and make np point to it.+ * This graph will be updated continuously as we execite IO action.+ * Invariant: the second argument to this BIND is always either RETURN+ * or a C'BIND.  The second argument to C'BIND has the same invariant.+ * This is the cycle:+ *  again:+ *   given top = BIND n q+ *   eval(n)+ *   case n+ *     BIND r s:  rewrite to top := BIND r (C'BIND s q)  -- (r >>= s) >>= q  -->  r >>= (\ x -> s x >>= q)+ *     THEN r s:  ... K s ...+ *     otherwise: res = execute n+ *       case q+ *         RETURN:     rewrite to  top := RETURN res;  return to caller+ *         C'BIND r s: rewrite to  top := BIND (r res) s; goto again+ */+void+execio(NODEPTR *np)+{+  stackptr_t stk = stack_ptr;+  NODEPTR f, x, n, q, r, s, res, top1;+  char *name;+  value_t len;+  struct handler *h;+#if WANT_STDIO+  void *ptr;+  int hdr;+#endif  /* WANT_STDIO */+  NODEPTR top;++/* IO operations need all arguments, anything else should not happen. */+#define CHECKIO(n) do { if (stack_ptr - stk != (n)+1) {printf("\nLINE=%d\n", __LINE__); ERR("CHECKIO");}; } while(0)+  /* #define RETIO(p) do { stack_ptr = stk; return (p); } while(0)*/+#define GCCHECKSAVE(p, n) do { PUSH(p); GCCHECK(n); (p) = TOP(0); POP(1); } while(0)+#define RETIO(p) do { stack_ptr = stk; res = (p); goto rest; } while(0)+#define IOASSERT(p,s) do { if (!(p)) ERR("IOASSERT " s); } while(0)++  GCCHECK(2);+  top = new_ap(new_ap(combIOBIND, *np), combIORETURN);+  *np = top;++ start:+  //dump("start", top);+  IOASSERT(stack_ptr == stk, "start");+  //ppmsg("n before = ", ARG(FUN(top)));+  n = evali(ARG(FUN(top)));     /* eval(n) */+  //ppmsg("n after  = ", n);+  if (GETTAG(n) == T_AP && GETTAG(top1 = indir(&FUN(n))) == T_AP) {+    switch (GETTAG(indir(&FUN(top1)))) {+    case T_IO_BIND:+      GCCHECKSAVE(n, 2);+      s = ARG(n);+    bind:+      q = ARG(top);+      r = ARG(top1);+      ARG(FUN(top)) = r;+      ARG(top) = x = new_ap(new_ap(combIOCCBIND, s), q);+      goto start;+    case T_IO_THEN:+      GCCHECKSAVE(n, 3);+      s = new_ap(combFalse, ARG(n));+      goto bind;+    default:+      break;+    }+  }+  goto execute;++ rest:                          /* result is in res */+  //ppmsg("res=", res);+  q = ARG(top);+  //ppmsg("q=", q);+  if (GETTAG(q) == T_IO_RETURN) {+    /* execio is done */+    FUN(top) = combIORETURN;+    ARG(top) = res;+    IOASSERT(stack_ptr == stk, "stk");+    return;+  }+  /* not done, it must be a C'BIND */+  GCCHECK(1);+  IOASSERT(GETTAG(q) == T_AP && GETTAG(FUN(q)) == T_AP && GETTAG(FUN(FUN(q))) == T_IO_CCBIND, "rest-AP");+  r = ARG(FUN(q));+  s = ARG(q);+  ARG(FUN(top)) = new_ap(r, res);+  ARG(top) = s;+  goto start;++ execute:+  PUSH(n);+  for(;;) {+    COUNT(num_reductions);+    //printf("execute switch %s\n", tag_names[GETTAG(n)]);+    switch (GETTAG(n)) {+    case T_IND:+      n = INDIR(n);+      TOP(0) = n;+      break;+    case T_AP:+      n = FUN(n);+      PUSH(n);+      break;+    case T_IO_BIND:+      ERR("T_IO_BIND");+    case T_IO_THEN:+      ERR("T_IO_THEN");+    case T_IO_CCBIND:+      ERR("T_IO_CCBIND");+    case T_IO_RETURN:+      CHECKIO(1);+      n = ARG(TOP(1));+      RETIO(n);+#if WANT_STDIO+    case T_IO_PRINT:+      hdr = 0;+      goto ser;+    case T_IO_SERIALIZE:+      hdr = 1;+    ser:+      CHECKIO(2);+      gc();                     /* DUBIOUS: do a GC to get possible GC reductions */+      ptr = (struct BFILE*)evalptr(ARG(TOP(1)));+      x = evali(ARG(TOP(2)));+      //x = ARG(TOP(1));+      printb(ptr, x, hdr);+      putb('\n', ptr);+      RETIO(combUnit);+    case T_IO_DESERIALIZE:+      CHECKIO(1);+      ptr = (struct BFILE*)evalptr(ARG(TOP(1)));+      n = parse_top(ptr);+      RETIO(n);+#endif+#if WANT_ARGS+    case T_IO_GETARGREF:+      CHECKIO(0);+      n = alloc_node(T_ARR);+      ARR(n) = argarray;+      RETIO(n);+#endif++    case T_IO_CCALL:+      {+        int a = (int)GETVALUE(n);+        funptr_t f = FFI_IX(a).ffi_fun;+        GCCHECK(1);             /* room for placeholder */+        PUSH(mkFlt(0.0));       /* placeholder for result, protected from GC */+        f(stk);                 /* call FFI function */+        n = TOP(0);             /* pop actual result */+        RETIO(n);               /* and this is the result */+      }++    case T_IO_CATCH:+      {+        h = MALLOC(sizeof *h);+        if (!h)+          memerr();+        CHECKIO(2);+        h->hdl_old = cur_handler;+        h->hdl_stack = stack_ptr;+        cur_handler = h;+        if (setjmp(h->hdl_buf)) {+          /* An exception occurred: */+          stack_ptr = h->hdl_stack;+          x = h->hdl_exn;       /* exception value */+          GCCHECKSAVE(x, 1);+          f = ARG(TOP(2));      /* second argument, handler */+          n = new_ap(f, x);+          cur_handler = h->hdl_old;+          FREE(h);+          POP(3);+          ARG(FUN(top)) = n;+          goto start;+        } else {+          /* Normal execution: */+          execio(&ARG(TOP(1))); /* execute first argument */+          cur_handler = h->hdl_old; /* restore old handler */+          FREE(h);+          n = ARG(TOP(1));+          IOASSERT(GETTAG(n) == T_AP && GETTAG(FUN(n)) == T_IO_RETURN, "CATCH");+          RETIO(ARG(n));             /* return result */+        }+      }++    case T_NEWCASTRINGLEN:+      CHECKIO(1);+      name = evalstring(ARG(TOP(1)), &len);+      GCCHECK(4);+      n = new_ap(new_ap(combPair, x = alloc_node(T_PTR)), mkInt(len));+      PTR(x) = name;+      RETIO(n);++    case T_PEEKCASTRING:+      {+      size_t size;+      CHECKIO(1);+      name = evalptr(ARG(TOP(1)));+      size = strlen(name);+      GCCHECK(strNodes(size));+      RETIO(mkString(name, size));+      }++    case T_PEEKCASTRINGLEN:+      {+      size_t size;+      CHECKIO(2);+      size = evalint(ARG(TOP(2)));+      name = evalptr(ARG(TOP(1)));+      GCCHECK(strNodes(size));+      RETIO(mkString(name, size));+      }++    case T_ARR_ALLOC:+      {+      size_t size;+      NODEPTR elem;+      struct ioarray *arr;+      CHECKIO(2);+      size = evalint(ARG(TOP(1)));+      elem = ARG(TOP(2));+      arr = arr_alloc(size, elem);+      n = alloc_node(T_ARR);+      ARR(n) = arr;+      RETIO(n);+      }+    case T_ARR_SIZE:+      CHECKIO(1);+      n = evali(ARG(TOP(1)));+      if (GETTAG(n) != T_ARR)+        ERR("bad ARR tag");+      RETIO(mkInt(ARR(n)->size));+    case T_ARR_READ:+      {+      size_t i;+      CHECKIO(2);+      i = evalint(ARG(TOP(2)));+      n = evali(ARG(TOP(1)));+      if (GETTAG(n) != T_ARR)+        ERR("bad ARR tag");+      if (i >= ARR(n)->size)+        ERR("ARR_READ");+      RETIO(ARR(n)->array[i]);+      }+    case T_ARR_WRITE:+      {+      size_t i;+      CHECKIO(3);+      i = evalint(ARG(TOP(2)));+      n = evali(ARG(TOP(1)));+      if (GETTAG(n) != T_ARR)+        ERR("bad ARR tag");+      if (i >= ARR(n)->size) {+        //PRINT("%d %p %d\n", (int)i, ARR(n), (int)ARR(n)->size);+        ERR("ARR_WRITE");+      }+      ARR(n)->array[i] = ARG(TOP(3));+      RETIO(combUnit);+      }++    default:+      //printf("bad tag %s\n", tag_names[GETTAG(n)]);+      ERR1("execio tag %d", GETTAG(n));+    }+  }+}++#if WANT_ARGS+heapoffs_t+memsize(const char *p)+{+  heapoffs_t n = atoi(p);+  while (isdigit(*p))+    p++;+  switch (*p) {+  case 'k': case 'K': n *= 1000; break;+  case 'm': case 'M': n *= 1000000; break;+  case 'g': case 'G': n *= 1000000000; break;+  default: break;+  }+  return n;+}+#endif++extern uint8_t *combexpr;+extern int combexprlen;++MAIN+{+  NODEPTR prog;+#if WANT_ARGS+  char *inname = 0;+  char **av;+  char *progname;+  char **gargv;+  int gargc;+  int inrts;+#if WANT_TICK+  int dump_ticks = 0;+#endif+#endif+#if WANT_STDIO+  char *outname = 0;+  size_t file_size = 0;+#endif+  +#if 0+  /* MINGW doesn't do buffering right */+  setvbuf(stdout, NULL, _IOLBF, BUFSIZ);+  setvbuf(stderr, NULL, _IONBF, BUFSIZ);+#endif++#ifdef INITIALIZATION+  main_setup(); /* Do platform specific start-up. */+#endif++#if WANT_ARGS+  progname = argv[0];+  argc--, argv++;+  gargv = argv;+  for (av = argv, inrts = 0; argc--; argv++) {+    char *p = *argv;+    if (inrts) {+      if (strcmp(p, "-RTS") == 0) {+        inrts = 0;+      } else {+        if (strcmp(p, "-v") == 0)+          verbose++;+#if WANT_TICKS+        else if (strcmp(p, "-T") == 0)+          dump_ticks = 1;+#endif+        else if (strncmp(p, "-H", 2) == 0)+          heap_size = memsize(&p[2]);+        else if (strncmp(p, "-K", 2) == 0)+          stack_size = memsize(&p[2]);+        else if (strncmp(p, "-r", 2) == 0)+          inname = &p[2];+#if WANT_STDIO+        else if (strncmp(p, "-o", 2) == 0)+          outname = &p[2];+#endif  /* WANT_STDIO */+        else+          ERR("Usage: eval [+RTS [-v] [-Hheap-size] [-Kstack-size] [-rFILE] [-oFILE] -RTS] arg ...");+      }+    } else {+      if (strcmp(p, "+RTS") == 0) {+        inrts = 1;+      } else {+        *av++ = p;+      }+    }+  }+  gargc = av - gargv;++  if (inname == 0)+    inname = "out.comb";+#endif++  init_nodes();+  stack = MALLOC(sizeof(NODEPTR) * stack_size);+  if (!stack)+    memerr();++#if WANT_ARGS+  /* Initialize an IORef (i.e., single element IOArray+   * to contain the list of program arguments.+   * The 0th element is the program name, and the rest+   * are the non RTS arguments.+   */+  {+    NODEPTR n;+    /* No GC checks, the heap is empty. */+    n = mkNil();+    for(int i = gargc-1; i >= 0; i--) {+      n = mkCons(mkString(gargv[i], strlen(gargv[i])), n);+    }+    n = mkCons(mkString(progname, strlen(progname)), n);+    argarray = arr_alloc(1, n);      /* An IORef contains a single element array */+    argarray->permanent = 1;         /* never GC the arguments, because a T_IO_GETARGREF can reach argarray */+  }+#endif  /* WANT_ARGS */++  if (combexpr) {+    int c;+    BFILE *bf = openb_buf(combexpr, combexprlen);+    c = getb(bf);+    /* Compressed combinators start with a 'Z' or 'z', otherwise 'v' (for version) */+    if (c == 'z') {+      /* add LZ77 compressor transducer */+      bf = add_lz77_decompressor(bf);+    } else {+      /* put it back, we need it */+      ungetb(c, bf);+    }+    prog = parse_top(bf);+    closeb(bf);+  } else {+#if WANT_STDIO+    prog = parse_file(inname, &file_size);+#else+    ERR("no stdio");+#endif+  }++  /* GC unused stuff, nice for -o */+  PUSH(prog);+  want_gc_red = 1;+  gc();+  want_gc_red = 0;+  prog = POPTOP();++#if WANT_STDIO+  heapoffs_t start_size = num_marked;+  if (outname) {+    /* Save GCed file (smaller), and exit. */+    FILE *out = fopen(outname, "w");+    if (!out)+      ERR1("cannot open output file %s", outname);+    struct BFILE *bf = add_FILE(out);+    printb(bf, prog, 1);+    closeb(bf);+    EXIT(0);+  }+  if (verbose > 2) {+    pp(stdout, prog);+  }+#endif+  run_time -= GETTIMEMILLI();+  PUSH(prog);+  topnode = &TOP(0);+  execio(&TOP(0));+  prog = TOP(0);+  POP(1);+#if SANITY+  if (GETTAG(prog) != T_AP || GETTAG(FUN(prog)) != T_IO_RETURN)+    ERR("main execio");+#endif+#if WANT_STDIO+  NODEPTR res = evali(ARG(prog));+#else+  (void)evali(ARG(prog));+#endif+  run_time += GETTIMEMILLI();+#if WANT_STDIO+  if (verbose) {+    if (verbose > 1) {+      PRINT("\nmain returns ");+      pp(stdout, res);+      PRINT("node size=%"PRIheap", heap size bytes=%"PRIheap"\n", (heapoffs_t)NODE_SIZE, heap_size * NODE_SIZE);+    }+    setlocale(LC_NUMERIC, "");  /* Make %' work on platforms that support it */+    PRINT("%"PCOMMA"15"PRIheap" combinator file size\n", (heapoffs_t)file_size);+    PRINT("%"PCOMMA"15"PRIheap" cells at start\n", start_size);+    PRINT("%"PCOMMA"15"PRIheap" cells heap size (%"PCOMMA""PRIheap" bytes)\n", heap_size, heap_size * NODE_SIZE);+    PRINT("%"PCOMMA"15"PRIcounter" cells allocated (%"PCOMMA".1f Mbyte/s)\n", num_alloc, num_alloc * NODE_SIZE / ((double)run_time / 1000) / 1000000);+    PRINT("%"PCOMMA"15"PRIcounter" GCs\n", num_gc);+    PRINT("%"PCOMMA"15"PRIcounter" max cells used\n", max_num_marked);+    PRINT("%"PCOMMA"15"PRIcounter" reductions (%"PCOMMA".1f Mred/s)\n", num_reductions, num_reductions / ((double)run_time / 1000) / 1000000);+    PRINT("%"PCOMMA"15"PRIcounter" array alloc\n", num_arr_alloc);+    PRINT("%"PCOMMA"15"PRIcounter" array free\n", num_arr_free);+#if MAXSTACKDEPTH+    PRINT("%"PCOMMA"15d max stack depth\n", (int)max_stack_depth);+    PRINT("%"PCOMMA"15d max C stack depth\n", (int)max_c_stack);+#endif+    // PRINT("%"PCOMMA"15"PRIcounter" max mark depth\n", max_mark_depth);+    PRINT("%15.2fs total expired time\n", (double)run_time / 1000);+    PRINT("%15.2fs total gc time\n", (double)gc_mark_time / 1000);+#if GCRED+    PRINT(" GC reductions A=%d, K=%d, I=%d, int=%d flip=%d\n", red_a, red_k, red_i, red_int, red_flip);+#endif+  }+#endif  /* WANT_STDIO */++#if WANT_TICK+  if (dump_ticks) {+    dump_tick_table(stdout);+  }+#endif++#ifdef TEARDOWN+  main_teardown(); /* do some platform specific teardown */+#endif+  EXIT(0);+}++#if WANT_MD5+#include "md5.c"+#endif  /* WANT_MD5 */++#if WANT_LZ77+#include "lz77.c"+#endif++/*********************/+/* FFI adapters      */++#define MHS_FROM(name, set, type) \+void \+name(stackptr_t stk, int n, type x) \+{ \+  NODEPTR r = TOP(0);           /* The pre-allocated cell for the result, */ \+  CHECKIO(n+1);                 /* Check that we actually had the right number of arguments. */ \+  set(r, x);                    /* Put result in pre-allocated cell. */ \+}+MHS_FROM(mhs_from_FloatW, SETDBL, flt_t);+MHS_FROM(mhs_from_Int, SETINT, value_t);+MHS_FROM(mhs_from_Word, SETINT, uvalue_t);+MHS_FROM(mhs_from_Word8, SETINT, uvalue_t);+MHS_FROM(mhs_from_Ptr, SETPTR, void*);+MHS_FROM(mhs_from_FunPtr, SETFUNPTR, HsFunPtr);+MHS_FROM(mhs_from_CChar, SETINT, char);+MHS_FROM(mhs_from_CSChar, SETINT, signed char);+MHS_FROM(mhs_from_CUChar, SETINT, unsigned char);+MHS_FROM(mhs_from_CShort, SETINT, short);+MHS_FROM(mhs_from_CUShort, SETINT, unsigned short);+MHS_FROM(mhs_from_CInt, SETINT, int);+MHS_FROM(mhs_from_CUInt, SETINT, unsigned int);+MHS_FROM(mhs_from_CLong, SETINT, long);+MHS_FROM(mhs_from_CULong, SETINT, unsigned long);+MHS_FROM(mhs_from_CLLong, SETINT, long long);+MHS_FROM(mhs_from_CULLong, SETINT, unsigned long long);+MHS_FROM(mhs_from_CSize, SETINT, size_t);+// MHS_FROM(mhs_from_CSSize, SETINT, ssize_t);+MHS_FROM(mhs_from_CIntPtr, SETINT, intptr_t);+MHS_FROM(mhs_from_CUIntPtr, SETINT, uintptr_t);+void+mhs_from_Unit(stackptr_t stk, int n)+{+  CHECKIO(n+1);                 /* Check that we actually had the right number of arguments. */+  TOP(0) = combUnit;            /* Put result on top of stack */+}++#define MHS_TO(name, eval, type) \+type name(stackptr_t stk, int n) \+{ \+  return eval(ARG(TOP(n+2)));                /* The stack has a reserved cell, and the FFI node on top of the arguments */ \+}+MHS_TO(mhs_to_FloatW, evaldbl, flt_t);+MHS_TO(mhs_to_Int, evalint, value_t);+MHS_TO(mhs_to_Word, evalint, uvalue_t);+MHS_TO(mhs_to_Word8, evalint, uint8_t);+MHS_TO(mhs_to_Ptr, evalptr, void*);+MHS_TO(mhs_to_FunPtr, evalfunptr, HsFunPtr);+MHS_TO(mhs_to_CChar, evalint, char);+MHS_TO(mhs_to_CSChar, evalint, signed char);+MHS_TO(mhs_to_CUChar, evalint, unsigned char);+MHS_TO(mhs_to_CShort, evalint, short);+MHS_TO(mhs_to_CUShort, evalint, unsigned short);+MHS_TO(mhs_to_CInt, evalint, int);+MHS_TO(mhs_to_CUInt, evalint, unsigned int);+MHS_TO(mhs_to_CLong, evalint, long);+MHS_TO(mhs_to_CULong, evalint, unsigned long);+MHS_TO(mhs_to_CLLong, evalint, long long);+MHS_TO(mhs_to_CULLong, evalint, unsigned long long);+MHS_TO(mhs_to_CSize, evalint, size_t);+// MHS_TO(mhs_to_CSSize, evalint, ssize_t);+MHS_TO(mhs_to_CIntPtr, evalint, intptr_t);+MHS_TO(mhs_to_CUIntPtr, evalint, uintptr_t);+++/* The rest of this file was generated by the compiler, with some minor edits with #if. */+void mhs_GETRAW(int s) { mhs_from_Int(s, 0, GETRAW()); }+void mhs_GETTIMEMILLI(int s) { mhs_from_Int(s, 0, GETTIMEMILLI()); }+#if WANT_MATH+#if WORD_SIZE == 64+void mhs_acos(int s) { mhs_from_FloatW(s, 1, acos(mhs_to_FloatW(s, 0))); }+void mhs_asin(int s) { mhs_from_FloatW(s, 1, asin(mhs_to_FloatW(s, 0))); }+void mhs_atan(int s) { mhs_from_FloatW(s, 1, atan(mhs_to_FloatW(s, 0))); }+void mhs_atan2(int s) { mhs_from_FloatW(s, 2, atan2(mhs_to_FloatW(s, 0), mhs_to_FloatW(s, 1))); }+void mhs_cos(int s) { mhs_from_FloatW(s, 1, cos(mhs_to_FloatW(s, 0))); }+void mhs_exp(int s) { mhs_from_FloatW(s, 1, exp(mhs_to_FloatW(s, 0))); }+void mhs_log(int s) { mhs_from_FloatW(s, 1, log(mhs_to_FloatW(s, 0))); }+void mhs_sin(int s) { mhs_from_FloatW(s, 1, sin(mhs_to_FloatW(s, 0))); }+void mhs_sqrt(int s) { mhs_from_FloatW(s, 1, sqrt(mhs_to_FloatW(s, 0))); }+void mhs_tan(int s) { mhs_from_FloatW(s, 1, tan(mhs_to_FloatW(s, 0))); }+#elif WORD_SIZE == 32  /* WORD_SIZE */+void mhs_acos(int s) { mhs_from_FloatW(s, 1, acosf(mhs_to_FloatW(s, 0))); }+void mhs_asin(int s) { mhs_from_FloatW(s, 1, asinf(mhs_to_FloatW(s, 0))); }+void mhs_atan(int s) { mhs_from_FloatW(s, 1, atanf(mhs_to_FloatW(s, 0))); }+void mhs_atan2(int s) { mhs_from_FloatW(s, 2, atan2f(mhs_to_FloatW(s, 0), mhs_to_FloatW(s, 1))); }+void mhs_cos(int s) { mhs_from_FloatW(s, 1, cosf(mhs_to_FloatW(s, 0))); }+void mhs_exp(int s) { mhs_from_FloatW(s, 1, expf(mhs_to_FloatW(s, 0))); }+void mhs_log(int s) { mhs_from_FloatW(s, 1, logf(mhs_to_FloatW(s, 0))); }+void mhs_sin(int s) { mhs_from_FloatW(s, 1, sinf(mhs_to_FloatW(s, 0))); }+void mhs_sqrt(int s) { mhs_from_FloatW(s, 1, sqrtf(mhs_to_FloatW(s, 0))); }+void mhs_tan(int s) { mhs_from_FloatW(s, 1, tanf(mhs_to_FloatW(s, 0))); }+#else+#error Unknown WORD_SIZE+#endif  /* WORD_SIZE */+#endif  /* WANT_MATH */++#if WANT_STDIO+void mhs_add_FILE(int s) { mhs_from_Ptr(s, 1, add_FILE(mhs_to_Ptr(s, 0))); }+void mhs_add_utf8(int s) { mhs_from_Ptr(s, 1, add_utf8(mhs_to_Ptr(s, 0))); }+void mhs_closeb(int s) { closeb(mhs_to_Ptr(s, 0)); mhs_from_Unit(s, 1); }+void mhs_flushb(int s) { flushb(mhs_to_Ptr(s, 0)); mhs_from_Unit(s, 1); }+void mhs_fopen(int s) { mhs_from_Ptr(s, 2, fopen(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1))); }+void mhs_getb(int s) { mhs_from_Int(s, 1, getb(mhs_to_Ptr(s, 0))); }+void mhs_putb(int s) { putb(mhs_to_Int(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }+void mhs_ungetb(int s) { ungetb(mhs_to_Int(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }+void mhs_system(int s) { mhs_from_Int(s, 1, system(mhs_to_Ptr(s, 0))); }+void mhs_tmpname(int s) { mhs_from_Ptr(s, 2, TMPNAME(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1))); }+void mhs_unlink(int s) { mhs_from_Int(s, 1, unlink(mhs_to_Ptr(s, 0))); }+#endif  /* WANT_STDIO */++#if WANT_MD5+void mhs_md5Array(int s) { md5Array(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_Int(s, 2)); mhs_from_Unit(s, 3); }+void mhs_md5BFILE(int s) { md5BFILE(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }+void mhs_md5String(int s) { md5String(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }+#endif  /* WANT_MD5 */++#if WANT_LZ77+void mhs_add_lz77_compressor(int s) { mhs_from_Ptr(s, 1, add_lz77_compressor(mhs_to_Ptr(s, 0))); }+void mhs_add_lz77_decompressor(int s) { mhs_from_Ptr(s, 1, add_lz77_decompressor(mhs_to_Ptr(s, 0))); }+void mhs_lz77c(int s) { mhs_from_CSize(s, 3, lz77c(mhs_to_Ptr(s, 0), mhs_to_CSize(s, 1), mhs_to_Ptr(s, 2))); }+#endif  /* WANT_LZ77 */++void mhs_calloc(int s) { mhs_from_Ptr(s, 2, calloc(mhs_to_CSize(s, 0), mhs_to_CSize(s, 1))); }+void mhs_free(int s) { free(mhs_to_Ptr(s, 0)); mhs_from_Unit(s, 1); }+void mhs_getenv(int s) { mhs_from_Ptr(s, 1, getenv(mhs_to_Ptr(s, 0))); }+void mhs_iswindows(int s) { mhs_from_Int(s, 0, iswindows()); }+void mhs_malloc(int s) { mhs_from_Ptr(s, 1, malloc(mhs_to_CSize(s, 0))); }+void mhs_memcpy(int s) { memcpy(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_CSize(s, 2)); mhs_from_Unit(s, 3); }+void mhs_memmove(int s) { memmove(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1), mhs_to_CSize(s, 2)); mhs_from_Unit(s, 3); }+void mhs_peekPtr(int s) { mhs_from_Ptr(s, 1, peekPtr(mhs_to_Ptr(s, 0))); }+void mhs_peekWord(int s) { mhs_from_Word(s, 1, peekWord(mhs_to_Ptr(s, 0))); }+void mhs_pokePtr(int s) { pokePtr(mhs_to_Ptr(s, 0), mhs_to_Ptr(s, 1)); mhs_from_Unit(s, 2); }+void mhs_pokeWord(int s) { pokeWord(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }++void mhs_peek_uint8(int s) { mhs_from_Word(s, 1, peek_uint8(mhs_to_Ptr(s, 0))); }+void mhs_poke_uint8(int s) { poke_uint8(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }+void mhs_peek_uint16(int s) { mhs_from_Word(s, 1, peek_uint16(mhs_to_Ptr(s, 0))); }+void mhs_poke_uint16(int s) { poke_uint16(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }+#if WORD_SIZE >= 32+void mhs_peek_uint32(int s) { mhs_from_Word(s, 1, peek_uint32(mhs_to_Ptr(s, 0))); }+void mhs_poke_uint32(int s) { poke_uint32(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }+#endif  /* WORD_SIZE */+#if WORD_SIZE >= 64+void mhs_peek_uint64(int s) { mhs_from_Word(s, 1, peek_uint64(mhs_to_Ptr(s, 0))); }+void mhs_poke_uint64(int s) { poke_uint64(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }+#endif  /* WORD_SIZE */+void mhs_peek_uint(int s) { mhs_from_Word(s, 1, peek_uint(mhs_to_Ptr(s, 0))); }+void mhs_poke_uint(int s) { poke_uint(mhs_to_Ptr(s, 0), mhs_to_Word(s, 1)); mhs_from_Unit(s, 2); }++void mhs_peek_int8(int s) { mhs_from_Int(s, 1, peek_int8(mhs_to_Ptr(s, 0))); }+void mhs_poke_int8(int s) { poke_int8(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); mhs_from_Unit(s, 2); }+void mhs_peek_int16(int s) { mhs_from_Int(s, 1, peek_int16(mhs_to_Ptr(s, 0))); }+void mhs_poke_int16(int s) { poke_int16(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); mhs_from_Unit(s, 2); }+#if WORD_SIZE >= 32+void mhs_peek_int32(int s) { mhs_from_Int(s, 1, peek_int32(mhs_to_Ptr(s, 0))); }+void mhs_poke_int32(int s) { poke_int32(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); mhs_from_Unit(s, 2); }+#endif  /* WORD_SIZE */+#if WORD_SIZE >= 64+void mhs_peek_int64(int s) { mhs_from_Int(s, 1, peek_int64(mhs_to_Ptr(s, 0))); }+void mhs_poke_int64(int s) { poke_int64(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); mhs_from_Unit(s, 2); }+#endif  /* WORD_SIZE */+void mhs_peek_int(int s) { mhs_from_Int(s, 1, peek_int(mhs_to_Ptr(s, 0))); }+void mhs_poke_int(int s) { poke_int(mhs_to_Ptr(s, 0), mhs_to_Int(s, 1)); mhs_from_Unit(s, 2); }+void mhs_peek_llong(int s) { mhs_from_CLLong(s, 1, peek_llong(mhs_to_Ptr(s, 0))); }+void mhs_peek_long(int s) { mhs_from_CLong(s, 1, peek_long(mhs_to_Ptr(s, 0))); }+void mhs_peek_ullong(int s) { mhs_from_CULLong(s, 1, peek_ullong(mhs_to_Ptr(s, 0))); }+void mhs_peek_ulong(int s) { mhs_from_CULong(s, 1, peek_ulong(mhs_to_Ptr(s, 0))); }+void mhs_poke_llong(int s) { poke_llong(mhs_to_Ptr(s, 0), mhs_to_CLLong(s, 1)); mhs_from_Unit(s, 2); }+void mhs_poke_long(int s) { poke_long(mhs_to_Ptr(s, 0), mhs_to_CLong(s, 1)); mhs_from_Unit(s, 2); }+void mhs_poke_ullong(int s) { poke_ullong(mhs_to_Ptr(s, 0), mhs_to_CULLong(s, 1)); mhs_from_Unit(s, 2); }+void mhs_poke_ulong(int s) { poke_ulong(mhs_to_Ptr(s, 0), mhs_to_CULong(s, 1)); mhs_from_Unit(s, 2); }+#if WANT_FLOAT+void mhs_peek_flt(int s) { mhs_from_FloatW(s, 1, peek_flt(mhs_to_Ptr(s, 0))); }+void mhs_poke_flt(int s) { poke_flt(mhs_to_Ptr(s, 0), mhs_to_FloatW(s, 1)); mhs_from_Unit(s, 2); }+#endif  /* WANT_FLOAT */+void mhs_sizeof_int(int s) { mhs_from_Int(s, 0, sizeof(int)); }+void mhs_sizeof_llong(int s) { mhs_from_Int(s, 0, sizeof(long long)); }+void mhs_sizeof_long(int s) { mhs_from_Int(s, 0, sizeof(long)); }+#if WANT_DIR+void mhs_closedir(int s) { mhs_from_Int(s, 1, closedir(mhs_to_Ptr(s, 0))); }+void mhs_opendir(int s) { mhs_from_Ptr(s, 1, opendir(mhs_to_Ptr(s, 0))); }+void mhs_readdir(int s) { mhs_from_Ptr(s, 1, readdir(mhs_to_Ptr(s, 0))); }+void mhs_c_d_name(int s) { mhs_from_Ptr(s, 1, ((struct dirent *)(mhs_to_Ptr(s, 0)))->d_name); }+void mhs_chdir(int s) { mhs_from_Int(s, 1, chdir(mhs_to_Ptr(s, 0))); }+#endif  /* WANT_DIR */++struct ffi_entry ffi_table[] = {+{ "GETRAW", mhs_GETRAW},+{ "GETTIMEMILLI", mhs_GETTIMEMILLI},+#if WANT_MATH+{ "acos", mhs_acos},+{ "asin", mhs_asin},+{ "atan", mhs_atan},+{ "atan2", mhs_atan2},+{ "cos", mhs_cos},+{ "exp", mhs_exp},+{ "log", mhs_log},+{ "sin", mhs_sin},+{ "sqrt", mhs_sqrt},+{ "tan", mhs_tan},+#endif  /* WANT_MATH */++#if WANT_STDIO+{ "add_FILE", mhs_add_FILE},+{ "add_utf8", mhs_add_utf8},+{ "closeb", mhs_closeb},+{ "flushb", mhs_flushb},+{ "fopen", mhs_fopen},+{ "getb", mhs_getb},+{ "putb", mhs_putb},+{ "ungetb", mhs_ungetb},+{ "system", mhs_system},+{ "tmpname", mhs_tmpname},+{ "unlink", mhs_unlink},+#endif  /* WANT_STDIO */++#if WANT_MD5+{ "md5Array", mhs_md5Array},+{ "md5BFILE", mhs_md5BFILE},+{ "md5String", mhs_md5String},+#endif  /* WANT_MD5 */++#if WANT_LZ77+{ "add_lz77_compressor", mhs_add_lz77_compressor},+{ "add_lz77_decompressor", mhs_add_lz77_decompressor},+{ "lz77c", mhs_lz77c},+#endif  /* WANT_LZ77 */++{ "calloc", mhs_calloc},+{ "free", mhs_free},+{ "getenv", mhs_getenv},+{ "iswindows", mhs_iswindows},+{ "malloc", mhs_malloc},+{ "memcpy", mhs_memcpy},+{ "memmove", mhs_memmove},+{ "peekPtr", mhs_peekPtr},+{ "peekWord", mhs_peekWord},+{ "pokePtr", mhs_pokePtr},+{ "pokeWord", mhs_pokeWord},++{ "peek_uint8", mhs_peek_uint8},+{ "poke_uint8", mhs_poke_uint8},+{ "peek_uint16", mhs_peek_uint16},+{ "poke_uint16", mhs_poke_uint16},+#if WORD_SIZE >= 32+{ "peek_uint32", mhs_peek_uint32},+{ "poke_uint32", mhs_poke_uint32},+#endif  /* WORD_SIZE >= 32 */+#if WORD_SIZE >= 64+{ "peek_uint64", mhs_peek_uint64},+{ "poke_uint64", mhs_poke_uint64},+#endif  /* WORD_SIZE >= 64 */+{ "peek_uint", mhs_peek_uint},+{ "poke_uint", mhs_poke_uint},++{ "peek_int8", mhs_peek_int8},+{ "poke_int8", mhs_poke_int8},+{ "peek_int16", mhs_peek_int16},+{ "poke_int16", mhs_poke_int16},+#if WORD_SIZE >= 32+{ "peek_int32", mhs_peek_int32},+{ "poke_int32", mhs_poke_int32},+#endif  /* WORD_SIZE >= 32 */+#if WORD_SIZE >= 64+{ "peek_int64", mhs_peek_int64},+{ "poke_int64", mhs_poke_int64},+#endif  /* WORD_SIZE >= 64 */+{ "peek_int", mhs_peek_int},+{ "poke_int", mhs_poke_int},+{ "peek_llong", mhs_peek_llong},+{ "peek_long", mhs_peek_long},+{ "peek_ullong", mhs_peek_ullong},+{ "peek_ulong", mhs_peek_ulong},+{ "poke_llong", mhs_poke_llong},+{ "poke_long", mhs_poke_long},+{ "poke_ullong", mhs_poke_ullong},+{ "poke_ulong", mhs_poke_ulong},+#if WANT_FLOAT+{ "poke_flt", mhs_poke_flt},+{ "poke_flt", mhs_poke_flt},+#endif  /* WANT_FLOAT */+{ "sizeof_int", mhs_sizeof_int},+{ "sizeof_llong", mhs_sizeof_llong},+{ "sizeof_long", mhs_sizeof_long},+#if WANT_DIR+{ "c_d_name", mhs_c_d_name},+{ "closedir", mhs_closedir},+{ "opendir", mhs_opendir},+{ "readdir", mhs_readdir},+{ "chdir", mhs_chdir},+#endif  /* WANT_DIR */+{ 0,0 }+};++int num_ffi = sizeof(ffi_table) / sizeof(ffi_table[0]);
+ src/runtime/lz77.c view
@@ -0,0 +1,161 @@+#include <inttypes.h>+#include <stdlib.h>+#if 0+#include <stdio.h>+#endif++#define MAX(x,y) ((x) > (y) ? (x) : (y))+#define MIN(x,y) ((x) < (y) ? (x) : (y))++#define MAXWIN 8192+#define MAXLEN (9 + 255)+#define MINMATCH 3+#define MINOFFS 1++/*+ * Encoding inspired by FastLZ+ *  000nnnnn                      - literal run follows, with n+1 bytes+ *  111ooooo pppppppp nnnnnnnn    - at offset o*256+p, copy n+9 bytes (maximum offset is 8191)+ *  nnnooooo pppppppp             - at offset o*256+p, copy n+2 bytes (n != 0, n != 7)+ * Match length is >= 3.+ */++static void+put(uint8_t **bufp, size_t *sizep, size_t *offsp, uint8_t byte)+{+  if (*offsp >= *sizep) {+    *sizep *= 2;+    *bufp = realloc(*bufp, *sizep);+  }+  (*bufp)[(*offsp)++] = byte;+}+#define PUT(x) put(&outbuf, &outsize, &outoffs, (x))++/* dst must be big enough to hold the decompressed result */+size_t+lz77d(uint8_t *src, size_t srclen, uint8_t **bufp)+{+  uint8_t *end = src + srclen;+  size_t outsize = 100000;+  uint8_t *outbuf = malloc(outsize);+  size_t outoffs = 0;++  while (src < end) {+    int op = *src++;+    int opx = op & 0x1f;        /* part of offset, or literal length */+    op >>= 5;+    if (op == 0) {+      /* 000nnnnn */+      do {+        PUT(*src++);+      } while (--opx >= 0);+    } else {+      size_t len;+      size_t offs = opx * 256 + *src++ + MINOFFS;+      if (op == 7) {+        /* 111ooooo pppppppp nnnnnnnn */+        len = 9 + *src++;+      } else {+        /* nnnooooo pppppppp */+        len = 2 + op;+      }+      //printf("match cur=%d offs=%d len=%d\n", (int)(dst - adst), (int)offs, (int)len);+      offs = outoffs - offs;+      for (size_t i = 0; i < len; i++) {+        uint8_t b = outbuf[offs + i];+        PUT(b);+      }+    }+  }+  *bufp = outbuf;+  return outoffs;+}++static size_t+match(uint8_t *src, uint8_t *win, uint8_t *end)+{+  size_t n;++  for(n = 0; *src == *win && src < end && n < MAXLEN; src++, win++, n++)+    ;+  return n;+}++size_t+lz77c(uint8_t *src, size_t srclen, uint8_t **bufp)+{+  uint8_t *cur;+  uint8_t *end = src + srclen;+  size_t outsize = 25000;+  uint8_t *outbuf = malloc(outsize);+  size_t outoffs = 0;++  for (cur = src; cur < end; ) {+    size_t win_end = cur - src;+    size_t win_len = MIN(win_end, MAXWIN);+    //size_t max_len = MIN(MAXLEN, end - cur);+    /* Inefficient match loop */+    size_t match_len = MINMATCH-1;+    size_t match_offs = 0;+    /* Compression is slow, since we use brute force to find a match. */+    for (size_t offs = MINOFFS; offs < win_len; offs++) {+      size_t n = match(cur, cur - offs, end);+      if (n > match_len) {+        match_len = n;+        match_offs = offs;+      }+    }+    if (match_len >= MINMATCH) {+      //printf("match cur=%d offs=%d len=%d str=%.*s\n", (int)(cur-src), (int)match_offs, (int)match_len, (int)match_len, cur);+      //printf("match cur=%d offs=%d len=%d\n", (int)(cur-src), (int)match_offs, (int)match_len);+      /* found a match */+      cur += match_len;+      match_offs -= MINOFFS;+      match_len -= 2;+      int hi = match_offs >> 8;+      int lo = match_offs & 0xff;+      if (match_len < 7) {+        PUT((match_len << 5) + hi);+        PUT(lo);+      } else {+        PUT((7 << 5) + hi);+        PUT(lo);+        PUT(match_len - 7);+      }+    } else {+      /* generate a literal */+      /* how long should it be?  3 seems to be a sweet spot */+      size_t len = MIN(3, end - cur);+      PUT(len - 1);+      for (size_t i = 0; i < len; i++) {+        PUT(*cur++);+      }+    }+  }+  *bufp = outbuf;+  return outoffs;+}++#if 0+int+main(int argc, char **argv)+{+  FILE *fi = fopen(argv[1], "r");+  FILE *fo = fopen(argv[2], "w");+  int dec = argc > 3;+  fseek(fi, 0, SEEK_END);+  size_t ilen = ftell(fi);+  size_t olen;+  fseek(fi, 0, SEEK_SET);+  uint8_t *ibuf = malloc(ilen);+  uint8_t *obuf;+  size_t n = fread(ibuf, 1, ilen, fi);+  if (n != ilen) exit(1);+  if (dec)+    olen = lz77d(ibuf, ilen, &obuf);+  else+    olen = lz77c(ibuf, ilen, &obuf);+  fwrite(obuf, olen, 1, fo);+  exit(0);+}+#endif
+ src/runtime/mhsffi.h view
@@ -0,0 +1,76 @@+#include <inttypes.h>+#include <stdlib.h>++#if INTPTR_MAX == 0x7fff+#define WORD_SIZE 16+#elif INTPTR_MAX == 0x7fffffff+#define WORD_SIZE 32+#elif INTPTR_MAX == 0x7fffffffffffffff+#define WORD_SIZE 64+#else+#error Unknown WORD_SIZE+#endif++#if WORD_SIZE == 64+typedef double flt_t;+#elif WORD_SIZE == 32+typedef float flt_t;+#elif WORD_SIZE == 16+typedef uint16_t flt_t;         /* No floats, but we need something */+#else+#error Unknown WORD_SIZE+#endif++typedef void (*HsFunPtr)(void);++typedef void (*funptr_t)(int);+struct ffi_entry {+  const char *ffi_name;+  funptr_t    ffi_fun;+};+extern struct ffi_entry *xffi_table;++void mhs_from_Double(intptr_t, int, flt_t);+void mhs_from_Int(intptr_t, int, intptr_t);+void mhs_from_Word(intptr_t, int, uintptr_t);+void mhs_from_Word8(intptr_t, int, uintptr_t);+void mhs_from_Ptr(intptr_t, int, void *);+void mhs_from_FunPtr(intptr_t, int, HsFunPtr);+void mhs_from_CChar(intptr_t, int, char);+void mhs_from_CSChar(intptr_t, int, signed char);+void mhs_from_CUChar(intptr_t, int, unsigned char);+void mhs_from_CSHORT(intptr_t, int, short);+void mhs_from_CUSHORT(intptr_t, int, unsigned short);+void mhs_from_CINT(intptr_t, int, int);+void mhs_from_CUINT(intptr_t, int, unsigned int);+void mhs_from_CLONG(intptr_t, int, long);+void mhs_from_CULONG(intptr_t, int, unsigned long);+void mhs_from_CLLONG(intptr_t, int, long long);+void mhs_from_CULLONG(intptr_t, int, unsigned long long);+void mhs_from_CSize(intptr_t, int, size_t);+// not on MacOS void mhs_from_CSSize(intptr_t, int, ssize_t);+void mhs_from_CIntPtr(intptr_t, int, intptr_t);+void mhs_from_CUIntPtr(intptr_t, int, uintptr_t);+void mhs_from_Unit(intptr_t, int);++flt_t              mhs_to_Double(intptr_t, int);+intptr_t           mhs_to_Int(intptr_t, int);+uintptr_t          mhs_to_Word(intptr_t, int);+uint8_t            mhs_to_Word8(intptr_t, int);+void*              mhs_to_Ptr(intptr_t, int);+HsFunPtr           mhs_to_FunPtr(intptr_t, int);+char               mhs_to_CChar(intptr_t, int);+signed char        mhs_to_CSChar(intptr_t, int);+unsigned char      mhs_to_CUChar(intptr_t, int);+short              mhs_to_CSHORT(intptr_t, int);+unsigned short     mhs_to_CUSHORT(intptr_t, int);+int                mhs_to_CINT(intptr_t, int);+unsigned int       mhs_to_CUINT(intptr_t, int);+long               mhs_to_CLONG(intptr_t, int);+unsigned long      mhs_to_CULONG(intptr_t, int);+long long          mhs_to_CLLONG(intptr_t, int);+unsigned long long mhs_to_CULLONG(intptr_t, int);+size_t             mhs_to_CSize(intptr_t, int);+// ssize_t            mhs_to_CSSize(intptr_t, int);+intptr_t           mhs_to_CIntPtr(intptr_t, int);+uintptr_t          mhs_to_CUIntPtr(intptr_t, int);
− tests/Bug1.hs
@@ -1,19 +0,0 @@-module Bug1(main) where-import Prelude--main :: Int-main = 0--class C (t :: Type -> Type) where-  el :: forall a . Eq a => a -> t a -> Bool--el_dflt :: forall (t::Type -> Type) . (C t) => (forall a . (Eq a) => a -> t a -> Bool)-el_dflt  = undefined--instance C []----instance C [] where---  el = elem----instance C [] where---  el = el_dflt
tests/Catch.hs view
@@ -12,11 +12,13 @@  main :: IO () main = do+  let sshow :: String -> String+      sshow = show   x <- catch (return ("o" ++ "k")) (\ _ -> return "what?")-  putStrLn $ show x+  putStrLn $ sshow x   y <- catch (do { error "bang!"; return "yyy" }) (\ (Exn s) -> return s)-  putStrLn $ show y+  putStrLn $ sshow y   z <- catch (do { print (f []); return "zzz" })  (\ (Exn s) -> return s)-  putStrLn $ show z+  putStrLn $ sshow z   w <- catch (do { print (m ()); return "www" })  (\ (Exn s) -> return s)-  putStrLn $ show w+  putStrLn $ sshow w
tests/Enum.hs view
@@ -1,12 +1,7 @@ module Enum(main) where-import Prelude +data T = A | B | C+  deriving (Bounded, Enum, Show)+ main :: IO ()-main = do-  putStrLn $ show [1::Int .. 5]-  putStrLn $ show [1::Int .. 1]-  putStrLn $ show [1::Int .. 0]-  putStrLn $ show [1,3::Int .. 10]-  putStrLn $ show [1::Int, -1 .. -5]-  putStrLn $ show $ take 5 [1::Int ..]-  putStrLn $ show $ take 5 [1,3::Int ..]+main = print ([minBound .. maxBound] :: [T])
tests/Enum.ref view
@@ -1,7 +1,1 @@-[1,2,3,4,5]-[1]-[]-[1,3,5,7,9]-[1,-1,-3,-5]-[1,2,3,4,5]-[1,3,5,7,9]+[A,B,C]
tests/Eq.hs view
@@ -1,6 +1,5 @@ module Eq(main) where import Prelude-import Data.Double()  main :: IO () main = do
− tests/ExistsBug.hs
@@ -1,18 +0,0 @@-module Exists(main) where-import Prelude--data E = forall a . Show a => C a--es :: [E]-es = [C True, C 'a']--instance Show E where-  show (C a) = show a--xx :: Int-xx =-  let f (C a) = a-  in  length $ map f [C 'a', C True]--main :: IO ()-main = print es
tests/FArith.hs view
@@ -4,22 +4,17 @@ readDouble :: String -> Double readDouble = read -list1 :: [Double]-list1 = [-100.343241, -53.3248973, 0.0, 1.0, 1.23453523, 3243534.34534, 999.999]--list2 :: [Double]-list2 = [-100.343241, -53.3248973, 0.0, 1.0, 1.23453523, 3243534.34534, 999.999, 1.2e13]+-- Be careful about what constants we use here, so it works with both 32 and 64 bit floats.+-- We only use values that can be represented exactly. -divide :: Double -> Double -> Double-divide x y = if y == 0.0 then 0.0 else x / y+list1 :: [Double]+list1 = [-100.25::Double, -53.25::Double, 0.0::Double, 1.0::Double, 1.125::Double, 1.0e4::Double]  main :: IO () main = do-  putStrLn $ show [ op x y | x <- list1, y <- list2, op <- [(+), (-), (*), divide] ]-  putStrLn $ show [ op x y | x <- list1, y <- list2, op <- [(==), (/=), (<), (<=), (>), (>=)] ]-  putStrLn $ show [ x / y | x <- [2.234983, 1.232, 23.0::Double], y <- [1.0, 5.0, 10.0, 100.0]]-  putStrLn $ show [ x / y | x <- [-2.234983, -1.232, -23.0::Double], y <- [1.0, -5.0, 10.0, -100.0]]-  let str = readDouble "1.576"-  putStrLn $ show str+  putStrLn $ show [ op x y | x <- list1, y <- list1, op <- [(+), (-), (*)] ]+  putStrLn $ show [ op x y | x <- list1, y <- list1, op <- [(==), (/=), (<), (<=), (>), (>=)] ]+  putStrLn $ show [ x / y  | x <- list1, y <- [1.0::Double, -16.0::Double, 0.0625::Double]]+  putStrLn $ show $ readDouble "1.625"   putStrLn $ show $ 1.0 + readDouble "2.5"-  putStrLn $ show $ map readDouble ["1.5e32", "1.25e-33"]+  putStrLn $ show $ map readDouble ["1.5e4", "12500.0e-4"]
tests/FArith.ref view
@@ -1,7 +1,6 @@-[-200.686482,0.0,10068.76601438408,1.0,-153.6681383,-47.0183437,5350.79302107415,1.881733413108702,-100.343241,-100.343241,-0.0,0.0,-99.34324100000001,-101.343241,-100.343241,-100.343241,-99.10870577,-101.57777623,-123.8772661068804,-81.28017618419848,3243434.002099,-3243634.688581,-325466748.5062289,-3.093638923360364e-05,899.655759,-1100.342241,-100343.140656759,-0.1003433413433413,11999999999899.66,-12000000000100.34,-1204118892000000.0,-8.361936750000001e-12,-153.6681383,47.0183437,5350.79302107415,0.53142490484237,-106.6497946,0.0,2843.544672055548,1.0,-53.3248973,-53.3248973,-0.0,0.0,-52.3248973,-54.3248973,-53.3248973,-53.3248973,-52.09036207,-54.55943253,-65.83146435298188,-43.19430989425875,3243481.0204427,-3243587.6702373,-172961135.8542782,-1.644036770463433e-05,946.6741027,-1053.3238973,-53324.8439751027,-0.05332495062495063,11999999999946.68,-12000000000053.32,-639898767600000.0,-4.443741441666667e-12,-100.343241,100.343241,-0.0,-0.0,-53.3248973,53.3248973,-0.0,-0.0,0.0,0.0,0.0,0.0,1.0,-1.0,0.0,0.0,1.23453523,-1.23453523,0.0,0.0,3243534.34534,-3243534.34534,0.0,0.0,999.999,-999.999,0.0,0.0,12000000000000.0,-12000000000000.0,0.0,0.0,-99.34324100000001,101.343241,-100.343241,-0.009965793311380085,-52.3248973,54.3248973,-53.3248973,-0.01875296626215912,1.0,1.0,0.0,0.0,2.0,0.0,1.0,1.0,2.23453523,-0.2345352300000001,1.23453523,0.8100214361642801,3243535.34534,-3243533.34534,3243534.34534,3.083056609024981e-07,1000.999,-998.999,999.999,0.001000001000001,12000000000001.0,-11999999999999.0,12000000000000.0,8.333333333333334e-14,-99.10870577,101.57777623,-123.8772661068804,-0.01230312293779708,-52.09036207,54.55943253,-65.83146435298188,-0.02315119751763685,1.23453523,1.23453523,0.0,0.0,2.23453523,0.2345352300000001,1.23453523,1.23453523,2.46907046,0.0,1.524077234111153,1.0,3243535.57987523,-3243533.11080477,4004257.419037217,3.806141999925675e-07,1001.23353523,-998.76446477,1234.53399546477,0.001234536464536465,12000000000001.23,-11999999999998.77,14814422760000.0,1.028779358333333e-13,3243434.002099,3243634.688581,-325466748.5062289,-32324.39288402096,3243481.0204427,3243587.6702373,-172961135.8542782,-60825.89014831539,3243534.34534,3243534.34534,0.0,0.0,3243535.34534,3243533.34534,3243534.34534,3243534.34534,3243535.57987523,3243533.11080477,4004257.419037217,2627332.348660475,6487068.69068,0.0,10520515049400.18,1.0,3244534.34434,3242534.34634,3243531101.805655,3243.537588877589,12000003243534.35,-11999996756465.65,3.892241214408e+19,2.702945287783333e-07,899.655759,1100.342241,-100343.140656759,-9.965783345586773,946.6741027,1053.3238973,-53324.8439751027,-18.75294750919286,999.999,999.999,0.0,0.0,1000.999,998.999,999.999,999.999,1001.23353523,998.76446477,1234.53399546477,810.020626142844,3244534.34434,-3242534.34634,3243531101.805655,0.0003083053525968371,1999.998,0.0,999998.000001,1.0,12000000001000.0,-11999999999000.0,1.1999988e+16,8.333325e-11]-[True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,False,False,True,True,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,True,True,False,False,True,False,False,True,False,True,False,True,True,True,False,False]-[2.234983,0.4469966,0.2234983,0.02234983,1.232,0.2464,0.1232,0.01232,23.0,4.6,2.3,0.23]-[-2.234983,0.4469966,-0.2234983,0.02234983,-1.232,0.2464,-0.1232,0.01232,-23.0,4.6,-2.3,0.23]-1.576+[-200.5,0.0,10050.0625,-153.5,-47.0,5338.3125,-100.25,-100.25,-0.0,-99.25,-101.25,-100.25,-99.125,-101.375,-112.78125,9899.75,-10100.25,-1002500.0,-153.5,47.0,5338.3125,-106.5,0.0,2835.5625,-53.25,-53.25,-0.0,-52.25,-54.25,-53.25,-52.125,-54.375,-59.90625,9946.75,-10053.25,-532500.0,-100.25,100.25,-0.0,-53.25,53.25,-0.0,0.0,0.0,0.0,1.0,-1.0,0.0,1.125,-1.125,0.0,10000.0,-10000.0,0.0,-99.25,101.25,-100.25,-52.25,54.25,-53.25,1.0,1.0,0.0,2.0,0.0,1.0,2.125,-0.125,1.125,10001.0,-9999.0,10000.0,-99.125,101.375,-112.78125,-52.125,54.375,-59.90625,1.125,1.125,0.0,2.125,0.125,1.125,2.25,0.0,1.265625,10001.125,-9998.875,11250.0,9899.75,10100.25,-1002500.0,9946.75,10053.25,-532500.0,10000.0,10000.0,0.0,10001.0,9999.0,10000.0,10001.125,9998.875,11250.0,20000.0,0.0,100000000.0]+[True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True]+[-100.25,6.265625,-1604.0,-53.25,3.328125,-852.0,0.0,-0.0,0.0,1.0,-0.0625,16.0,1.125,-0.0703125,18.0,10000.0,-625.0,160000.0]+1.625 3.5-[1.5e+32,1.25e-33]+[15000.0,1.25]
tests/Foreign.hs view
@@ -1,7 +1,12 @@ module Foreign(main) where import Prelude+import Foreign.C.Types+import Foreign.Ptr+import Foreign.Storable  foreign import ccall "llabs" iabs :: Int -> IO Int+foreign import ccall "sys/errno.h &errno" cerrno :: IO (Ptr CInt)+foreign import ccall "&llabs" pabs :: IO (FunPtr (Int -> IO Int))  main :: IO () main = do@@ -9,3 +14,6 @@   putStrLn $ show x1   x2 <- iabs (10 - 8)   putStrLn $ show x2+  p <- cerrno+  CInt e <- peek p+  print e
tests/IOArray.hs view
@@ -3,6 +3,8 @@ import Data.IOArray import Data.IORef import System.IO+import System.IO.Serialize+default (String)  main :: IO () main = do
+ tests/Infer.hs view
@@ -0,0 +1,18 @@+module Infer(main) where++a = 'x'+f x = x+g x = [x,a]+h x = x + 1++xeven 0 = True+xeven n = xodd (n-1)+xodd 0 = False+xodd n = xeven (n-1)++main = do+  print a+  print (f (1::Int))+  print (f a)+  print (h (1::Int))+  print (even (2::Int))
+ tests/Infer.ref view
@@ -0,0 +1,5 @@+'x'+1+'x'+2+True
tests/Info.hs view
@@ -4,7 +4,6 @@ import Foreign.Marshal.Utils import Foreign.Ptr import Data.Word-import Data.Word8  main :: IO () main = do
tests/Interactive.hs view
@@ -1,7 +1,7 @@ module Interactive(module Interactive) where import Prelude import System.IO.PrintOrRun-default (Integer, Double)+default (Integer, Double, String) -_it :: IO ()-_it = printOrRun (1+2)+_it = 1+2+_itIO = printOrRun _it
− tests/Kind.hs
@@ -1,6 +0,0 @@-module Kind(main) where--data TypeRep k (a::k) = T--class C k (a :: k) where-  typeRep :: TypeRep k a
tests/ListCompr.hs view
@@ -12,5 +12,5 @@   print $ [ x | x <- [1..3] ] ++ [ x | x <- [1..4] ]   print [ [ x + y | y <- [1,2] ] | x <- [1..3] ]   print [ x+1 | x <- [ a+b | a <- [1,10,100], b <- [2,3] ], even x ]-  let lst = [((==5), "5"), (const True, "def")]+  let lst = [((==5), "5"::String), (const True, "def")]   print [ s | (p, s) <- lst, p 5 ]
tests/LitMatch.hs view
@@ -4,6 +4,7 @@ f :: Int -> Int f 0 = 10 f 1 = 20+f (-1) = 30 f n = 0  g :: Int -> Int -> Int@@ -25,7 +26,7 @@  main :: IO () main = do-  putStrLn $ show [f 0, f 1, f 10]+  putStrLn $ show [f 0, f 1, f 10, f (-1)]   putStrLn $ show [g 1 0, g 1 1, g 2 0, g 2 1, g 2 2]   putStrLn $ show [h 'a', h 'b', h 'c']   putStrLn $ show [s "aaa", s "apa", s "foo"]
tests/LitMatch.ref view
@@ -1,4 +1,4 @@-[10,20,0]+[10,20,0,30] [10,11,20,21,99] [1,2,3] [3,1,2]
tests/LocalPoly.hs view
@@ -3,7 +3,7 @@  main :: IO () main = do-  putStrLn $ show $ f 1 "a"+  putStrLn $ show $ f 1 ("a"::String)  f :: forall b . Int -> b -> ((Int, b), (b, b)) f x b = (i x, i b)
tests/Makefile view
@@ -28,14 +28,12 @@ 	$(TMHS) Word       && $(EVAL) > Word.out       && diff Word.ref Word.out 	$(TMHS) Integer    && $(EVAL) > Integer.out    && diff Integer.ref Integer.out 	$(TMHS) Enum       && $(EVAL) > Enum.out       && diff Enum.ref Enum.out-	$(TMHS) Foreign    && $(EVAL) > Foreign.out    && diff Foreign.ref Foreign.out+#	$(TMHS) Foreign    && $(EVAL) > Foreign.out    && diff Foreign.ref Foreign.out 	$(TMHS) MutRec     && $(EVAL) > MutRec.out     && diff MutRec.ref MutRec.out 	$(TMHS) LocalPoly  && $(EVAL) > LocalPoly.out  && diff LocalPoly.ref LocalPoly.out 	$(TMHS) Rank2      && $(EVAL) > Rank2.out      && diff Rank2.ref Rank2.out 	$(TMHS) Catch      && $(EVAL) > Catch.out      && diff Catch.ref Catch.out-# The FArith tests are currently not portable between 32 and 64 bits,-# since Double is really Float on 32 bit platforms.-#	$(TMHS) FArith     && $(EVAL) > FArith.out     && diff FArith.ref FArith.out+	$(TMHS) FArith     && $(EVAL) > FArith.out     && diff FArith.ref FArith.out 	$(TMHS) Infix      && $(EVAL) > Infix.out      && diff Infix.ref Infix.out 	$(TMHS) Class      && $(EVAL) > Class.out      && diff Class.ref Class.out 	$(TMHS) Eq         && $(EVAL) > Eq.out         && diff Eq.ref Eq.out@@ -61,6 +59,8 @@ 	$(TMHS) Read       && $(EVAL) > Read.out       && diff Read.ref Read.out 	$(TMHS) ListCompr  && $(EVAL) > ListCompr.out  && diff ListCompr.ref ListCompr.out 	$(TMHS) ParseInd   && $(EVAL) > ParseInd.out   && diff ParseInd.ref ParseInd.out+	$(TMHS) Infer      && $(EVAL) > Infer.out      && diff Infer.ref Infer.out+	$(TMHS) Enum       && $(EVAL) > Enum.out       && diff Enum.ref Enum.out  errtest: 	sh errtester.sh < errmsg.test
− tests/Quant.hs
@@ -1,23 +0,0 @@-module Quant(main) where-import Prelude--{--data Rose (f :: Type -> Type) a = Branch a (f (Rose f a))--instance forall a (f :: Type -> Type) .-         (Eq a, forall b. (Eq b) => Eq (f b)) => Eq (Rose f a) where-    (Branch x1 c1) == (Branch x2 c2)  =  x1==x2 && c1==c2--t1 :: Rose [] Int-t1 = Branch 1 [Branch 2 [], Branch 3 []]--main :: IO ()-main = do-  print $ t1 == t1--}--data T (f :: Type -> Type) a = C (f a)--eq :: forall a (f :: Type -> Type) .-      (Eq a, forall b. (Eq b) => Eq (f b)) => T f a -> T f a -> Bool-eq (C xxx) (C yyy) = xxx == yyy
+ tests/Sign.hs view
@@ -0,0 +1,11 @@+module Sign(main) where+import Prelude++main :: IO ()+main = return ()++f :: Int -> Int+f x = x + head ([] :: [Int])++g :: forall a b . a -> [a]+g x = [] :: [a]
tests/StringTest.hs view
@@ -1,10 +1,11 @@ module StringTest(module StringTest) where import Prelude+default (String)  main :: IO () main = do-  putStrLn $ if (==) "abc" "abc" then "yes" else "no"-  putStrLn $ if (==) "abc" "adc" then "yes" else "no"+  putStrLn $ if "abc" == "abc" then "yes" else "no"+  putStrLn $ if "abc" == "adc" then "yes" else "no"   putStrLn $ show (1234::Int)   putStrLn $ show (0::Int)   putStrLn $ show (- (567::Int))
+ tests/Syn.hs view
@@ -0,0 +1,6 @@+module Syn(main) where++type Id = forall a . a -> a++ide :: Id+ide x = x